4.1 テスト技法のカテゴリ
テスト技法の目的: 下記の決定
- テスト条件 (テスト分析)
- テストケース (テスト設計)
- テストデータ (テスト実装)
4.1.0 テスト技法の選択
下記のような変数にしたがって選択する
-
コンポーネントまたはシステムの種類
- 組み込みかエンタープライズかIoTか
- オンラインかバッチか
- リッチクライアントかWebか
-
コンポーネントまたはシステムの複雑さ
- モノリスなのかMSなのか
-
規則や標準
- 縛りが生じうる
-
顧客または契約上の要件
- 納品物としてカバレッジレポートの納品を謳っていたりする
-
リスクのレベルやタイプ
- 優先度付け
-
テスト目的
- 欠陥検出が目的なのか、要求や仕様どおりに動いていることの確認が目的なのか
- 入手可能なドキュメント
-
テスト担当者の知識とスキル
- 経験ベースの場合、経験が必要
- その他の技法の場合でも、技法を理解し使いこなせる必要がある
-
利用できるツール
- カバレッジ計測等
- スケジュールと予算
-
ソフトウェア開発ライフサイクルモデル
- 例: アジャイルにおけるテストファースト
- この場合、ブラックボックス/ホワイトボックス両方の観点でテスト設計してからコーディングすることになる
-
ソフトウェアの想定される使用方法
- ユースケースにおける使用方法、すなわちシナリオを考えてテストする
- テスト対象のコンポーネントまたはシステムに関してテスト技法を使用した経験
-
コンポーネントまたはシステムで想定される欠陥の種類
- 欠陥から、その理由となったエラーを想定して重点的にテストする
- 特定の状況やテストレベルに適する/適さない技法がある
- 例: コンポーネントテストにおいてユースケーステストは適さない
4.1.1 テスト技法のカテゴリと特徴
ISTQBではテスト技法を3分類している:
-
ブラックボックス
- 内部構造を見ない
-
ホワイトボックス
- 内部構造を見る
-
経験ベース
- テストオブジェクトに対する開発担当者、テスト担当者、ユーザーの知見や経験、スキルを基にする
- ブラックボックス/ホワイトボックステスト技法と組み合わせる
テスト設計は複数のテスト技法を組み合わせて行う。Glenford J.MyersのThe Art of Software Testingによれば:
-
(optional)仕様が入力条件の組み合わせを含んでいる場合、原因-結果グラフを作成する
- 必ず境界値分析
- 有効/無効の同値クラスを識別し、テストケース補足
- エラー推測してテストケース補足
- カバレッジ基準を満たすようにホワイトボックス技法を用いてテストケース補足
ブラックボックステスト/ホワイトボックステスト/経験ベースのテスト技法の比較
ブラックボックステスト | ホワイトボックステスト | 経験ベースのテスト | |
---|---|---|---|
テスト条件・ケース・データの基となるテストベース |
|
|
|
テストケースの目的 | 要件と実装との間の相違、要件からの逸脱の検出 | ||
カバレッジ計測の拠り所 | テストベース内のテスト済アイテムと適用した技法 | 選択した構造内のテスト済アイテムと適用した技法 | カバレッジの計測は困難 |
4.2 ブラックボックステスト技法
4.2.1 同値分割法
同値パーティション
入力、出力、内部値、時間関連の値など、テスト対象に関連するあらゆるデータ要素、およびインタフェースのパラメータをMECEに分けるやつ
- 値は必ず1つの同値パーティションに属する
-
「時間関連」はあまり知られていないが重要
- 例: イベント前/後 など
- 自分で考えた例: バッチが動く前/動いている最中/完了後 なども?
入力の場合の例:
-
有効同値パーティション
- テストオブジェクトに受け入れられる値
-
無効同値パーティション
- テストオブジェクトに拒否される値
出力についても同値パーティションを考えることができる:
-
例: 検索結果のページネーション
- 0件
- 1件以上、1ページで収まる
- 複数ページにわたる
必要に応じてさらに細かく分割することもある
テストレベル
全テストレベルで適用可能
カバレッジ
1つ以上の値でテスト実行した同値パーティション数 / 全同値パーティション数
同値分割法の注意点
無効同値パーティションは単体でテストすべき
- 他の無効同値パーティションを隠してしまわないように
- 【補】xUnit Test Patternsでも “One Bad Attribute” として説かれている
4.2.2 境界値分析(BVA: Boundary-value Analysis)
境界値(boundary value)
ISTQBによる定義
順序付けられた値を持つ同値パーティションにおける最大値もしくは最小値
欠陥が入りがちなので重点的に攻める
境界値分析のテストケース
例:
| 無効 | 有効 | 無効
| [0;20) | [20;34] | (34;+inf)
x--------x---------x------->
0 20 34
2ポイント境界値分析法
含まれない/含まれるの2点を用いる
有効同値パーティションに注目した場合
↓注目
| 無効 | 有効 | 無効
| [0;20) | [20;34] | (34;+inf)
x--------x---------x------->
0 20 34
19,20,34,35
0側の無効同値パーティションに注目した場合
↓注目
| 無効 | 有効 | 無効
| [0;20) | [20;34] | (34;+inf)
x--------x---------x------->
0 20 34
(-1),0,19,20
3ポイント境界値分析法
境界値,-1,+1の3点を用いる
有効同値パーティションに注目した場合
↓注目
| 無効 | 有効 | 無効
| [0;20) | [20;34] | (34;+inf)
x--------x---------x------->
0 20 34
↑ ↑
これらを使う
19,20,21,33,34,35
0側の無効同値パーティションに注目した場合
↓注目
| 無効 | 有効 | 無効
| [0;20) | [20;34] | (34;+inf)
x--------x---------x------->
0 20 34
↑ ↑
これらを使う
(-1),0,1,19,20,21
(-1),0,1,18,19,20じゃないことに注意する
テストレベル
全テストレベルで適用可能
カバレッジ
1つ以上の値でテスト実行した境界値数 / 全境界値数