Pythonコードの「条件/決定カバレッジ」の割合を計算するツール/ライブラリはありますか? Coverage.py しか見つかりませんでしたが、「ステートメント カバレッジ」の割合しか計算されません。
7 に答える
Coverage.py にブランチ カバレッジが含まれるようになりました。
興味深いことに、コードは実行前に変更されていません。トレース機能は、実行中にどの行がどの行に続くかを追跡し、その情報をコンパイルされたバイトコードの静的分析と比較して、実行されていないパスの可能性を見つけます。
Python用のブランチカバレッジツールについては知りませんが、作成することを検討しました。私の考えは、ASTから始めて、各分岐点に追加のインストルメンテーションを挿入することでした。それは実行可能ですが、いくつかのトリッキーなケースがあります。
例えば、
raise SomeException(x)
このためのブランチカバレッジでは、SomeException(x)が完全にインスタンス化され、独自の例外が発生しなかったことを確認する必要があります。
assert x, "Oh No!: %r" % (x, y)
これは、アサーションステートメントの右側のテキストが完全に評価されていることを確認する必要があります。
return args.name or os.getenv("NAME") or die("no name present")
最初の2つの用語はそれぞれ、真/偽のパスをチェックする必要がありますが、最後の用語はチェックしません。実際、最後は戻ってこないかもしれません。
気になるケースが多く、好奇心以外に差し迫った必要はなかったので、どこにも行きませんでした。また、特定の警告を抑制するための何らかの方法が必要な場合に、多くの誤検知が発生するのではないかと考えていました。
このルートを試したい場合は、Python2.6または3.0から始めてください。これらのリリースでは、ASTモジュールが文書化されており、コードまたは.pycファイルを生成する前に独自のASTノードを作成できます。
私自身は使用したことがありませんが、カバレッジ分析をミューテーション テストに置き換えたい場合は、"pester" というミューテーション テスターについて聞いたことがあります。
グーグルをしているときに、いくつかの可能なコードカバレッジツールについて言及しているPythonテストツールのリストにも出くわしました.
「instrumental」は条件カバレッジを実装しているようです:
coverage.py とインストゥルメンタルに関するリンク
誰も試したことがありますか?小さなバージョン番号があります。信頼できるものが必要です。
ASTを解析して変更するのが正しい答えです、IMHO。何をする必要があるかについての完全な説明については、このペーパーを参照してください。
http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf