この記事は完全に理解したTalk Advent Calendar 2020 - Qiitaの13日めです。

昨日はyanutetsuさんのGitHub CLI 完全に理解したでした。


まず、「完全に理解した」というネタを字面通りに受け取られないための保険を置いておきます。


つづいて背景的なところと記事の対象について。

お友達のunsoluble_sugarに誘われて完全に理解したTalkアドベントカレンダーに参加させてもらってまして、このコミュニティには私が普段主に居るソフトウェアテストコミュニティとは違い、開発やってる方の割合が多い気がしています。特にWebのフロントとかやってる方が多そうだなーと思ったので、そのへんと自分の専門のテスト自動化が交差しそうな部分で「AI自動テストツール」をテーマに選びました。

普段ソフトウェアテストを専門にやっているわけではない方々に対して「なるほどそういうのもあるのね」と知ってもらえたらと思います。


そもそもAI自動テストツールとは何か

ことばの定義が厳密に決まっているものではありません。ので、AI自動テストツールと聞いて想像するものは人によって異なるかも知れません。

可能性としてあるのは

  • 「AIを使って」自動テストをするツール
  • 「AIを対象として」自動テストをするツール

の大きく2種類かと思います。

一般に「AI自動テストツール」と言った場合には、前者のことを指しています。(※私個人の感覚&Google検索の結果から)

google-result

ちなみにAIを対象としたテスト(自動に限らず)に興味がある方はAIプロダクト品質保証コンソーシアムのAIプロダクト品質保証ガイドラインとか見てみると良いと思います。

自動テストの何にAIを使うのか

「AIを使って」自動テストをするツール=AI自動テストツール、とすると、次に把握しておきたい点は「何にAIを使うのか」という点です。

自動テストツールに限らず、「AIを使って」といった場合、もともとは人間による判断が必要だった(≒コンピュータに任せることが難しかった)部分をAIによって解決するという側面があります。(あとは人間にはとても出来なかったことをAIを使って、もありますね)

ベリサーブナビゲーション16号(※PDF)の「AI利用テストツールの最新動向〜AIはテスターを超えるのか〜」によると、ソフトウェアテストにおける以下のような分野でAIを活用したツールが出ています。

  • 静的解析/コード解析
  • テスト自動生成
  • テスト実行
  • ビジュアルの検証
  • テスト自動修復
  • テスト実行状況監視
  • 性能/テスト結果分析

いずれもAIによって半もしくは全自動化できたら夢が広がるわけですが、現状日本でよく名前を聞いたり、導入事例が公開されているようなAI自動テストツールにおいては、

  • テスト自動生成
  • テスト実行
  • テスト自動修復

あたりの機能を持つものがメジャーだと感じます。(私の感覚です)

先に貼ったGoogle検索の結果にあった「AI自動テストツールミートアップ」などでも、主に上記3機能を持つ自動テストツールが取り上げられていました。

AI自動テストツールを使うと何が嬉しいのか

一言で済ませると「楽になる」なのですが、もうちょっと詳しく見て行きましょう。

AI自動テストツール、特にテスト自動生成・テスト実行・テスト自動修復などの機能を持つものは、現在は主なテスト対象がWeb(かモバイル)です。モバイルに対応したAI自動テストツールです!とうたっているものでも、実はPCブラウザでモバイルブラウザをシミュレートして動かせるだけ(=ネイティブアプリは動かせない)というケースもあり、そこは注意が必要です。

Webやモバイルの自動化をしようと思うと、従来はOSSであればそれぞれSeleniumとAppium、有償のツールでも対応しているけれども月額けっこうかかります、という状態でした。

なので多くの場合はSeleniumやAppiumなどを使って自動化していたのですが、色々とつらみがありました。

大きくは

  • 作るのがつらい
  • 維持するのがつらい

です。

つらみ1:作るのがつらい

OSSを使ってWebやモバイルのE2Eテストを自動化しよう、と思った場合、当然サポートはなく自力でなんとかしなければいけませんし、開発スキル的なものが必要です。

そうなると「手動でのテストしかしてきませんでした」的な人には辛かったり、一方でじゃあ開発者がE2Eテストもコード書くかというと「できるけど余力がない」という場合も多く、結局誰かしらが多少つらい思いをして作る必要がありました。

つらみ2:維持するのがつらい

がんばってE2Eの自動テストを整備したとして、それを維持するのもまた大変です。

UIの変更は今どきのWebサービスやモバイルアプリケーションであれば頻繁に発生しますが、そのたびに自動テストのコードのほうも修正する必要がありました。自動テストを整備したがために、機能追加や改修時に手を入れる部分が倍になるようなものです。

SeleniumなどのOSSではデザインパターンを導入することで少しでもコード改修の手間を減らすという方法が一般的ですが、もちろんゼロにはなりません。

有償の自動テストツールの場合はツール側が色々な機能をもっていてある程度手間は減らせますが、OSSの場合とどっこいどっこいです。

これらのつらみをなんとかしてくれる機能が、AI自動テストツールの一部は備えています。

つらみ1の解消:コーディングせずに自動テストを作る

テスターでも開発者でも、テストのためにゴリゴリコードを書くのは辛い、というのが問題でした。 (私はテスト用のコード書くの好きですけど、仕事なので「いくらでも書きます!」は通用しませんよね)

そこで解決策として、AI自動テストツールの一部は「ユーザの操作を記録して自動テストにできる」機能が備わっています。

mablAutify(オーティファイ)などが該当します。

自動テストの経験がある方は「それってキャプチャリプレイじゃん」と思うでしょう。本質的にはそう(というのが私の意見)です。

画面の操作をツールで記録し、テストを行う際は記録しておいたものを再生する、という手法やツールのことを「キャプチャ・リプレイ(ツール)」、もしくは「レコード&プレイバック(ツール)」と呼びます。

過去にもこの手のツールはありましたが、ナンセンスとされていました。

『システムテスト自動化標準ガイド』では、第2章が

キャプチャーリプレイはテスト自動化ではない

という章タイトルになっているくらい一般的な認識でした。

ところがAI自動テストツールになってこのキャプチャリプレイ「的」な機能が再度活きてきています。次の項目「つらみ2の解消」が関連してきます。

「ユーザの操作を記録して自動テストにできる」機能以外にも、AI自動テストツールにはコーディングをせずに自動テストを作成できるものがあります。

たとえばMagic PodではAIを使って画面をスキャンし、操作対象となる要素をツール側が認識してくれます。従来だと要素のidやらcss-selectorやらを自分で調べて指定しなければいけなかったところ、ツール側がよしなにやってくれることでコードを書かずに自動化ができるようになっています。

というのは公式の動画を見たほうが早いのでこちらを参照ください。

つらみ2の解消:テスト自動修復機能

AI自動テストツールにおけるテスト自動修復とは。

AIがリリースの度に変更されるUIの変化を監視し、影響のあるテストシナリオを自動的にアップデートします。壊れたテストスクリプトを直す作業はもう必要ありません。

via Autify(オーティファイ), AIを用いたQA自動化プラットフォーム

mablMagic Podも同様の機能があります。

自動修復機能、セルフヒーリング、オートヒーリングなどの呼び方で呼ばれます。

WebのUIの例を挙げると、例えばSeleniumを使っているときに

// OKボタンをクリックする
driver.findElementById("ok-button").click()

というコードを書いていたとします。なんらかのタイミングでOKボタンのidがbtn-okなどに変わった場合、上記のコードでは動かなくなります。

「idなんかそうそう変えないだろ」というツッコミが飛んできたり、「フレームワークが勝手に振るんだから変わって当然だろ」というツッコミが飛んできたりして怖いのですが、実際にこういうことが頻発するわけです。そのたびに自動テストのコードを書き換えているとつらいよね、というのがつらみ2です。

ところが自動修復機能が備わっているAI自動テストツールの場合、こうしたidの変化やUIの見た目の変化など、これまでだったら人がコードを修正しないと動かなくなっていたような変更に対して、ツール側がいい感じに対処してくれる、という素晴らしい機能です。

※上で挙げた例は単純化した例なので、実際にAI自動テストツールを使っているときに上記と全く同じ変更があった場合、おそらくAIでの修正機能は働かずそれ以前の段階でよしなに対応してくれます。「AIを使うまでもないぜ」ってことだと予想します。私はツール作ってる中の人ではないので正確なことは言えませんが・・・。

まとめ

5000字超えてきたのでまとめにかかると・・・

Webやモバイルの開発している方で、「E2Eのテストしないといけないのはわかっているけど、チームに専門家いるわけじゃないし、手が回らんわー」って方は、自分でゴリゴリコード書かなくともテストが自動化できてかつメンテも楽になるAI自動テストツールと言う選択肢があるんだよ、ってことをぜひ知ってもらえたらと思います。

ググる力高めのえんじにゃーの皆様は、存在さえ知ればあとはもう他人からとやかく言われるよりは触ったほうが早いぜって思うでしょうし。フリープランとかフリートライアルとかけっこうあるので、まず触ってみてください。

で、規模が大きくなってきて大変だとか、触ることすら厳しいムリーってときは、ご相談ください。