3

つまり、コードベース内で実際に呼び出されて使用されるデータベースAPIのメソッドのリストを取得する必要があります。

より長い:(醜い)データベースAPIに基づく非常に大きなコードベースがあります。後者には多くのインターフェースと非常に大きな機能セットがありますが、これらはまったく必要ないので、それを取り除きたいと考えています。リライトの最初のプロトタイプは、既存のAPIコードと100互換性がある必要があります。したがって、本番コードに対して簡単にビルドできるように、そのインターフェイスを実装する必要があります。

使用するメソッドのサブセットを定義するために、dotCoverなどを使用してカバレッジ分析を実行し、単体テストを実行できますが、これでは80〜90%の成功率しか得られないと確信しています。私が必要としているのは、コードの静的分析のようなものです。別のアプローチは、APIの動的ラッパーであり、すべてのメソッド呼び出しをログに記録して、使用後に適切なカバレッジ分析を行います。

そのような分析をツールで実行できるのか、それとも必要な情報を取得するためにAPIをラップする必要があるのか​​(手動/自動?それは本当に大きく、数百または数千のメソッド)、私は興味がありました。

言うまでもなく、私はすべてのソースに完全にアクセスできますが、それらは独自のソリューションを備えた多くのモジュールに分散されています。

4

2 に答える 2

2

Chrisによって正確に説明されているように、NDependは、呼び出されるAPIメソッド/フィールド/タイプのリストを提供できます。免責事項:私はツールの開発者の1人です。

千の言葉に値する画像、以下のNDepend依存関係構造マトリックスのスクリーンショットは、NUnitコードベースで、アセンブリnunit.uiexcepion (行/列#6)nunit.core.interfaces (行/列#18)のみがメソッドを使用していることを示していList<T>.ToArray()ます。

サードパーティコードと呼ばれるもの(APIと呼ばれるもの)は、青いフォントで示されています。実際に使用されているAPIメソッド/フィールド/タイプのみが表示されます。たとえば、スクリーンショットではHashSet<T>、NUNitコードベースで使用されていないため、クラスは表示されていません。

NDependのすべての機能はサードパーティのコードを考慮に入れていますが、API内で呼び出されるメソッドのリストを取得するのに確かに最も適した機能であるため、ここでは依存関係構造マトリックスを公開します。ツールの14日間のフル機能の試用版をダウンロードできます

NDepend依存構造マトリックス

コードベースの2つの異なるスナップショットを比較すると、NDependは、使用されなくなった、または使用されておらず、現在使用されているサードパーティコードも表示できることに注意してください。以下のスクリーンショットでは、NUnitv2.5.3では使用されなかったNUnitv2.5.8で使用されているサードパーティのメソッドを確認できます。

変更によるNDepend検索方法

于 2012-10-01T22:14:22.247 に答える
1

.NET上にアスペクト指向プログラミング(AOP)レイヤーを作成するために使用されるさまざまなILウィーバー実装のいずれかを見てみます-PostSharpはすぐに頭に浮かぶものです:

http://www.sharpcrafters.com/solutions/logging#

私があなたなら、単一の「ロガーのような」アスペクトを作成し、そのアスペクトを、使用法をカタログ化するすべてのメソッドに織り込みます。次に、しばらくの間、そのペースを実行します。この方法で使用状況データの適切なセットを収集できるはずです。これは、安全に何を取り除くことができるかを判断するのに役立ちます。

このアプローチが多くの静的分析ツールに勝る利点の1つは、コンパイル時のバインドされた呼び出しだけでなく、メソッドの「動的」またはメタ呼び出しもキャッチできることです。

于 2012-10-02T03:20:08.623 に答える