ソフトウェアテスト:自動化、評価、...ユートピア主義

前回、すべてのプロジェクト参加者にテストが有用であることを証明する方法を話しました 。 議論が説得力があることを願っています。 これで、テストの作成と計画、それらの分類と評価にアプローチする方法について話すことができます。









ピラミッドのテスト



自動化の観点からのテストの効果的な分布は、ピラミッドの形で表すことができます。









ソフトウェアの機能のほとんどは単純な単体テストでカバーされ、残りの機能についてはより複雑な単体テストが作成されます。 このピラミッドを裏返すと、入り口にさまざまなバグがあり、出口に少数のヘイゼンバッグがある漏斗ができます。 各グループをさらに詳しく考えてみましょう。





プロジェクトの開始時および若いチームでは、手動テストに多くの時間と労力がかかり、自動テストはほとんど使用されません。 このため、テストの効率が低下し、それを取り除く必要があります。手動テストから離れて、単体テストの数を増やすためです。



ユニットvs UI



UIテストと比較して、ユニットテストはより高速で、開発時間が短縮されます。 強力なファームや別のデバイスなしで、ローカルで起動できます。 単体テストからのフィードバックは、UIテストからのフィードバックよりも何倍も高速です。 APIまたはXMLファイルの変更から、UIテストは大規模に低下し始め、毎回書き換える必要があります。 このような背景に対して、単体テストの重要な利点は安定性の向上です。







コードカバレッジの観点からすると、単体テストはより効率的ですが、テストを完全にブロックすることはできません。 ユニットテストがベースケースをクローズし、UIテストがより複雑な問題を解決するバランスを常に維持する必要があります。



上位レベルのテストは下位レベルのテストで未解決のバグを通知することを理解することが重要です。そのため、たとえばバトルコードでエラーが発生した場合、対応するユニットテストをすぐに実行する必要があります。 バグが復活すると、最初に発見されたときよりもはるかに不快です。



テストコードの要件



コードの品質と美しさを決定するよく知られているSOLID原則に加えて、テストをプログラミングする際には、速度と信頼性という2つの要件を考慮する必要があります。 これらは、頭字語FIRSTによって結ばれた5つの主要な原則で実現できます。









完全に単純化すると、テストは高速で信頼性の高いものになります。 このためには、外部反応と内部タイムアウトの期待がないという同期が重要です。



どのテストがカバーすべきか



TDD(テスト駆動開発)の一環として、今日2つのテストスクールがあります。 シカゴ校では、テストクラスとメソッドが生成する結果に重点が置かれています。 ロンドンの学校では、テストは動作に焦点を当てており、モックオブジェクトの使用を伴います。



たとえば、7と5の2つの数値を乗算するクラスがあるとします。シカゴの学校は、結果が35になることを単純に確認します。どのように学習してもかまいません。 ロンドンの学校では、クラスに存在する内部計算機をロックし、正しいメソッドとデータのセットで呼び出されることを確認し、ロックされたデータを返すことを確認する必要があると言います。 シカゴの学校は、「ブラックボックスで」ロンドンをテストしています。 別のテストでは、両方の方法を使用するのが理にかなっています。



100%のテストカバレッジが不可能な理由



テストを100%のコードでカバーしたとしても、バグがないことを保証することはできません。 そして、100%のカバレッジを達成したいという願望は、作業を妨げるだけです。開発者は、この数字を目指して努力し始め、指標のためにテストを作成します。 テストの品質はカバレッジのレベルでは示されませんが、より単純な事実:最終製品に到達するバグはほとんどなく、見つかったバグをクローズしても新しいバグは表示されません。 カバレッジレベルは、定義によって決定すべきことを示すだけです。コードのカバーされていないセクションがあるかどうか。



テストシリーズの次の資料では、テストコードの品質の要件だけでなく、さまざまなテスト表記とテストオブジェクトの種類の設計、分析に進みます。



All Articles