机に貼った付箋を見ながら、画面のAIと対話してテストの抜け漏れを書き出している開発者

AIにテストケースを洗い出させる|観点の与え方

「テストは書いた。でも、これで足りているのか自信がない」。 動かしてみて正常に通ったときほど、ふと不安になりますよね。本当に怖いのは、自分が思いつきもしなかった場面で落ちることです。思いつけていれば、テストにできているはずなので。

そういうとき、AIはテストケースの洗い出し相手になります。 ただ、「テストケースを出して」とだけ頼むと、正常系がきれいに並んで終わりがちです。一見ちゃんとしているので安心してしまう。でも、欲しかったのはそこではなく、自分が見落としている異常系や境界値のほうだったりします。

この記事は、AIに「ありそうなテスト」を並べさせるのではなく、自分の視野の外にある観点を引き出すための頼み方の話です。テストの正解をもらうのではなく、抜け漏れに気づくための使い方を、一緒に見ていきましょう。

結論:テストケースの洗い出しでは、①対象の仕様と前提を渡す → ②正常系・異常系・境界値・状態の観点を指定して出させる → ③出てきた案に「他には?」ともう一段深掘りする → ④優先順位を自分でつける、の順で頼みます。AIに完成形をもらうのではなく、自分が思いつかなかった場面を炙り出す相手として使うのがコツ。どれを実際に書くかは、自分で決めます。

テストに「これで全部」という終わりはめったにありません。 だからこそ、漏れをゼロにしようとするより、漏れに気づける確率を上げるほうが現実的です。

「テストケースを出して」がうまくいかない理由

漠然と一覧を求める頼み方と、観点を指定して引き出す頼み方を左右に並べ、得られるテストの幅の差を示した比較図

AIは、聞かれたことに「ありそうな答え」を返すのが得意です。 だから「テストケースを出して」と漠然と頼むと、世間でよく書かれる正常系のパターンを中心に、それらしく並べます。それが間違っているわけではありません。ただ、そこには次のような落とし穴があります。

テストでいちばん怖いのは、間違ったテストを書くことより、必要なテストの存在に気づかないことです。書いていないテストは、レビューにも引っかかりません。「無い」ものは、見えないからです。

洗い出しの目的は、テストの一覧を完成させることではありません。 自分が思いつかなかった場面を、表に出すことです。そのために、頼み方を少し変えます。

洗い出しの全体像:4つのステップ

先に流れを出します。この順番で頼むと、AIが「正常系を並べる人」から「抜け漏れを一緒に探す人」に変わります。

ステップ頼み方の狙いひとことで言うと
①仕様・前提を渡す機能固有の事情を反映させる「これは何をする処理か」
②観点を指定して出させる偏りをなくす「正常系だけじゃなく」
③深掘りする視野の外を炙り出す「他には?」
④自分で優先順位をつける現実の工数に落とす「まず書くのはどれか」

ポイントは、②の観点指定です。 ここを省くと、何度頼んでも似たような正常系が返ってきます。逆に、観点さえ渡せば、AIは網羅の手がかりを得て、自分では出てこなかった場面を挙げてくれます。1つずつ見ていきましょう。

ステップ1:仕様と前提を先に渡す

最初にするのは、依頼ではなく対象の共有です。 その関数や機能が「何を受け取って、何をして、何を返すのか」を、AIは知りません。それを渡さないまま頼むと、教科書的だけどその機能には合わないテストになります。

渡すと良いこと:

ただ、関数1個ごとに4項目すべて書こうとすると面倒になり、結局「丸投げ」に戻りがちです。最低ラインは①の入出力を1行渡すこと。「年齢を受け取って料金区分を返す」だけでも、AIは何の処理かを掴めます。ルールや失敗条件は、その機能で効いてくる時だけ足せば十分です。

たとえば「年齢を受け取って料金区分を返す関数。0以上の整数を想定。マイナスや小数は不正値として扱いたい」と渡すだけで、AIは境界(0歳、区分の切り替わる年齢)や不正値(マイナス、小数、文字列)を意識した案を出しやすくなります。 仕様は、テストを狭めるものではなく、その機能固有の落とし穴に近づくための手がかりです。

ステップ2:観点を指定してケースを出させる

仕様を渡したら、「テストケースを出して」ではなく「次の観点ごとに出して」と頼みます。 観点を渡すかどうかで、洗い出せる幅がいちばん変わります。

最低限、渡したい観点はこの4つです。

聞き方の例:

この関数のテストケースを、次の観点ごとに分けて挙げてください。
- 正常系(代表的なパターン)
- 異常系(不正な入力・想定外の状況)
- 境界値(区切りの上・下・ちょうど)
- 状態や順序に依存する場合の組み合わせ

各ケースは「入力 → 期待する結果」の形で。まだ良し悪しの判断はしなくて大丈夫です。

観点を分けて頼むと、AIは「異常系の枠を埋めなきゃ」と動き、正常系だけでは出てこなかった場面を挙げてくれます。 特に境界値は人が見落としやすい所です。「ちょうど上限のとき」「1つ超えたとき」「空のとき」「0件のとき」——この辺りを言葉にして渡すと、洗い出しの密度が上がります。

ステップ3:「他には?」でもう一段深掘りする

最初に出た数個のケースの周りに、深掘りで見つかった異常系や境界値が広がっていく様子を示した概念図

ケースが並んだら、最初の一覧で止めないことが大事です。 AIは一度の回答で全部を出しきるとは限りません。だから、「他には?」ともう一段だけ掘る。これだけで、視野の外にあったケースが出てくることがあります。

聞き方の例:

いま挙がっていない観点で、見落としがちなケースはありますか。
特に、入力が「空」「0件」「同時に複数」「途中で失敗」「異常に大きい/長い」
といった状況を想定して、追加で挙げてください。

人は、一度「だいたい出たな」と思うと、そこで探すのをやめてしまいます。 だから、自分では止めてしまう場所を、AIにもう一歩進ませる。これは「AIに見落としを洗わせる」使い方の、テスト版です。

ただ、深掘りには止め時もあります。延々と「他には?」を続けると、似たケースの言い換えばかりになっていきます。1〜2回聞いて新しいケースが目に見えて減ったら、そこで打ち切ってよい。無限に掘る作業ではありません。

ここで出てきたケースを、全部書く必要はありません。 「これは今回は起きない」「ここまでは見なくていい」と、自分で判断して取捨選択する。このとき、言語・フレームワーク・バリデーション層で機械的に弾けるもの(型が違えばそもそも渡らない入力など)は、観点として残さず最初から外してかまいません。残すのは、自分のコードで判断が要るケースです。大事なのは、書かないと決めたことと、思いつかなかったことを、区別できる状態にすることです。

ステップ4:最後は自分で優先順位をつける

そして、いちばん大事なステップです。 ケースが出そろっても、全部を今すぐ書くのは現実的ではありません。だから、どれから書くかは自分で決めます。

優先順位の付け方の目安:

AIは、その機能がシステム全体でどれだけ重要か、過去にどこで事故ったか、いまどれだけ時間が取れるかを知りません。だから「まずどれを書くか」は、それらを知っているあなたにしか決められません。 AIの役割は、選択肢を広げ、抜けを炙り出すことまで。そこから先の「で、今日はどこまで書くか」は、人の仕事です。

これは品質の話でもあります。テストは、数を増やすこと自体が目的ではありません。意味のあるテストに、限られた時間を配る。その判断が、現場の品質を支えます。AIで洗い出したカバレッジの広さと、実際に効くテストの質は、別物だからです。

ありがちな落とし穴と、その回避

洗い出しでつまずきやすい所を、先に潰しておきます。

落とし穴のほとんどは、「AIに完成形をもらおう」とした瞬間に生まれます。 「AIと一緒に抜けを探す」に意識を変えるだけで、多くは避けられます。

明日からやること(小さく始める3つ)

いきなり全部やろうとせず、まずこの3つから。

  1. 次にテストを書くとき、対象の仕様を1行書いてから頼む:まずは入力・出力だけで十分。この1行があるだけでケースの質が変わります。
  2. 「テストケースを出して」ではなく「観点ごとに出して」と頼む:正常系・異常系・境界値・状態。偏りが減ります。
  3. 最初の一覧に「他には?」を一度だけ足す:見落としていた場面が出てきます。

この3つだけでも、「これで足りているのか」という夜の不安が、少し軽くなります。

コピーして使う「テスト洗い出しテンプレ」

新しい機能のテストを考えるとき、上から順に頼んでください。一度に全部でなく、迷っている所から使えば十分です。

# テストケースの洗い出し

## ① 仕様・前提(最低限、最初の1行だけでも渡す)
- 何をする処理か(入力 → 何をする → 出力):  ← ここだけでも効果あり
- 入力の種類と範囲(型・必須/任意・想定値の幅):  ← 以下は必要な時だけ
- 満たすべきルール / 禁止したい状態:
- 失敗させたい条件(どんな入力はエラーにすべきか):

## ② 観点ごとに出させる
「この処理のテストケースを、次の観点ごとに分けて。
 各ケースは『入力 → 期待する結果』の形で。
 - 正常系(代表的なパターン)
 - 異常系(不正な入力・想定外の状況)
 - 境界値(区切りの上・下・ちょうど・空・0件)
 - 状態や順序に依存する組み合わせ」

## ③ 深掘り
「いま挙がっていない観点で、見落としがちなケースは?
 特に『空』『0件』『同時に複数』『途中で失敗』『異常に大きい/長い』を想定して。」

## ④ 自分で優先順位
- まず書くケース(影響が大きい / 間違えやすい / よく通る):
- 今回は書かないと決めたケース(理由つき):

洗い出し前後のチェックリスト

頼む前と、書く前に、さっと確認します。全部に○が要るわけではなく、関係する所だけで十分です。

頼む前

ケースを検討するとき

書く前

最後に

テストの抜け漏れを、ひとりで全部背負うのは、しんどいものです。 「これで足りているか」に終わりはないし、レビューしてくれる人がいつもいるとは限りません。その状況は、簡単には変わらないかもしれません。

でも、完成形を写すためでなく、抜けを一緒に探す相手としてAIを使えば、ひとりで見ていた範囲に、もうひとつの視点が加わります。

観点を整理して洗い出したテストケースを見渡し、抜けに気づけた手応えで次の作業へ進もうとしている開発者

4つ全部でなくても、今日ひとつ「他にはどんな場面がある?」と聞けたなら、それはもう、見落としを減らす一歩です。 洗い出したケースをコードに落としたら、書いたものを最後にもう一度見る型としてAI生成コードのレビュー・検証チェックリストも合わせてどうぞ。考える前に渡す前提はAIにコードを書かせる前に渡す前提と制約に。洗い出す・書く・見る。この3つがそろうと、AIとのテストはずいぶん落ち着きます。

関連用語