有時候需要挖掘別人的代碼,瞭解它並重構/修復它。所以我想知道你用什麼工具/做法來做到這一點?這不是關於任何特定的語言或平臺,而是一般性的建議。
我自己發現在調試器下運行代碼時(如果可能的話)非常有用,設置斷點並逐步執行代碼。
另外我還使用了一些具有逆向工程功能的UML工具來查看大圖。可視化對我來說工作得很好。
有一個工具,我用了很多:Understand。這不是一個UML工具,但它有一堆代碼可視化。例如一個函數的控制流圖,它不是UML的一部分,但有時它非常有用。
我聽說有時候人們會爲他們想學習的代碼編寫測試,但它並沒有爲我工作。有時候我想要了解的代碼不是很可測試的。
還有其他工具,如分析器,依賴性檢查器,記錄器等。有沒有人用它取得任何成功?如何?
首先使用的是什麼?接下來是什麼?
瞭解其他人的代碼的工具和最佳實踐
回答
我一直在這種情況之前......這沒什麼樂趣。我發現的最好方法是編寫單元測試來覆蓋將要改變的領域。即使測試已經存在,這也可以讓您體驗到您打算重構的代碼的api和行爲。此外,您還可以獲得更多測試來驗證替換實施。
您是否在尋找高層次的結構,如模塊,命名空間和類設計?或者你是否想了解這些類的內部,例如具體的代碼行是如何工作的?這是兩種不同的分析工具。
通常情況下,我把這些類型的請求到2個陣營:
修復bug,而不是整個代碼。在這種情況下,我傾向於閱讀代碼,看看我是否可以輕鬆地進行修復而不做重大改動,例如增加5行代碼或更少。這就是所做的改變就像是一次外科手術,對實現預期效果影響不大。
撕下代碼並提出更好的東西。在這種情況下,沒有一個很好的方法來做這個改變,或者有很多小的改變想要被捆綁到一個需要消化所有代碼的小型項目中,這不是一個小的改變。把一個ASP網站放到最新的.Net框架中就是一個例子。
確定哪些類型的改變東西需要一點點的實踐和經驗的理解別人可能會叫什麼,「如果你能一件事......」這可能是一個巨大的交易,但他們不這樣做這樣看,例如我們是否可以添加一個記錄任何錯誤的小模塊,並在發生錯誤時發送給我一封電子郵件,在所有其他需求得到解決後可能不那麼容易,比如如果代碼無法發送郵件信息,該怎麼辦?做。
特定平臺的種類,但ReSharper非常適合挖掘.NET代碼的隱藏含義。我喜歡「查找使用高級」功能,您可以在其中查找套件,獲取,實現等...
請檢查出nWire。它是一個Eclipse插件,目前用於Java & PHP,它分析您的代碼並提供代碼探索,可視化和搜索工具。該工具是關於理解代碼中的關聯:類層次結構,調用,實例化以及幾乎所有其他事情。
我發現它非常有用於挖掘成堆的代碼(順便說一句,對我來說,即使我自己的代碼在幾個月後沒有觸及它,也會變得疏遠)。
- 1. 密碼鹽:其他最佳實踐
- 2. 代碼庫最佳實踐
- 3. SSIS部署最佳實踐 - 包和其他工件
- 4. 組織Android代碼的最佳實踐
- 5. 可重用代碼的最佳實踐
- 6. 記錄從c#使用的C++/CLI庫代碼 - 最佳工具和實踐?
- 7. 爲ASP.NET項目執行代碼移動的最佳實踐和工具
- 8. 訪問其他類的屬性和方法的最佳實踐
- 9. WPF工具提示最佳實踐
- 10. 私人數據和最佳實踐
- 11. 彙編代碼標準/最佳實踐
- 12. Flash源代碼控制 - 最佳實踐
- 13. Nodejs代碼重用最佳實踐
- 14. 代碼合同最佳實踐
- 15. 最佳代碼簽名實踐
- 16. R代碼示例/最佳實踐
- 17. kwargs解析最佳實踐
- 18. 什麼是測試Web服務的工具和最佳實踐?
- 19. 將工具和腳本部署到生產的最佳實踐?
- 20. 的頁面和對象的JavaScript外部代碼 - 最佳實踐
- 21. 個人私鑰的最佳實踐
- 22. 編碼最佳實踐
- 23. 最佳編碼實踐JavaScript
- 24. PHP代碼analayzer和其他工具
- 25. 上的驗證碼,碼和最佳實踐的實施
- 26. 的最佳實踐
- 27. 最佳實踐代表和modalViewControllers
- 28. 使用FluentMigrator添加代碼和狀態值的最佳實踐?
- 29. 重複代碼和虛擬目錄的最佳實踐
- 30. 最佳實踐TDD - Java對象驗證和乾淨的代碼
兩者。對於我來說,當我看到一張大圖,然後走低時,更容易理解代碼。 – Max 2009-09-01 19:34:38