2011-08-10 67 views
12

有谁知道在Java EE项目中检测死代码的工具?如何在企业Java项目(Java + JSP + Javascript)中检测死代码?

我已经研究了许多可以为纯Java项目做好这些工作的工具,但似乎没有任何工具可以真正处理包含JSP和Javascript文件的项目。例如,检测到Java方法正在使用中,因为它正在从JSP中调用,或者检测到以前用作AJAX请求的某个JSP文件不再从任何Javascript中调用。

谢谢。

+2

这在很大程度上是不可能的,因为所有可能发生的Ajax请求都会导致/不可能轻易确定一段JavaScript会产生的Ajax请求。 –

+0

您也可以在HTML中的某个表单提交给其中一个JSP的情况下使用,因此您必须检查HTML ......但是+1,因为这是一个很好的问题。 – Endophage

回答

5

现实生活中的抽样呢?插件JaCoCo代理程序到您的应用程序,运行它并使用它一段时间。如果您有全面的功能测试,请运行它们。如果您有一组测试人员,让他们点击您的应用程序。 JaCoCo将在此期间记录所有执行的线路(用于代码覆盖)。

如果某些行在很长一段时间内没有执行(请记住,您必须触摸应用程序中的每个可能的屏幕,调用,路径和分支),您应该检查它们是否实际上没有死机(或者您可能只是忘记在这个特定的配置中运行你的应用程序)。

可以理解,这是非常脆弱的,但我不认为你会发现任何自动。

+0

我不知道JaCoCo,但使用覆盖工具semms是唯一合乎逻辑的解决方案。它不会给你任何JavaScript文件的数据。 –

0

我建议使用JVM标志-verbose:classhttp://java.dzone.com/articles/how-use-verbose-options-java)。它将启用有关JVM加载的类的日志记录信息,例如。

[Loaded java.lang.Object from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.7.0_04\jre\lib\rt.jar] 

如果某个类没有在很长一段时间内加载,那么很有可能它没有被使用。

当然这个解决方案只会给你关于未使用类的信息,但是你不必使用任何外部库。