DMMのQAエンジニアが挑戦!生成AIを活用した「テストケース生成の半自動化」

サムネイル

こんにちは!DMM.comでQAエンジニアをしている福永です。

普段の業務としては、いくつかのプロダクトの品質保証をリードしており、特にテスト自動化は関わっている全てのプロダクトで推進しています。

さて、QA業務の中でも特に時間と労力を要するのが 「テストケース作成」

皆さんも一度は頭を悩ませたことがあるのではないでしょうか?

今回は、このテストケース作成の負担を軽減すべく、私が取り組んでいる 生成AIを活用した「テストケース生成の半自動化」 について、その具体的な手順や実際に使ってみた評価、そして今後の展望をご紹介したいと思います。

テストケース作成の悩み:なぜこんなに大変なのか?

テストケース作成と一言で言っても、その道のりは険しいものです。

  • 無限に湧き出るテストケース
    • 少し仕様が変わるだけで、考慮すべきケースは雪だるま式に増えていきます
  • 終わらない仕様のキャッチアップ
    • 詳細な仕様を理解し、それをテストケースに落とし込む作業は、まさに時間との戦いです
  • ドキュメント不足という現実
    • 頼みの綱であるドキュメントが不十分な場合も多く、実際に操作してみないと分からないことも少なくありません

これらの要因が絡み合い 「思ったより時間がかかる…」 というのが、テストケース作成における共通の悩みではないでしょうか。

救世主現る?生成AIでテストケース作成の負担を減らしたい!

この終わりの見えない作業を少しでも楽にしたい!

そんな思いから、生成AIの力を借りてテストケース作成を半自動化する取り組みを始めました。

具体的には、GoogleのGeminiとNotebookLMというツールを活用しています。

具体的な手順:AIを絡めたテストケースの自動生成

では、実際にどのように進めているのか、具体的なステップをご紹介します。

以下が手順全体を表現したフロー図です。

flow

1. 【情報収集】スクリーンショットから機能概要を生成 (by Gemini)

まず、テスト対象画面のスクリーンショットをGeminiにインプットします。

Geminiに対して、スクリーンショットから読み取れる機能概要をまとめてもらうよう指示を出します。

この際、「資料から読み取れない機能は出力しない」「UI/UXの観点でページを構成するパーツや機能も出力する」といった制約を加えるのがポイントです。

- 依頼: 添付した資料がXXです。こちらから読み取れる機能概要をまとめてください
- 制約1:添付した資料から読み取れない機能は出力しないようにしてください
- 制約2:UI、UXの観点で、ページ構成するようなパーツや機能についても出力してください

2. 【知識集約】関連ドキュメントをNotebookLMに読み込ませる

次に出力された機能概要をGoogleドキュメントにコピー&ペーストし、これをNotebookLMに読み込ませます。

その他にも、チーム内で作成した「テスト項目設計用の生成ルール」や「DMM標準のテスト観点リスト」、関連する仕様書など、参考になる資料があればどんどんNotebookLMに集約していきます。

NotebookLMのチャット設定では、役割(例:プロのQAエンジニア)や制約(例:テスト項目はセルを分割し、ステップを細かく出力する)をカスタマイズすることで、より目的に沿った出力を得られるようにします。

NotebookLM_customize

3. 【情報整理】テストに必要な情報をAIが整理

NotebookLMに読み込ませた情報を元に、テストに必要な情報をAIに整理させます。

具体的には、「ユーザー」「システム」「シナリオ」「期待される結果」「リスクと重要度」といった項目について、インプットした情報に基づいてまとめてもらいます。

  • 「ハルシネーションが発生しないように、インプットした情報以外の情報を創造しない」
  • 「情報が不足している場合は、不足している情報を教えてもらう」

といった制約を設けます。

これにより、システムが提供する主要な機能とその目的などが明確になります。

- 依頼:インプットしたXX機能の仕様を元に以下の項目に情報をまとめてください
- 制約:ハルシネーションが発生しないように、インプットした情報以外の情報を創造しないでください
- 制約2:情報が不足している場合は、不足している情報を教えてください
 
  - ユーザー:
      説明: テスト対象システムを利用するユーザーの属性、ニーズ、目的
      詳細:
        - ユーザーの行動パターン、利用シナリオ
  - システム:
      説明: システムの目的と機能
      詳細:
        - システムが提供する主要な機能とその目的
        - ユーザーがシステムを利用して達成したいこと
  - シナリオ:
      説明: 利用シナリオ
      詳細:
        - ユーザーがシステムを利用する具体的な状況や場面
        - システムの主要な機能がどのように利用されるかの流れ
  - 期待される結果:
      説明: 期待される結果
      詳細:
        - ユーザーがシステムを利用して得られるべき成果や価値
        - システムの動作が正常であると判断するための基準
  - リスクと重要度:
      説明: リスクと重要度
      詳細:
        - システムに不具合が発生した場合にユーザーにどのような影響があるか
        - どの機能を優先的にテストする必要があるか

4. 【シナリオ作成】テストシナリオをストーリー形式で生成

整理された情報を元に、いよいよテストシナリオを作成します。

AIに対し、「プロのQAエンジニア」という役割を与え、「先ほどまとめたデータを参考に、テストシナリオをナンバリングし箇条書きかつストーリー形式で作成してください」と、シンプルな指示を出します。

- 役割:あなたはプロのQAエンジニアです
- 依頼:先ほどまとめたデータを参考に、テストシナリオを作成してください
- テストシナリオはナンバリングし箇条書きかつストーリー形式で作成してください

すると、具体的なテストシナリオが幾つか生成されます。

5. 【ケース生成】テストケースを表形式で出力

テストケースの生成

最後に、生成されたテストシナリオを元に、詳細なテストケースを作成します。

ここでもAIに対して、以下のように具体的な指示を与えます。

  • 「それぞれの手順とそれに伴う期待値をステップごとに記載」
  • 「出力形式は表形式」
  • 「『テスト項目』『対象画面』『前提条件』『手順』『期待値』のカラムを用意する」
  • 「セル内でナンバリングする場合はセルを分割、ステップを細かく分割」
- 依頼:先ほどまとめたデータを参考に、テストケースを作成してください
- 制約:それぞれの手順とそれに伴う期待値をステップごとに記載してください
- 制約2:出力形式は表形式で出力してください
- 制約3:「テスト項目」「対象画面」「前提条件」「手順」「期待値」のカラムを用意してください。セル内でナンバリングする場合はセルを分割してください。ステップを細かく分割してください。

この結果、詳細な手順と期待値が記載されたテストケース一覧(表形式)が成果物として得られます。

この一連の作業、なんと所要時間は約10分ほどでした!

実際に使ってみた評価:良い点&改善点

実際にこの手法を導入してみて、以下のような手応えと課題が見えてきました。

使ってみた感想(良い点)

  • テストケースや概要の骨組みを作成するまでの時間が大幅に短縮されて便利!
  • 自分だけでは思いつかないような観点からテスト項目を作成できるのが良い!

使ってみた感想(改善点)

  • AIが提案するテスト観点の妥当性をしっかりと吟味する必要がある
  • テストケースの網羅性や具体性については、まだ改善の余地がある

作業時間の削減について

実際にとあるプロダクトの機能別テスト設計にかかった時間を比較したところ、この手法を導入し、試行錯誤を重ねることで、一つ目の機能設計と比較して約2倍の速度でテスト設計を行えるようになりました。

最新の項目では、1ケースあたりの設計時間が大幅に短縮されています。

見えてきた課題感

  • テストケースの中身の精度
    • 0から1を生み出すのには非常に便利ですが、出力されたものをそのまま使えるわけではなく、修正コストが発生します。
    • 最終的に質の高いテストケースに仕上げるには、やはりプロダクトへの深い理解が不可欠です。
  • 生成AIを使うためのルール作り
    • ルールや手順を整備しないと、出力結果にブレが生じてしまいます。
  • 技術のキャッチアップ
    • AI技術は日進月歩で進化するため、最新情報を追いかけ、手法をアップデートしていくための時間も必要になります。

課題はありつつも、総じて今後に大いに期待が持てる結果となりました!

今後の展望:AIとの二人三脚で、より高いレベルの品質保証を目指して

今後は、さらに精度の高いテストケース生成を目指し、以下のような展望を描いています。

  • テストケースの精度向上:
    • 過去の不具合事例をAIに学習させ、同様の不具合を未然に防ぐテストケースを生成
    • 過去のテストケースを参考に、より網羅的で質の高いケースを提案
    • 不具合が発生した際のビジネスインパクトを考慮し、重要なテストケースを優先的に生成
  • テストデータの自動生成:
    • テストに必要なアカウントの条件を合わせて出力
        • 特定の権限を持つユーザー
        • 特定の商品を購入済みのユーザー など
  • テスト実行の自動化:
    • 自然言語による指示でテスト実行を自動化
      • PlaywrightやClaudeといったツールの活用も視野に

もちろん、これらの実現には、ルールの整備や継続的な情報キャッチアップが前提となります。

最後に

生成AIを活用したテストケース生成の半自動化は、まだ発展途上の取り組みではありますが、QA業務の効率化、そして品質向上に大きく貢献する可能性を秘めていると私は考えています。

この記事が、同じようにテスト業務の効率化に悩む方々にとって、少しでも参考になれば幸いです。