Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
490
少人数の 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
56
マップゲーム SDK 競合の話 / arow and other map game sdk
ryuj
0
1k
マップゲーム SDK AROW とその運用を支える AWS の構成 / AROW with AWS
ryuj
0
90
位置情報を用いたモバイルゲームが 気軽に作れる 3D リアルマップサービス 「AROW」について (実践編) / how to AROW practice at Gotanda.unity #11
ryuj
0
65
技術書のすゝめ / suggestion of technical book
ryuj
0
77
Other Decks in Programming
See All in Programming
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
Developing static sites with Ruby
okuramasafumi
0
300
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
320
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
360
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
2
1.2k
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.3k
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
440
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
320
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
140
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
510
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Facilitating Awesome Meetings
lara
57
6.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Navigating Team Friction
lara
191
16k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
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 ご清聴ありがとうございましたっ