2009-03-24 15 views
18

Pythonコードの "条件/決定カバレッジ"の割合を計算するツール/ライブラリはありますか?私はカバレッジを見つけましたが、 "ステートメントのカバレッジ"のパーセントしか計算しません。Pythonの条件カバレッジ

答えて

7

Coverage.py now includes branch coverage

不思議なことに:実行前にコードが変更されていません。トレース機能は、実行中のどの行に続くかを追跡し、コンパイルされたバイトコードの静的解析とその情報を比較して、実行されない可能性を見つける。

2

cyclomatic complexity (Wikipedia)をお探しですか?これは、基本的に、コードを通るパスの数を計算します。例えば、PyMetricsthis oneのように、Pythonコードのために計算するプロジェクトがいくつかあります。 Googleは確かにより多くをもたらすでしょう。

しかし、私はカバレッジを示す単体テストとのさらなる統合についてはわかりません。

+0

>サイクロマティックな複雑さ(Wikipedia)をお探しですか? いいえ、興味深い情報をありがとう。 >しかし、私はカバレッジを示す単体テストとのさらなる統合についてはわかりません。 私も;) –

+0

循環的複雑さは基本的に条件カバレッジと無関係です。 –

2

私は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つの用語のそれぞれは、偽/偽のパスをチェックする必要がありますが、最後のものはチェックしないでください。実際には、最後は戻ってこないかもしれません。

気になるケースがたくさんありました。私は好奇心の他にそれほど緊急の必要がないため、どこにも行かなかった。私は、特定の警告を抑えるために何らかの方法が必要な、多くの誤認があるかどうかも疑問に思っていました。

このルートを試したい場合は、Python 2.6または3.0から始めます。これらのリリースでは、ASTモジュールが文書化されており、コードまたは.pycファイルを生成する前に独自のASTノードを作成できます。

+0

"または" die "の例は読んで楽しく、書くのは楽しいかもしれません;) – myroslav

+0

私はPythonに切り替える前にPerlのプログラマーでした。それはPerl-ismだ。 Perlは決して退屈な言語として知られていませんでした。 –

1

同じcoverage managerのメンテナーは、get coverage information at the bytecode levelへの方法について議論している記事を持っています。この方法はちょっとしたことです。それは、調整された行番号の.pycファイルを再組み立てすることです。しかし、それはあなたが求めることができる範囲で、カバレッジ測定の細分性を提供します。

2

自分で使ったことはありませんが、カバレッジ解析をmutation testingに置き換えたい場合は、「pester」と呼ばれる突然変異テスターに​​ついて聞いたことがあります。

私はグーグルでやっている間に、a list of python testing toolsにもいくつかのコードカバレッジツールを紹介しました。