完全版:「ui自動テストツールとai」〜aiを使った自動テストの「今」と「未来」〜...

62
UI自動テストツールとAIAIを使った自動テストの「今」と「未来」〜 株式会社TRIDENT 伊藤望

Upload: nozomi-ito

Post on 28-Jan-2018

52 views

Category:

Software


0 download

TRANSCRIPT

「UI自動テストツールとAI」〜AIを使った自動テストの「今」と「未来」〜

株式会社TRIDENT伊藤望

About Mep伊藤望

p株式会社TRIDENT代表取締役n テスト自動化の支援を行うベンチャー

p コミュニティ運営

n 日本Seleniumユーザーコミュニティ

p執筆

About Me「SeleniumBootCamp」p Seleniumについて、1日で基礎から学ぶ講座(有料)

今日のお話

1. AI技術を使った自動テストサービス「MagicPod」

2. MagicPodの仕組み

3. MagicPod自身のAIエンジンのテスト

4. AI自動テストの今後の可能性

1.AI技術を使った自動テストサービス「MagicPod」

定型的な作業は、どんどん置き換えられていく

今、様々な仕事がAIに置き換えられつつある

p運転

p翻訳

p倉庫作業

p記事執筆

テストの領域における定型作業

主なテストの領域

テスト設計

テスト実行AIでもっと効率よくなりそう!

主に非定型作業

単純作業・繰り返し作業がかなり多い

AI技術を活用したテスト自動化

MagicPodp AIを活用した自動テストWebサービス

n ディープラーニングなどの機械学習技術などを活用

n 現在はモバイルアプリ向けのみ

p旧「MagicPot」から改名

コンセプト動画https://www.youtube.com/watch?v=f6SO9pZANas

デモ (Yahoo!乗換案内)https://www.youtube.com/watch?v=f6SO9pZANas

MagicPodニュースレター

pMagicPodの情報を定期的にお知らせ

2.MagicPodの仕組み

p 2通りの方式がある

1. テスト実行時検索方式

n 画面キャプチャだけでテストを作成

2. テスト作成時検索方式

n もう少しシステム情報を活用した方式

n 画像解析が間違っていたら手直しできる

n 実運用ではこちらをメインに使ってもらっている

テスト作成・実行エンジンの仕組み

1.テスト実行時検索方式

1.テスト実行時検索方式-テストを作成する-

①画像解析

②選んでテスト作成

1.テスト実行時検索方式-テストを実行する-

③Appiumスクリプトに変換

④コマンドラインから実行 ④CIで実行

1.テスト実行時検索方式-テストを実行する-

⑤実行時に再度画像解析

⑥対応するAppium要素を取得

UIATextField[1]

⑦Appiumで実行

1.テスト実行時検索方式-テストを実行する-

⑤実行時に再度画像解析

⑥対応するAppium要素を取得

UIATextField[1]

⑦Appiumで実行

「名前」入力エリア UIATextField[1]

の対応はキャッシュし、2回目からは高速に動作

2.テスト作成時検索方式

2.テスト作成時検索方式-テストを作成する-

②画像解析&対応する要素計算

①MagicPodDesktopで画像とUIツリー情報をアップロード

2.テスト作成時検索方式-テストを作成する-

③選んでテスト作成

テストスクリプト

UIマップ

④実行前にUIマップを作成可能

2.テスト作成時検索方式-テストを作成する-

テストスクリプト

UIマップ

• 画像解析で生成されたラベル• 人間が書き換えてもよい

2.テスト作成時検索方式-テストを実行する-

⑤そのままAppiumで実行

画像解析の詳細

人間は、画面要素をどう探しているか

p 「検索ボタンをクリック」と言われたら?

p見た目から「検索」アイコンや「ボタン」っぽいものを探してくる!

人間は、画面要素をどう探しているか

p 「名前入力エリアに伊藤望と入力」と言われたら?

p人間は、位置関係でUI要素のラベル付けをしている!

必要な要素技術

1. 「検索アイコン」「ボタン」を見た目から特定する

2. 位置関係でUI要素のラベル付けをする(Captioning)

検索ボタン

名前入力エリア

p ディープラーニング技術の得意分野

p畳み込みニューラルネットワーク(CNN)を使用p画像の種類を人間が教えた上で、大量に学習させる

p Googleの写真分類(1000クラス以上)ですらこのアプローチ

「検索アイコン」「ボタン」を見た目から特定する

p CNNを学習させる様子

これは「search」クラスだよ

これは「button」クラスだよ 学習させたデータに応じて、

重みパラメータが変化していく

「検索アイコン」「ボタン」を見た目から特定する

p学習したネットワークを使う様子

この画像は何のクラス?

「button」だよ!!

「検索アイコン」「ボタン」を見た目から特定する

p学習していないアイコンは認識できない

p間違えてもユーザーが直せる &見慣れないアイコンにはラベルが付いていることが多いので大丈夫

この画像は何のクラス?

わかりません..

「検索アイコン」「ボタン」を見た目から特定する

p ここは他の機械学習の手法を使用

「お名前」入力エリア

「ログイン」ボタン

「ICカード」エリア

位置関係でUI要素のラベル付けをする(Captioning)

p画像解析

1. 領域分割(独自ロジック)2. 各領域をCNNにかけて物体認識3. OCR(文字認識)4. Captioning5. 2.3.4.の結果をマージして表示

p 1.&2.が時代遅れ&低速なので改善したい。。n FastR-CNNn FasterR-CNNn SingleShotMultiBox Detector

画像解析の全体像

3.MagicPod自身のAIエンジンのテスト

1. 人間のように賢そうなプログラムをAIと呼ぶケース

2. 機械学習を使ったプログラムを指すケース

n データを学習させる作業が発生

n 学習データによって挙動が変わる

AIって何?

p学習データの一部をテストデータとして使い、正答率でエンジンの性能を測る (交差検証)

p機械学習エンジニアは、大抵このテストをしている

機械学習エンジンのテスト

テストデータ

①学習させる

エンジン

学習データ

②テストする③正答率が低いとNG

p正答率の数字だけでは気づかないこともある

p例:

1. 学習データを増やした

2. その結果、正答率が96%=>98%にアップ3. だが、これまで「ボタン」と認識できていた画像が認識できなくなった

機械学習エンジンのテスト

p どう学習されたかは、人間にはブラックボックス

n 意図せぬ結果が時々起きる

p学習ロジックの中に、ランダム処理がある(ことが多い)n 例:確率的勾配降下法:学習データの偏りをなくすため、毎回データをランダムに選んで学習

n 「データもロジックも変えてないのに、学習し直したら結果が変わった!」みたいなことが..

原因

p正答率を見る +きちんと動作して欲しい基本テストケースを自動テスト化

p開発中もこまめにテスト

MagicPod開発ではどうしているか

p失敗することはあるか

n わかりやすいアイコン等の識別は、通常失敗しない

n 人間も判断に困るような際どいデータの判定は、学習ごとに結果が変わりがち

p失敗した時の対策

n 対策1:間違えたデータを学習データに加えるn 対策2:とりあえず再学習n 対策3:諦めるn 対策4:機械学習ロジック自体の改良

基本テストケースが失敗したら

p現状世の中で機械学習が使われているところ

1. 不安定さを許容できる処理

n 投稿写真のタグ付け

n チャットボット

n 商品のレコメンド

2. 人間より精度が良い処理

n 工場の不良品検出

n 病気の原因診断

そんな不安定で大丈夫か?

p MagicPodは?n 不安定さを許容できる部分に機械学習を使っている

n 画像解析結果は、間違えてもユーザーが直せる

n テスト実行には、現状機械学習エンジンを使っていない

p自動運転は?n 画像認識の精度はすでに人間と同レベル?n センサーなど、非機械学習技術と併用?

そんな不安定で大丈夫か?

p不安定さを許容できる処理

p人間より精度が良い処理

機械学習は使い所が大事

4.AI自動テストの今後の可能性

人間向けのテストケースを理解したい

現在のMagicPod

メールアドレスに「[email protected]」を入力パスワードに「pass01」を入力ログインボタンをクリック

Input("id=mail","[email protected]")Input("id=pass","pass01")Click("loginbutton")

既存自動テストツールのコード

形式の決まった日本語の詳細ステップ

MagicPodの最終目標p人間向けの手動テストケースをAIが理解し自動実行

[email protected]/pass01でログイン

[email protected] pass01

MagicPodの最終目標

多くが「UI手動テスト」

1. Excel(など)でテストケース作成2. 人間がUIからテスト実施

世界で毎年テストに費やされている金額

15兆円 (推定)

MagicPodの最終目標

多くが「UI手動テスト」

1. Excel(など)でテストケース作成2. 人間がUIからテスト実施

世界で毎年テストに費やされている金額

15兆円 (推定)

この部分を置き換える

実現するには

[email protected]/pass01でログイン

メールアドレスに「[email protected]」を入力パスワードに「pass01」を入力ログインボタンをクリック

Input("id=mail","[email protected]")Input("id=pass","pass01")Click("loginbutton")

行間を読んで自動展開

既存自動テストツールのコードに変換

大変そう

できそう

行間を読んで自動展開 -アイデア1. MagicPodで、共通関数機能を提供

メールアドレスに{user}を入力パスワードに{pass}を入力ログインボタンをクリック

{user}/{pass}でログイン

ユーザーが、好きな名前で共通関数を作成できる

行間を読んで自動展開 -アイデア2. 共通関数名→処理名のビッグデータを学習すれば、自動展開できるように!

メールアドレスに{user}を入力パスワードに{pass}を入力ログインボタンをクリック

{user}/{pass}でログイン

行間を読んで自動展開 -アイデア2. 共通関数名→処理名のビッグデータを学習すれば、自動展開できるように!

メールアドレスに{user}を入力パスワードに{pass}を入力ログインボタンをクリック

{user}/{pass}でログイン

テスト設計も自動化したい

テスト設計の自動化

p背後のデータモデルの推定など、複雑な論理的思考が必要

pシステム仕様の背後にある、暗黙の常識を読み取る必要がある

テスト設計の自動化

p効率化は、色々できる

p完全自動化は当面無理では?n自動化された時は、おそらくシステム開発の仕事は全て自動化されている

AIとQAの未来

QAの仕事はどう変わっていくか

pテスト実行などの定型的な仕事は、少しずつ減っていくのではないか

pテスト設計などの、より創造性の必要なテストに注力できるはず

QAの未来はpテストの中に単純作業があることが、QAの地位や価値を下げている

p単純作業がなくなり、スキル(業務理解、ユーザー理解、テスト技法、等)勝負の世界になれば、QAの地位はむしろ向上するはず!

ご静聴ありがとうございました!