入力値を変えて確認すればよい機能もあれば、操作の順番や途中の状態まで考える必要がある機能もあります。使い慣れた方法だけでは、テストを書きにくいこともありますよね。この記事では、何を確認したいかを出発点にして、テストの組み立て方を比べます。
この記事のポイント
入力値の違いを見るならデータ駆動、業務の流れを見るならシナリオ、状態ごとの操作を調べるなら状態遷移が候補になります。一つに決める必要はなく、対象に合わせて組み合わせて使えます。
入力値の違いを比べたいとき
フォームの入力値やバリデーションの確認では、操作手順が同じで、入力する値だけが変わるケースがよくあります。この場合は、手順とデータを分けるとケース同士を比べやすくなります。
ただし、途中で操作が分岐するケースまで一つの表にまとめると、どの順番で操作すればよいかがわかりにくくなります。表を読む人が手順を追える範囲で共通化してください。
操作の流れや、状態ごとの違いを確認したいとき
利用者が一連の操作を終えられるかを確認するときは、前提・操作・結果をシナリオにすると流れを追いやすくなります。申請や予約のように状態が変わる処理なら、「取消済みの予約で取消ボタンを押す」のように、操作前の状態も書いておきます。
| 見たい違い | 表現の候補 | 確認の例 |
|---|---|---|
| 入力値 | 共通手順+データ | 必須項目の未入力や文字数の境界 |
| 業務の流れ | シナリオ | 申請から承認までの利用者の操作 |
| 状態と操作 | 状態遷移 | 取消済みの予約に再度取消操作をする |
| 常に守る条件 | プロパティ | 計算結果が、仕様で定めた範囲を超えない |
計算処理では、具体的な値と守るべき性質を確認する
割引計算なら、「この入力ならこの金額になる」という具体例をテストできます。加えて、「割引後の金額は0円未満にならない」のように、入力を変えても守られるはずの性質を確認する方法もあります。ただし、その性質が対象の仕様でも成立するかは、先に確認してください。
具体例を使うテストは、その条件で正しい結果になるかを確認します。性質を使うテストは、入力を変えたときにも守るべき条件を確認します。役割を分けて使うと、それぞれのテストで何を確認しているかを説明しやすくなります。
ほかの手法も、何を確認するためのものかで比べる
ほかにも、手順を読みやすくまとめる方法、入力の組み合わせを選ぶ方法、結果を比較する方法があります。役割が違うので、組み合わせて使うこともできます。たとえば、キーワードで組んだ手順に、組み合わせテストで選んだデータを渡す使い方です。次の表には、各手法の考え方がわかる例を載せています。
組み合わせテストでは、ブラウザや権限といった「因子」、各因子が取る値、同時に組み合わせる因子数を決めます。ペアワイズは2因子の組を網羅する方法です。3因子以上が関係する不具合を調べるには、その組み合わせも確認する必要があります。
結果を比較する場合は、基準自体の確認も必要です。スナップショットは差分を読んでから更新し、差分テストでは仕様変更で生じた違いと不具合を区別します。メタモルフィックテストで使う関係も、対象の仕様で成立するか確認してください。見つけた差や異常を後から説明できるように、条件と結果を記録しておきます。
| 手法 | 何を確かめるか | 例 |
|---|---|---|
| キーワード駆動 | 操作と検証の部品を組み合わせ、業務の流れを確認する | 「ログイン」「検索」「結果を確認」を再利用してケースを組む |
| モデルベース | 仕様モデルからテストを導き、実際の動作と照合する | 予約の状態モデルから操作の経路を生成して実行する |
| 組み合わせ | 複数の条件が重なったときの振る舞い | ブラウザ・権限・設定の値を、全ての2因子の組を含むケースで確認する |
| ファズ | 生成・変異させた入力で起きる異常 | JSON解析へ多様なバイト列を与え、クラッシュなどを探す |
| スナップショット/Golden | レビュー済みの参照出力からの変化 | 出力したJSONを保存済みの参照データと比較する |
| 契約 | サービスの利用側と提供側が期待する入出力の一致 | 利用側が必要とする応答の項目・型を、提供側も満たすか確認する |
| 差分 | 同じ入力に対する新旧・複数実装の結果の違い | 旧計算処理と新計算処理へ同じ値を渡して比較する |
| メタモルフィック | 入力を変換した前後で成立するはずの結果の関係 | 整数列の順序を変えてからソートしても、元の列のソート結果と一致するか確認する |
手法を選ぶ前に確認したいこと
自分が書きやすいかに加えて、ほかの人がレビューできるか、失敗したときに調べやすいかも考えて選ぶと、運用しやすくなります。
- 不具合が起きそうなのは、入力値の違い、操作の順番、状態の組み合わせのどこか。
- 合否を判断するための仕様や資料はあるか。
- 失敗したときに、どの条件で起きたかが記録からわかるか。