人工知能を用いてWebサイトのテストを自動化する

f:id:masahirotanaka:20190311104756p:plain

お久しぶりです、田中です。

先日、ハンガリーからITWare kft.社が来日されたこともあり、共同でセミナーを行いました。ITWare社とは一緒にプロジェクトを行ったり、エンジニア同士の交流もあったりと、長い付き合いをさせて頂いています。

さて、ITWare社ではCV&Deep Learningを用いた自動化テストを検討されているという事で、私も実際に世の中に出ている「人工知能」を用いたテストソリューションをいくつか評価しました。

f:id:masahirotanaka:20190311091702p:plain
セミナーの様子

自動化テストとは?

関数単位で実行するユニットテストや、WebDriverを用いたE2Eテスト、そしてSeleniumなど、Webアプリケーションをテストするための手法とツールには色々なものがあります。これらのテストツールは、人間がポチポチと手を動かして動作を確認するのではなく、あらかじめ作成したレシピに従って、ツールが自動的にテストを行っていきます。

また、それらのテストツールを手動で叩くのではなく、継続的インテグレーション(CI)の一環として、コードをプッシュした際に、自動的にテストを実行させることもできます。

これらが、いわゆる「自動化テスト」となります。実際にアシアルでも、このレベルの自動化は行っています。例えば、Onsen UIというUIフレームワークを開発していますが、CircleCIKarmaを組み合わせて自動化テストを行っています。

自動化テストの問題点

人間が手を動かすことに比べると大分楽になるのですが、それでも大変な部分があります。たとえば、下記のような点です。

1. テストケースのメンテナンスが必要

少しでも結果やHTML構造が変わってしまった場合、テストに失敗してしまいます。たとえば、ボタン名を「保存」から「保存する」に変えただけでも、それを判定条件に指定している場合には、失敗することになります。こうした細かい改修は日常で発生するため、テストケースもその都度書き直す必要があり、その労力はなかなか大変です。

2. 実際に出力された画面を評価しない

自動化テストが成功していても、実際にアプリケーションに問題が無いと言い切れる訳ではありません。特に、ブラウザーのバグなどで、特定のCSSの組み合わせで画面が崩れてしまうケースもありますが、それらを自動化テストで見抜くことはできません。

AIテストソリューションの実例

そこで、自動化テストに機械学習(人工知能)を活用することで、上記のような課題を解決しようという取り組みがはじまっています。既に海外ではいくつかのAIテストソリューションが登場しており、フリートライアルを備えるものもあります。そのなかで、私が試してみて、「おっ」と思ったものを紹介したいと思います。

1. Mabl: Advancing QA using ML

Selenium IDEと似た*1Chromeエクステンションをインストールし、テスト対象となるWebアプリに対して、人間が画面上を操作していきます。その操作をMablが「記憶」し、次回からは同じテストを実行します。Mablのクラウドでテストを実行するため、コードのプッシュ時や定時処理などのタイミングで、勝手に実行してくれます。

アプリに変更が加わった場合、Mablは「人工知能」により、ある程度の変更までであれば問題なくテストを遂行してくれます。Monaca(弊社が開発するアプリ開発クラウド)をターゲットにして色々と試したところ、DOMの変更については追随してくれました。

f:id:masahirotanaka:20190311091236p:plain
Mablの人工知能の賢さを評価する

他にも、mablは実行画面を学習し、以前と大きく異なる画面が表示された場合に検知するなど、いくつか人工知能を用いた仕組みが組み込まれています。

実際にMonacaをMablがテストする様子をキャプチャしました。記憶した操作に基づいて、自分で考えながらテストを進めていることが分かります。Seleniumを賢くしたもの、という印象でした。

2. Functionize: Autonomous Testing

Mablをより“賢く”したのがFunctionizeです。こちらは、Mablと同様に人間が指示したテストを行い、Functionaizeクラウドがそのテストを実行していきます。一方、Mablとは決定的に違うのは下記の2点です:

  • 人間は文章でテストケースを記述する
  • Functionizeは自分でそのテストケースから手順を学んでいく

Functionizeのテストケースは自然言語、すなわち単なる文章です。その文章をNLPにより人工知能が解析し、対象となるWebサイトに対して実行していきます。

Image with no description

テストケースの作成が簡単になるだけでなく、DOMに依存しないエンジンで動いているため、ネイティブモバイルアプリへの対応も比較的すぐにに行えるのではと期待しています。

3. Applitools: AI powered visual testing and monitoring

Applitools EyesはMablやFunctionizeの画像認識エンジンだけを抜き出し、強化させたようなソリューションです。具体的には、PCやモバイルOSの様々なブラウザーに対して、同じページを表示し、以前の状態との見た目上の違いや崩れを検出することができます。

また、これはFunctionizeにもありますが、「Root Cause Analysis」という機能が備わっています。実際にテストを行うと、大量に変更点が検出されてしまい、どれが根本的な問題なのかが分からないという事があります。これを解析し、「そもそもの原因」なのかを調べるのが、このRoot Cause Analysisという機能になります。

この仕組みのおかげで、Applitoolsは本当に問題のある違いだけを報告することができます。

AIテストツールのこれから

こうしたベンダーも説明している通り、現時点では、まだまだ人工知能が完全にソフトウェアをテストしてくれる、という領域には達していません。下記のように、自動車の自動運転に倣い、テストツールのレベルを定義づけしたものがあります。これに従っても、市場で使えるAIテストツールはレベル1か、せいぜいレベル2に該当するものしか存在しません。

f:id:masahirotanaka:20190311102450p:plain

それでも、これまで労働集約的に行っていたテストが一部でも自動化されることには、大きなメリットがあります。ベンダー間の競争もあり、今後こうしたツールが進化していくことは、デベロッパーとしては大歓迎です。

弊社(アシアル)も、Monacaという開発プラットフォームを通じて、この分野に利用者の皆さんが課題を抱えていると感じています。こうしたAIテストツールに興味がある方は、ぜひ弊社にお声がけください!

*1:ちなみに今のSelenium IDEは以前のものと比べられないほど進化しています。昔評価して残念に思った方は、もう一度トライしてみてはいかがでしょうか。