本セッションの登壇者
セッション動画
では「Autifyが作るAIテスト自動化の未来について」というところでお話させていただきます。
まず簡単に自己紹介させていただきます。私はAutifyの代表をしております近澤と申します。Autifyを始める前まではエンジニアとして10年以上、日本とシンガポールとアメリカのサンフランシスコの3カ国で働いた後に、このAutifyというサービスを立ち上げました。Autifyにたどり着くまでにちょっといろいろな事業を行っていて、最終的にここまで来たのですが、その経緯を「顧客のBurning needsを解決する」というブログに書きまして、非常にありがたいことに多くの方にお読みいただきました。もしお時間ありましたらぜひこちらを見ていただければと思っております。
ノーコードでテスト自動化、セルフヒーリングでメンテナンス
Autifyとは何なのかというと、AIを用いたWebとモバイルアプリのエンドツーエンドテストの自動化サービスです。エンドツーエンドテストとは、平たく言えばUIテストです。
僕らが解決している問題は大きく分けて2つあって、ひとつは「テストを自動化するために、人の手でコードを書いている部分をノーコードで簡単にしていく」、もうひとつは「エンドツーエンドテストで難しいメンテナンスの部分をAIが自動的にセルフヒーリングという形で行う」 - この2つが大きなソリューションです。
プロダクトとしては、「Autify for Web」というWebアプリケーションの自動化のサービスと、「Autify for Mobile」というモバイルネイティブアプリのテスト自動化のサービス、この2つのプロダクトラインを展開しております。
我々はまず日本を中心にローンチをしたのですが、今では日本のほかにもアメリカ、南米、ヨーロッパ、オーストラリア、シンガポールなど、世界中のさまざまな国でAutifyの活用が進んできました。
ではAutifyがどんなツールなのか、デモをお見せしたいと思います。
まず、Autifyでどのようにテスト自動化していくかというところですが、テストを作る際には、まず「新規シナリオ」をクリックします。
「どのURLでテスト自動化しますか」というところで、自動化したいWebアプリケーションを入れていただきます。これで「レコーディングを開始」をクリックすると、新しいウインドウが立ち上がります。
画面右下にあるように、レコーダーと呼ばれるChrome拡張機能のUIが登場します。このレコーダーが今、私のこの画面に対する操作をすべて記録して、再生可能な自動テストを作ってくれます。
ここで我々のWebサイトにあるデモリクエストフォームの挙動を確認するテストを作ってみたいと思います。Autifyを使うと、このメールのテストも自動化できます。毎回テストする度にランダムなメールアドレスを作ってくれますし、その中身も検証することが可能という形です。
入力して、「デモを申し込む」をクリックすると、「お問い合わせいただきありがとうございます」というメッセージが出てきます。ちゃんとこれが表示されていることを確認するために検証ステップを入れます。「対象テキストが○○であることを確認する」を選択します。
ここで、メールが届いていることを確認します。メールが来ていますね。そして「Autifyへのデモリクエストを承りました」というメッセージが見えますので、これでメールの内容も確認できます。メールの内容に対してもアサーションができますので、ちゃんと「こんにちは近澤様」って入っていることを確認します。
そして「保存」をクリックすると、今僕が行った挙動がすべてスクリーンショット付きのテストのシナリオとして保存されます。ノーコードなので、このスクリーンショットを見れば何をテストしているのか一目瞭然という形ですね。これで「保存」をクリックした後に「今すぐ実行」をクリックすると、今すぐ実行できるわけです。
今、クラウド上で、Chrome/Linux上でテスト実行が開始されましたが、Chrome/Linux以外でもさまざまなブラウザで回すことができます。Chrome/LinuxだけじゃなくてEdgeやFireFox、MacのSafari、ほかにもiOS、エミュレータ、リアルデバイス、などもろもろあります。Androidでもエミュレータからリアルデバイスまであります。
ということで、テスト結果です。実際に終了するとどうなるのかというと、テスト実行を終了するとこんな形でテスト結果が見えます。前回と今回で比較しながら見ることができますし、実際にどのようにテストが実行されたのかをビデオのログを見ながら確認することもできます。
先程のAIのメンテナンスの部分ですが、AIがUIの変更を認識して自動的にシナリオを修復してくれるというものです。たとえばこれはフッターの中のcarrier’s linkをクリックしている例なのですが、このフッターのデザインが変わってカラムベースのUIになったときも、Autifyがそれを認識して、テストし続けてくれます。メンテナンスは、これがOKであれば「成功とする」をクリックして終了です。これがAutifyの基本的な機能になります。
AIでエンドツーエンドテストをレジリエントに
プレゼンテーションに戻ります。今日はこのAutifyが考える「AIテストの未来」がテーマなので、これを活用してどのような未来があり得るのか、テスト自動化はどのように変わっていくのかというお話をしたいと思います。
我々が今後どういう分野に注力していくのか、まず、エンドツーエンドテストの自動化はすごく難しいと思っています。なぜならUIやデータはどんどん変わっていくので、せっかく自動化してもすぐ壊れてしまう。もちろんセルフヒーリングというアイデアはあるのですが、やっぱりそれをもってしてもまだまだ難しいです。
さらに直感的に「やっぱり(エンドツーエンドテストは)自動化できない」と思っていて、たとえばログインしたことを検証するときに、じゃあ”ログインしている状態”とはどういう状態なのか。もちろん人がいれば簡単に検証できますが、自動化のシナリオに落としたときにどういう検証ステップにするべきか、これはすごく翻訳が必要な作業だと思っていて、そこはなかなか難しいです。我々はそこに対してAIをどんどん活用していこうと思っています。
AIで「エンドツーエンドテストをレジリエントに」と言っていますが、レジリエントとは「変化に強くなる」、つまり変化の耐用性みたいな意味なのですが、具体的にはAIによるメンテナンスをさらに強化していく、あとはAIによるノーコードを実現し、さらにAIでノーコードを加速させていくことをやっていきたいです。
具体的に言うと、たとえば我々がすでに開発して本番のプロダクトに反映している「MLUI」というマシンラーニングのモジュールがあるのですが、これはスクリーンショットからUIを判定するものです。ソースコードを取らなくてもスクリーンショットからどういうUIになってるのか、ここに何が書いてあってどうなっているのかを、MLUIのモジュールによって認識できます。テスト自動化においてこれの何が嬉しいかというと、我々は「ビジュアルセルフヒーリング」と呼んでいるのですが、ビジュアルの要素も画面の見た目の要素も入れたセルフヒーリングが実現可能になったことと、あとはビジュアルリグレッションの機能もあって、前回と今回のスクリーンショットの比較をピクセル厳格にやらずに、中身のUIを認識した状態でどういう変化があったかを教えてくれます。
あとは、AIでノーコードを実現するというところですが、一例を挙げると、チェックボックスのアサーションみたいなのもマシンラーニングによって実現しています。具体的には、チェックボックスはインプットタイプチェックボックスを使えば簡単にアサートできると思うのですが、多くのケースにおいてはそうなっていません。ただ、人が見れば「チェックされているか/チェックされてないか」は一目瞭然なので、ここに画像認識を使った簡単なアサーションを可能にしました。チェックボックスのアサーションは、実際にSPANタグ使って2次クラスを当てる…みたいな話なので、チェックされてる状態とされてない状態を見分けるにはやはりコードを書かないとできません。そこをAIを使ってノーコードでできるようにしていこうというのが我々のビジョンです。
ChatGPTでスクリプト生成やテストケースの洗い出しもできそう
今後、AIを使ったテスト自動化の未来はどうなっていくのかを考えると、やっぱりOpenAI / ChatGPTの議論は外せないと思っています。我々もChatGPTのAPIを使っていくつかR&Dのプロジェクトを回していて、どんなことが具体的にできるのか、いくつか試してみたので、それを少しお見せしたいと思います。
まずひとつめ、GPTを使って自動化スクリプトを作るというデモです。ChatGPTのAPIを使って、AutifyのWebサイト上で「この情報を使ってデモをスケジュールしてください」というテキストデータを与えます。
テストスクリプトを回してみると、実際にAutifyのWebサイトに行って、いろいろ考えて「Start Free Trial」をクリックして、さっき渡した情報をちゃんとフォームの正しい位置に入力して、サインアップする、というところまできました。
実はスケジュールデモと言っておきながらトライアルをスタートしてしまったので、そこはちょっとご愛嬌という感じなのですが、実際にChatGPTのAPIを使って、自然言語でやりたい目的を与えることで自動化スクリプトを生成するところまでできちゃったりします。
もうひとつ、おもしろいものをお見せします。ChatGPTを使ってテストケースを作り出すというテストです。ChatGPTにAutifyのプロダクトドキュメントを渡して、「これを読んで必要なテストを作って」とお願いしてみます。そうすると「こういうテストをしたらいいんじゃないか」とテストケースを羅列してくれます。わりとそれらしいというか、きちんとしたテストケースを作ってくれるんですね。
ここで、たとえば3番目の「Validate that clicking the “edit” button …」、エディットボタンをクリックして、タイトルシナリオのタイトルが編集できるという仕様をわかって書いてるんですけど、これに対して、「ステップを教えて」と入力すると、このテストの操作ステップを教えてくれます。
まずシナリオページを開くのにシナリオタブをクリックしていくと、「右上に新しいシナリオを作る「New」というボタンがありますよ」とちゃんと位置も理解しています。次に「シナリオの [Name] フィールドの [edit] ボタンクリックする」とありますが、ちゃんと位置がわかっているんですよね。このように「仕様を渡すとテストシナリオを作る」までを結構な精度でできるようになってきています。なので、このデモと最初のデモを組み合わせると、仕様を理解して、そこからテストスクリプトまで作り出すところまで、近い将来にはできるんじゃないかという具体的なイメージが湧いてきたところです。
最後にもうひとつ、おもしろいデモをお見せしたいと思います。Autifyには「JavaScriptステップ」という機能があるのですが、JavaScriptをいちいち書くのが面倒なので、自然言語で「こういうステップにして」と指示するとそのJavaScriptを生成してくれるデモです。
たとえば「XPathからエレメントを見つけるコードを書いて」と指示すると、ちゃんと動くJavaScriptスニペットを書いてくれます。AutifyはJavaScriptステップを使って何でもできるようにするというローコード的な機能も用意しているのですが、ノーコードを目指す上でこれを本番に導入することができれば、複雑なJavaScriptステップも自然言語で「こういうことをして」と書くだけで自動化できるんじゃないか…と期待しています。
ChatGPTを使うことで、テスト自動化もさらに多くのプロセスが自動化していくのでは…と社内プロジェクトからも見えてきました。これをどう活用していくかについてはまだわからない部分も多いですが、AIを使ったより自動化された未来がやってくるんじゃないかなと、我々もとてもわくわくしています。
私の話はここまでです。ありがとうございました。