ChatGPTでテスト設計してみた

## はじめに
AIをソフトウェアテストに活用したい！
ということで現場での人員不足にも悩まされがちな、テスト設計業務に活かす方法を試行錯誤した備忘録です。

利用ソフト：ChatGPT 3.5

## やってみた
まずはテスト対象の機能と求めるアウトプットの詳細を伝えてみます。
仕様は適当です。
どんな立場か、コンテキスト、具体的な制約を伝えると求めるアウトプットを得やすいです。

```
あなたはゲームソフトのテスト担当者です
以下の新規機能のテスト分析、テスト設計を行い、テスト観点とテストケースを作成してください
テストケースにはテスト対象、前提条件、手順、期待値を含めてください

テスト対象機能:
スタートダッシュログインボーナス機能

要件:
- ゲームを開始してから2週間限定のログインボーナスを提供する

仕様:
- ゲーム開始して2週間以内のユーザーが対象
- 1日1回ログインすると報酬を受け取れる
- ログインボーナス期間は2週間
- ユーザーは期間内に10回ログインすると全ての報酬を受け取れる
- ゲーム内では午前4：00を1日の切り替わりとする

テスト目的:
ログインボーナス機能が正しく動作し、要件と仕様に従っていることを確認する
```
#### 出力
```
テスト観点とテストケース:

テスト観点 1: ログインボーナス提供の正確な期間と対象ユーザー

テストケース 1:
テスト対象: スタートダッシュログインボーナス機能
前提条件: ゲームを開始してから2週間以内のユーザーがログイン
手順:ゲーム開始から2週間以内のユーザーがログイン
期待値: ログインボーナスが正しく提供される

テスト観点 2: デイリーログイン報酬の受け取り

テストケース 2:
テスト対象: スタートダッシュログインボーナス機能
前提条件: ゲームを開始してから2週間以内のユーザーがログイン
手順:ユーザーが1日に1回ログイン
期待値: デイリーログイン報酬が正しく提供される

テスト観点 3: ログインボーナス期間内での全報酬受け取り

テストケース 3:
テスト対象: スタートダッシュログインボーナス機能
前提条件: ゲームを開始してから2週間以内のユーザーがログインし、期間内に10回ログイン
手順:ユーザーが期間内に10回ログイン
期待値: ログインボーナス期間内での全ての報酬が正しく提供される
テスト観点 4: ログイン切り替え時の報酬提供

テストケース 4:
テスト対象: スタートダッシュログインボーナス機能
前提条件: ゲームを開始してから2週間以内のユーザーがログイン
手順:ゲーム内のログイン切り替え時（午前4:00）にユーザーがログイン
期待値: ログインボーナスが正確なタイミングで提供される
```

微妙です。
期間終了後の条件が考慮されていなかったり、境界値のテストもできていません。
リストだと見づらいので表にもしたいです。
続けてこのようなプロンプトを入力してみましょう。
```
境界値テスト、その他に注意すべき観点を追加してください
また、テストケースを表形式にしてください
```

そうすると表形式のテストケースを出力してくれました。
なんだか冗長な気もしますが良い感じです。
#### 出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541170/2c3d85bb-0c5e-9799-095c-46913175a048.png)

期間終了後の挙動もテストしていますし、負荷検証など非機能観点も出てきました。
境界値テストは正確ではないですが、境界値をテストしたいという意志は感じられますね。

ただテストとしてはまだ不十分に感じられます。そもそも仕様が不足しているのではないでしょうか。
そこで仕様に不足がないか聞いてみました。
```
テストに必要だが、仕様に不足していると考えられる情報があれば教えてください
```

#### 出力
```
テストに必要だが、仕様に不足していると考えられる情報がいくつかあります。以下にそれらの情報を挙げます：

ログインボーナス報酬の具体的な内容:
仕様にはログインボーナス報酬が提供されることが記載されていますが、具体的な報酬の内容が不足しています。テストケースをより具体的に構築するために、報酬がどのようなアイテムや特典であるかについての情報が必要です。

ゲーム内でのログインボーナスの表示場所:
ユーザーがログインボーナスを確認できる場所についての情報が不足しています。ログインボーナスが正しく提供されたかどうかを確認するためには、ユーザーが報酬を確認できるUIや画面についての情報が必要です。

期間外にログインした場合の挙動:
仕様には期間内のログインに焦点が当てられていますが、期間外にログインした場合の挙動についての情報が不足しています。ユーザーが期間外にログインした場合、報酬は提供されないのか、それとも別の挙動が期待されるのかについての情報が必要です。

ログインボーナスのトリガーイベント:
ログインボーナスが正しく提供されるためには、ログインがどのようなトリガーイベントとして認識されるかについての情報が不足しています。例えば、ユーザーがブラウザを閉じて再度開いた場合などにログインが認識されるかどうかについての情報が必要です。

これらの情報が提供されることで、より詳細で効果的なテストケースを設計し、ログインボーナス機能が全体的に正しく動作するかどうかをより確実に検証できるでしょう。
```

この質問は実務でもかなり役に立ちそうですね！
テスト設計時に見落としがちな、仕様やテスト観点の不足を補う助けになりそうです。
また、自分で仕様書を作成する企画者の方がセルフチェックに使っても良さそうです。

追加の仕様についてもテストケースを作成してもらいましょう。
```
不足していた仕様の情報です
これらの仕様に関してもテストケースを追加してください

ログインボーナス報酬の具体的な内容:
1〜9回目：100ジェム
10回目：600ジェム

ゲーム内でのログインボーナスの表示場所:
ログインボーナス画面に遷移することでログインボーナスが表示される

期間外にログインした場合の挙動:
期間外にログインした場合はそれ以降の報酬は受け取れない

ログインボーナスのトリガーイベント:
その日初めてタイトルからログインすることで、ログインボーナスが発生する
```

ところが、このプロンプトを入れてもテストケースの内容はほとんど変化しませんでした。
改めて仕様をまとめて入力しないといけないのかもしれません。

## まとめ
ChatGPTを使ってテスト設計を行う利点と注意点

#### 利点
不足している仕様や観点などを洗い出していくことに活用できそうです。
テストの漏れを防いだり、テスト設計のヒントを提供してくれるでしょう。

また、仕様を渡せば具体的なテストケースをパッと作成してくれるので、テスト設計の初期段階の作業を効率的に行うことができそうです。

#### 注意点
不正確な手順や期待値、冗長なテストケースが作成されることがあるため、最終的には有識者によるレビューが必要でしょう。
また、ドメイン知識が不足していたり、機密情報を入力できないといった点も実務面では注意が必要です。

全ての作業を代替するのはまだ難しそうなので、あくまで、テスト設計作業を手助けするツールとして利用するのが良いでしょう。