テスト戦略
定義
ソフトウェアの欠陥を発見するために、どのテストをどの順序・粒度で実施するかの計画。
なぜ重要か
テストは欠陥を「見つける」活動であり、「ないことを証明する」活動ではない(Dijkstra)。
欠陥は発見が遅れるほど修正コストが上がる。単体テストで見つければ修正コスト = 1、本番後 = 100。テスト戦略を持つことで欠陥を早く・安く発見できる。
テストピラミッド
/\
/ \
/ E2E\ 少ない・遅い・高コスト
/------\
/統合テスト\ 中程度
/----------\
/ 単体テスト \ 多い・速い・低コスト
- 単体テスト(Unit): 関数・クラス単体の動作確認。高速・大量に実行可能
- 統合テスト(Integration): コンポーネント間のインターフェースの動作確認
- システムテスト(System): システム全体が要件を満たすかの確認
テスト技法
ブラックボックステスト(仕様に基づく):
- 同値分割: 入力を等価なグループに分け各グループから1件テスト
- 境界値分析: 境界付近の値(最小値・最大値・その前後)をテスト
ホワイトボックステスト(構造に基づく):
- 文カバレッジ: 全コード行を少なくとも1回実行
- 分岐カバレッジ: 全条件分岐の真・偽を実行
TDD(テスト駆動開発)
Red → Green → Refactor のサイクル。TDDの価値はテストの存在ではなく、テストを先に書くことで設計が改善される点にある。
適用場面
- プロジェクト開始時にテスト戦略を決めるとき
- E2Eテストが増えすぎてCIが遅くなっているとき
- テストが書きにくいコードに対してアプローチを選ぶとき
関連概念
出典
実践ソフトウェアエンジニアリング(Pressman)第20〜23章