DUnitでコードカバレッジを測定する方法はありますか?それとも、それを実現する無料のツールはありますか?そのために何を使いますか?あなたは通常どのようなコードカバレッジを求めていますか?
ジム・マッキース:詳細な回答をありがとう。私は、障害が発生した後の単体テストだけでなく、TDDアプローチの意味での単体テストについて話しています。いくつかの基本的な事前に作成された単体テストで達成できるコードカバレッジに興味があります。
DUnitでコードカバレッジを測定する方法はありますか?それとも、それを実現する無料のツールはありますか?そのために何を使いますか?あなたは通常どのようなコードカバレッジを求めていますか?
ジム・マッキース:詳細な回答をありがとう。私は、障害が発生した後の単体テストだけでなく、TDDアプローチの意味での単体テストについて話しています。いくつかの基本的な事前に作成された単体テストで達成できるコードカバレッジに興味があります。
Delphi 2010 用の基本的なコード カバレッジ ツールを使用して、Google Code で新しいオープン ソース プロジェクトを作成しました。 https://sourceforge.net/projects/delphicodecoverage/
現時点ではライン カバレッジを測定できますが、クラス カバレッジとメソッド カバレッジも追加する予定です。
どの行がカバーされているか (緑)、どの行がカバーされていないか (赤)、コードが生成されていない残りの行を示すマークアップされたソースだけでなく、概要を含む html レポートを生成します。
更新: Delphi コード カバレッジ のバージョン 0.3 以降、Hudson EMMA プラグインと互換性のある XML レポートを生成して、Hudson 内のコード カバレッジの傾向を表示できます。
更新: バージョン 0.5 は、バグ修正、構成可能性の向上、およびクリーンアップされたレポートをもたらします
更新: バージョン 1.0 では、emma 出力、クラスとメソッドのカバレッジ、および DLL と BPL のカバレッジがサポートされています。
無料のツールは知りません。 AQTimeは、Delphi をプロファイリングするためのデファクト スタンダードです。私はそれを使用していませんが、クイック検索でDiscover for Delphiが見つかりました。これは現在オープン ソースですが、コード カバレッジのみです。
これらのツールのいずれかを使用すると、単体テストがどの程度のコード カバレッジを獲得しているかがわかります。
単体テストまたは古いコードからのコード カバレッジについて言及していますか? 一般に、失敗したテスト可能なコードのみを単体テストでカバーする必要があると思います (はい、それが聖戦を開始する可能性があることは理解していますが、それが私の立場です)。ですから、かなり低い割合になります。
一方、古いコードは別の話です。古いコードは、使用されないコードです。ほとんどの場合、多くのコードでこれを通知するためのツールは必要ありません。Delphi でコンパイルした後、小さな青い点を探すだけです。青い点がないものは古いものです。通常、コードが使用されていない場合は削除する必要があります。つまり、100% のコード カバレッジになります。
日付が 2 月 31 日に到達した場合に処理する特別なコードがある場合など、古いコードのシナリオは他にもあります。コンパイラは、それが起こり得ないことを認識していないため、コンパイルして青い点を付けます。これで、そのための単体テストを作成してテストし、動作する可能性がありますが、2 回目の時間を無駄にするだけです (1 回目はコードの作成、2 回目はテストです)。
プログラムの実行時にどのコード パスが使用されるかを追跡するツールがありますが、すべてのコード パスが毎回使用されるわけではないため、これは類似の信頼性しかありません。うるう年を処理しなければならない特別なコードのように、4 年ごとにしか実行されません。したがって、それを取り出せば、プログラムは 4 年ごとに壊れます。
DUnit とコード カバレッジに関する質問にはあまり答えていなかったと思いますが、当初よりも多くの質問を残したかもしれません。どのようなコード カバレッジをお探しですか?
更新: TDD アプローチを採用している場合、テストを作成するまでコードは作成されないため、本来 100 のテスト カバレッジがあります。もちろん、各メソッドがテストによって実行されるからといって、そのすべての範囲の動作が実行されるわけではありません。 SmartInspectは、どのメソッドが呼び出されたかをタイミングなどとともに測定するための非常に簡単な方法を提供します。これは AQTime より少し劣りますが、無料ではありません。いくつかの作業を行うことで、すべてのコード パス ("if" ステートメントの分岐など) を測定するためのインストルメンテーションを追加できます。もちろん、メソッドに独自のログを追加してカバレッジ レポートを作成することもできます。これは無料です(まあ、あなたの時間を期待してください。おそらくツールよりも価値があります)。JEDI Debug を使用すると、コール スタックも取得できます。
多くのリファクタリングを行わなければ、TDD を既存のコードにさかのぼって簡単に適用することはできません。新しい Delphi IDE には、パブリック メソッドごとに単体テスト スタブを生成する機能がありますが、これにより、パブリック メソッドを 100% カバーできます。これらのスタブに何を入れるかによって、そのカバレッジの効果が決まります。
私はDiscover for Delphiを使用しており、DUnit を使用した単体テストと TestComplete を使用した機能テストに使用しています。
Discover は、自動化のためにコマンド ラインから実行するように構成できます。次のように:
Discover.exe Project.dpr -s -c -m
Discover は私にとって非常に効果的です。AQTime とは異なり、アプリケーションの速度が低下することはほとんどありません。もちろん、これはとにかく問題ではないかもしれません。この点では、最近のバージョンの AQTime の方がパフォーマンスが優れていると思います。
Discover" を何年も使用しており、BDS2006 (私が使用し、現在も使用している Delphi の XE より前の最後の* バージョン) まではうまく機能していましたが、現在はオープンソースの状態であり、どのように動作させるかは不明です。 Delphi の XE* バージョン. ほとんどすべての点で高速で便利なこのツールが大好きだったので、本当に残念です. だから今、私は delphi-code-coverage に移行しています...