在大型java项目中,您使用什么工具来查找未使用的/死亡的代码?我们的产品已经开发了几年,手动检测不再使用的代码变得非常困难。但是,我们会尽量删除未使用的代码。
对于一般策略/技术(而不是特定工具)的建议也很感激。
编辑:请注意,我们已经使用了代码覆盖工具(Clover, IntelliJ),但这些帮助不大。死代码仍然有单元测试,并显示为已覆盖。我想理想的工具应该是识别那些依赖于它的其他代码很少的代码集群,从而允许手动检查文档。
在大型java项目中,您使用什么工具来查找未使用的/死亡的代码?我们的产品已经开发了几年,手动检测不再使用的代码变得非常困难。但是,我们会尽量删除未使用的代码。
对于一般策略/技术(而不是特定工具)的建议也很感激。
编辑:请注意,我们已经使用了代码覆盖工具(Clover, IntelliJ),但这些帮助不大。死代码仍然有单元测试,并显示为已覆盖。我想理想的工具应该是识别那些依赖于它的其他代码很少的代码集群,从而允许手动检查文档。
当前回答
用户覆盖工具,例如EMMA。但它不是静态工具(也就是说,它需要通过回归测试实际运行应用程序,并通过所有可能的错误情况,这是不可能的:))
尽管如此,EMMA还是非常有用的。
其他回答
Eclipse可以显示/突出显示无法访问的代码。JUnit可以向您显示代码覆盖率,但是您需要进行一些测试,并且必须决定是否缺少相关的测试,或者代码确实没有使用过。
我会让运行中的系统保持代码使用的日志,然后开始检查几个月或几年没有使用的代码。
例如,如果您对未使用的类感兴趣,那么所有的类都可以在创建实例时记录日志。然后,一个小脚本可以将这些日志与完整的类列表进行比较,以找到未使用的类。
Of course, if you go at the method level you should keep performance in mind. For example, the methods could only log their first use. I dont know how this is best done in Java. We have done this in Smalltalk, which is a dynamic language and thus allows for code modification at runtime. We instrument all methods with a logging call and uninstall the logging code after a method has been logged for the first time, thus after some time no more performance penalties occur. Maybe a similar thing can be done in Java with static boolean flags...
CodePro最近由谷歌和Eclipse项目一起发布。它是免费的,而且非常有效。该插件具有一个/多个入口点的“查找死代码”功能。效果很好。
我在Eclipse中对单个类所做的一件事是,将它的所有方法都更改为private,然后看看我得到了什么抱怨。对于所使用的方法,这将引起错误,我将它们返回到尽可能低的访问级别。对于未使用的方法,这将引发关于未使用方法的警告,然后可以删除这些方法。作为奖励,您经常会发现一些公共方法可以而且应该被私有。
但这是非常手工的。
Eclipse Goto Windows >首选项> Java >编译器>错误/警告 把它们都改成错误。修复所有错误。这是最简单的方法。这样做的好处是,您可以在编写代码时清理代码。
截图Eclipse代码: