ChatGPTで学ぼう！テスト要求分析

## はじめに

こんにちは、[@regina_t_rex](https://twitter.com/regina_t_rex)です。

昨今、ChatGPTをはじめとした大規模言語モデル（LLM）という技術が世間を大きく賑わせています。

>ChatGPTは｢Large Language Models｣というアルゴリズムによって動いています。アルゴリズムに大量のテキストデータを学習させ、あたかも人が書いたような自然な文章を生成できる自然言語処理機能がChatGPTの仕組みです。

[アンドエンジニア - ChatGPTとは？今話題のAIチャットボットの概要や仕組みを解説！](https://and-engineer.com/articles/Y_BUqhEAACoAbQ_A#heading2-1 "タイトル")より引用

質問応答をはじめ、文書の要約や生成、プログラミングもしてくれたり、今後色々な活用方法が期待されるChatGPTですが、QA現場ではどんな活用の可能性があるのか？を知るために、試しにあらゆるテスト活動の最も初めに行われる「テスト要求分析」をChatGPTと学んでいきたいと思います！

また、テストへのChatGPT利用の可能性についてはこちらの山崎さんのブログ記事からヒントを頂きました。
[ChatGPT はソフトウェアテスターになれるのか？](https://qiita.com/tomotaka-yamasaki/items/5d0631ce9ed47ed4e782 "タイトル")

ChatGPT関連のテスト記事を書いてみるにあたり前置きなのですが、ChatGPTのようなAIの台頭により、テスト技術者の業務が完全に代替されるといったことは近い未来にはまだ発生しないと私は考えています。
* 大量の情報を読み込ませ、テストのドラフトを作成する際の効率化を図る
* 具体的なインプットおよびアウトプットの期待値が明確に定義されている場合のテスト項目を網羅的に洗い出す

といった所までは可能でも、現実世界の様々なファジィな部分、リスクのより高い部分については高度な専門性を持った技術者による調整や補足が必要であるのではと考えているためです。

高い専門性を持った技術者がより本質的な部分の力を発揮するために、他の部分の効率化のために補完的に利用されるようなAIとの共存の仕方が理想であると考えていますが、現状ソフトウェアテストの分野ではどのような活用の仕方ができるのか、テストの最も初めに行うテスト要求分析を行うことでその可能性を模索してみたいと思います！

## テスト要求分析とは
テスト要求分析とは何か、の定義からChatGPTに聞いてみましょう。
この際、一度ChatGPTへ役割のインプットから行うとよりよい回答が期待できます。
![スクリーンショット (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/2139a214-192d-1588-f59e-c71c1295cfef.png)

ChatGPTの回答
![スクリーンショット (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/1c0f1b20-2fd4-32ad-fee1-565afd4f307f.png)

この定義は正しいものなのでしょうか。

「テスト要求分析」について[テスト設計コンテストのテスト要求分析チュートリアル - p16,18](https://www.aster.or.jp/business/contest/doc/2020_TRA_1-3_V1.0.0.pdf)を参考にしたところ、
>テスト要求分析では以下を決める
• どういった目的でテストするか
• どこまで、どんなテストをするか
>
>ソフトウェア開発プロセス/成果物と、テスト開発プロセス/成果物を対応させてとらえる
![スクリーンショット (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/0c0f2379-2586-e3e0-342d-f38c6717b453.png)


といった記述があります。

開発全体の「ソフト要求分析」の定義としては
>要求分析とは、異なるステークホルダーから抽出された要求間の競合を解決し、システムの境界、およびシステムとハードウェアや人などとのインターフェースを定め、システム要求からソフトウェア要求へと詳細化することである。また、要求間の優先順位を明確化しユーザーと合意する。優先順位付けでは、企業目標やビジネス戦略に合わせたKPI(重要業績評価指標：Key Performance Indicator)やBSC(バランススコアカード：Balanced Scorecard)を用いることもある。予算や期間の制約によっては実現しないと決める要求もあり、要求のマネジメントを始める時期でもある。

[ソフトウェア品質知識体系ガイド(第3版): SQuBOK Guide V3 - p100](https://www.amazon.co.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%93%81%E8%B3%AA%E7%9F%A5%E8%AD%98%E4%BD%93%E7%B3%BB%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC3%E7%89%88-SQuBOK-Guide-V3/dp/427422631X)

と定義されています。

ChatGPTの定義に大きな誤りはなさそうで大変わかりやすいのですが、具体的な1～5の作業の前提としてソフト要求分析結果が存在する旨や、企業目標やビジネス目標といったより大きな所からの把握が必要な旨の説明があるとより筋の良いテスト要求分析につながるのではないかというのがまずは出力結果を見た所感です。

定義を確認したところで、ChatGPTを使って、テスト設計の最も初めの工程である「テスト要求分析」を一緒に学んでいきましょう！

ここでは架空のプロダクトの仕様を利用して要求分析を行ってみます。

## 架空のプロダクト(BMI値での栄養状態判定システム)の仕様

下記に記載する仕様は、
[ソフトウェアテスト技法練習帳 ~知識を経験に変える40問~](https://www.amazon.co.jp/dp/429711061X)
P35「BMI値で栄養状態を判定」の問題からシステム仕様を拝借してみました。

### 仕様
**プロダクトの概要：** 
入力したBMI値を元に、栄養状態を判定する

**BMIの計算方法と判定基準：**
人の肥満度を判断する指標として、BMIがある。

BMIは体重(kg)と身長(m)を元に、下記の計算式で求める。
>$BMI=体重(kg)÷(身長(m))^2$

たとえば、体重45㎏、身長150㎝の場合、

$BMI=45÷(1.5)^2=20$

になる。

BMIの判定基準は、WHOのBMI判定基準を元にする。基準は表のとおり。

| No | BMI指標 | 栄養状態 |
|:-----------|------------:|:------------:|
| 1  | 18.5未満          | 痩せ       |
| 2  | 18.5以上、24.9以下 | 普通体重   |
| 3  | 25.0以上、29.9以下 | 前肥満     |
| 4  | 30.0以上、34.9以下 | 肥満(1度)  |
| 5  | 35.0以上、39.9以下 | 肥満(2度)  |
| 6  | 40.0以上          | 肥満(3度)  |

**主な機能**：

* BMIの数値入力欄に数値を入力し「判定」ボタンを押すと、栄養状態エリアにWHO基準のBMI判定結果が表示される

* Webシステム画面のBMI入力欄のイメージは下記のとおり
![スクリーンショット (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/c2f90d29-8e47-4622-54fa-0acd748b4030.png)
:::note warn
ChatGPTのテキストベースのチャット環境では直接画像ファイルを投稿することはできないため、テキストベースでの説明でUIのインプットが必要になります。
:::

下記のテキストを代わりに入力しました。
>画面には「BMI」と「栄養状態」の2つの項目があります。
1行目に「BMI：」というラベル、数値の入力欄、「判定」ボタンが並んでいます。
>
>2行目に「栄養状態：」というラベル、栄養状態の結果表示エリア
という外観になっています。
>
>数値入力欄に数値を入力し「判定」ボタンを押すと、栄養状態に判定結果が表示されます。

**前提条件：**
- 数値以外の入力を考慮する必要はないものとする
- 英字やピリオドを除く記号文字等はWebシステムの基本機能で入力チェックされ、入力できないものとする
- 入力は小数点第1位まで有効とする。(20.85が入力された場合は、20.8として処理される)
- BMI入力欄に下記の数字を入力した場合、エラーになる
    - 0以下の数値
    - 100以上の数値

**予定されているプラットフォーム：** 任意のWebブラウザ

## テスト要求分析をしてみよう
それではChatGPTにテスト要求分析をしてもらいましょう。
上記システム仕様をテキストで入力した後の出力結果はこちらです。
![スクリーンショット (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/82692d8d-bdf2-ee1c-844e-5e31c71ff029.png)

「テストの目的」および「どこまで、どんなテストをするか」の情報が出力されていることがわかります。
身長・体重を入力して計算する機能は今回のテスト対象にはありませんが、BMI計算に関する要求がある旨が含まれているのは、仕様のインプット内容にもしかしたらあいまいな部分があったのかもしれません。

また、「テストの目的」については妥当性をしっかり見ていくことが重要と考えますが、試しにテストの目的をこちらから明示してみるとそれぞれ下記のような出力結果となりました。

**テストの目的：** 正しくBMIが表示されず、ユーザーが離脱してしまうことを防ぐ
![スクリーンショット (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/4e676582-e755-b241-0ed8-f0f927ce8d29.png)

テストの目的を「正しくBMIが表示されず、ユーザーが離脱してしまうことを防ぐ」としたため、表示関連のテスト観点が出力されています。

目的を「BMI入力後のレスポンスが遅く、ユーザーが離脱してしまうことを防ぐ」とするとどのようになるでしょうか。
![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3042538/54aae760-2ac3-44cd-b3c4-36b75ce1247c.png)

ここでは非機能面でのテスト観点を出してくれるようになりました。
最初に設定するテスト目的の粒度やテストを行うことでどんなリスクを潰したいのか、によって出力結果が大きく変わってくるため、詳細を詰めていく前の目的の設定が妥当であるかどうかの確認はQAエンジニアにとって特に重要な責務に思います。

また、ChatGPTの出力で
>テストの優先順位や追加の要求については、プロジェクトの特定の要件や制約に基づいて評価する必要があります。

とあったように、ソフト要求分析に基づいたこの部分の考慮に、熟練したQAエンジニアがより注力していける点はChatGPTを活用する明確なメリットでもあると感じました。

## おわりに
今回は架空のシステムについての要求分析を実施してみました。大変簡潔な仕様のインプットであったため、テスト目的と確実に必要になる最低限のテスト観点を返してくれたような形になりました。
テスト項目検討初期段階で考慮するべき内容は揃っているように感じます。

しかし実際のプロダクトの仕様はもっと情報量も多く、不足や齟齬も多く存在します。
要求分析はもっと抽象的なハイレベルテストケースを各情報の依存関係なども考慮しながら検討する必要があると考えているため、インプットするべき情報の種類や量を増やしたり、アウトプットの期待値についてさらに詳しくChatGPTにリクエストを投げる必要があると感じました。

現段階でも下記のようなシチュエーションでのChatGPTのテスト活用であれば、うまく使えばかなり効率化ができるのではないか、という所が一度使ってみた所感です。
- 1画面分くらいの極めて限定的な範囲でのテスト観点出し
- 入力情報や出力情報がより具体的であるローレベルテストケース
- 定型化が可能なユニットテストのテストケース
- チェック観点や、要求仕様書等確認するべき点が明確に定義された前提での仕様書レビューの大部分

ただし、ChatGPTに正しくテストをやってもらうには、依頼するQAエンジニア自身がテストプロセスを深く理解し、アウトプットイメージができていることが重要なのだとも感じます。
手を動かして学び、経験を積んでさらに専門性を高めていくことは今後ChatGPTと共存していくうえで必要なのだな、ということに気づいたのが今回一番の学びだったかもしれません。

というわけでチュートリアルしっかり見て要求分析勉強します。。！


## 参考資料
* アンドエンジニア - ChatGPTとは？今話題のAIチャットボットの概要や仕組みを解説
https://and-engineer.com/articles/Y_BUqhEAACoAbQ_A#heading2-1
* ChatGPT はソフトウェアテスターになれるのか？
https://qiita.com/tomotaka-yamasaki/items/5d0631ce9ed47ed4e782
* テスト設計コンテストのテスト要求分析チュートリアル - p16,18
https://www.aster.or.jp/business/contest/doc/2020_TRA_1-3_V1.0.0.pdf
* ソフトウェア品質知識体系ガイド(第3版): SQuBOK Guide V3 - p100
https://www.amazon.co.jp/dp/427422631X
* ソフトウェアテスト技法練習帳 ~知識を経験に変える40問~
https://www.amazon.co.jp/dp/429711061X
* ChatGPT
https://chat.openai.com/