先日、こんな記事を見つけた
ふむふむ
色々考えました・・・・
僕の結論・・・
複数のAIにきいたらいいんじゃね??
という結論です
じゃあ、どうしようか?
1:適当なプログラムつくって
2:複数のAIにテストさせて
3:それぞれ比較
したらどう??(強引だなあ・・・・)
てなわけで、ChatGPT、Claude、Geminiに同じプログラムをテストしました
https://github.com/mitsuosa0903/Qiita-github
こちらに今回のテストのためのプログラムのせました
で、テスト方法はこっち
(少し長いですが、再現性を持たせるため、ベタッとやります。見にくいのはすんません)
<引用ここから>
以下の枠内のテキストをそのままコピーして、別AIに送信します:
以下の【仕様書】に基づき、予約管理システムの単体テスト (TypeScript + Vitest)をゼロから作成してください。
【仕様書】 - 予約データ: { id, userName, startTime (Date), endTime (Date), numberOfPeople, status ('CONFIRMED'| 'CANCELLED') }
- 半開区間 [startTime, endTime) による重複判定(startA < endB かつ startB < endA で重複)
-
- 定員判定: 指定時間帯の最大同時滞在人数 > maxCapacity でエラー
-
- 要件1: 予約登録 (CONFIRMED)
-
- 要件2: 予約一覧取得 (フィルタ・ソート)
-
- 要件3: 予約キャンセル (CANCELLED)
-
- 要件4: 同一時間帯の重複予約禁止 (OverlappingReservationError)
-
- 要件5: 定員超過禁止 (ExceedsCapacityError)
-
- 要件6: 過去日時への予約禁止 (PastReservationError) ※開始時刻 < 現在時刻はエラー
-
- 要件7: 開始時刻 == 終了時刻 は予約不可 (InvalidTimeRangeError)
-
- 要件8: 終了時刻 < 開始時刻 は予約不可 (InvalidTimeRangeError)
-
- 要件9: 存在しない予約のキャンセルはエラー (ReservationNotFoundError)
-
- 要件10: 二重キャンセル不可 (ReservationAlreadyCancelledError) 【出力形式】 tests/external_ai.test.ts として保存できる Vitest のテストコード(describe, it, expect)のみを出力してください
<引用ここまで>
で、ChatGPT、Claude、Geminiにテストのファイルを書いてもらいました。
<重要 ここから>
なお、3つのAIには実装コードを見せず、同じ仕様書だけを渡しています。各AIが生成したテストコードや、他のAIのテスト結果も共有していません。
<ここまで>
つまり
仕様書
│
▼
┌──────────┐
│ 1つの実装 │
└──────────┘
│ │ │
┌────────────┘ │ └────────────┐
▼ ▼ ▼
ChatGPT Claude Gemini
独立テスト 独立テスト 独立テスト
│ │ │
▼ ▼ ▼
29 tests 41 tests 28 tests
│ │ │
└──────────────┼──────────────┘
▼
98 tests
▼
98 PASS
という感じです
ちなみに、今回の予約管理システムの実装と、生成されたテストコードの配置・実行にはAntigravity CLIを使いました。
【再現手順】別AIにテストを作らせて検証するステップ
「実装したAIとは別のAIにテストを作らせる」手順は非常にシンプルです。
Step 1: 仕様書を用意する
実装AIに作成させた仕様書(SPECIFICATION.md)、または以下の要件プロンプトを用意します。
Step 2: 外部AIにテストコードを出力させる
ChatGPT、Claude、GeminiなどのWeb画面またはCLIに、以下のプロンプトをそのまま貼り付けます。
【プロンプト】
以下の【仕様書】に基づき、予約管理システムの単体テスト(TypeScript + Vitest)をゼロから作成してください。
既存の実装コードは見ずに、仕様書のみをOracle(正しさの基準)として扱ってください。【仕様書】
- 予約データ:
{ id, userName, startTime (Date), endTime (Date), numberOfPeople, status ('CONFIRMED'|'CANCELLED') }- 半開区間
[startTime, endTime)による重複判定(startA < endBかつstartB < endAで重複)- 定員判定: 指定時間帯の最大同時滞在人数 > maxCapacity でエラー
- 要件1〜10(登録、一覧、キャンセル、重複禁止、定員超過禁止、過去日時禁止、開始=終了不可、終了<開始不可、未存在IDキャンセル不可、二重キャンセル不可)
【出力形式】
tests/external_ai.test.tsとしてそのまま保存できる Vitest コード(describe, it, expect)のみを出力してください。
境界値(隣接時間、現在時刻ジャスト等)や意図的な破壊テストを含めてください。
Step 3: ファイルを配置してテストを実行する
出力されたコードを保存し、ターミナルで実行します。
1. 出力されたテストコードを配置
保存先: tests/external_ai.test.ts
2. テストを実行
npx vitest run tests/external_ai.test.ts
<プロンプトはここまで>
続きは次回
(少しねたバレしているな・・・)