2009-05-18 74 views
3

我正在使用代碼庫,該代碼庫中的代碼有10年的代碼。代碼經歷了許多增加,更改,版本和重構,而不刪除任何代碼或不再需要的模塊。結果,代碼庫中散佈了不必要的代碼。如何審覈代碼庫以查找不再使用/需要的代碼?

有沒有人想出一個全面的技術或產品來審計您的代碼庫,以找到多餘的未使用的代碼。

+0

看到這個蘇答案(具體以Python,但實際上完全一般):http://stackoverflow.com/questions/3883484/using-python-code-coverage-tool-for-understanding-and-pruning-back-source-code-of/3886403#3886403 – 2010-10-08 20:18:47

回答

0

有一些工具可以幫助您識別未使用的代碼和類/方法中的死代碼路徑。其中之一是用於Visual Basic的Project Analyzer,但也有其他的。這真的取決於你使用的語言。

你還可以考慮的一件事是重新訪問你的設計文檔,如果你有的話。評估您的產品的用途和所有用例。然後,看看你的UML /類圖,並嘗試確定你是否有不必要的對象和助手。

這也是一個真正偉大的時刻,您可以考慮體系結構的變化,因爲無論如何您都會從代碼庫中刪除大量代碼。意大利麪代碼的移除和重新構建可以帶來巨大的性能和可維護性收益,並且我讚揚您接受審計。

2

取決於什麼可用的代碼庫是用語言,開始與使用靜態分析,以確定死者的代碼可能有一些工具一個好的開始。仔細檢查結果與代碼的交叉檢查,以避免被反射或其他技巧絆倒。

我已經知道一個組織運行他們的舊生產代碼一段時間後,啓用了分析功能來幫助他們識別未使用的代碼。他們認爲處理器的速度比應用程序最初的部署速度更快,內存更大。

1

如何編寫獨立加載源文件的程序。使用反射和像get_declared_classes()這樣的函數,您應該能夠生成可從外部訪問的公共方法,公共靜態屬性和常量的列表。

使用此列表,您可以搜索文本並查找引用每個文件的代碼中的實例。把它放在電子表格中,看看哪些文件被斷開。

這裏有更多的反思: http://nz.php.net/oop5.reflection

你也可以建立一個圖表,並檢查連接,如果你想成爲真正徹底: http://en.wikipedia.org/wiki/Connectivity_(graph_theory)

0

代碼覆蓋和剖析。

代碼覆蓋率應該能夠告訴你理論上可以訪問哪些代碼,直至告訴你特定的if語句分支是否可以訪問(理論上),並且分析將告訴您實際訪問的內容。

性能分析還將幫助您深入瞭解代碼中的熱點位置。如果你知道這是一大堆垃圾代碼,但它非常熱門,那麼你可能會謹慎對待,如果那些只有一次以非常特定的方式被調用過的大堆,你可能能夠將它切片並替換它與一個整潔的重構。

無論你做什麼,它都需要付出很多努力。

編輯:它看起來像你在做PHP。你需要的是XDebug(一個用於php的擴展),WinCachegrind(如果你可以訪問linux的話,KCacheGrind更好)讀取它的輸出以進行分析,你需要找到一些體面的代碼覆蓋工具來使用與XDebug的輸出。

0

對於Java代碼,比爾·普格,FindBugs的父親,引入了一些好點子,通過輕便的儀器發現死代碼(當然,靜態分析一些優秀的創意)在a recent presentation at JavaOne