エラー推測とは?バグを見抜くテスト設計のコツと実践チェックリスト【QA実務】

テスト自動化

エラー推測とは、過去の経験・バグのパターン・直感をもとに「バグが出やすそうな値や操作」を積極的にテストするテスト設計技法です。他の技法では見つけにくいバグを補完するため、QAエンジニアの実務経験が直接品質に反映される技法です。

💡 一言でいうと
エラー推測 = 「「ここ、バグが出そう」という経験と直感をテストに変換する技法

エラー推測は唯一「経験・直感・勘」に基づくテスト設計技法です。体系的な技法が見落としがちな「経験的に危ない値」を補完することで、テストスイート全体の品質を一段引き上げられます。

📌 この記事はこんな方におすすめ

  • エラー推測の概念と実践的な使い方を学びたいQAエンジニア
  • 同値分割・境界値分析だけでは足りないと感じている方
  • テスト設計技法シリーズの最後の仕上げを知りたい方
  • 自分の経験・勘をテストに体系的に活かしたい方

✅ この記事を読むと得られること

  • エラー推測の概念と他の技法との違いがわかる
  • 実務でよく使われる「バグが出やすい値」のパターンカタログがわかる
  • エラー推測を他の技法と組み合わせる実務ワークフローがわかる

👤 この記事を書いた人

QAエンジニア・テスト自動化エンジニアとして15年以上の実務経験を持つ Yoshi が執筆。エラー推測は毎日のテスト設計で「他の技法の補完」として活用しており、経験が積み重なるほど精度が上がる技法です。実装コードはGitHubで公開中:github.com/YOSHITSUGU728/automated-testing-portfolio

同値分割・境界値分析・デシジョンテーブル・状態遷移テスト——これらをすべて適用してもまだ発見できないバグがあります。なぜでしょうか?

  • 体系的な技法は「仕様書に書かれた条件」からテストケースを導き出す
  • しかし「仕様書に書かれていない落とし穴」は体系的な技法では見つけにくい
  • 「NULLを入れたらどうなる?」「空白文字だけ入力したら?」という経験的な問いかけが重要

エラー推測はこうした「経験則に基づく問いかけ」をテストケースに変換する技法です。この記事ではエラー推測の概念・実践的なバグパターンカタログ・他技法との組み合わせ方まで解説します。

📌 結論

  • 「経験・直感・過去のバグパターン」をもとにテストケースを追加するテスト設計技法
  • 他の6つの技法(同値分割・境界値・デシジョンテーブル等)を補完する最後の仕上げとして使う
  • 経験が豊富なほど精度が上がる一方、チェックリスト化することで経験が少ないメンバーも活用できる

エラー推測とは?

エラー推測(Error Guessing)とは、「過去の経験・バグのパターン・直感をもとに、バグが発生しそうな値や操作を予測してテストケースを追加するテスト設計技法」です。

JSTQBでは「テスターの経験・直感・ヒューリスティクス(経験則)に基づく技法」として定義されています。他の技法が「仕様書の条件から論理的にテストケースを導き出す」のに対し、エラー推測は「ここが危ない気がする」という経験的な感覚を起点にします。

比較項目体系的な技法(同値分割・境界値等)エラー推測
起点仕様書の条件・要件経験・直感・過去のバグパターン
網羅性論理的に網羅できる網羅性の保証なし(補完的)
再現性誰がやっても同じ結果経験者ほど精度が高い
得意なバグ仕様に書かれた条件のバグ仕様外の落とし穴・実装の癖
💡 ポイント:エラー推測は単独では使わず、必ず他の技法と組み合わせて補完的に使います。「同値分割・境界値でテストケースを設計した後、エラー推測で経験的に危ない値を追加する」というワークフローが実務の標準です。

エラー推測の実践:バグが出やすい値のカタログ

15年以上の実務経験から厳選した「バグが出やすい値・操作のパターン」をカテゴリ別にまとめます。これをチェックリストとして使うことで、経験が少ないメンバーもエラー推測を活用できます。

① 数値系のバグパターン

なぜ危ないかよくあるバグ例
0ゼロ除算・条件分岐の境目ZeroDivisionError・割引計算で0円になる
-1・負の数符号なし整数型で意図しない大数になる在庫数に-1を入力すると4294967295になる
最大値+1整数オーバーフローint32の最大値2147483647の次が-2147483648になる
小数・浮動小数点浮動小数点の丸め誤差0.1 + 0.2 = 0.30000000000000004

② 文字列系のバグパターン

なぜ危ないかよくあるバグ例
空文字(””)NULL との混同・長さチェック漏れ空文字がDBに保存される・名前欄が空でOKになる
スペースのみ(” “)空文字と異なる扱いになる「入力あり」と判定されてバリデーションを通過する
非常に長い文字列(1000文字以上)バッファオーバーフロー・DB制約超過500文字制限のフィールドに1000文字でエラーなし
全角・半角混在文字コード・長さ計算のズレ「あa」で2文字なのにバイト数で4になる
改行・タブ文字CSV出力時の破損・表示崩れ改行含む文字列をCSVに出力すると行がずれる

③ セキュリティ系のバグパターン

なぜ危ないかチェックポイント
' OR '1'='1SQLインジェクションログインフォームで認証バイパスできないか
<script>alert(1)</script>XSS(クロスサイトスクリプティング)入力値がそのままHTMLに表示されないか
../../../etc/passwdパストラバーサルファイル名入力でディレクトリを遡れないか

④ NULL・未定義系のバグパターン

なぜ危ないかよくあるバグ例
NULL / NoneNullPointerException・予期しない動作オプション項目にNULLが入ってソートでクラッシュ
未選択状態デフォルト値の処理が不完全ドロップダウンを選択せずに送信するとエラー
空配列・空リストループ処理で0件の扱いが漏れる検索結果0件でページネーションがクラッシュ

⑤ 日付・時刻系のバグパターン

なぜ危ないかよくあるバグ例
2月29日(うるう年)うるう年の考慮漏れ「1年後」を計算すると翌年2月29日が存在せずクラッシュ
月末日(28・29・30・31日)月ごとに日数が異なる「1か月後」が翌月に存在しない日付になる
タイムゾーン境界UTC変換のズレ日本時間23:00の予約がUTCで前日になる
年末年始(12/31 → 1/1)年をまたぐ計算の漏れ週次レポートが12/31〜1/6でなく12/31のみになる

エラー推測のチェックリスト:テスト前に確認すべき10の問い

テスト設計を終えた後、以下の問いかけをチェックリストとして使います。1つでも「テストしていない」と気づいたら、テストケースに追加しましょう。

✅ エラー推測チェックリスト

1数値フィールドに 0・負の数・最大値+1 を入力したらどうなる?
2文字列フィールドに 空文字・スペースのみ・1000文字以上 を入力したらどうなる?
3必須フィールドに NULL・未入力・未選択 のまま送信したらどうなる?
4同じ操作を 連続して2回・高速に 実行したらどうなる?(二重送信)
5日付フィールドに 2月29日・月末・年末年始 を入力したらどうなる?
6文字列に シングルクォート・<script>タグ・SQLコメント を入力したらどうなる?
7リストや検索結果が 0件 のときにページネーションやソートはどうなる?
8ファイルアップロードに 空ファイル・極端に大きいファイル・不正な拡張子 を送ったらどうなる?
9ネットワーク切断・タイムアウト・サーバーエラーが 処理の途中 で起きたらどうなる?
10ブラウザの「戻る」ボタン・URLの直接入力・ブックマークからのアクセスはどうなる?

テスト設計技法シリーズの締め:エラー推測の位置づけ

テスト設計技法7選のシリーズを通じて、各技法の役割と組み合わせ方を整理します。

技法役割タイミング
同値分割入力値の範囲をグループ化まず最初に実施
境界値分析グループの境界を重点テスト同値分割の直後
デシジョンテーブル複数条件の組み合わせを整理業務ロジックに
状態遷移テスト状態と遷移の正しさを検証フロー系システムに
ユースケーステストユーザー操作フロー全体を検証E2Eテスト設計に
ペアワイズテスト多数の組み合わせを効率化環境設定・パラメータ組み合わせに
エラー推測 ←今ここ経験・直感で危ない値を補完すべての技法の最後に追加

🎯 実務ワークフロー

① 同値分割・境界値分析でベースのテストケースを設計
② 業務ロジックにデシジョンテーブルを適用
③ フロー系はユースケーステスト・状態遷移テストで補強
④ パラメータが多い場合はペアワイズで最適化
最後にエラー推測チェックリストを回して「経験的に危ない値」を追加

⚠️ エラー推測でよくある失敗パターン4選

エラー推測を実務で使うときに陥りやすい失敗を紹介します。

① エラー推測だけで体系的な技法を省略する

「経験があるから同値分割とかやらなくていい」という判断は危険です。エラー推測は「補完する技法」であり、単独では網羅性が保証できません。体系的な技法でベースを作り、エラー推測で仕上げる順番を守りましょう。

② チームメンバーの経験に依存しすぎる

「あの先輩がやれば見つかるけど、自分にはわからない」という状態はチームのリスクです。エラー推測のバグパターンをチェックリスト化・ドキュメント化することで、経験が少ないメンバーも活用できるようになります。「個人の勘」を「チームの資産」に変えましょう。

③ セキュリティ系のエラー推測をQAが省略する

「セキュリティはセキュリティ専門家の仕事」と思ってSQLインジェクション・XSSのテストをQAが省略してしまうケースです。専門的なペネトレーションテストと異なり、基本的なパターン(シングルクォート・scriptタグ等)はQAエンジニアが普段のテストに組み込むべきです。

④ 「勘で追加した」テストケースの根拠を残さない

テストケースに「なぜこの値をテストするのか」の根拠コメントを書かないと、後から見たメンバーが「なぜこれが必要なの?」と削除してしまうことがあります。「経験上、空白文字のみの入力でバリデーションを通過したことがあるため」のように根拠を1行残しておきましょう。

FAQ

Q. エラー推測は経験がないメンバーには使えませんか?

使えます。この記事で紹介したバグパターンカタログ・チェックリストを活用することで、経験が少ないメンバーも「よくあるバグが出やすい値」を体系的にテストできます。最初はカタログをそのまま使い、バグを発見するたびにチームのカタログに追加していくことで精度が上がります。

Q. エラー推測とアドホックテストの違いは?

アドホックテストは計画なしに気の向くままにテストを行う手法です。エラー推測は過去の経験・バグパターンに基づいてテストケースを設計する手法です。アドホックテストより再現性・目的意識があり、チェックリスト化することでチームで共有できる点がエラー推測の優位性です。

Q. JSTQBでエラー推測はどの程度出題されますか?

JSTQB Foundation Levelでは「エラー推測の定義・他の技法との使い分け・経験・直感・ヒューリスティクスに基づく技法であること」が問われます。「エラー推測は補完的な技法であり、他の技法と組み合わせて使う」という位置づけを理解しておけば対応できます。

Q. エラー推測のバグパターンカタログはどう育てればいいですか?

「バグが発見されるたびにカタログに追加する」運用が最も効果的です。バグのポストモーテム(振り返り)で「このバグはエラー推測で事前に発見できたか?」を問いかけ、発見できなかった場合はカタログに追加します。GitHubのリポジトリやConfluenceなどのチームWikiで管理すると継続的に育てていけます。

実務では、テスト設計が完了した後にこの記事のチェックリストを1周するワークフローを採用しています。15年以上の経験から「このチェックリストを回したことで毎回1〜2個のバグが追加で発見される」という実感があります。特に「空白文字のみ」「二重送信」「月末日計算」は普遍的なバグパターンとして何度も助けられています。

📋 この記事のまとめ

  • エラー推測は「経験・直感・過去のバグパターン」をテストケースに変換するテスト設計技法
  • 他の6つの技法の最後の仕上げとして使い、体系的な技法では見落としがちな「経験的に危ない値」を補完する
  • バグパターンカタログ・チェックリスト化することで経験が少ないメンバーも活用できる
  • 「個人の勘」を「チームの資産」に変えることがエラー推測の本質的な価値
  • テスト設計技法7選はすべて組み合わせて使うもの。エラー推測はその締めくくり

テスト設計技法7選のシリーズを通じて、QAエンジニアが実務で使う技法の全体像を学びました。同値分割・境界値から始まり、デシジョンテーブル・状態遷移テスト・ユースケーステスト・ペアワイズテスト、そして最後のエラー推測——これらを組み合わせることで、体系的かつ経験的な「強いテスト設計」が完成します。あとは実際のプロジェクトで使いながら、自分だけのバグパターンカタログを育てていきましょう。

タイトルとURLをコピーしました