2011-12-14 11 views
1

逆効果であるにもかかわらず、いくつかのコードを実行し、真実を表明する単体テストを書くことは可能です。これは意図的に極端に単純化された例です。実際には使用せずにコードを実行するテストを多くの人が経験していることは確かです。有用なコードカバレッジを具体的に測定するツールはありますか?

コードが実際にテストのアサーションの一部として使用されるかどうかを評価するコードカバレッジツールはありますか?

+0

可能な複製:http://stackoverflow.com/questions/170297/code-covered-vs-code-tested – penguat

+0

これを検出するのではなく*防止する方が良いのではないでしょうか? (Reviews、Educate) – Gishu

+0

@ Gishuはい、テストを導入した複雑なコードベースでは、レビュー担当者はこの問題を発見する可能性はほとんどなく、したがって教育を引き起こすことはできません。 – penguat

答えて

1

対象となるコードと、対象となるテストのアサーションに関する backward code slice(単体テスト自体を除く)との間の交点を計算します。

この交差が空の場合、アサーションはアプリケーションのどの部分もテストしません。

ほとんどのコードカバレッジツールではスライスが計算されないため、質問に対する答えは「いいえ」と思います。

+0

でも、私が正しく理解すれば、あなたが意図したコードではなく、いくつかの余分なコードがカバーされているとしか言えません。 –

+0

アサーションに値を渡したコードが示すように、*アプリケーションコードの一部が記述されていることがわかります。「意図された」コードがカバーされていることを伝える方法はありません。明らかにあなたの心を読むことはできません。 –

+1

それは私が考えたものです。これはTDDのプラクティスが、あなたがtest => red => write code => greenと書くことに役立つかもしれないと思います。次に、書かれたコードがテストされていなければならないと思っていますが、もう一度そのサイクルを過ぎると、他のコードを追加/削除してテストに合格することができます。あなたのテストは、それがどのように進むのではなく、厄介なテストにつながる厄介なアプローチやアプローチではなく、コードが望むものの意図を特定するだけです。 –

0

何らかの種類の依存関係分析が必要です。つまり、アサーションが依存するステートメントを見つける必要があります。それから、これはカバレッジとクロスチェックする必要があります。 CodeSurferは、Cの依存関係解析を行う商用ツールの1つです。

+0

それで問題の一部を解決しますが、すべてではありませんか? – penguat

+0

そうかもしれません。特定のコードがアサーションのポートとして使用されたかどうかは、依存性分析です。特定のコードがテストによって実行されたかどうかは、カバレッジ・コレクションです。私はあなたの問題がこれら2つの組み合わせだと思う。 Cの簡単なカバレッジコレクションのために、gccスイートのgcovプロファイラをいつでも使用できます。 – ntrolls

+1

テストごとのカバレッジに関するその他の質問がありましたが、これはそれぞれのテストを実行してカバレッジを比較することを必要としますが、コードの意図されたビットが実際にカバーされているとはみなされませんでした。私が信じているように、TDDingの数年後には、テストではコードが何をするのかを指定する必要があります。カバレッジ結果を分析しすぎると発生する可能性があります。 –

0

もう一度、私はちょうどこれが起こっている理由を調査するだろうか?カバレッジ数を増やすために追加されたテストは、より深刻な原因の症状であることがよくあります。特定の犯罪者を選ぶのではなく、すべての人を教育することは、通常より効果的です。すでに行われてきた過ちを識別するための

:あなたは、各テストは、少なくとも1つのアサートを持って

  • ことをチェックする静的コード解析ツールを使用することができます。もちろんこれは不正な主張によって打ち負かすこともできます。
  • 未使用の戻り値はありません。

私は、RoyOsheroveのTestLintとParasoftのようなもので最初のものを見ました。 これは絶対的な方法ではないため、SCAが報告した問題を深刻に掘り下げています。しかし、それは私が考えることができる最高です。

+0

私は、これが起こっているという証拠はありません - 私はそれが働いている場所だと思っています。私は意図的にこれを言語/ツールチェインに依存しない方法で尋ねました。この会社の監視が誤っているため、カバレッジ目的でテストが追加されていますが、それは非常に一般的だと思われます。 – penguat

関連する問題