生成AIでテスト作業（要件の品質評価→テストケース抽出→コード生成→実行→洞察）まるっと自動化がスゴい

# はじめに
テストのための生成AIを搭載した「**UiPath Autopilot for Testers**」が2024年7月に一般公開されたので、***個人の学習目的で期限なく無料で使えるUiPath Community版***で、さっそく体験してみました。第一印象、***何これ？スゴい***の一言です！今後、テスト市場に新風がくるかも？と感じたので広く知ってもらうためにブログを書くことにしました。既にグローバルでは轟いているそうです。

本ブログを見て興味ある、体験してみたいと思った人向けにUiPath Autopilot for Testersの簡単なチュートリアルも書いたので、こちらも是非ご覧ください。

https://qiita.com/Jun96427231/items/b771f9649744678cd99c

# 全体像（何ができるのか）
これまでのAI搭載テスト自動化ツールは、テスト実行のみにフォーカスされていたことも多かったと思います。（既に過去形）そこから、ちょっと進んで、生成AIを使ったテストコードの自動生成ぐらいでしょうか。「UiPath Autopilot for Testers」では、テストコードの自動生成は勿論、ベテランのQAエンジニアが行っている様々な観点での要件の品質チェックや、テストケースの検討・抽出・作成、そして洞察（テスト結果の分析）にまでフォーカスした、これまで見たことのない革新的なツールに進化している。と感じた。特にTest Managerが正直、今まで地味だったんですが、一転してド派手になった（笑）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/211ba0d9-419d-87b1-5f97-61b8eafbf58d.png)


|No.|工程|説明|
|:---------:|:---------|:----------|
|①|要件の品質評価|インプットした要件などからAIが要件不足を指摘したり、アクセシビリティなどにおける改善提案などをしてくれる|
|②|テストケースの抽出と生成|AIが①の要件や追加のドキュメントなどからテストケースを抽出、手順も作成してくれる|
|③|テストコード生成|②のテストケースからAIがテストコードを生成してくれる|
|④|テスト実行|③で生成したテストを実行、AI（MLやコンピュータビジョン(CV)）が組み込まれた統合ターゲットメソッドで要素を掴む（CVは英語表示要素のみ）|
|⑤|テスト結果分析|④のテスト実行で蓄積された結果からAIが分析、洞察してくれる|

|No.|工程|説明|
|:---------:|:---------|:----------|
|番外|オブジェクトリポジトリ登録|CVによって、画面表示中の要素を全て抽出してくれるので、要素をスピーディに、まとめて登録できる|


# ①AIの頭脳を借りて要件の品質評価と強化！上流工程での品質向上が期待できる
Test Managerに登録されている要件やアップロードした要件定義書などをAIが分析して多角的に評価してくれます。例えば、要件定義不足と思われる点や、仕様が好ましくないとか。セキュリティや、アクセシビリティ、コンプライアンスのガイドラインもアップロードしておけば、これらを基準とした要件の整合性チェックもしてくれます。まさに上流工程で品質を高めると言うことですね。激しく同意します！
ちなみに、アップロードするフォーマットや書き方に決まったものはありません。ファイルもDOCX、XLSX、TXT、PNG、JPG、PDF、BPMNであれば、受け付けてくれるので、開発プロジェクトで使っている多くのファイルが、そのまま使えそうです。ただし、ファイルの中の画像部分については現時点でサポート対象外。

下記に既定のプロンプトの種類も紹介しておきます。
|既定のプロンプト|説明|
|:---------:|:---------|
|多面的な監査|さまざまな観点から要件を分析するためのガイドライン|
|セキュリティ評価|セキュリティ関連の側面の要件を分析するためのガイドライン|
|性能評価|パフォーマンス関連の側面の要件を分析するためのガイドライン|

::: note
補足
プロンプトは、プロンプトライブラリ設定画面で修正や追加も可能。自身でブラッシュアップできる様になってます。デフォルトが英語のプロンプトもあるので、私は自分で日本語にしたプロンプトも使ってます。

:::

**＜AIによる品質向上のための提案例＞**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/bf1c8400-14f2-9a6a-7653-89acdaf6cf69.png)

例えば、上記、1番目の指摘はエラーメッセージが不足していると言った指摘と提案です。実際にエラーメッセージは出ないですが、好ましくない仕様なのは、私も、そう思います（笑）

::: note
補足
ALMツールと接続をサポートしているので、例えば、Jiraで登録された要件が自動的にTest Managerの要件に登録されます。要件を、ここで評価できると言うことですね。
:::

### 要件の品質評価デモ
<iframe width="560" height="315" src="https://www.youtube.com/embed/1MzHzhHNIjo?si=YDSxTNBlFqtfwj0U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# ②AIの頭脳がテストケースを自動で抽出し、テスト手順や期待する結果も生成してくれる
要件やアップロードした設計書などからテストケースを抽出してくれます。よく聞かれますが、コードからではありません。E2Eテストを対象にしており、そもそもコードでテスト抽出しても、要件や設計書と実装が合ってなければ品質が担保されないので、その観点ですね。
既定のプロンプトの種類を紹介します。既定のプロンプトでは10件の生成ですが、プロンプトを修正すれば最大50件まで生成できます。

|既定のプロンプト|説明|
|:---------:|:---------|
|エンドツーエンドのフロー検証|フロー図からエンドツーエンドのテストを生成するためのガイドライン|
|境界値テスト|境界値テストに焦点を当てたテストを生成するためのガイドライン|
|有効なE2Eシナリオテスト|有効なエンドツーエンド シナリオのみのテストを生成するためのガイドライン|
|テストのアイデアを迅速に生成|テストのための多数のアイデアを迅速に生成するためのガイドライン|

例えば、境界値テストを選択した場合のテストケースを抽出してもらった結果です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/924e77d1-962f-a069-1d67-2d458c415e18.png)

採用したいテストケースを複数チョイスして「テストを作成」すると、下図の様に、それぞれのテスト手順が作成されます。この段階で手動テストの利用も可能です。もともとTest Managerには手動でテスト操作しながら、ワンクリックで合否判定、実施日時、実施者の記録が取れる機能を有してます。ロボットが実行できない環境下（例えば組み込みシステム）でも、ここまでのステップの成果物でも既に活用できるだろうなと思いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/ca230764-15c0-6403-0fc1-c2a0ced9ac91.png)

テストケースを生成のために追加でアップロードするフォーマットや書き方に決まったものはなく、フロー図も理解してくれるそうです。ファイルもDOCX、XLSX、TXT、PNG、JPG、PDF、BPMNであれば、受け付けてくれるので、開発プロジェクトで使っている多くのファイルが、そのまま使えそうです。ただし、ファイルの中の画像部分については現時点でサポート対象外なので、画像ファイルにしてアップロードしておくと言った手もあります。
試しに、下記の様に図や表を入れた要件も文章で書いたものと同様に生成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/1b69636b-efe0-b6c2-515e-9c735792305b.png)

::: note warn
2024年7月時点で、上記の画像をアップロードした場合、抽出と手順生成の結果が英語になってました。まだ、日本語化対応が十分でない箇所がありそうです。ただ、プロンプトに"The test cases must be in Japanese."を追加すると日本語出力になったので、予めプロンプトライブラリのプロンプト文に追加しておくと良いでしょう。
:::

### テストケース生成のデモ
<iframe width="560" height="315" src="https://www.youtube.com/embed/1Dl-iQBNIwI?si=v3QZfaWXpwjChGz4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# ③生成されたテストケースからスピーディにテストコードを自動生成できる
Test Managerに接続されたUiPath Studioには、Test Managerで生成したテストケースのリストが表示されます。生成したいテストケースの飛行機アイコンをクリックするとテストコード（現時点ではC#のみ）が自動生成されたテストケースのファイルができあがります。瞬時に生成されるので短い時間で大量のテストコードの生産が可能な手応えです。

生成されるロジックは冗長で、扱う値もハードコーディングです。再利用性や運用時のメンテナンス性を考慮した作りではありません。ただ一方で、テスト手順と対になったコードの分かり易さと言った意味では冗長であるべき、手動のテスト手順も直値で記載されているのでテストコードではハードコーディングであるべき、と言った意見も従来からあったので、ここは議論がつきないところです。ここまでテストコードがスピーディに大量生産でき、作り直しも直ぐに出来るのであれば、正解になり得るかもと感じさせられました。生成AIは従来の考え方を根底から変えさせてきますね（笑）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/8f44afc7-00a2-54c8-4b3d-bce0f221d4ec.png)

### テストコード生成のデモ
<iframe width="560" height="315" src="https://www.youtube.com/embed/VwflgqD_WaE?si=0Fa31mkMmvg31YTM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


テストコードはオブジェクトリポジトリに登録されているUI要素を使って操作する様に書かれています。AIコンピュータビジョンによる「すべての要素をキャプチャ」を使えば瞬時に要素が抽出され、スピーディに、まとめて登録できるので、事前に全画面の要素を登録しておくのも良いでしょう。加えて、コードの自動生成時にも、オブジェクトリポジトリに登録している要素も参考にしている様なので、事前に登録している方がコードに記載の要素名とオブジェクトリポジトリの要素名の一致確度が高まりそうです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/0cccff55-54d8-487d-456a-9c25a6b811cf.png)

### CVを使ったオブジェクトリポジトリ登録のデモ
<iframe width="560" height="315" src="https://www.youtube.com/embed/lT9p6X_K0Bo?si=AyI4Ngk2mlM9vtxd" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

::: note info
***UiPath 2024 August Community Release***
2024年8月リリースのCommunity版で早くもローコードでの自動生成がサポートされました。UiPathで広く使われているローコードなので、C#ユーザーでなくても扱えるようになりそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/c5ebc8d0-97c5-dc6b-b4b5-449057ba6c39.png)



:::

# ④開発段階でのテストにも活用しシフトレフトする

UiPath Studioでテストコード生成したら、その場で、すぐにテストを実行し、不具合があるかスピーディに確認することができる様になります。テスト実行した証跡も、UiPath Studioから直接Test Managerにアップロードが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/24ce5403-136d-49e5-8406-9bbfba604f3f.png)

<iframe width="560" height="315" src="https://www.youtube.com/embed/a_oipWA1Hp8?si=ivHJK4XsNvTeCqBR" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

リグレッションテストを行う際は、Orchestratorにテストプロジェクトをパブリッシュしておくことで、スケジュール実行やCIによるトリガー実行も可能です。これは、テスト自動化で、よくある使い方なので、詳細は割愛します。

**＜Orchestratorにテストセットを登録してトリガー実行＞**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/d49b0ac5-6c43-0007-dfa5-0adf247a7eab.png)

# ⑤大量に蓄積されたテスト結果をAIが洞察してくれる
不合格のテストケースに関する洞察と、改善のための推奨事項が含まれています。使い始めの少ないテスト結果の蓄積では、あまり有効ではないですが、大量のテスト結果が蓄積されるに連れ、その恩恵が享受される様になる！と感じてます！
洞察もプロンプトで指定できたら、もっと良いのにな。今後のアップデートに期待！

|分析項目|説明|
|:---------:|:---------|
|概要|平均エラー率、テスト セットのエラー率、およびエラーの重大度別の割合に関する情報が表示されます。|
|失敗した上位のテスト|最も頻繁に失敗したテスト ケースが表示されます。|
|一般的なエラー|テスト実行中に発生する最も一般的なエラーが表示されます。|
|エラーパターン|エラーが分類され、失敗のパターンを特定できるため、トラブルシューティングや解決が容易になります。|
|推奨|テスト実行でのエラー発生対策推奨事項を示します。テスト実行の安定性を最適化するための指針をガイダンスします。|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/f4a99f4c-4694-c6e9-7706-aeb4fedfd269.png)

<iframe width="560" height="315" src="https://www.youtube.com/embed/2KXdroGq7hI?si=AA_Qmvn8Zdh_SqLi" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 使って見ての総括
テスト自動化は、アジャイル型や運用保守等でリグレッションテストを繰り返す活用がセオリーとされています。しかし、米国と違い日本にはSIベンダーがいっぱいあって、請負契約により、ウォーターフォール型で開発しているケースが圧倒的に多い。そして発注元と請負会社のテストが分断され、テスト自動化の効果が出にくいという側面もあり、日本でテスト自動化の普及が遅れている一因にもなってそうです。
Autopilot for Testersであれば、アジャイル型であろうが、ウォーターフォール型であろうが、テストライフサイクルのあらゆる段階を加速することができるので、従来の言われてきたテスト自動化はデグレ確認に効果とか、コスト削減を目的にしないとか、そう言った既成概念の払拭にも期待したい。

**あるべき2段階の効果**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639319/2879f10b-9ca2-0ef6-003c-7ed9ec58bbdd.png)

要件の追加で品質をチェックし、そして実装されたソフトウェアをすぐさまテストと言った活用で、当然、未知の不具合も発見して行くのではないかと考えられます。皆が最初に期待するテスト自動化の「銀の弾丸」、「魔法の杖」に少し近づいてきたのかも知れない。そして上流工程から評価するので、もはやテスト自動化の範疇から上のステージになったのかも知れません。

まだ、リリースされたばかりなので、実用性については、まだ未知数ですが、期待できそうな感触です。これからも情報をアップデートして行きたいと思います！

生成AIがテスト自動化の理想と現実のギャップを埋め、これからのテスト自動化は、どう変わっていくのか。の記事も書いたので、こちらも是非ご覧ください。

https://qiita.com/Jun96427231/items/93d09ec6620c9aa83d7b