2011-04-06 56 views
3

我經常覺得在遍歷我的代碼很多次之後,我會留下一些函數或類或其他代碼行,這些代碼在前一版本中是有意義的,但對於新版本來說並不是很有用。我知道一個分析器可以告訴你當你運行你的測試用例時你的代碼被稱爲什麼部分?但是,如何確定代碼的哪一部分永遠不會被調用來刪除它,從而使剩下的更具可讀性?例如,是否有一種快速的方法可以知道代碼中的哪些函數沒有從任何地方被調用,並且可以安全地刪除。對於一個小代碼庫來說,這可能聽起來像一個微不足道的問題,但是當你的代碼基數增長多年時,這成爲一個重要而不是微不足道的問題。從應用程序中刪除死代碼的最佳方法是什麼?

總結這個問題,對於不同的語言,刪除死代碼的最佳方法是什麼?是否有任何lanaguage agnostic解決方案或策略。或者每種語言都提供了識別死代碼的工具。

我們通常使用Java或Python或Objective-C進行編程。

回答

3

您正在尋找的術語是「代碼覆蓋率」,並且有various tools會生成該信息。您必須確保您通過代碼行使所有可能的路徑,以便能夠使用此類工具檢測「死代碼」,但這隻能通過大量測試才能實現。

大多數編譯器都死代碼檢測的一些水平,但只能檢測代碼,不可能被調用,而不是代碼將永遠不會被調用,由於程序邏輯,等等。

編輯:

用於Python具體:How can you find unused functions in Python code?

爲Java:How to find unused/dead code in java projectsJava: Dead code elimination

爲目的-C:Xcode -- finding dead methods in a projectCleaning up Objective-C code

+0

是的,我需要問關於死代碼刪除。我意識到什麼是代碼覆蓋。我如何從我的Python代碼庫中刪除沒有可能執行路徑的代碼,並且無法使用任何數量的測試進行調用。 – DeepThink 2011-04-06 18:01:50

+0

不幸的是,Python環境非常動態,您的任何代碼都可能被調用。感謝'eval()'和反射,可以在運行時調用函數,這些函數在代碼中的任何地方都不會被引用。 – 2011-04-06 18:16:12

2

對於函數,請嘗試對函數名稱進行全局搜索,然後分析所得結果。函數中的死代碼通常是可以找到的。

如果您懷疑某個功能未被使用,您可以將其刪除或註釋掉,並查看您是否還在編譯。

這隻適用於未使用的函數,因爲它們不再被調用。由於通過代碼的控制路徑不再有效而從不使用的功能很難找到,代碼分析工具也不會很好地發現它。

+1

這就是我已經做的。但想象一下,在3 - 4年內累積數千行代碼。我總是通過搜索其名稱並查看它是否從代碼中的任何位置被調用來刪除函數。如果你問我這是爲什麼我需要另一種解決方案,那麼有點乏味。 – DeepThink 2011-04-06 18:42:36

相關問題