VOLUME 04 / CHAPTER 01
全部通ったテストが、何も確かめていないとき
入力の区分、境界、状態、条件式を、異なる観点として組み合わせる。網羅率の数字を、実際に確かめた約束へ戻して読む。
出典照合日: · 独自解説
架空事例:青葉機材の標準予約を試験する。数量の範囲、条件式、試験結果は説明用に作成した。真理値表ではAとBを副作用のない論理入力として扱い、特定言語の短絡評価による実行回数とは区別する。
正しい結果を、何と比較したのか
数量を五台にして予約すると、料金が表示される。予約番号も返り、画面は完了へ進んだ。担当者はテストを成功にした。ところが、期待する料金を事前に計算していなかった。表示されることを確認しただけで、表示された額が正しいかは確かめていない。
テストを実行することと、正誤を判断できることは別である。
入力、実行条件、観測する結果、期待する結果が対応していなければ、誤った処理が動いても成功として扱われる。青葉機材では、料金表に従って手計算した小さな例を用意し、その例で確定額と保存された明細を照合することにした。画面の表示だけでなく、後から参照する契約記録も同じ意味を持つかを確かめる。
ただし、期待値を作るために本番の料金計算関数をそのまま呼び出せば、同じ誤りを両側で使う可能性がある。独立に確かめた式、承認された具体例、異なる方法で求めた結果など、何を正しさの基準にするかを考える。比較できる値があるだけで、その値が正しいとは限らない。
一から二十までを、二十回試すべきか
本事例の標準予約は、数量を整数の1〜20とする。ゼロ以下は受け付けず、21以上は別途確認する。この仕様なら、入力を、許容範囲、下限より小さい範囲、上限より大きい範囲へ分けて考えられる。
同値分割は、同じように扱われると考える入力の区画から代表を選ぶ。境界値分析は、区画の境目に着目する。ここでは0、1、20、21が、含む・含まないを取り違える実装を調べるための値になる。基本となる区別は、コンプリートテキスト第11章に対応する。1
許容範囲から五台を選んで成功しても、すべての1〜20が正しいことを数学的に証明したわけではない。区画の内部では同じ振る舞いを期待できる、というモデルに基づいて試験を選んだのである。例えば十台以上に別の割引があるなら、1〜20を同じ区画として扱うだけでは不足する。
また、整数の範囲を確認しても、空欄、小数、数字に見える文字列をどう扱うかは別である。外部からはどの型で値が届くか、入力をどの段階で検査するかを確認する。無関係な異常値を大量に増やすのではなく、採用した入力契約に異なる振る舞いがあるかを探す。
試験を減らすための分類であると同時に、仕様の分類が不足していないかを調べる道具でもある。
境界は、数値の端だけにあるのではない
予約取消しは、出庫準備の開始前に限って受け付ける。数量の境界をすべて試しても、この条件は確認できない。確認中、確定、出庫準備中、取消し済みという状態によって、同じ操作の意味が変わるからである。
本事例では、確定から出庫準備中へ移る前後に取消しを行い、どの状態で何が許されるかを確かめる。同じ予約を二度取り消した場合に、機材の確保数が二度戻らないかも観測する。終了画面が出るだけでなく、保存された状態と数量を確認する必要がある。
時刻にも境界がある。受付締切が17時なら、17時ちょうどを含むか、どの時計で判断するかを定めなければならない。試験が17時の直前と直後を通っていても、「17時ちょうど」を仕様として決めていなければ、正しい期待値は置けない。
状態や時刻の境界を見つけると、テスト設計が要件定義へ戻る。後工程で大量の試験をする前に、何を正しいとみなすかを合意する意味がここにある。
分岐を通ったことと、条件を試したこと
予約を自動確定できる条件を、A「契約が有効」、B「必要数量を確保できる」とし、結果を A AND B とする。論理上の組合せは次の四つになる。
| A | B | 自動確定できるか |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 偽 |
| 偽 | 真 | 偽 |
| 偽 | 偽 | 偽 |
Aが真でBが偽、Aが偽でBが真という二件を使うと、各入力には真と偽が現れる。しかし、判定結果は二件とも偽であり、確定する側を通っていない。論理的な各条件の真偽を揃えることと、判定の真偽を揃えることは違う。
逆に、真・真と偽・偽だけを試せば、この式では判定の真と偽を通せる。しかし、どちらか一方だけが満たされない場合の振る舞いを、個別に確認したわけではない。この二件だけでは、誤ってANDをORにした実装も同じ結果を返す。真・偽か偽・真を追加すれば、その変更を検出できる。
分岐網羅、条件網羅、組合せの網羅は、何を数えるかが異なる。なお、実際の言語で A && B が短絡評価される場合、Aが偽ならBが実行されないことがある。この表の論理入力の値と、実行時のツールが数える条件の評価回数を同一視しない。1
一つの条件だけで、結果を変えられるか
Aの影響を確かめるには、Bを真に固定してAを変える。真・真では確定し、偽・真では確定しない。Bの影響を見るなら、Aを真に固定して、真・真と真・偽を比べる。
この三件を使うと、この単純な二条件の式について、それぞれの条件が独立に判定結果へ影響することを示せる。MC/DCの重要な観点は、この独立した影響を確認することである。Clangの公式カバレッジ文書も、MC/DCを、個々の条件が判定結果へ独立に影響したかという観点で説明している。2
ただし、この例から、どんな式でも条件数に1を加えた件数だけで十分だとは結論できない。条件同士に制約があり、組合せを実現できない場合や、同じ条件が式に複数回現れる場合もある。短絡評価や、測定ツールが採用する定義も確認する。
さらに、MC/DCを満たせば業務要件が完全になるわけではない。式に本来必要なC「点検が完了している」が書かれていなければ、AとBの関係をどれほど詳しく確認しても、その欠落は式の網羅からは直接見えない。コードの構造に対する網羅と、要求に対する網羅は別である。
観測しなかった副作用は、成功の裏に残る
最後の一台へ二つの予約要求を同時に送った。片方の画面は成功、もう片方は失敗を示した。これで二重予約を防げたと判断してよいだろうか。
失敗と表示した側の予約記録がDBへ残っているかもしれない。あるいは、機材の確保だけが残り、次の顧客が借りられなくなっているかもしれない。守りたい約束が確定予約と確保量の整合なら、画面上の結果だけでは足りない。
同じように、取消しの試験では、状態が取消しになるだけでなく、必要な確保を一度だけ解放し、履歴を残すかを確かめる。権限がない要求を拒否した場合には、拒否の後でデータが変わっていないかを見る。失敗を返すことと、失敗時の状態を守ることは別の性質である。
観測点を増やす際も、すべての内部変数を検査する必要はない。内部実装の形へ過度に結び付いた試験は、要件を維持した正当なリファクタリングでも壊れやすい。要求が約束する結果と、判断に必要な状態に着目し、どこを外から確認すればよいかを考える。
試験環境の成功を、どこまで持ち出せるか
一人の営業、一台のサーバ、固定した点検データで試験が成功した。その証拠は、その条件に対して価値がある。しかし、本番の同時利用、外部連携の遅延、データの偏りまで自動的に含むわけではない。
確認すべき条件を本番に近づければよいが、すべてを完全に複製する必要があるとは限らない。数量の境界を確かめる試験に、全倉庫の実データが必須とは限らない。一方、外部応答の遅延を含む時間要件を確認するのに、常に即時応答する代用品だけを使うのは目的に合わない。
ASTQBのテスト原則では、テストで欠陥の存在を示せても、通常の試験を通したことだけで欠陥の不在を保証するものではなく、対象と文脈に合わせて検証を選ぶことが説明されている。3 この制約は、何も確かめられないという意味ではない。何をどの条件で確認したかを限定して述べるためのものである。
全件成功の報告には、その「全件」が何を表すかが必要だ。要求、入力区画、状態、条件式、実行環境。異なる観点を適切に選べば、試験数を無目的に増やさず、見落としていた約束へ届く。
知識を答案へ戻す
午前Ⅱ。 同値分割は入力の区画、境界値分析は区画の端、構造的網羅は実装の制御構造を見る。分岐と各条件、条件の独立した影響を区別する。網羅率の名称が同じでも、測定規則がどの評価を数えるかを読む。
午後Ⅰ。 問題文にある入力、状態、時刻、失敗時の副作用から、必要な試験条件と期待結果を導く。「異常系をテストする」ではなく、どの条件で何が起きてはならないかを具体化する。
午後Ⅱ。 検証手法の採用理由を、対象となるリスクへ結び付ける。同時予約の試験なら、画面の成功件数だけでなく、確保の整合を観測した理由と結果を説明する。
立ち止まって考える:真・真と偽・偽で成功したAND条件は、十分に確かめられたか
判定の真偽は通るが、ORへの誤変更を検出できない。真・偽または偽・真では、ANDとORの結果が分かれる。何を検出したいかを考え、単なる件数や判定結果の二種類だけを十分性の根拠にしない。
出典と照合範囲
[1] コンプリートテキスト第10〜12章、およびIPA「SAシラバス Ver.5.2」11-5、11-7、12-4:入力設計、網羅、要求に沿った検証を基礎とした。数量、真理値表、ANDとORの比較は本章の独自モデルである。公式シラバス
[2] Clang, Source-based Code Coverage:MC/DCが条件の独立した影響を評価する観点を参照した。Clangのbranch coverageという実装上の集計を、すべての教科書の分岐網羅と同一視していない。航空規格の適合要件を本章で定めるものでもない。公式文書
[3] ASTQB, 1.3 Testing Principles:試験が示す証拠の範囲と、文脈に応じたテストの選択という原則を参照した。本章の試験集合の十分性を、同団体が認定したものではない。公式解説