人々はテストスイートをどのように維持しますか?


17

特に、私は次の側面に興味があります。

  1. テストケースが間違っている(または古くなっている)ため、修復(または破棄)する必要があることをどのようにして知るのですか?つまり、テストケースが無効になった場合でも、テストケースが合格し、サイレントのままになる可能性があります。これにより、ソフトウェアが正常に動作していると誤って信じることができます。それでは、テストスイートのこのような問題をどのように実現しますか?

  2. テストスイートがもはや十分ではなく、新しいテストケースを追加する必要があることをどのように知っていますか?これは要件の変更と関係があると思いますが、テストスイートの妥当性をチェックするための体系的なアプローチはありますか?


4
言い換えると、誰がテストをテストしますか?
コンラッドルドルフ

回答:


11

簡単な答え:次のコードカバレッジやコード品質ツールなどのテストケースの品質を維持するのに役立つ既知のツールを使用します:Cobertura、PMD、Sonarなど、プログラムの重要なコンポーネントが十分にテストされていない場合に気付くのに役立ちます。また、統合テストを作成します。これは、何か問題が発生した場合に最初に破損する可能性が最も高くなります。

長い答え:

テストケースが間違っている(または古くなっている)ため、修復(または破棄)する必要があることをどのようにして知るのですか?つまり、テストケースが無効になった場合でも、テストケースが合格し、サイレントのままになる可能性があります。これにより、ソフトウェアが正常に動作していると誤って信じることができます。それでは、テストスイートのこのような問題をどのように実現しますか?

  • Coberturaなどのコードカバレッジツールを使用すると、特定のクラスまたは複雑なメソッドのテストケースでは不十分であることを検出できます。どこでも100%のコードカバレッジに達する必要はありません。ほとんどの場合、達成するのは難しく、必ずしも有用ではありません。ただし、プログラムの最も重要な側面のテストは、コードカバレッジの少なくとも80%を目標として維持する必要があります。
  • 使用して継続的ビルド・統合ツールなど、ジェンキンスとの組み合わせで、私は非常に好きだソナープラグインは、あなたは、最新の変更のための責任者に警告の電子メールや他のタイプの送信設定トリガすることができます。さまざまなグラフと統計(Sonarは他の多くのツールの中でもCoberturaを使用しています)は、コードレビューアとテストケース開発者が重要なことに集中するのに役立ちます。

テストスイートがもはや十分ではなく、新しいテストケースを追加する必要があることをどのように知っていますか?これは要件の変更と関係があると思いますが、テストスイートの妥当性をチェックするための体系的なアプローチはありますか?

最初の質問に対して書いたものは、2番目の質問に対する答えの一部です。ここに次の点も追加します。

  • テストケースに加えて、統合テストケース(または必要に応じて「ビジネス」ケース)を作成します。多くの場合、これらは複数のクラス/メソッドに依存するため、最初に変更/破損する可能性が最も高くなります。また、頻繁に破損するため、忘れられる可能性は低くなります。私の個人的な経験から、良いテストの作成に役立つ唯一のアプローチ/方法論は、テスト駆動開発です。特に、テストケースを書いている人が、そのコードを書いている人と同じでない場合。TDDを使用して適切なテストケースを作成するのにも時間がかかりますが、少なくとも私にとっては、結果は非常に満足のいくものでした。
  • バグが発生するたびに、修正とそれに付属するテストケースを記述します。テストケースは、この特定のバグのみを対象とする必要があります。バグの原因となったコードを完全にカバーしたので、再び出てくることはないはずです。

テストを書いている人がコードを書いているのと同じ人ではないことを除いて、私はすべてに同意します。これは理論的には良さそうに聞こえますが、それほど非効率でなければ良いでしょう。コードベースがどれほど素晴らしいものであっても、どんなサイズであっても、その一部がどのように機能するかを理解するのに数時間かかります。したがって、基本的に、テスト作成者がcdoeと動作し、他の誰かが入って来て、それが少し出入りすることを学んでから、テストを書く必要があります。コードの品質が最高ではない場合、包括的なテストを書くのに数日かかる可能性があります
Earlz

@Earlz 2人が同じプロジェクトで働いていない場合、私はあなたに同意します。2人の開発者が同じフレームワーク、ライブラリ、および開発方法論を一貫した方法で使用する同じプロジェクトで作業する場合、複雑なビジネス要件である場合を除き、問題は発生しません。
ジャレイン

私の場合、@ Jalaynの製品は非常に複雑です。コード品質は最高ではありませんが、間違いなく最低ではありません(定期的なリファクタリングを行います)。別のテスターを設置することを強制しますが、単体テストでは作業を完了した人が行います。私たちの製品は、複雑な主題である難読化を扱う数百(おそらく数千?)のクラスで構成されています。
アールズ

@Jalaynこれらのツールについて言及してくれてありがとう。しかし、カバレッジツールのように、常に実行することはできませんよね?では、どの時点でそのようなツールを実行する必要がありますか?ソースコードにいくつかの変更を加えた後は?または、いくつかのテスト更新の後?これに関する一般的なガイドラインはありますか?
井田

1
継続的なビルドサーバーを使用している場合、リポジトリに何かがコミットされるたびにアプリケーションがビルドおよびテストされる可能性があります(作業中にそれを行います)。設定可能です。たとえば、15分ごとにビルドすることもできます。コードカバレッジに関しては、テストケース中に有効化され、オーバーヘッドはそれほど増えません。ただし、Sonarなどの完全なコード品質チェックを有効にしたビルドは、通常非常に長い時間がかかります。たとえば、これらは夜間に実行されます。理想的には、これらのツールを手動で実行する必要はありません。
ジャレイン

9

テストケースが正しいことを確認する方法はありません。ただし、テストケースを作成するときは、要件を理解し、コードを理解し、それらが一致することを確認することに集中します。テストスイートを持っていることのポイントは、あなたが一度だけこれをしなければならないこと、およびテストスイートずに本当にハードに集中しなければならないのに対し、その後からあなただけの、テストを再実行し、それらが通過していることを確認することができます上にあるすべての時間を、つまり、コードベースに何かをするときはいつでも。しかし、そもそもあなたが正しいことをしていることを確認しなければならないという根本的な問題は残っています。コンピューターは単にそのタスクを私たちから解放するほどインテリジェントではありません。

したがって、(1)テストスイートが不完全な場合、それを確認する簡単な方法はありません。コードカバレッジ分析は、コードの一部の行が実行されないこと、つまりスイートが何らかの形で不足していることを証明できますが、その不足がどれほど深刻であるかを証明できません。コードカバレッジが100%であっても、関連するすべての状態を保証するものではありません存在する可能性のある状態の組み合わせ数のために、システムのすべてが実行され、完全な状態カバレッジは現実的なシステムでは達成できません。チェックしたいものをチェックするためにテストケースが少なくとも正しいことを確認するための良いテクニックの1つは、テストを記述し、実際に失敗することを確認し、コードを記述/変更して、それが合格したことを確認することです。したがって、テスト駆動開発に対する熱意:個々のテストが正しいことを確実に行えるようにし、コードベース全体をそのように作成すれば、大規模なシステムでも同様のレベルの信頼を得ることができます。

(2)要件が変わるたびにテストスイートは通常不十分になります-推測する必要はありません。顧客が特定の動作の変更を望んでおり、変更の前後でテストが成功する場合、明らかに特定の入出力関係を実行していません。

テストカバレッジのないレガシーシステム、またはカバレッジが何であるかがわからない場所については、正式な証拠はありませんが、経験から言えば(親の助言:個人的な意見が続きます!)十分ではありません。テストが事後の、オプションの、品質を向上させるが、実際には必要ではないアクティビティと見なされる場合、テストがコードベースに遅れないようにするインセンティブがちょうどないため、不完全で体系的ではない傾向がありますありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.