COLUMN
コラム
Column 51

生成AIのソフトウェアテスト業務への活用

近年、人工知能(AI)はその技術が急激に発展して、一般の生活の中に浸透しつつあります。そのAIの中でも「生成AI」と呼ばれる分野が特に注目を集めています。
生成AIは機械学習の技術を活用して学習データから新しいコンテンツを生成する技術で、文章、楽曲、画像、動画などの様々なコンテンツを生成することができます。生成AIで生成できるコンテンツの例は多岐に渡り、ビジネスや業務への利用が期待され、様々な活用方法が模索されています。
本記事では生成AIをソフトウェアテスト業務に活用する利点などについて考えたいと思います。

1.生成AIとは

生成AIとは人工知能の一種です。ディープラーニングと呼ばれる機械学習の手法によって大量のデータからパターンを学習し、それを基に新しいコンテンツを生成することができます。
生成AIにはいくつか種類がありますが、「テキスト生成AI」「画像生成AI」「動画生成AI」「音声生成AI」が注目を集めています。

テキスト生成AIは、ユーザーがテキストを入力するとAIが入力された内容を解析し、回答となる文章を生成してくれるAIですが、2022年に「ChatGPT」がリリースされて以降、様々な分野で利用が急増しています。
ChatGPTはアメリカのOpenAI社が開発したテキスト生成AIで、WebフォームにAIへの要望や質問などを記入すると、AIが入力された内容を解析し、要望や質問に対する文章を生成してくれます。
ビジネスの様々な場面で活用されており、一般的な活用事例としてマニュアルやFAQ作成、文章の要約、メールの文章作成、翻訳などが挙げられます。また、ソフトウェア開発分野でもテキスト生成AIでソースコードの生成、コードレビュー、単体テストの生成などの事例が散見されています。

今回はテキスト生成AIをソフトウェアテスト業務に活用できるのかを確認するために、ChatGPTでテストケースを生成できるのか試してみたいと思います。

2.ChatGPTによるテストケース生成

今回はサンプルとして、単純な「Webアプリケーションのログイン画面」のテストケースを考えます。
Webアプリケーションのログイン画面の仕様は以下の通りです。


上記機能の機能テストのテストケースを、ChatGPTで生成できるかを試していきます。

①1回目の質問と回答

まず初めに、テストする機能の仕様と、生成してほしい内容をChatGPTに指示します。

生成AIに特定のタスクを実行するように要求するテキストを「プロンプト」と呼びます。また、生成AIからより望ましい結果を得るために適切なプロンプトを設計する技術を「プロンプトエンジニアリング」と呼びます。

ChatGPTに指示する際、プロンプトに具体的な条件を盛り込むと求める結果を得やすいため、今回は画面仕様やアウトプットの形式などを具体的に指定して指示を記述してみます。

プロンプト

#命令:
あなたはWebアプリケーションのQAエンジニアです。
次の機能のテストケースを作成してください。

#機能:
Webアプリケーションのログイン画面

#仕様:
-ログイン画面には「ログインID入力ボックス」「パスワード入力ボックス」「ログインボタン」が存在する。
-ログインID入力ボックスは半角英数字のみ入力できる。
-パスワード入力ボックスは半角英数字のみ入力できる。
-ログインボタンはログインIDとパスワードの両方が入力された場合に活性化する。
-ログインボタンを押下時にログインIDとパスワードが正しい場合は、ログインしてメイン画面に遷移する。
-ログインボタンを押下時にログインIDかパスワードのいずれかが間違っている場合は、ログインせずエラーダイアログを表示する。

#出力フォーマット:
-テーブル形式で出力してください。

#テスト観点:
-ログイン画面が仕様に従っていることを確認する。

アウトプット(以下、ChatGPTによる生成物)

テストケース番号
テスト観点
テスト手順
期待結果
TC001
ログインID入力ボックスに半角英数字のみ入力可能かを確認する 1.ログインID入力ボックスに「test123」を入力する。
2.ログインID入力ボックスに「テストID」を入力する。
1.入力可能。
2.入力不可。
TC002
パスワード入力ボックスに半角英数字のみ入力可能かを確認する 1.パスワード入力ボックスに「pass456」を入力する。
2.パスワード入力ボックスに「パスワード」を入力する。
1.入力可能。
2.入力不可。
TC003
ログインボタンがログインIDとパスワードの両方が入力された場合に活性化しているかを確認する 1.ログインID入力ボックスに「testuser」、パスワード入力ボックスに「password123」を入力する。
2.ログインID入力ボックスに「testuser」のみを入力する。
3.パスワード入力ボックスに「password123」のみを入力する。
1.ログインボタンが活性化している。
2.ログインボタンが非活性化している。
3.ログインボタンが非活性化している。
TC004
ログインボタンを押下時にログインIDとパスワードが正しい場合にログインしてメイン画面に遷移するかを確認する 1.ログインID入力ボックスに有効なIDを入力し、パスワード入力ボックスに有効なパスワードを入力する。
2.ログインボタンを押下する。
1.メイン画面に遷移する。
TC005
ログインボタンを押下時にログインIDかパスワードのいずれかが間違っている場合にログインせずエラーダイアログを表示するかを確認する 1.ログインID入力ボックスに無効なIDを入力し、パスワード入力ボックスに有効なパスワードを入力する。
2.ログインID入力ボックスに有効なIDを入力し、パスワード入力ボックスに無効なパスワードを入力する。
3.ログインボタンを押下する。
1.エラーダイアログが表示される。
2.エラーダイアログが表示される。
3.エラーダイアログが表示される。

ChatGPTでテストケースを生成することができました。
この生成物には「テスト観点」「テスト手順」「期待結果」といった項目があり、テストケースに必要なものは最低限そろっているように見えます。

また、生成されたテストケースをそれぞれ確認すると、
・ログインIDやパスワードの入力可能な文字種
・ログインボタンの活性/非活性
・ログイン成否
といった内容で、入力プロンプトで指示した仕様に対して、必要なテストケースが一通り洗い出せているように見えます。

しかしながら、生成物を詳細に見ていくとテスト手順や期待結果で正確性に欠ける記述が見られます。
例えばTC005は1つのテスト手順になっていますが、「存在するユーザーだがパスワードが間違っている」場合と「存在しないユーザーを入力する」場合の2ケースに分けたほうが適切だと考えられます。

このことから「生成AIで生成された内容は正しいとは限らない」ということが確認できます。
生成AI利用時は生成された内容を人間が精査し、必要に応じて修正を加える必要があることがわかります。

②2回目の質問と回答

1回目の質問で、仕様に対してテストケースを一通り洗い出すことができたように思います。
しかしながら、見落としているテスト観点があるかもしれません。そこで、不足点などがないかChatGPTに続けて質問してみたいと思います。

インプット

テストケースを作成するために不足していると考えられる情報があれば教えてください。

アウトプット(以下、ChatGPTによる生成物)

テストケースを作成する際に考慮すべきいくつかの要素があります。以下は、可能な追加情報です:

エラーメッセージの仕様: エラーダイアログが表示される場合、その内容や表記に関する仕様があるかどうかを確認します。たとえば、ログインIDが間違っている場合とパスワードが間違っている場合で、異なるエラーメッセージが表示されるかどうかを確認する必要があります。

セキュリティ要件: パスワードの最小文字数、特殊文字の使用、または他のセキュリティ要件がある場合、これらもテストケースに含める必要があります。

ユーザー体験の要件: 画面上のフィードバックや挙動がユーザー体験に適合するかどうかも重要です。たとえば、入力ボックスにフォーカスが移動するかどうか、ユーザーがログインボタンを押した後の反応などです。

ユーザー認証の方法: ログインが成功した場合、セッション管理やユーザー認証の方法に関するテストも重要です。たとえば、正しいユーザー名とパスワードでログインした後に、セッションが適切に管理されているかどうかを確認する必要があります。

異常系のテストケース: 通常のフローだけでなく、不正な入力やエラー状態に対するテストケースも重要です。たとえば、SQLインジェクションやクロスサイトスクリプティング(XSS)などのセキュリティ上の脆弱性をテストする必要があります。

これらの情報を考慮することで、より包括的なテストケースを作成し、アプリケーションの品質とセキュリティを向上させることができます。


セキュリティ要件などの非機能テストの観点も出力されましたが、「エラーメッセージの確認」や「SQLインジェクションやクロスサイトスクリプティングの確認」といった観点も出力されました。

やはり生成された内容を精査する必要がありますが、テストケース生成時に観点の見落としがないかチェックするためにChatGPTを活用するような使い方もあるように考えられます。
また今回はテストケースの生成でChatGPTを利用しましたが、他者の作ったテストケースをレビューする際にレビュアーが観点漏れをチェックするためにChatGPTを使うことも考えられます。

③3回目の質問と回答

最後にテストデータをChatGPTで生成していきます。
今回はログインIDとパスワードの組み合わせを生成してみたいと思います。

プロンプト

#命令:
-ログインIDとパスワードの組み合わせを5通り出力してください。
#仕様:
-ログインIDは半角英数字を組み合わせて8文字
-パスワードは半角英数字を無作為に組み合わせて16文字

アウトプット(以下、ChatGPTによる生成物)

1.ログインID: User1234, パスワード: Pass1234Random5678
2.ログインID: Login5678, パスワード: Secure7890Password1234
3.ログインID: Example12, パスワード: Random123456Pass7890
4.ログインID: Test7890, パスワード: Password1234Random56
5.ログインID: Access3456, パスワード: Random7890Pass1234


テストデータを簡単に生成できました。
IDやパスワードの文字数がプロンプトの指示とは異なっていたり、無作為な組み合わせになっていなかったりするため、内容を精査して必要に応じて修正を加える必要がありますが、使い方次第では効率的にテストデータを生成できることがわかりました。

3.まとめ

ここまでのChatGPTによるテストケース生成を通じて、テキスト生成AIをソフトウェアテストへ活用するメリットや注意点をいくつか確認できました。

生成AIをソフトウェアテスト業務に活用することのメリットとして、以下が考えられます。
・仕様を基にテストケースを一通り生成してくれるため、テスト観点の洗い出しを効率的に行える。
・テスト観点の見落としや漏れを防ぐことで、品質向上が期待できる。
・テストデータ生成を効率化することが期待できる。

一方で、生成AIのアウトプットには間違いが含まれることもあるため、「アウトプットに対する精査が必要」という注意点もあります。

現時点ではテスト設計の作業を生成AIに任せることは困難ですが、生成AIを補助ツールとして活用することで、テスト設計の効率化や品質向上できる可能性を感じました。

現在、様々な場面で生成AIの活用が進んでおり、今後ソフトウェア開発の分野でも生成AIの活用は進んでいくと予想されます。ソフトウェアテストにおいても、日々進歩するAI技術をキャッチアップすることが重要になってくるのではないでしょうか。

4. 備考

最後に、一般的に言われている生成AIを利用するうえでの注意点を記載します。

・生成物に間違いが含まれることがある
 -生成AIはあくまでも学習データに基づいてそれらしいものを生成しているにすぎないため、
  生成されたものを必ず人間がチェックする必要があります。
・個人情報や機密情報を生成AIに入力しない
 -生成AIはユーザーが入力したデータを学習データとして利用することがあります。
  そのため生成AIを利用する他のユーザーに情報が流出する可能性が指摘されています。
・既存の権利を侵害する可能性がある
 -生成AIを利用して出力された生成物が、既存の著作物と同一・類似している場合は、当該生成物を利用
  (複製や配信等)する行為が著作権侵害に該当する可能性があります。

ページトップへ戻る