私は普段、QAエンジニアとして働いています。もともとSEとして働いていたので、時にはデバッグをしたり軽微な修正を担当することもありますが、基本的にはテストが主な作業となっています。でも、
「テストケース作るのもだるいし、テストするのもだるい・・・・!」
エンジニアの方なら一度はテストケースを作ったことがあるかと思うのですが、単体テスト仕様書って、プログラムを日本語訳するような作業で、正直つまらないじゃないですか。。。こういう単調な作業こそChatGPTの出番なんじゃないかと思い、今回の検証に至りました。
なお、具体的なテストケース項目例については以下の記事で紹介しています。テスト項目書作成時にぜひご覧ください。
単体テストってどんなテスト?
単体テストは、「プログラム単位で正常に動作するか」を確認することを目的としています。
例えば、「メールアドレスを入力する入力フォームに、全角文字を入れたらエラーになること」が単体テストの項目となります。プログラムに置き換えると、入力フォームチェックの関数に対して異常値をパラメータとして渡したときに、正しくフォーマットチェックされるかどうか、ということになります。
テストケースとしては、すべての処理について1項目ずつ確認していく形となります。
上記のように、関数の条件分岐を全てテストするので、網羅的に確認することができます。単体テストの段階でほとんどの不具合が見つかると言っても過言ではありません。
今回扱うログインフォームの概要
今回、ChatGPTに単体テストを生成してもらう対象となるサンプルは以下のログインフォームとします。
項目 | 説明 |
---|---|
メールアドレス | ・半角英数字のみ ・最大255文字まで |
パスワード | ・半角英数字のみ ・最大12文字まで ・「●●●」のようにパスワードをマスキングする |
ログインボタン | ボタン |
上記ログインフォームで確認したいことを洗い出してみます。ここでの観点は以下の3つとします。
- 正常系の確認(正しいIDまたはメールアドレス・パスワードでログインできること)
- 異常値の確認(異常値を入力した際に適切なエラーが表示され、ログインできないこと)
- 境界値の確認(文字数制限の境界値チェック)
この観点で、ログインフォームの単体テストをChatGPTに作ってもらいます。
ChatGPTでテストケース作成① 仕様書から作成する方法
ChatGPTには、以下のように質問します。だいぶ長いですが、ChatGPTではこの程度であればひとつの質問として投げることができます。
仕様、エラーメッセージを記載し、どのような観点でテストしたいかを記載のうえ、「テストケースと期待結果の組み合わせを書いて」と指示します。
ChatGPTの回答は以下です。
指示したとおり、正常系・異常系・境界値に関するテスト項目とその期待結果を作成してくれました。
項目に落とし込めていない場合は、「○◯について具体的に書いて」
テストケースに「メールアドレスの形式が不正な場合」とそのまま記載しても良いですが、テスト担当者が新人さんやパートさんなど、テストに不慣れな方の場合には「不正な形式ってなに??」とテストが止まってしまう可能性があります。
なので、ChatGPTに「不正な形式」の具体例を出してもらいます。
メールアドレスの不正な形式の例を出してもらったら、これをそのままテストケースに反映させればOKです。
ユーザーの見落としを補完してくれる
すごいなと思ったのは、抜け・漏れを補完してテストケースを作ってくれた点です。
先ほどのプロンプト(ChatGPTへの指示文)には、メールアドレスとパスワードが一致しない場合のエラーメッセージを書き忘れていました。これに対して、ChatGPTは異常値のテスト項目としてしっかり明記してくれました。
ChatGPTでテストケース作成② ソースコードから作成する方法
ChatGPTでは、ソースコードからテストケースを生成することも可能です。以下は、時刻に応じて出力するメッセージが変わる関数です。
このソースコードに対するテスト項目として、if文の分岐を網羅するテストを返してくれました。また、時刻データをテスト用に作る方法も提案してくれています。
今回は、プロンプトにテスト観点を記載しませんでしたので、if文を網羅するテストのみになっています。やっぱり境界値の確認もしておきたい!と言う場合には、追加で質問します。
if (now > 10 && now < 17)
if文の条件である、「現在時刻が10:01から16:59まで」を満たしているかどうか、境界値のテストケースを全て洗い出すことができています。
ChatGPTでテストケース作成③ 仕様書の内容をレビューしてもらう
ChatGPTにテスト仕様書のレビューをさせてみます。
テストケースと、対象のプログラムを載せました。すると、ChatGPTからは以下のような回答が得られました。
テストケース自体が正しかったとしても、より網羅性を高めるために追加でテストケースを記載してくれています。このように、ChatGPTをテスト項目書のレビューに使うこともできます。
ChatGPTでテストケースを作成するときのポイント
ChatGPTでテストケースを作成する際のポイントは以下になります。
テスト観点をはっきりさせておく
テストをする上で、どのような観点で実施するかを明確にする必要があります。
ログインフォームひとつをとってみても、画面崩れやレイアウトを確認するのか、各入力項目のフォームチェックがきちんと出るかを確認するのか、目的によってテストケースは大きく異なります。単体テストの場合はプログラムが正しく動くかどうかを確認することが目的となりますので、以下の中からご自身がテストしたい観点のものを選んでChatGPTに質問すると良いかと思います。
観点 | テスト内容 |
---|---|
正常系 | 仕様通りに動くこと |
異常系 | フォーマット、文字数などのチェック |
境界値分析 | 「10文字以内」なら9文字・10文字・11文字それぞれ確認する |
エラー推測 | 起こりそうなエラーを経験から推測してテストする |
ペアワイズ法 | 組み合わせが沢山あるときに、組み合わせをいくつかに絞ってテストする |
応答内容が正しいか確認する
ChatGPTで単体テストを作成する際には、応答文の内容が本当に正しいかを確認することが大切です。ChatGPTはネット上の情報をもとに学習しているため、間違った方法をインプットしていることもあります。また、ChatGPTは2021年までの情報しか学習していないため、最新の情報を答えることはできません。
これらをふまえて、ChatGPTの応答を鵜呑みにせず自分でも考えながらうまく活用していきましょう。より精度の高い応答を得るためには、次項で説明する「プロンプトエンジニアリング」のスキルが鍵を握ります。
「プロンプトエンジニアリング」のスキルが重要となる
ChatGPTにテストケースを生成してもらう際には、プロンプトエンジニアリングのスキルも重要となります。「プロンプトエンジニアリング」とは、ChatGPTがベストな回答をできるよう、ユーザー側で質問を考えることをいいます。単体テスト生成に限らず、ChatGPTではこのスキルがとても重要となります。詳しくは以下の記事をご参照ください。
まとめ
今回は、ChatGPTで単体テストを作成する方法について解説しました。仕様とテスト観点をプロンプト(指示文)に記載するだけでテストケースを作成してくれるのはとても便利です。また、ソースコードを投げてテストを作ってもらえるのも作業効率が上がりそうです。
もう少しプロンプトをいい感じにすれば、十分実用的なテスト仕様書生成マシーンになってくれるのではないかと思います。テスト仕様書の作成にぜひとも活用したいので、仕事しながら色々と試してみます。仕様書の内容を読ませてテストケースを作れたらベストですが、セキュリティ的に問題ありなので、やるとしたらAPIでツールを作るかんじになりますかね・・・。
なお、今回のサンプルで動かしたChatGPTのモデルは「GPT-4」となります。ChatGPT Plusという有料プランに加入していないと使えないモデルですが、GPT-3.5より格段に性能が上がっていますので気になる方は以下の記事をチェックしてみてください。無料で使いたい!という方は、Bing AIからであればGPT-4を搭載したチャットボットを利用できます。
コメント