回答
它可能不方便,但最好的工具是你的大腦。瀏覽所有代碼並理解其相互關係。嘗試看看常見的模式。然後,重構!
我用「refactoring」標記了您的問題。你可能會在這個主題下找到一些有趣的材料。
我喜歡庫房風格的重構。 1.檢查代碼到git中。 2.確保你有很多測試。 3.將整個模塊重新命名爲不可用的東西。 4.創建一個空的。 5.將功能複製回去,隨時重構它們,直到測試再次通過。 6.在不需要複製舊模塊的功能一個月後,將其刪除。 – 2009-10-28 07:18:57
@Ether:你對重構是正確的...但首先我需要找到函數.. :) – someguy 2009-10-28 08:10:41
如果您在Linux上,您可以使用grep
來幫助您列出代碼庫中的所有功能。你可能需要做Ether建議的內容,並且如果你還沒有完全理解它,那麼你可以通過代碼去理解它。
這裏是一個過於簡單的例子:
grep -r "sub " codebase/* > function_list
你可以找出重複的也是這樣的。如果你使用Perl的OOP功能,這個想法可能不太有效。
它也許值得一提的代碼文檔工具NaturalDocs。這會幫助你前進。
如果你使用Perl,考慮使用'ack',一個純Perl版本的'grep'利用Perl更強大的正則表達式支持。 – 2009-10-28 05:58:37
我以前遇到過這個問題。我打了一個使用PPI查找子程序的快速小程序。它將代碼標準化了一點(空白標準化,註釋被移除)並報告任何重複。工作得很好。 PPI完成所有繁重工作。
通過將每個例程中的所有變量名歸一化爲$ a,$ b,$ c,並且可能爲字符串做類似的操作,可以使規範化變得更加智能。取決於你想成爲多麼積極。
#!perl
use strict;
use warnings;
use PPI;
my %Seen;
for my $file (@ARGV) {
my $doc = PPI::Document->new($file);
$doc->prune("PPI::Token::Comment"); # strip comments
my $subs = $doc->find('PPI::Statement::Sub');
for my $sub (@$subs) {
my $code = $sub->block;
$code =~ s/\s+/ /; # normalize whitespace
next if $code =~ /^{\s*}$/; # ignore empty routines
if($Seen{$code}) {
printf "%s in $file is a duplicate of $Seen{$code}\n", $sub->name;
}
else {
$Seen{$code} = sprintf "%s in $file", $sub->name;
}
}
}
- 1. 刪除perl hash中的冗餘
- 2. 如何刪除Lisp代碼中的冗餘?
- 3. 刪除給定midje測試中的冗餘代碼
- 4. 如何刪除冗餘陣列對象
- 5. 刪除冗餘數據
- 6. 有效的,和非冗餘PHP代碼
- 7. 如何優化這個冗餘代碼?
- 8. 如何簡化這個冗餘代碼?
- 9. 識別冗餘依賴於圖表
- 10. 我應該如何避免代碼冗餘,在多個類別
- 11. 減少冗餘代碼
- 12. 減少代碼冗餘
- 13. 擺脫冗餘代碼?
- 14. 冗餘代碼檢查
- 15. 識別並刪除幀破解代碼?
- 16. PagedList非常冗餘和重複代碼
- 17. 如何識別和刪除CipherSuite中的CBC密碼?
- 18. C#代碼生成/去除冗餘代碼
- 19. Linq to Sql,存儲庫和Asp.Net MVC ViewData:如何刪除冗餘?
- 20. 刪除組內的冗餘條目
- 21. 使刪除冗餘的新集合
- 22. 如何刪除** IN **查詢中的冗餘條件sql
- 23. 試圖消除驗證和實體冗餘代碼執行
- 24. bash if語句刪除冗餘行
- 25. 如何在jsp中顯示時刪除冗餘數據
- 26. 如何從SQL查詢中刪除冗餘數據
- 27. 如何在LLVM中演示冗餘刪除?
- 28. 如何減少Swift中的代碼冗餘?
- 29. 如何避免異步JavaScript中的冗餘代碼?
- 30. Django models.py中的冗餘代碼。我如何改進它?
我不完全確定你說「多餘」時的意思。你是否在談論所有做同樣工作的多個潛艇?或者關於從未被調用的潛艇?或兩者? – innaM 2009-10-28 09:13:01