BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 人工知能でソフトウェアをテストする

人工知能でソフトウェアをテストする

ブックマーク

原文(投稿日:2018/06/07)へのリンク

読者へのメモ:あなたのリクエストに応じて、ノイズを減らす機能を開発しました。大切な情報を見逃さないよう、お気に入りのトピックを選択して、メールとウェブで通知をもらいましょう新機能についてさらに学びましょう

コンピュータビジョンアルゴリズムと現代の人工知能(AI)技術の適用が進歩し、ビジュアルテストを書くことは現実的になった。テストでAIを使えば、自律テストは可能になる。退屈で機械的なタスクはAIに任せて、テスタは考えることができる。

エバンジェリストでApplitoolsのシニアアーキテクト、Gil Tayar氏がCraft Conference 2018において、AI技術が自律テストにもたらしたものについて話した。InfoQは、インタビューでこのイベントを扱っている。

InfoQは、今日、テストが直面している主なチャレンジ、自律的テストの6レベル、ソフトウェア産業がこれらのレベルに対してしていること、ビジュアルテストを自動化してできること、テストで機械学習をどのように使えるか、そして、AIがテスタの仕事に与える影響について、Tayar氏にインタビューした。

InfoQ:あなたの意見では、今日、テストが直面している重要なチャレンジは何ですか?

Gil Tayar氏:テストは、残念なことに、まだ主流ではありません。私は、ずっと昔の80年代や90年代の時代を覚えています。QAの考え方や人がソフトウェアをテストすることは笑われていました。自動化されていないだけでなく、いずれにせよテストはありませんでした。ありがたいことに、業界はそれ以上に進化して、テスタは出荷前にソフトウェアを定期的にテストし、その多くはテストの自動化を使っています。

しかし、今日の「インターネットの時代」では、それは十分ではありません。アジリティは、私たちにますます速くデプロイするよう強制します。それはよいことです! 開発者自身がソフトウェアをテストし始めることを強いて、ソフトウェアをテストするのに、(付け加えるならば、なまけて) 監視役のテスタに頼らないのはよいことです。

しかし、開発者が自分の書いたソフトウェアをテストしなければならないという考え方は、まだ主流ではありません。大抵の開発者は、自分のコードをチェックするテストを書きません。自分でテストするか、ソフトウェアが正しく動作していることを確認するためにテスタに頼ります。

そして、これが、テストが直面している重要なチャレンジです。開発者に自分のテストを書かせるのです。そして、残念ながら、AIはここでは役に立ちません! AIはツールであり、テストの時に使われます。しかし、テストしなければ、AIは役に立ちません。そうです、AIはテストの役に立ちます(将来は、もっと役に立つでしょう)が、テストしないならば、AIはあなたの助けにはなりません。

開発者はテストの考え方を採用しなければなりません。これが、私たちがテストについて直面している重要なチャレンジです。

InfoQ:あなたの話の中で、6レベルの自律テストが挙げられました。6レベルの自律テストとは何ですか?

Tayar氏:これらは、自律運転の5レベルと同じようなものです。AIがテストでどのくらい役に立つかを述べています。

  1. 自律性がなくてもかまいません。テストを書くことは自分でできます!
  2. 運転補助: AIはページを見て、あなたがアサーションを書くのを手助けできます。あなたは、まだ、アプリケーションを「運転する」コードを書きますが、AIはページをチェックして、その中の期待値が正確な値であることを保証します。
  3. 部分自動化: 実際のページと期待したもの(ベースライン)の間の差異を見るだけでもよいでしょう。しかし、レベル2のAIがここで必要なのは、より高いレベルの理解です。例えば、すべてのページが同じ変更を含むならば、AIは、それが同じページで、1つの変更として人に示すことを理解するでしょう。さらに、AIはページのレイアウトとページの内容を見て、それぞれの変更を内容の変更か、レイアウトの変更に分類します。これは、レスポンシプなウェブサイトをテストしたいときに役に立ちます。レイアウトの変更がわずかな場合、コンテンツは同じはずです。これは、Applitools Eyesのようなレベルツールです。
  4. 条件付き自動化:レベル2では、ソフトウェアで検知した失敗や変更が人間によって検査される必要があります。レベル2 AIは、変更を分析するのを手助けしますが、ページを見ただけで、ページが正しいかどうかは理解できません。比較する基準が必要です。しかし、レベル3 AIは、ページに機械学習の技術を適用できるので、もっと多くのことができます。例えば、レベル3 AIは、ページの視覚的な側面を見ることができ、整列規則、空白の使用、色とフォントの使い方、レイアウト規則のようなデザインの標準規則に基づき、デザインがオフかどうか分かります。AIは、ページのコンテンツを見ることができ、同じページの前回の見え方に基づき、人間が干渉しなくても、コンテンツのつじつまが合っているかどうか決定できます。私たちは、まだそこまでではありませんが、そこに到達しようとしています。
  5. 高度な自動化: 今までで、AIがしたことは、自動的にチェックを実行したことです。人間は、まだテストを動かし、(たとえ自動化ソフトウェアを使っても) リンクをクリックします。レベル4は、AIがテストそのものを動かすところです。AIは、実際のユーザがアプリを動かすのを見て、テスト自体の動かし方を理解できます。今では、AIはテストを書き、ページをテストするチェックを書くことができます。しかし、これは最終局面ではありません。まだ作業中の人間を観察する必要があるでしょう。そして、時には、人間のテスタを据え置く必要があるでしょう。
  6. 完全な自動化:私にとって、このレベルは少しSFのようだと認めなければなりません。このレベルでは、AIは製品マネージャと「会話」し、製品の仕様を理解し、テスト自体を書きます。人間は必要ありません。

InfoQ:これらのレベルと比較して、ソフトウェア業界はどうですか?

Tayar氏:いくつかの企業は、間違いなくレベル2の段階で、レベル3へと向かっています。レベル4は時間がかかると思いますが、私たちはそこまで到達するでしょう。レベル5に関してはどうでしょうか? 私は懐疑的ですが、ヘブライ語ではこのように言っています:「2番目の寺院の破壊から、預言はバカか赤ん坊にだけ与えられてきた。」

InfoQ:自動ビジュアルテストに対して何ができますか?

Tayar氏:奇妙なことに、2、3年前、ビジュカルテストは開発者によって自動化さえできませんでした。ましてやAIなんて! アプリのスクリーンショットを撮って、ベースラインに対してそれをチェックするという考えはばかげていて、素朴なピクセルベースのアルゴリズムによって生成される誤検出の量が実際的には多すぎました。

しかし、コンピュータビジョンアルゴリズムの進歩と現代のAI技術の適用により、ビジュアルテストを書くことは実際的になりました。テストを考えた時に、ビジュアルテストは、欠けているパズルのピースです。すべてはテストすべきだったのが、今ではビジュアルテストのおかげで、すべてがテストできます

では、これらすべての誤検出を取り除き、ピクセルを比べる素朴なアルゴリズムよりもよりよくするには、AI技術をどのように使いますか? この答えは、1つの技術ではありません。様々なアルゴリズムの合成で、それぞれ1つが、正確なパズルの1ピースを与えてくれます。様々なアルゴリズム(1つのアルゴリズムが他のものに結果を与えることがある)の結果を組み合わせる決定ツリーが、最終結果を決定します。しかし、どのような種類のアルゴリズムが使われていますか? 1つの例は、私たちのセグメンテーションアルゴリズムでしょう。このアルゴリズムは、画像のどの部分がテキストで、どの部分が画像かを決定しようとします。これは、些細な問題ではありません。絵文字のようなものはテキストであることを判別する必要があります。または、画像の中のテキストは画像の一部であり、何か新しいテキストではありません。このようなところで、ディープラーニング技術は本当に輝きます。私たちはコードでこの技術を使ったので、私たちの正確さは88%から96%に上がりました。

そして、ビジュアルテストを自動化するために、Applitools Eyesのような、現代のビジュアルテストツールを使うことができます。これらのツールは簡単で進んだAI技術を作り上げ、そのような技術をあなたが理解して実装する必要性を取り除きます。この例を見てください。

この例では、ブログアプリケーションを検証します。いつものビジュアルでもAIでもないテストでは、ホームページを検証し、特定のブログ投稿を検証するには、ページのそれぞれの要素について何十ものチェックが必要になるでしょう。(そして、おそらくいくつかは見落とすでしょう...) しかし、例では、私たちはただ「checkWindow」して、スクリーンショットがサーバにアップロードされ、サーバはスクリーンショットを検証するためにAI技術を使用します。

テストは開発プロセスから恐怖を取り除くと、私はいつも言ってきました。自分たちのコードに機能を追加する恐怖を取り除きます。もっと重要なことは、自分たちのコードをリファクタリングする恐怖を取り除きます。しかし、どうしてビジネスロジックに適用されただけのコードの変更に対する恐怖を軽減すべきなのでしょうか? コードを変更する恐怖を取り除きながら、どうして私たちのビジュアルコード(CSS、HTML、JSファイルの中の)もまたテストできないのでしょうか? AIの進歩が、ついにこれを可能にします。

Appraiseは、ビジュアルテストで使えるもう1つのツールです。以前、InfoQは、Appraiseでビジュアルテストを自動化することについて、Gojko Adzic氏にインタビューしました。

Adzic氏:Appraiseは、例によって仕様にアプローチしますが、それをビジュアルに適用します。具体的な例を取り上げ、実行可能な仕様を作成するために自動レイヤを通してそれらをプッシュし、スクリーンショットの一部を取るためにヘッドレスChromeを使い、期待した結果と比較します。期待したものと実際の結果に違いがあるところが間違っているとする、通常の例による仕様のツールと違って、Appraiseは承認テストアプローチを取ります。人が見直すべき違いをすべて示し、その違いが正しいかどうか人に決めさせて、正しければ、それを承認します。

InfoQ:どのようにテストに機械学習を利用できますか?

Tayar氏:私は、最近、Candy Crushをテストするためにテスタが機械学習を使うという講演を見ました。(はい、あのゲームです。) Candy Crushは、非常にランダムなゲームなので、何事も起こり得ます。標準的なテスト技術を実装するのは難しいでしょう。Kingの目的は、レベルが解決可能か、そして、どのくらい難しいかを理解することでした。まず、すべてのパスを試す力ずくの技術で始め、それらのうちどれくらい成功したかを確認しました。それはうまくいきました(悪い組み合わせを除くアルゴリズムによって導かれました)が、組み合わせの数は天文学的な数字なので、何時間も掛かりました。この問題を解決するために、遺伝的アルゴリズムを使いました。この技術の中で、いくつかのベースアルゴリズム(いつもピンクキャンディを使う、いつも障害物を取り除こうとする等)を取り出し、1つのレベルで試しました。それから、最高のアルゴリズム(どのようにレベルを終了させたか、また終了させられたかに基づき)を取り出し、2つを組み合わせたアルゴリズムを作り出すために、それらを「しつけ」ます。これらのプロセスを続け、ついにやることがうまくいくアルゴリズムに到達します。

もう1つの例は、私たちが画像を分析して、それから意味論上の情報を抽出できるようになる畳み込みニューラルネットワークです。これは、画像を生成するアプリケーションで役に立ちます。上記で概要を述べた通り、ビュアルテストツールは、ページの異なる部分とお互いがどのように関連するかを理解し、異なるテキストと画像ブロックを抽出するために、この技術を使います。

InfoQ:テスタの仕事に対して、AIがどのような影響を与えると予想しますか?

Tayar氏:トラクタは農夫にどのような影響を与えましたか? とても大きな影響です! 農夫は、機械的でつまらない、肉体的に厳しい仕事をかなり減らし、それらを機械に任せられるようになりました。私は、テストでAIに同じことが起こると信じています。つまらなくて機械的なタスクはAIに任せ、テスタはいつもしているべきこと:考えることをしなければなりません。

大抵のテスタは順応する必要はないでしょう。考えることを沢山していますから。製品について考えること、それをどのようにテストするか、限界値がぎりぎりのケースか等、そして、うんざりするタスクを軽減するツールを探しています。順応する必要があるテスタもいます。より高いレベルの考えるタスクを始めましょう。えぇ、確かに順応できないテスタもいます。それでも私はそのようなテスタは少数派だと思います。

 
 

Rate this Article

Adoption Stage
Style
 

この記事に星をつける

おすすめ度
スタイル

BT