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
430
少人数の 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
49
マップゲーム SDK 競合の話 / arow and other map game sdk
ryuj
0
910
マップゲーム SDK AROW とその運用を支える AWS の構成 / AROW with AWS
ryuj
0
84
位置情報を用いたモバイルゲームが 気軽に作れる 3D リアルマップサービス 「AROW」について (実践編) / how to AROW practice at Gotanda.unity #11
ryuj
0
60
技術書のすゝめ / suggestion of technical book
ryuj
0
73
Other Decks in Programming
See All in Programming
『Python → TypeScript』オンボーディング奮闘記
takumi_tatsuno
1
140
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
250
Building an Application with TDD, DDD and Hexagonal Architecture - Isn't it a bit too much?
mufrid
0
370
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
0
140
TypeScript エンジニアが Android 開発の世界に飛び込んだ話
yuisakamoto
6
960
Cursor Meetup Tokyo ゲノミクスとCursor: 進化と制約のあいだ
koido
1
310
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
7
6.1k
try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう
kajitack
3
330
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.6k
イベントソーシングとAIの親和性ー物語とLLMに理解できるデータ
tomohisa
1
160
UPDATEがシステムを複雑にする? イミュータブルデータモデルのすすめ
shimomura
0
220
ts-morph実践:型を利用するcodemodのテクニック
ypresto
1
540
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
For a Future-Friendly Web
brad_frost
178
9.7k
Optimizing for Happiness
mojombo
378
70k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
GitHub's CSS Performance
jonrohan
1031
460k
The Invisible Side of Design
smashingmag
299
50k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.2k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Bash Introduction
62gerente
614
210k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
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 ご清聴ありがとうございましたっ