在大型java项目中,您使用什么工具来查找未使用的/死亡的代码?我们的产品已经开发了几年,手动检测不再使用的代码变得非常困难。但是,我们会尽量删除未使用的代码。
对于一般策略/技术(而不是特定工具)的建议也很感激。
编辑:请注意,我们已经使用了代码覆盖工具(Clover, IntelliJ),但这些帮助不大。死代码仍然有单元测试,并显示为已覆盖。我想理想的工具应该是识别那些依赖于它的其他代码很少的代码集群,从而允许手动检查文档。
在大型java项目中,您使用什么工具来查找未使用的/死亡的代码?我们的产品已经开发了几年,手动检测不再使用的代码变得非常困难。但是,我们会尽量删除未使用的代码。
对于一般策略/技术(而不是特定工具)的建议也很感激。
编辑:请注意,我们已经使用了代码覆盖工具(Clover, IntelliJ),但这些帮助不大。死代码仍然有单元测试,并显示为已覆盖。我想理想的工具应该是识别那些依赖于它的其他代码很少的代码集群,从而允许手动检查文档。
当前回答
我使用Doxygen开发了一个方法调用映射来定位从未调用过的方法。在图中,您将发现没有调用者的方法集群孤岛。这对库不起作用,因为您总是需要从一些主要入口点开始。
其他回答
IntelliJ有代码分析工具,用于检测未使用的代码。你应该试着让尽可能多的字段/方法/类成为非公共的,这样会显示出更多未使用的方法/字段/类
我还会尝试找到重复的代码,作为减少代码量的一种方式。
我的最后一个建议是,尽量找到开放源代码,如果使用,会使您的代码更简单。
有一些工具可以分析代码并提供代码覆盖率数据。这可以让您看到(当代码运行时)调用了多少代码。您可以使用任何这些工具来找出您有多少孤立代码。
Netbeans这里是一个插件的Netbeans死代码检测器。
如果它可以链接到并突出显示未使用的代码,那就更好了。你可以在这里投票和评论:Bug 181458 -找到未使用的公共类,方法,字段
Structure101切片透视图将给出与“主”集群没有依赖关系的类或包的“孤儿”或“孤儿组”的列表(和依赖关系图)。
理论上,您无法确定地找到未使用的代码。这有一个数学证明(好吧,这是一个更普遍的定理的特殊情况)。如果你很好奇,可以查一下《停止问题》。
这可以在Java代码中以多种方式表现出来:
根据用户输入、配置文件、数据库条目等加载类; 加载外部代码; 将对象树传递给第三方库; 等。
也就是说,我使用IDEA IntelliJ作为我的IDE选择,它有广泛的分析工具,可以发现模块、未使用的方法、未使用的成员、未使用的类等之间的依赖关系。它也很智能,就像一个没有被调用的私有方法被标记为未使用,但一个公共方法需要更广泛的分析。