Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
8種類の対応デバイスを持つUnity製SaaSのUnityバージョンをアップデートしたときに行...
Search
uechan16
September 13, 2024
Technology
0
84
8種類の対応デバイスを持つUnity製SaaSのUnityバージョンをアップデートしたときに行った回帰テストの自動化手法 #sqip2024
uechan16
September 13, 2024
Tweet
Share
More Decks by uechan16
See All by uechan16
Unity製モバイルアプリを自動テストする仕組みを作ってみた
uechan16
0
390
都市XRの裏側 リアルメタバースのQAとは!
uechan16
0
58
Other Decks in Technology
See All in Technology
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
260
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
120
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
2
710
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
390
普通のエンジニアがLaravelコアチームメンバーになるまで
avosalmon
0
130
20241220_S3 tablesの使い方を検証してみた
handy
4
700
効率的な技術組織が作れる!書籍『チームトポロジー』要点まとめ
iwamot
2
120
podman_update_2024-12
orimanabu
1
290
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
190
APIとはなにか
mikanichinose
0
120
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
5
720
Google Cloud で始める Cloud Run 〜AWSとの比較と実例デモで解説〜
risatube
PRO
0
120
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
460
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Faster Mobile Websites
deanohume
305
30k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Being A Developer After 40
akosma
88
590k
Designing for humans not robots
tammielis
250
25k
A Tale of Four Properties
chriscoyier
157
23k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
180
Transcript
8種類の対応デバイスを持つ Unity製SaaSのUnityバージョンを アップデートしたときに行った 回帰テストの自動化手法 2024.09.13.
情報系の工業高校を卒業後、大手メーカーのソフトウェアおよび ファームウェア品質保証部門に就職。 日々のテスト業務の傍ら、プログラミングの知見を活かしてGUI のテスト自動化システムの構築などを行う。 その後、「STYLY」に一人目QAとして転職。 PROFILE STYLY株式会社 QAエンジニア 井之上 心也
None
STYLY とは? XRの制作配信プラットフォーム ARやVRの作品をWeb/Unityを介して制作し VRゴーグル、スマートフォン、Webサイトで閲覧できる Unityをベースに開発している UnityでできることはほとんどSTYLYでも動きます C#スクリプトは動かないが、代わりにノードベースでプログラムを組めるライブラリに対応 ローンチしてから6年 Unityアップデートは3回目だが、自分がjoinしてからは初
XRとは? MR (複合現実) AR (拡張現実) VR (仮想現実)
XR XRとは? MR (複合現実) AR (拡張現実) VR (仮想現実)
STYLY 関係図 XR 作品制作 Webブラウザ Unityからの アップロード XR 作品配信 VRゴーグル
スマホ Webサイト
STYLY のUnity バージョンは2019 LTS
Unity 2019 LTS は2022年にサポートが切れ た
バージョンアップしないと 新しいライブラリを入れられない!
STYLY の開発体制 Unityエンジニア 3人 QA 1人 EM 1人 ※バックエンドと兼任 フロントエンド
1人 PdM 1人
STYLY のサポートデバイス 役割 プロダクト識別名称 デバイス名 XR作品閲覧 STYLY VR Meta Quest2/3
Pico 4/4 E STYLY Mobile Viewer Android iOS SATCH X Android iOS STYLY WebClient Chrome Safari FireFox XR作品制作 STYLY Studio Chrome Safari FireFox リリースするときに作成しないといけないビルドの数は 8個
STYLYにアップロードされている作品は 11万作品に及ぶ 社内の要望で後方互換性はなるべく 保ちたい
他チームが平行して制作している 案件も多数存在 社内からの要望で 案件の進行に影響を出したくない
状況を整理しましょう
現状整理 開発体制 Unityエンジニア3名 QA1名 アップデート対象 8ビルド テスト範囲 ベースとなるミドルウェアの アップデートなので 全ての機能が対象
後方互換性を保ちたい 作品数 11万作品が存在 ※過去2年間に作られた作品は保ちたい そのほか考慮事項 平行で案件/イベントが存在 ※社内からの要望で極力影響を出したくない
限られた工数の中で 後方互換性を保ちながら 全機能のリグレッションテストを行う 必要がある
無理です ソフトウェアテストの原則より 2.全数テストは不可能 すべてをテストすることは、ごく単純なソフトウェア以外では非現実的である。全数テスト の代わりに、テスト技法、テストケースの優先順位付け、リスクベースドテストを用いて、 テストにかける労力を集中すべきである。
条件を絞りました
条件を絞る 開発体制 Unityエンジニア3名 QA1名 アップデート対象 8ビルド テスト範囲 ベースとなるミドルウェアの アップデートなので 全ての機能が対象
後方互換性を保ちたい 作品数 11万作品が存在 ※過去2年間に作られた作品は保ちたい そのほか考慮事項 平行で案件/イベントが存在 ※社内からの要望で極力影響を出したくない
条件を絞る 開発体制 Unityエンジニア3名 QA1名 アップデート対象 8ビルド ⇨ 1stリリースは4ビルドに (Mobile Android/iOS、WebClient、Studio) テスト範囲 後方互換性のテストに関しては
Webサイトでフィーチャーしている XR作品160件を回帰テストする 基本的なSTYLY機能のみ全デバイスで確認 後方互換性を保ちたい 作品数 そのほか考慮事項 平行で案件/イベントが存在 ※社内からの要望で極力影響を出したくない
どのように回帰テストを行うのか?
回帰テストの課題 アップデートした影響による過去のXR作品への影響が不明 Unity 2019 LTS ⇨ Unity 2022 LTS Unityの3年分の変更点が一気に押し寄せる!
回帰テストの課題 アップデートした影響による過去のXR作品への影響が不明 繰り返し実行できて 変化をわかりやすくトラッキングできるようにしたい
二つの自動回帰テストを導入しました
導入する自動回帰テスト 1. モバイルアプリのGUI自動テスト a. アプリとしての機能を担保する 2. モバイルアプリ/WebClientでのXR作品自動閲覧テスト a. XR作品への影響を継続的にトラッキング
導入する自動回帰テスト 1. モバイルアプリのGUI自動テスト a. アプリとしての機能を担保する 2. モバイルアプリ/WebClientでのXR作品自動閲覧テスト a. XR作品への影響を継続的にトラッキング
モバイルアプリのGUI自動テスト モバイルアプリが一番機能が多彩であり 弊社としても一番案件での使用頻度が高い XR作品閲覧に関わらないGUI部分(ログイン/ユーザー作成など)を 回帰テストとしてCI上で行おう!
モバイルアプリのGUI自動テスト Unityアプリなのでネイティブアプリと違って GUIの描画がDOMなどで表現されない 画面いっぱいのCanvasしかない Seleniumやそれを使った自動テストフレームワークは使えない
モバイルアプリのGUI自動テスト 自動テストやるなら…画像認識しかないのか… 画像認識はレンダリングの関係で うまく認識されない場合が多い…
モバイルアプリのGUI自動テスト Airtest + pocoならいける!
Airtestとは? NetEase社より提供されているテストツール Android、iOS、Webなど、様々なプラットフォームに対応 使用するスクリプトの言語はpython
Pocoとは? Airtestと共に提供されている ゲーム開発プラットフォームでのUI周りのテストを記述するためのフレームワーク Unity、Unreal Engineなどにも対応している
Airtest + Pocoだと UnityのGameObjectの名前を指定することでUI制御ができる! StartButtonを押したいときは poco("StartButton").click() StopButtonを押したいときは poco("StopButton").click()
Airtest + Pocoだと オブジェクト名指定 poco("StartButton").click() 任意の文字が表示されているオブジェクトを指定 poco(text="Start!!").click() 任意のテクスチャ名のオブジェクトを指定 poco(texture="icon_start_button").click() オブジェクト名が被っていてもUI部品を特定できる
モバイルアプリのGUI自動テスト 構築したフロー 1. PRが立ったタイミングでそのPRの自動ビルドを行う 2. 1で作ったビルドでGUIの回帰テストを回す 3. テスト結果がNGだった場合、PRのコメントに残す。
モバイルアプリのGUI自動テスト フロー①開発者がPRを立てる
モバイルアプリのGUI自動テスト フロー② 自動的にテスト用ビルドを作成
モバイルアプリのGUI自動テスト フロー③ テスト用ビルドを用いて自動GUIテストを動かす
モバイルアプリのGUI自動テスト フロー④ 失敗した場合、テストレポートをコメントする
モバイルアプリのGUI自動テスト システム概要 ※Cloud Build Unityで作られたアプリをビルドするための環境 Unity公式が提供している ※self-hosted runner Github Actionsの実行をクラウドではなく
自分が用意した環境で実行できる仕組みのこと
モバイルアプリのGUI自動テスト システム概要 ※Cloud Build Unityで作られたアプリをビルドするための環境 Unity公式が提供している ※self-hosted runner Github Actionsの実行をクラウドではなく
自分が用意した環境で実行できる仕組みのこと
モバイルアプリのGUI自動テスト システム詳細 Mac book Pro ADB iproxy AirTest + poco
WebDriver Agent
導入する自動回帰テスト 1. モバイルアプリのGUI自動テスト a. アプリとしての機能を担保する 2. モバイルアプリ/WebClientでのXR作品自動閲覧テスト a. XR作品への影響を継続的にトラッキング
導入する自動回帰テスト 1. モバイルアプリのGUI自動テスト a. アプリとしての機能を担保する 2. モバイルアプリ/WebClientでのXR作品自動閲覧テスト a. XR作品への影響を継続的にトラッキング
XR作品自動閲覧テスト(Mobile/Web) STYLYはUnityとの親和性が高い ほとんどのUnityの機能をSTYLYで実現できる テスト範囲があまりにも広すぎてテストしきれない!
XR作品自動閲覧テスト(Mobile/Web) STYLYのWebサイトでフィーチャーされている 作品を取り上げて、テストデータにしよう! 取り上げた作品たちで使われている表現手法や 機能が、STYLYで使われている機能として仮定する
XR作品自動閲覧テスト(Mobile/Web) 操作に使用する フレームワーク Assert Mobile Airtest + poco アプリがクラッシュしないこと 操作不能状態にならないこと
WebClient Selenium クラッシュしないこと consoleにError文言が出ないこと システム概要
XR作品自動閲覧テスト(Mobile/Web) システム詳細 テスト ケース GAS Selenium Airtest + poco WebClientはURLの変更で
任意のシーンを再生
XR作品自動閲覧テスト(Mobile/Web) テストケース XR作品はGUIDで管理されているのでテストしたいGUIDを羅列している
XR作品自動閲覧テスト(Mobile/Web) 実行タイミング バグ修正 マージ 手動テスト 修正 手動テスト ・・・ テストの方針としては バグ修正したら作業ブランチにマージして
それをまた手動テストして…を繰り返すようにしている
XR作品自動閲覧テスト(Mobile/Web) 実行タイミング バグ修正 マージ 手動テスト 修正 手動テスト ・・・ 今回の修正によりどのぐらいのバグが直ったかを確認するため マージ後に繰り返し実行していた
XR作品 自動閲覧 テスト
二つの自動回帰テストを導入しました
二つの自動テスト テスト対象 テスト範囲 トリガー 観点 GUI自動テスト Mobile ログインなどの 基本的な機能 PRが作成される時に
自動で 基本機能がデグレードし ていないこと XR作品自動閲覧テスト Mobile WebClinet XR作品を描画 処理する機能 変更を入れた後に 手動トリガー XR作品再生時に クラッシュしないこと
二つの自動テスト テスト対象 テスト範囲 トリガー 観点 GUI自動テスト Mobile ログインなどの 基本的な機能 PRが作成される時に
自動で 基本機能がデグレードし ていないこと XR作品自動閲覧テスト Mobile WebClinet XR作品を描画 処理する機能 変更を入れた後に 手動トリガー XR作品再生時に クラッシュしないこと モバイルアプリの根幹機能の品質を担保
二つの自動テスト テスト対象 テスト範囲 トリガー 観点 GUI自動テスト Mobile ログインなどの 基本的な機能 PRが作成される時に
自動で 基本機能がデグレードし ていないこと XR作品自動閲覧テスト Mobile WebClinet XR作品を描画 処理する機能 変更を入れた後に 手動で XR作品再生時に クラッシュしないこと モバイルアプリの根幹機能の品質を担保 クラッシュする重大な欠陥がどのぐらい 修正されたかのトラッキング
実施した効果
実施した効果 MobileアプリのGUI自動テスト 自動テストの項目数は 100項目
実施した効果 MobileアプリのGUI自動テスト これはMobileアプリの回帰テストの70%を占めている 自動テストの項目数は 100項目
実施した効果 MobileアプリのGUI自動テスト 自動テストの項目数は 100項目 リリース前の回帰テストの工数を25%削減!
実施した効果 XR作品自動閲覧テスト テスト対象とした環境 Android 2機種 iOS 2機種 WindowsのChrome MacのChrome 合計6環境で実施
実施した効果 XR作品自動閲覧テスト 削減できた工数 手動の場合 (予測) 2人日 6環境 7回実行 一回に かかる工数
テスト 環境 回帰テストの 回数 x x = 84人日 自動テスト 0.5人日 6環境 7回実行 x x = 21人日 XR作品の閲覧テストの工数を1/4に削減
当初予定していた アップデート作業期間は 2年だった
1年6か月に短縮出来た!
まとめ
まとめ Unityエンジニア3名 QA1名で テスト範囲全機能、影響範囲不明のアップデート 当初見積もりでは2年以上かかる予定だった 1年6か月でリリース出来た!
今後の展望
今後の展望 XR作品自動閲覧テスト 端末の状態によって、UIの応答が遅くなり シナリオの途中で停止する現象が発生 MobileアプリのGUI自動テスト 本来はOKになるはずの項目がNGになってしまう誤判定が 頻繁に発生 →NG判定の部分の再度手動で確認する二度手間がかかっていた
今後の展望 XR作品自動閲覧テスト 端末の状態によって、UIの応答が遅くなり シナリオの途中で停止する現象が発生 MobileアプリのGUI自動テスト 本来はOKになるはずの項目がNGになってしまう誤判定が 頻繁に発生 →NG判定の部分の再度手動で確認する二度手間がかかっていた テスト実施時の安定性向上 テスト実施時の判定機能の強化
ご清聴ありがとうございました!