2011-08-10 27 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] 

如果某個類沒有在很長一段時間內加載,那麼很有可能它沒有被使用。

當然這個解決方案只會給你關於未使用類的信息,但是你不必使用任何外部庫。