2009-03-19 11 views
1

コードで定義されているすべての関数がどこかで呼び出されているかどうかを判断する方法はありますか?定義されているすべての関数が呼び出されているかどうかを確認する方法はありますか?

私は大規模なプロジェクトの大規模なコードを更新しています。使用しなくなった古い関数がコードから削除されていることを確認したいと思います。

ソリューション内の各機能を検索するより良い方法はありますか?

+0

の可能重複[C#のアプリで参照されていない機能(死んで、廃止されたコード)を見つけるためのツールはありますか?](http://stackoverflow.com/questions/65585/is-there-a-tool -for-finding-unreferenced-functions-dead-obsolete-code-in-ac) – nawfal

答えて

7

マークあなたはtrueに設定IsErrorObsoleteとして削除しようとしているそれぞれの方法。 メソッドをそのようにマークすると、コンパイルエラーが発生し、が安全にメソッドを削除できるかどうかを知ることができます。

[Obsolete("Don't use this method", /* IsError */ true)] 
    public void Foo() {} 
+0

自分の内部ライブラリ用にIsErrorをオンにする傾向があります。他の場合は、私はそれを借りて – Sung

+0

私もそれを行う。そして、しばらくの間、私は絶対に私は彼らがもう必要ではないことを確信するまで、それらをしばしば残します。私が実際に絶対に確信していない限り、私はもうこれ以上必要はありません:p – Svish

+0

@Svish:IsErrorを有効にすることはときどき目立っているようですが、時には行かなくてはなりません。 – Sung

0

NCoverのようなコードカバレッジツールですか?

編集: これは、機能について十分なテストが行​​われており、不要な機能をすべて削除することを前提としています。 Delete-then-compileは機能しますが、スケーラブルではありません。何らかの種類のソース解析ツール(静的解析または実行時解析のいずれか)が必要な場合があります。

0

ここでは反射を除いてすべてをキャッチする方法があります。

  1. コンパイル

の方法を削除しますこれは少しやり過ぎだが、それは複数の機能を削除することによって、あなたが「バッチ」のクエリができるという利点があります。

+0

ここでも問題はありますか? A()がB()を呼び出しても何もA()を呼び出さない場合、B()を先に削除するとコンパイルされないので誤解を招きます。 –

+0

@Andrew私はそれが簡単だったと言っていない:)。 – JaredPar

+0

@JaredPar:レガシーコードをテストなしでリファクタリングする方法については、マイケルフェザーズの「従来のコードでの作業」からそのプロセスについて読みました。 – Sung

2

FxCopは、孤立した/未使用のメソッドを見つけることができるはずです。私は、静的分析はあなたが探しているものであり、コードカバレッジではないと思います。

0

つの提案:

  • あなたの開発ツールによっては、宣言されていないが、決して呼び出される関数について警告を生成することができるかもしれません。

  • リンカーマップを生成し、その関数のリストをソースから直接生成するリスト(grepまたはctags?)と比較することができます。

関連する問題