私はコード カバレッジを使用するのが初めてで、コード カバレッジがどのように動作するかわかりません。私が試したツールはすべて、分析を行うために単体テストのスイート全体を実行したいと考えているようです。ユニットテストを実行しなくても、何らかの方法でコードを静的に分析できると思っていました。
私の仮定は間違っていますか?
私はコード カバレッジを使用するのが初めてで、コード カバレッジがどのように動作するかわかりません。私が試したツールはすべて、分析を行うために単体テストのスイート全体を実行したいと考えているようです。ユニットテストを実行しなくても、何らかの方法でコードを静的に分析できると思っていました。
私の仮定は間違っていますか?
Cobertura、Emma などの通常のオープン ソース ツールでは、テストを実行する必要があります。バイトコード操作や AOP などを使用してコードを計測し、テストの実行時に実行される行を追跡してから、結果のレポートを作成します。そのシンプルさは、非常に魅力的なソリューションです。
静的分析でテスト カバレッジを概算できることは非常に興味深いことですが、テストの実行が実用的でない場合の最後の選択肢のように思えます。Ira Baxter's answerで引用されている論文の要約からの引用:
テスト カバレッジは、単体テストの品質の重要な指標です。Clover などのツールは、最初にログ機能を使用してコードを計測し、次に単体テストの実行中に実行された部分をログに記録することによって、カバレッジを計算します。テスト カバレッジの計算は動的解析であるため、ソフトウェアのインストールが機能していることを前提としています。独立した第三者によるソフトウェア品質評価のコンテキストでは、動作するインストールが利用できないことがよくあります。評価者は、必要なライブラリまたはハードウェア プラットフォームにアクセスできない場合があります。インストール手順は、自動化または文書化されていない場合があります。この論文では、静的解析のみによってメソッドレベルでテストカバレッジを推定する手法を提案します。この手法では、静的コール グラフのスライスを使用して、動的テスト カバレッジを推定します。テクニックとその実装について説明します。Clover を使用した動的分析によって得られた値と統計的に比較することにより、静的推定の結果を検証します。静的カバレッジの推定とシステム レベルでの実際のカバレッジとの間には高い相関関係があることがわかりましたが、パッケージおよびクラス レベルでの詳細な分析により、さらなる改善の機会が明らかになりました。
実行時に情報を収集する標準的なテスト カバレッジ ツールには、必ずコードを実行するための何かが必要であり、テスト スイートには少なくともすべての機能をカバーするという目的があります。テスト スイートがない場合は、アドホック テストを実行できますが、カバレッジがあまり良くない可能性が高く、もちろん、繰り返すのは難しい実験です。
ただし、必ずしも動的分析を使用する必要はありません。この論文では、静的解析を行うことで、テスト カバレッジの非常に優れた概算値を取得する方法を示します。私は著者を個人的に知っており、彼らの作品に非常に高い敬意を払っています。