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
少人数の SDK 開発を支えるテストの話 / tests for small group d...
Search
Ryuichi Jinushi
July 24, 2019
Programming
0
460
少人数の SDK 開発を支えるテストの話 / tests for small group development
https://meetup.unity3d.jp/jp/events/1108
でお話した内容です。
Ryuichi Jinushi
July 24, 2019
Tweet
Share
More Decks by Ryuichi Jinushi
See All by Ryuichi Jinushi
非エンジニアにも分かる UniRx(ゆにあーるえっくす)/ UniRx for non-engineers
ryuj
1
51
マップゲーム SDK 競合の話 / arow and other map game sdk
ryuj
0
940
マップゲーム SDK AROW とその運用を支える AWS の構成 / AROW with AWS
ryuj
0
89
位置情報を用いたモバイルゲームが 気軽に作れる 3D リアルマップサービス 「AROW」について (実践編) / how to AROW practice at Gotanda.unity #11
ryuj
0
63
技術書のすゝめ / suggestion of technical book
ryuj
0
75
Other Decks in Programming
See All in Programming
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
550
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
520
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.9k
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
チームのテスト力を鍛える
goyoki
3
880
testingを眺める
matumoto
1
140
HTMLの品質ってなんだっけ? “HTMLクライテリア”の設計と実践
unachang113
4
2.9k
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
120
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
450
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
11
4.4k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
Designing for humans not robots
tammielis
253
25k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
The World Runs on Bad Software
bkeepers
PRO
70
11k
How to Ace a Technical Interview
jacobian
279
23k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Transcript
少人数の SDK 開発を支えるテストの話 じぬ@gotanda.unity#13
だれ? 地主龍一( ) • じぬ • 部(新規開発部署) • 部キャプテン(昨日から) 最近
• キングダムハーツ • オクトパストラベラー •
アジェンダ • 前振り( と開発体制) • 完成品のテスト • エディタ拡張のテスト • 表示結果のテスト
位置情報と 3D リアルマップによる AR アプリ開発プラットフォーム
None
ベータ版ってことは... • フィードバックを受けて改善 • 新機能の開発 • コアバリューのさらなる強化
なぜお前は テストをしてるのか
なぜテス うちのチーム • スピード開発を重視 • 元々人数が少ない(少数精鋭) ◦ エンジニア: 人 ◦
: 人 エンジニアが する ⇒ バグが出るとクリティカルに開発工数が減る
テストを書く指針 テスト対象 • テストに時間がかかる機能 • テストがめんどくさい機能 • テストを見落としがちな機能 • 前科がある機能
こだわり • 自動化にはこだわらない • 今後も増やしやすいように
テストを書く指針 テスト対象 • テストに時間がかかる機能 大量のマップデータ • テストがめんどくさい機能 エディタ拡張 • テストを見落としがちな機能
完成品の内容物 • 前科がある機能 バグ修正 こだわり • 自動化にはこだわらない • 今後も増やしやすいように
全体像 SDK データソース データソース データソース arowmap arowmap arowmap arowmap arowmap
arow-sdk.zip (リリース物) SDK MapTools • 3D 表現 • エディタ拡張 Unity で実行 パッケージ化
全体像 SDK データソース データソース データソース arowmap arowmap arowmap arowmap arowmap
arow-sdk.zip (リリース物) SDK MapTools • 3D 表現 • エディタ拡張 Unity で実行 パッケージ化
完成品のテスト
完成品の内容物 完成品 • • マップツール(スクリプト各種) 展開後の構成が知りたい
unitypackage • が提供するアーカイブ形式 • 展開すればすぐに 可 • 実は フォーマット
いい感じにしてくれるライブラリ https://github.com/gered/extractunitypackage
Unity におけるテスト
Unity Test Runner • が提供する • テンポラリな シーン上でテスト • •
yield return を用いたテスト [UnityTest] public IEnumerator TestMyFunc() { // 時間がかかる処理
while (/* 上記の処理が完了 */) { yield return null; } // 時間がかかる処理に対するテスト }
エディタ拡張のテスト
エディタ拡張 • なのでエディタ拡張も製品の一部 • テスト忘れがち • 地味にバグる(パスの直し忘れとか) 実装の困ったところ • •
Reflection
Reflection • メタデータを使ってデータやメソッドにアクセス • とメソッド名(文字列)でコール 評価 • パフォーマンス悪い • 保守性悪い(と思う)
• が、テストなので割り切り
リフレクションによる呼び出し var type = typeof(MyClass); var methodName = "MyMethod"; var
flags = BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; var method = type.GetMethod(methodName, flags); var obj = new MyClass(); Object[] parameters = { ... }; method.Invoke(obj, parameters);
エディタ拡張で提供している機能 • サイズ変換 • ライセンス認証 の生成 • 建物用 ファイルの生成 •
ローカルサーバの起動 • 建物 の静的生成 • の設定
エディタ拡張で提供している機能 • サイズ変換 • ライセンス認証 の生成 • 建物用 ファイルの生成 •
ローカルサーバの起動 • 建物 の静的生成 • の設定 SetUp で実行してファイルが 存在するかテスト Test で実行して yield return で 完了まで待機 TagManager.asset から layers プロパティで取得 Selection.activeObject に 代入して選択状態を再現
表示結果のテスト
arowmap は 100万ファイルあるぞ
段取り 建物 を生成 スクリーンショットを撮影 実行時間でフォルダ分け で前回生成分と比較 差分があれば検知
スクリーンショット • で建物生成 • で実行 • に を設置 • スクリーンショット撮影
yield return new WaitForEndOfFrame(); var texture = ScreenCapture.CaptureScreenshotAsTexture();
テクスチャのリサイズ • をリサイズ後の大きさで確保 • リサイズ前テクスチャをコピー • で確保した を 化 •
リサイズ後の大きさで を生成 • で取り込み コピー ReadPixels
で比較した差分 差分なし 差分あり
差分を生んだ犯人
差分を生んだ犯人
Game View • テスト起動ごとに の大きさが異なる ( のせい?) • どうにかして の大きさを固定したい
• ライブラリあった ◦ ◦ 中身はリフレクション ◦ 追加・変更・削除が可能
まとめ やったこと • 完成品のテスト • エディタ拡張のテスト • スクリーンショットの差分テスト 感想 •
テスト書いてたらバグ見つけた • テストが動いてるという安心感がある • ハックしている体感がよい
https://arow-3dmap.connpass.com/event/139812/ • 時間: 土 〜 日 • 場所:ドリコム社カフェ • ほか:ステキな賞品カッコカリ
参考資料 テスト • https://developer.aiming-inc.com/unity/unity-playmode-test-runner/ • https://qiita.com/su10/items/560302ceafa6bf43a13e リフレクション • https://www.shibuya24.info/entry/2017/02/07/093000 テクスチャのリサイズ
• http://light11.hatenadiary.com/entry/2018/04/19/194015 ライブラリ • https://github.com/gered/extractunitypackage • https://github.com/anchan828/unity-GameViewSizeHelper ドキュメント • https://docs.unity3d.com/ScriptReference/ScreenCapture.CaptureScreenshot AsTexture.html
Reflection ご清聴ありがとうございましたっ