回答
它可能不方便,但最好的工具是你的大腦。瀏覽所有代碼並理解其相互關係。嘗試看看常見的模式。然後,重構!
我用「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. 刪除冗餘/冷凝代碼
- 3. 如何刪除Lisp代碼中的冗餘?
- 4. 刪除冗餘
- 5. 如何從這2行代碼中刪除冗餘變量
- 6. 如何刪除tableviewer中的冗餘列?
- 7. 冗餘代碼
- 8. mysql前面的代理冗餘刪除
- 9. getter和setter中的冗餘代碼
- 10. 刪除給定midje測試中的冗餘代碼
- 11. 刪除嘈雜和冗餘的功能
- 12. 如何刪除冗餘陣列對象
- 13. 如何減少此代碼的冗餘?
- 14. 刪除冗餘數據?
- 15. 刪除冗餘記錄
- 16. 刪除冗餘數據
- 17. 冗餘的ToString代碼?
- 18. 刪除一組複選框的代碼冗餘
- 19. 有效的,和非冗餘PHP代碼
- 20. 如何刪除崇高文本的冗餘編碼風格
- 21. 如何簡化這個冗餘代碼?
- 22. 如何優化這個冗餘代碼?
- 23. SSIS刪除管道中的冗餘列
- 24. 刪除陣列中的冗餘數據
- 25. 刪除陣列中的冗餘值
- 26. 識別冗餘依賴於圖表
- 27. 我應該如何避免代碼冗餘,在多個類別
- 28. 冗餘代碼檢查
- 29. 擺脫冗餘代碼?
- 30. 減少冗餘代碼
我不完全確定你說「多餘」時的意思。你是否在談論所有做同樣工作的多個潛艇?或者關於從未被調用的潛艇?或兩者? – innaM 2009-10-28 09:13:01