4

.net アセンブリ (c#) のコード行 (空白なし、コメントなし) について (非常に大まかな) 見積もりが必要です。リフレクションを使用してこれを行う簡単な方法はありますか?

私は手書きのツールを好みますが (ここでポインターについて質問しています...)、無料の (スピーチのように) ツールでも解決します。

以下は私のユースケースです:
私はチームの一員であり、実質的にコードカバレッジのないそれほど大規模ではないプロジェクトに取り組んでいます。約 60% のカバー率を示すカバー率に関するレポートがあります (ユニット テストについてはこちら)。ただし、このレポートには、ユニット テストがまったくないアセンブリは表示されません。
したがって、レポートをほぼ正確に取得するには、単体テストなしですべてのアセンブリに対して呼び出すことができる小さなツールを作成し (それらを見つけることができます)、カバレッジ ツールによって生成されるような xml を生成し、何もカバーされていないことを示します。 . 「ステートメント」の最初の概算として、「コード行」を数えると思いました。

4

5 に答える 5

5

リフレクションを使用してコードの行を数えることはできません。この情報は、リフレクションでは利用できません。リフレクションを使用すると、クラス メンバーの署名を取得でき、それらのメソッド内で生の IL を取得できます。ただし、その IL を効率的にコード行に変換する方法はありません。

これを行うにはいくつかの方法があります。Reflector などのツールを (ab) 使用し、そのアセンブリをプログラムで呼び出して、アセンブリを C# に逆コンパイルし、行カウントを行うか、.pdb ファイルから情報を収集して行番号を取得することができます。これらのプログラム データベース ファイルには、そのすべての情報が含まれています。ただし、リフレクションを使用して pdb を読み取る方法はありません。

NDepend (Gerrie が言及したツール) は、.pdb ファイルからの情報を使用して行数をカウントします。

しかし、既にコード カバレッジ ツールを使用しているので、カバーされていないアセンブリ用に空の単体テスト プロジェクトを追加し、それらのテスト プロジェクトをコード カバレッジ ツールに追加してみませんか。このようにして、プロジェクト全体の総カバレッジを確認できます。これは、NDepend を購入するよりも安価であり、LoC カウンターを自分で手書きするよりもはるかに安価です。

于 2011-04-19T07:29:01.140 に答える
4

VS2010 は Metrics.exe (Microsoft) を使用しています。このツールは、コンパイルされたアセンブリのコード行をカウントします。 http://blogs.msdn.com/b/camerons/archive/2011/01/28/code-metrics-from-the-command-line.aspx

于 2011-06-16T20:12:46.933 に答える
2

すべてを自分で作成する代わりに、NDependのようなツールを使用するのはどうですか?

于 2011-04-19T07:16:25.647 に答える
1

コンパイルされたアセンブリ (.dll など) について話している場合、そこから LOC を簡単に取得することはできません。持っているのは IL 命令だけであり、通常、単一の LOC によって複数の IL 命令が生成されます。独自のロールを作成したい場合は、おそらくPostsharpを調べて、IL をウォークし、すべての興味深いノードを数えることができますが、それでも LOC の計算方法について推測する必要があります。

もう 1 つの興味深いプロジェクトは、逆コンパイラを備え、C# ソース コードを (ほぼ) 再構築できるILSpyかもしれません。スクリプト可能かどうかはわかりませんが、オープンソースであるため、必要に応じて拡張できます。

利用可能な場合は、 pdb ファイルから情報を抽出することもできます。これは、PDB にアクセスするためのより簡単な方法かもしれません。

于 2011-04-19T07:34:52.113 に答える
0

リフレクションは、コード行ではなく、メタデータを提供します。代わりに、アセンブリをロードし、クラスとモジュールを見つけて、次のメソッド/モジュールがカバーされていないことを示す統計を出してください!

于 2011-04-19T07:36:04.233 に答える