web-dev-qa-db-ja.com

100%のテストカバレッジが可能な場合

正式な検証手法について考えるときは、 テストカバレッジ も必要です。しかし、その記事が示すように、「100%テストカバレッジ」があると簡単に言うことができますが、すべてのテストにアサーションはありません。それは極端です。でもなんとかテストカバレッジが100%あると言える状況はあるのでしょうか。モデルチェッカーがアプリケーションのすべての可能なパスと状態をチェックする方法と同様に、テストツールがモデルチェッカーと同じレベルの完全性をカバーしていると言えるかどうか疑問に思います。基本的に、可能なすべての組み合わせを明示的に記述することなく、100%のカバレッジがあることをテストで十分に確認する方法があるかどうか疑問に思っています。

5
Lance Pollard

深いコードカバレッジメトリックを生成できる戦略があります。 変異テスト はその一例です。大まかに言えば、ミューテーションテストは、プログラムのすべての論理順列に対して実際にテストを実行することにより、プログラムへの論理的な変更がテストの失敗につながることを保証します。論理的な変更が失敗したテストを生成しない場合、それは意味のあるテストカバレッジギャップを表します。


私の免責事項:私は実際に突然変異テストを行ったことがありません。 本当にがどれほど実現可能で価値があるかについて話すことはできません。しかし、理論的には、かなり滑らかに聞こえます。 実際には、ただし、ほとんどの企業は優れた開発者を雇い、生き残り(そして繁栄)できます。 良い開発慣行に従ってください。

11
svidgen

100%のテストカバレッジが可能であり、100%のカバレッジにもかかわらず、プログラムにまだエラーがある可能性があります。 " パスカバレッジはすべてのバグの検出を保証しますか? "でテストカバレッジの欠点を参照してください。

モデルチェッカーがアプリケーションのすべての可能なパスと状態をチェックする方法と同様に、テストツールがモデルチェッカーと同じレベルの完全性をカバーしていると言えるかどうか疑問に思います。

基本的な考え方は、少なくとも1つの状態で特定のステートメント/パスなどを通過したかどうかをテストカバレッジが測定するだけであるということです(可能なすべての状態を保証するモデルチェックとは対照的)。

したがって、考えられるすべての入出力ペアのテストケース(一般的なケースでは指数関数的に多数のテストケース)がない限り、答えはノーです。

8

100%カバーできますが、問題は、それは何か意味があるのでしょうか?個人的には、重要でないメソッドとそのシナリオを60%カバーするのではなく、関連性のないシナリオを100%カバーするほうがいいと思います。

2
HilaB

あなたがテストしているものの私の複雑さに依存します。アプリケーションがHello Worldのみを出力する場合、出力された結果が「Hello World」であるかどうかを確認するためにアサートを実行するだけです。リアルタイムのパフォーマンスの問題、ハードウェアの制限が関係している場合、または非常に複雑なやり取りがある場合、予想できないテストケースが発生する可能性があると思います。

1
deathbombs