狠狠撸

狠狠撸Share a Scribd company logo
機械学習を活用した
テスト自動化システムの設計
2017.3.19	
株式会社TRIDENT
伊藤望
About Me
p 伊藤 望(いとう のぞみ)
p 株式会社TRIDENT	代表取締役
n テスト自動化支援?テストツール開発
p 執筆
これまでに作ったテストツール
1. Windowsアプリの記録?再生テストツール
n 記録?再生のエンジンから自作
2. Webの記録?再生テストツール
n エンジンから自作しようとして失敗
3. Excelベースのテストツール
これまでに作ったテストツール
4. ユニットテスト基盤フレームワーク
5. Selenium基盤フレームワーク
6. Seleniumテストレポートツール「Sahagin」
7. 機械学習を活用したテストツール「Magic	Pod」[NEW!]
今日のお話
1. Magic	Podの概要
2. Magic	Podを設計する
2.1 テスト実行エンジン
2.2 スクリプトの生成
2.3 スクリプトの形式
3. Magic	Podの細かい機能デモ
1.	Magic	Podの概要
Magic	Podとは
p 機械学習(ML)の技術を活用した自動テストWeb
サービス
n ディープラーニング技術などを利用
n 現在はモバイルアプリ向けのみ
p これまで作った数々のツールのノウハウを凝縮
p 「Magic	Pot」から改名しました
デモ(动画)
開発状況
p アルファユーザーテスト(1社)を開始
p 先行登録ユーザー限定体験ハンズオンを開催
p 现在は机能ギャップを埋めているフェーズ
Magic	Podの最終目標
p 人間向けの手動テストケースをAIが理解し自動実行
user@example.com	/	pass01	でログイン
user@example.com pass01
Magic	Podの最終目標
多くが「UI手動テスト」
1. Excel(など)でテストケース作成
2. 人間がUIからテスト実施
世界で毎年テストに
費やされている金額
15兆円 (推定)
この部分を置き換える
2.	Magic	Podを設計する
p Magic	Podをどう考えて開発してきたか
p 今後どんなことを実現しようとしているか
2.1	テスト実行エンジン
操作対象の指定方法は何がいい?
1. 画像テンプレートマッチ
n 例:				click(				 )
2. 座標指定
n 例: click(125,	230);
3. システム情報で指定
n 例: findElement(By.id("userInput")).click();
操作対象の指定方法は何がいい?
1. 画像テンプレートマッチ
n 例:				click(				 )
n 環境?画面変化に弱い
2. 座標指定
n 例: click(125,	230);
n 環境?画面変化に弱い
3. システム情報で指定
n 例: findElement(By.id("userInput")).click();
n 環境?画面変化に強い
既存手法では「システム情報」指定がベストだが..
操作対象の指定方法は何がいい?
- システム情報指定の問題点 -
p 内部構造を理解しないと読めない
p システム情報に外部からアクセスできないことがある
p 見つからない時のエラー原因がわかりにくい
p 開発者が変更することがある
n システム情報のキープは、開発者はあまり考えてくれない
操作対象の指定方法は何がいい?
- 人間はどうしているのか -
p 人間は、座標もシステム情報も見ていない!
p 画像マッチもしていない!
p 手動テストケースには、「検索ボタン」「名前入力エリ
ア」のように書いてある
検索ボタン 名前入力エリア
操作対象の指定方法は何がいい?
- 人間はどうしているのか -
p 人間は、見た目から「検索」アイコンや「ボタン」っぽい
ものを探している!
p 人間は、位置関係でUI要素のラベル付けをしている!
検索ボタン
名前入力エリア
操作対象の指定方法は何がいい?
- 目指すべき要素指定方法 -
p 人間のように要素を認識したい
p 「Magic」ロケータ
driver.findElement(By.magic("検索ボタン"));
driver.findElement(By.magic("名前入力エリア"));
操作対象の指定方法は何がいい?
- Magicロケータのメリット -
p 手動テストケースと同じ言葉。読みやすい
p 目で見える情報には必ずアクセスできる
p 見つからない時のエラーが目で見てわかる
p このレベルの見た目は、開発者はみだりに変えない
n ユーザーフローが変わってしまうので
Magicロケータ実装の要素技術
p 「検索アイコン」「ボタン」を見た目から特定する
p 位置関係でUI要素のラベル付けをする(Captioning)
検索ボタン
名前入力エリア
Magicロケータ実装の要素技術
p 「検索アイコン」「ボタン」を見た目から特定する
n ディープラーニング技術の得意分野
n 畳み込みニューラルネットワーク(CNN)を使用
n 画像の種類を人間が教えた上で、大量に学習させる
n Googleの写真分類(1000クラス以上)ですらこのアプローチ
p CNNを学習させる様子
これは「search」
クラスだよ
これは「button」
クラスだよ 学習させたデータに応じて、
重みパラメータが変化していく
Magicロケータ実装の要素技術
p 学習したネットワークを使う様子
この画像は
何のクラス?
「button」だよ!!
Magicロケータ実装の要素技術
p 学習していないアイコンは認識できない
p 見慣れないアイコンにはラベルが付いていることが多
いので、意外と大丈夫
この画像は
何のクラス?
わかりません..
Magicロケータ実装の要素技術
p 位置関係でUI要素のラベル付けをする(Captioning)
p ここは他の機械学習の手法を使用
「お名前」入力エリア
「ログイン」ボタン
「ICカード」エリア
Magicロケータ実装の要素技術
p 画像解析
1. 領域分割(独自ロジック)
2. 各領域をCNNにかけて物体認識
3. OCR(文字認識)
4. Captioning
5. 2.	3.	4.の結果をマージして表示
p 1.&	2.	が時代遅れ&低速なので改善したい。。
Magicロケータ実装の要素技術
p 2通りの方式がある
1. テスト実行時ロケータ計算方式
n Magicロケータの理想をきちんと実現
n デモで見せた方式
2. テスト作成時ロケータ計算方式
n もう少しシステム情報を活用した方式
n 画像解析が間違っていたら手直しできる
テスト実行エンジンの全体像
1.	テスト実行時ロケータ計算方式
1.	テスト実行時ロケータ計算方式
-テストを作成する-
①画像解析
②選んでテスト作成
1.	テスト実行時ロケータ計算方式
-テストを実行する-
③Mochaテストコードに変換
④コマンドラインから実行 ④CIで実行
1.	テスト実行時ロケータ計算方式
-テストを実行する-
⑤実行時に再度画像解析
⑥対応するAppium要素を取得
UIATextField[1]
⑦Appiumで実行
1.	テスト実行時ロケータ計算方式
-テストを実行する-
⑤実行時に再度画像解析
⑥対応するAppium要素を取得
UIATextField[1]
⑦Appiumで実行
「名前」入力エリア UIATextField[1]
の対応はキャッシュし、
2回目からは高速に動作
2.	テスト作成時ロケータ計算方式
2.	テスト作成時ロケータ計算方式
-テストを作成する-
②画像解析&
ロケータ計算
①Magic	Pod	Desktopで画像と
UIツリー情報をアップロード
2.	テスト作成時ロケータ計算方式
-テストを作成する-
③選んでテスト作成
テストスクリプト
UIマップ
④実行前に
UIマップを作成可能
2.	テスト作成時ロケータ計算方式
-テストを作成する-
テストスクリプト
UIマップ
? 画像解析で生成されたラベル
? 人間が書き換えてもよい
2.	テスト作成時ロケータ計算方式
-テストを実行する-
⑤そのままAppiumで実行
テスト実行エンジンの改良
p 物体認識ロジックの改善
n Fast	R-CNN、Faster	R-CNN、Single	Shot	MultiBox Detector
p UI操作をAppium非依存に
n 強化学習でUIコンポーネントの種類ごとに操作法を学習
させるアプローチは?
p 内部で使用するロケータを、よりRobustなものに
n Selenium	IDEより63% Robustなロケータで記録する論文を
先日発見
p 主に論文を読んで頑張る感じ
p ピンと来た方はお話しましょう!
2.2	スクリプトの生成
- キャプチャ&リプレイをサポートすべきか -
キャプチャ&リプレイを
サポートすべきか?
p キャプチャ&リプレイ(操作自動記録)には問題が多い
n スクリプトの可読性が極めて低い
n 画面定義の共通化などができない
だがそれはしょぼい記録再生ツールの話
キャプチャ&リプレイを
サポートすべきか?
p UIマップを使って記録すれば、問題は解決可能
n 可読性が高い &	共通化もできている
p あのSelenium	IDEですら、
n UIマップを事前に作っておけば、
n キレイなスクリプトとして記録されます!
キャプチャ&リプレイを
サポートすべきか?
p が、キャプチャ&リプレイには、他にも問題がある
p 間違えた時の試行錯誤が地味に面倒
n スクリプトの一部だけを再記録したい
n 押し忘れたボタンがあったことに後から気づいた
p 記録対象の画面に遷移するまでの手数が面倒
p テスト環境がシステムが低速なことがある
n Appium?エミュレータ起動
n 貧弱なテストサーバ、低速な通信
Magic	Podのアプローチ
p 実UIの画面をサーバ上に再現し、そこでテスト作成
p 目的の画面に高速に遷移できる
p 実环境よりも动作が軽快
Magic	Podのアプローチ
p クリックだけでコマンド行追加できれば、キャプチャ&
リプレイと同じテスト作成スピートに
Magic	Podのアプローチ
- デメリット -
p 1つのUIが複数の画面状態を持つケース
n スクロール?ポップアップ,	etc
p 現状は、複数枚アップロードする必要がある
2.3	スクリプトの形式
- 表形式かプログラムコードか -
スクリプトはどんな形式にすべきか?
1. 表形式
n Excel、etc
2. プログラムコード
n Java、Ruby、etc
1. 表形式
n メリット:ノンプログラマでも扱える
n デメリット:高度な処理?柔軟な処理が難しい
2. プログラムコード
n メリット:高度な処理?柔軟な処理でも書ける
n デメリット:プログラマでないと辛い
スクリプトはどんな形式にすべきか?
このトレードオフをどうするか
Magic	Podのアプローチ
相互変換可能にすればいい!
Magic	Podのアプローチ
画面要素を選ぶだけの単純作業は、
Web画面で効率よく!
複雑な処理はプログラムコードで!
開発者?QAの協調作業も容易に!
p で、どうやるの?
Magic	Podのアプローチ
既にできている
この時のために、
昔作ったやつがある
p Sahagin
n Seleniumテスト結果を表形式レポートにするツール
プログラムコード =>	表形式 変換
p Sahaginの仕組み
プログラムコード =>	表形式 変換
inputById("userInput", "Magic太郎");
inputById
"userInput" "Magic太郎"
抽象構文木(AST)
表形式
静的に構文解析
テストコード
p UIテストで必要な主な構文は、ほぼ扱える見込み
p ASTの仕様も決めてドキュメント化した
p Java(静的型)でもGroovy(動的型)でもできた
p GebみたいなASTがやばそうなヤツでもできた
プログラムコード =>	表形式 変換
p Sahaginの構文解析ロジックをnode.jsに移植
p ほぼできた
p これを今後組み込んで行く予定
プログラムコード =>	表形式 変換
p あらゆるテストコードを表形式に変換できるのか
プログラムコード =>	表形式 変換
できない
p Selenium	IDE(+プラグイン)で表現できる
「If」「for」「while」「変数」「返り値」程度まで
n それ以上やると、表形式でも読めなくなる
p 複雑な処理は、補助メソッドを作って隠蔽してもらう
p 複雑な処理側
p 表形式テストケース側
n 複雑さを意識せず使える
プログラムコード =>	表形式 変換
次の祝日でない月曜を取得
3.	Magic	Podの細かい機能デモ
机械学习を活用したテスト自动化システムの设计
お知らせ
pβユーザー先行登録受付中
ありがとうございました!

More Related Content

What's hot (20)

PDF
抽出型要约と言い换えによる生成型要约の训练データ拡张
MENGSAYLOEM1
?
PDF
机械学习モデルの判断根拠の説明
Satoshi Hara
?
PPTX
ソフトウェアの品质保証の基础とこれから
Yasuharu Nishi
?
PDF
ソフトウェアテストの歴史と近年の动向
Keizo Tatsumi
?
PPTX
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
?
PPTX
アジャイルメトリクス実践ガイド
Hiroyuki Ito
?
PDF
ドラレコ + CV = 地図@Mobility Technologies
Kazuyuki Miyazawa
?
PDF
研究発表を準备する
Takayuki Itoh
?
PDF
异常音検知に対する深层学习适用事例
NU_I_TODALAB
?
PDF
学振特别研究员になるために~2020年度申请版
Masahito Ohue
?
PDF
[DL輪読会]Non-Autoregressive Machine Translation with Latent Alignments
Deep Learning JP
?
PDF
Neural text-to-speech and voice conversion
Yuki Saito
?
PPTX
础驳颈濒别开発でのテストのやり方~私の场合~
Mineo Matsuya
?
PDF
レコメンドエンジン作成コンテストの胜ち方
Shun Nukui
?
PDF
Data-Centric AIの紹介
Kazuyuki Miyazawa
?
PDF
翱辫迟颈尘颈锄别谤入门&最新动向
Motokawa Tetsuya
?
PDF
Paradigm shifts in QA for AI products
Yasuharu Nishi
?
PPTX
颈辫蝉箩全国大会発表スライド冲水野
siramatu-lab
?
PDF
机械学习の未解决课题
Hiroyuki Masuda
?
PDF
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
Akinori SAKATA
?
抽出型要约と言い换えによる生成型要约の训练データ拡张
MENGSAYLOEM1
?
机械学习モデルの判断根拠の説明
Satoshi Hara
?
ソフトウェアの品质保証の基础とこれから
Yasuharu Nishi
?
ソフトウェアテストの歴史と近年の动向
Keizo Tatsumi
?
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
?
アジャイルメトリクス実践ガイド
Hiroyuki Ito
?
ドラレコ + CV = 地図@Mobility Technologies
Kazuyuki Miyazawa
?
研究発表を準备する
Takayuki Itoh
?
异常音検知に対する深层学习适用事例
NU_I_TODALAB
?
学振特别研究员になるために~2020年度申请版
Masahito Ohue
?
[DL輪読会]Non-Autoregressive Machine Translation with Latent Alignments
Deep Learning JP
?
Neural text-to-speech and voice conversion
Yuki Saito
?
础驳颈濒别开発でのテストのやり方~私の场合~
Mineo Matsuya
?
レコメンドエンジン作成コンテストの胜ち方
Shun Nukui
?
Data-Centric AIの紹介
Kazuyuki Miyazawa
?
翱辫迟颈尘颈锄别谤入门&最新动向
Motokawa Tetsuya
?
Paradigm shifts in QA for AI products
Yasuharu Nishi
?
颈辫蝉箩全国大会発表スライド冲水野
siramatu-lab
?
机械学习の未解决课题
Hiroyuki Masuda
?
JaSST Tokyo 2022 アジャイルソフトウェア開発への統計的品質管理の応用
Akinori SAKATA
?

More from Nozomi Ito (18)

PPTX
WebサイトもモバイルアプリもMagic Podで自動化
Nozomi Ito
?
PPTX
Understand the AI-powered test automation with Magic Pod
Nozomi Ito
?
PDF
基礎からわかる、機械学習のソフトウェアテストのへの適用例 - 「Bag Of Words」を使った「類似チケットの検索」
Nozomi Ito
?
PDF
ディープラーニングと础辫辫颈耻尘でモバイルテスト自动化
Nozomi Ito
?
PPTX
第4回日本蝉别濒别苍颈耻尘ユーサ?ーコミュニティ勉强会
Nozomi Ito
?
PDF
もし础辫辫颈耻尘とディープラーニングを组み合わせたら
Nozomi Ito
?
PDF
Selenium boot campの紹介
Nozomi Ito
?
PDF
第3回日本蝉别濒别苍颈耻尘ユーサ?ーコミュニティ勉强会
Nozomi Ito
?
PDF
「厂别濒别苍颈耻尘実践入门」て?学ふ?テスト自动化の世界
Nozomi Ito
?
PDF
础辫辫颈耻尘のテスト结果レホ?ートを蝉补丑补驳颈苍て?作ってみる
Nozomi Ito
?
PDF
去年のデブサミの「日本厂别濒别苍颈耻尘ユーザーコミュニティ」の尝罢が真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった结果飞飞
Nozomi Ito
?
PDF
骋鲍滨自动テストの保守性を高めるには
Nozomi Ito
?
PDF
第2回日本蝉别濒别苍颈耻尘ユーザーコミュニティ勉强会
Nozomi Ito
?
PDF
海外の厂别濒别苍颈耻尘カンファレンスではどんな発表がされているのか2014
Nozomi Ito
?
PDF
【短缩版】翱厂厂のブラウザ自动テストツール「厂别濒别苍颈耻尘」を使った、开発?テストの効率化
Nozomi Ito
?
PDF
翱厂厂のブラウザ自动テストツール「厂别濒别苍颈耻尘」を使った、开発?テストの効率化
Nozomi Ito
?
PDF
4时间で学ぶ、効率的な自动テストスクリプトのメンテナンス
Nozomi Ito
?
PDF
実践で学ぶ、効率的な自动テストスクリプトのメンテナンス
Nozomi Ito
?
WebサイトもモバイルアプリもMagic Podで自動化
Nozomi Ito
?
Understand the AI-powered test automation with Magic Pod
Nozomi Ito
?
基礎からわかる、機械学習のソフトウェアテストのへの適用例 - 「Bag Of Words」を使った「類似チケットの検索」
Nozomi Ito
?
ディープラーニングと础辫辫颈耻尘でモバイルテスト自动化
Nozomi Ito
?
第4回日本蝉别濒别苍颈耻尘ユーサ?ーコミュニティ勉强会
Nozomi Ito
?
もし础辫辫颈耻尘とディープラーニングを组み合わせたら
Nozomi Ito
?
Selenium boot campの紹介
Nozomi Ito
?
第3回日本蝉别濒别苍颈耻尘ユーサ?ーコミュニティ勉强会
Nozomi Ito
?
「厂别濒别苍颈耻尘実践入门」て?学ふ?テスト自动化の世界
Nozomi Ito
?
础辫辫颈耻尘のテスト结果レホ?ートを蝉补丑补驳颈苍て?作ってみる
Nozomi Ito
?
去年のデブサミの「日本厂别濒别苍颈耻尘ユーザーコミュニティ」の尝罢が真面目すぎてイマイチだったので、今年は何とかしようと色々がんばった结果飞飞
Nozomi Ito
?
骋鲍滨自动テストの保守性を高めるには
Nozomi Ito
?
第2回日本蝉别濒别苍颈耻尘ユーザーコミュニティ勉强会
Nozomi Ito
?
海外の厂别濒别苍颈耻尘カンファレンスではどんな発表がされているのか2014
Nozomi Ito
?
【短缩版】翱厂厂のブラウザ自动テストツール「厂别濒别苍颈耻尘」を使った、开発?テストの効率化
Nozomi Ito
?
翱厂厂のブラウザ自动テストツール「厂别濒别苍颈耻尘」を使った、开発?テストの効率化
Nozomi Ito
?
4时间で学ぶ、効率的な自动テストスクリプトのメンテナンス
Nozomi Ito
?
実践で学ぶ、効率的な自动テストスクリプトのメンテナンス
Nozomi Ito
?
Ad

机械学习を活用したテスト自动化システムの设计