如何检测企业 Java 项目(Java + JSP + Javascript)中的死代码?
Posted
技术标签:
【中文标题】如何检测企业 Java 项目(Java + JSP + Javascript)中的死代码?【英文标题】:How can I detect dead code in an enterprise Java project (Java + JSP + Javascript)? 【发布时间】:2011-10-24 10:07:58 【问题描述】:有人知道在 Java EE 项目中检测死代码的工具吗?
我已经研究了很多工具,它们都可以很好地处理纯 Java 项目,但似乎没有任何工具能真正处理包含 JSP 和 javascript 文件的项目。例如,检测到某个 Java 方法正在使用中,因为它是从 JSP 调用的,或者检测到某个以前用作 AJAX 请求的 JSP 文件不再从任何 Javascript 调用。
谢谢。
【问题讨论】:
这在很大程度上是不可能的,因为无法轻松确定一段 JavaScript 将/可能生成的所有可能的 Ajax 请求。 您还可能遇到 html 中的表单提交给你们其中一个 JSP 的情况,因此您也必须检查 HTML...但是 +1,因为这是一个好问题。跨度> 【参考方案1】:现实生活中的采样呢?将JaCoCo 代理插入到您的应用程序中,运行并使用一段时间。如果您有彻底的功能测试,请运行它们。如果您有一个测试人员团队,让他们点击您的应用程序。 JaCoCo 将同时记录所有执行的行(用于代码覆盖)。
如果某些行在很长一段时间内没有执行(请记住,您必须触摸应用程序中每个可能的屏幕、调用、路径和分支),您应该检查它们是否真的死了(或者您可能只是忘记了在此特定配置中运行您的应用程序)。
可以理解这是非常脆弱的,但我认为你不会发现任何自动的东西。
【讨论】:
我不知道 JaCoCo,但使用覆盖工具对我来说是唯一合乎逻辑的解决方案。但是,它不会为您提供 javascript 文件的任何数据。【参考方案2】:我建议使用 JVM 标志 -verbose:class
(http://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]
如果某个类在很长一段时间内没有加载,那么很有可能它是未使用的。
当然,此解决方案只会为您提供有关未使用类的信息,但您不必使用任何外部库。
【讨论】:
以上是关于如何检测企业 Java 项目(Java + JSP + Javascript)中的死代码?的主要内容,如果未能解决你的问题,请参考以下文章