C++ プロジェクトのテスト スイートを作成するためのベスト プラクティス/ガイドラインは何ですか?
2 に答える
これは非常に幅広い質問です。単体テストとテスト駆動開発(TDD)については、Microsoftからのこれに関するいくつかの有用な(部分的にややわかりやすい場合)ガイダンスがあります。適用されない場合は、VisualStudio固有のアドバイスを見落とす可能性があります。
システムテストまたはパフォーマンステストに関するガイダンスをお探しの場合は、質問を明確にします。Boost.Testのドキュメントには、まともなより広い理論的根拠があります。
終了する前に確認する単体テストのベストプラクティスがいくつかあります。まず、TDDは非常に貴重なプラクティスです。利用可能なすべての開発方法論の中で、TDDはおそらく、今後何年にもわたって開発を最も根本的に改善するものであり、投資は最小限です。QAエンジニアなら誰でも、開発者は対応するテストなしでは成功するソフトウェアを作成できないと言うでしょう。TDDでは、実装を作成する前にこれらのテストを作成し、理想的には、無人ビルドスクリプトの一部として実行できるようにテストを作成します。この習慣を始めるには規律が必要ですが、一度確立されると、TDDアプローチなしのコーディングはシートベルトなしで運転しているように感じます。
テスト自体については、テストを成功させるのに役立ついくつかの追加のプリンシパルがあります。
テストを特定の順序で実行する必要があるように、テスト間に依存関係を作成することは避けてください。各テストは自律的である必要があります。
テスト初期化コードを使用して、テストクリーンアップが正常に実行されたことを確認し、テストが実行されなかった場合は、テストを実行する前にクリーンアップを再実行します。
実稼働コードの実装を作成する前に、テストを作成してください。
本番コード内の各クラスに対応する1つのテストクラスを作成します。これにより、テストの編成が簡素化され、各テストを配置する場所を簡単に選択できるようになります。
Visual Studioを使用して、最初のテストプロジェクトを生成します。これにより、テストプロジェクトを手動で設定し、それを本番プロジェクトに関連付けるときに必要な手順の数が大幅に削減されます。
特定のディレクトリパスに依存するテストなど、他のマシンに依存するテストを作成することは避けてください。
インターフェイスをテストするためのモックオブジェクトを作成します。APIが必要な機能と一致することを確認するために、モックオブジェクトがテストプロジェクト内に実装されます。
新しいテストの作成に進む前に、すべてのテストが正常に実行されることを確認してください。そうすれば、コードを壊した直後に確実に修正できます。
無人で実行できるテストの数を最大化します。手動テストのみに依存する前に、合理的な無人テストソリューションがないことを絶対に確認してください。
TDD は確かに一連のベスト プラクティスの 1 つです。テストを後付けするときは、コード カバレッジと境界条件カバレッジの 2 つを目指します。基本的に、A) すべてのコード パスがテストされ、すべてのコード パスのすべての順列がテストされている場合はより適切な関数への入力を選択する必要があります (場合によっては、多数のケースがあり、パスの違いが表面的に異なる場合は実際には必要ありません)。 B) コードに if x > 5 が含まれている場合、すべての境界条件 (コード パス選択の変動を引き起こす条件) がテストされ、x = 5 と x = 6 でテストして、境界の両側を取得します。