Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MRTK Test Utilities で始めるテスト駆動開発 (TDD) 入門 | XR Kaigi 2021

MRTK Test Utilities で始めるテスト駆動開発 (TDD) 入門 | XR Kaigi 2021

#XRKaigi 2021 | コミュニティオーガナイズセッション
HoloLens ミートアップ枠での発表に使用した資料です。
「MRTK Test Utilities で始めるテスト駆動開発 (TDD) 入門」
#HoloMagicians #ARKOBE #HoloLens #MRTK #Unity

Fccbd625997f63e7b251d9725cb905a5?s=128

堀尾風仁 Futo Horio

November 17, 2021
Tweet

Transcript

  1. MRTK Test Utilities で始めるテスト駆動開発 (TDD) 入門 株式会社神戸デジタル・ラボ 堀尾風仁 / Futo

    Horio #HoloMagicians | HoloLens ミートアップ Unity Test Framework (UTF) と XR Kaigi 2021
  2. 堀 尾 風 仁 株 式 会 社 神 戸

    デ ジ タ ル ・ ラ ボ コ ミ ュ ニ テ ィ 運 営 ・ A R K O B E ・ A z u r e T e c h L a b . M i c r o s o f t M V P f o r W i n d o w s D e v e l o p m e n t ( A u g u s t , 2 0 2 0 ~ ) Twitter アカウント @Futo_Horio
  3. 01. MRTK / MRTK Test Utilities 概要 MRTK Test Utilities

    って何ができるの?
  4. MRTK ( Mixed Reality Toolkit ) とは MR アプリケーション開発を加速させる ツール

    や UX ビルディングブロック を提供するOSS XR Kaigi 2021 ・ クロスプラットフォームの入力システム、3次元空間のインタラクションやUI を提供 ・ ラピッドプロトタイピングの実現 : Unity Editor シミュレーションですぐに変更を確認 ・ 幅広いプラットフォームをサポート ( eg OpenXR, WinMR, Oculus, Mobile ) ・ Unity, Unreal 各ゲームエンジン向けのプロジェクトが用意されている ( ※ 今回は MRTK-Unity を使用 ) ・Microsoft が開発を主導しているオープンソースプロジェクト ・ MIT ライセンス での提供 ( 商用利用可能 ) https://github.com/microsoft/MixedRealityToolkit-Unity
  5. MRTK Test Utilities 概要 Mixed Reality Toolkit のテストユーティリティ ( Package

    ) XR Kaigi 2021 ・実際の MRTK コンポーネント開発でも使われているテストユーティリティ → MRTK 開発では Unity Test Runner を使ったテストが実施されている。 ・Play mode (再生モード) テストを簡単に作成するためのヘルパースクリプトのコレクション https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/packages/mrtk-packages?view=mrtkunity-2021-05#test-utilities-package MRTK Test Utilities スクリプト (一部抜粋) https://github.com/microsoft/MixedRealityToolkit-Unity/tree/main/Assets/MRTK/Tests MRTK 単体テスト 一覧
  6. MRTK Test Utilities 概要 PlayModeTestUtilities を使ったハンドシミュレーション XR Kaigi 2021 https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/packages/mrtk-packages?view=mrtkunity-2021-05#test-utilities-package

    コードベースで、入力ソースを操作可能
  7. 02. テスト駆動開発に関する基礎知識 テストコード と テスト駆動開発 の違いについて

  8. テストコード と テスト駆動開発 ( TDD ) の違い テストに関する誤解 テストコードは健康診断、テスト駆動開発 (TDD)

    は 健康診断 ~ 診断結果(数値) の維持・改善ループ テストコード テスト駆動開発 (Test-Driven Development : TDD) - テストのためのソースコード - 現在のソースコード品質を検証するもの ( レッド, グリーン ) (テストを実行するだけではコード品質は向上しない) - プロダクションコードよりも先にテストコードを記述することを原則とした開発手法 - この原則は テストファース ( test first ) とも呼ばれる ① 設計を行う ( テスト作成前 ) ② テストコードを書く ( テスト失敗 : レッド ) ③ プロダクションコードを書く ( テスト成功 : グリーン ) ④ リファクタリングを行う ( テスト成功 : グリーン ) テスト駆動開発の開発サイクル 時間の経過
  9. 03. Unity Test Runner の使い方 Unity 標準ユニットテスト実行環境

  10. Unity Test Runner Unity 標準のユニットテスト実行環境 Unity バージョン 2019.2 から Unity

    Test Framework ( UTF ) パッケージとして提供 Unity Test Framework (UTF) = NUnit の Unity インテグレーションパッケージ NUnit は .NET 言語向けのユニットテスト用オープンソースライブラリで、 UTF では NUnit バージョン 3.5 が使用されています。 Unity Test Framework (UTF) 最新バージョンは 1.1.30 Unity 各バージョンごとの動作の違い
  11. Edit Mode Test ( 編集モード ) Unity Test Runner -

    テストの種類 Unity Test Runner で実行できるテストは 2種類 あります。 - 編集モード状態で実行されるテスト - オーバーヘッドが少ない - ゲーム再生 (Play) をしている状態で実行されるテスト - 手や目などの異なる入力ソースに対して、 どのようなレスポンスを返すのか確認可能 - ゲーム再生 (Play) 遷移時のオーバーヘッドが大きい Play Mode Test ( 再生モード ) ・実行時に毎回テスト用のシーンが生成・ロードされる。基本このテストシーンを使いまわして、テストが実施される。 ・テストケース (テスト毎) に適切な TearDown (後処理) を行わないと、後に実行されるテストに影響が及ぶ。 ・テスト失敗時、稀に Assets 配下に、テスト用のシーンが保存されたままとなる事象が発生する。 Play Mode Test ( 再生モード ) 実施時の注意点
  12. 検証環境 本資料内のスクリーンショット等の開発環境 ・開発用PC ( Windows 10 Pro / ビルド番号 :

    19042.1299 ) ・Unity 2020.3.8f1 (LTS) ・Unity Test Framework 1.1.30 (from Unity Package Manager) ・Mixed Reality Toolkit for Unity v2.7.2 (from Mixed Reality Feature Tool) ・Mixed Reality Toolkit Foundation 2.7.2 ・Mixed Reality Toolkit Standard Assets 2.7.2 ・Mixed Reality Toolkit Test Utilities 2.7.2 ・Mixed Reality OpenXR Plugin 1.0.3
  13. Unity Test Runner の使い方 (1/4) Test Runner ウィンドウを開く (グローバルメニュー) Window

    > General > Test Runner を選択し、 Test Runner ウィンドウを開きます。
  14. Unity Test Runner の使い方 (2/4) テストアセンブリフォルダを新規作成 (Test Runner ウィンドウ) PlayMode

    タブを選択して、 [Create PlayMode Test Assembly Folder] ボタンを押します。 ※ Project ウィンドウで選択しているディレクトリ配下にフォルダが生成されます。
  15. Unity Test Runner の使い方 (3/4) テストアセンブリの確認 生成されたテストフォルダに アセンブリ定義ファイル (PlayModeTests.asmdef) が

    含まれていることを確認します。
  16. Unity Test Runner の使い方 (4/4) テストアセンブリの アセンブリ定義リファレンス を編集する アセンブリ定義リファレンス (Assembly

    Definition References) に テストに必要なアセンブリ定義を指定します。 ( eg MRTK.Core, MRTK.Tests.Utilities, MRTK.InputSimulation etc..) ※ テストアセンブリ から事前定義済みアセンブリ (eg Assembly-CSharp.dll) の参照は不可 テスト対象のクラスは独自定義アセンブリに含める必要があります。 独自定義アセンブリ XRKaigi2021.dll 事前定義済みアセンブリ Assembly-Csharp.dll 再生 ( Play ) モードで動作するプログラム プロダクションコード テストコードコード プリコンパイル済みアセンブリ Plugin / Standard Assets テストアセンブリ PlayModeTests.dll ✕ 参照不可 参照可能 XR Kaigi 2021
  17. 04. MRTK Test Utilities を使ったテスト駆動開発入門 実際に MRTK Test Utilities を使って、テスト駆動開発をやってみる

  18. XR Kaigi 2021 テストコードを書く前に テストコードを書く前に知っておきたい、テストコードの4フェーズパターン ・テストコードを記述する際、どんなテストを実施しているのか分かりづらいと、 結局テストコードを導入する意味が薄れてしまうので、テストコードも 可読性 を意識する必要がある。 4フェーズテスト

    : Four Phase Test
  19. MRTK Test Utilities を使ったテスト駆動開発入門 設計する (サンプル)

  20. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードの準備 : Setup (事前準備) ① テスト用シーンに

    Mixed Reality Toolkit オブジェクトを追加、初期化する [UnitySetUp] 属性 各テスト開始前に実行されるコルーチン
  21. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードの準備 : Setup (事前準備) [UnityTest] 属性

    テストを実行するためのコルーチン Cube を生成 Interactable をアタッチ OnFocusReceiver を追加 ChangeMaterialColorGreen() を登録
  22. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードの準備 : Exercise (テストの実行) テストハンドを生成 -

    テストハンドの表示 - テストハンドのジェスチャーを指定 - テストハンドの移動 - テストハンドの非表示 TestHand クラスメソッド
  23. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードの準備 : Verify (テスト結果の検証) 比較検証には、NUnit の

    Assert モデルを使用します。 (期待する値) と (実際の値) の比較検証する
  24. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードの準備 : TearDown (後処理) MixedRealityToolkit ゲームオブジェクトを無効化する

    [UnityTearDown] 属性 テスト終了後、毎回呼び出されるコルーチン TestUtilities クラスメソッド
  25. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードを書いたクラスの実装を行う(1) ① クラスとメソッドのみを用意する ② テスト実行 (

    テスト失敗 : レッド )
  26. MRTK Test Utilities を使ったテスト駆動開発入門 テストコードを書いたクラスの実装を行う(2) ① メソッドを実装する ② テスト実行 (

    テスト成功 : グリーン )
  27. MRTK Test Utilities を使ったテスト駆動開発入門 実際のテスト時の様子 (動画)

  28. MRTK Test Utilities を使ったテスト駆動開発入門 グリーン (テスト成功) を維持しながら、リファクタリングを行う ① リファクタリングする ②

    テスト実行 ( テスト成功 : グリーン )
  29. (まとめ) MRTK Test Utilities と テスト駆動開発 を試してみて 実際に テスト駆動開発 (TDD)

    を試してみた感想 良かった点 ・回帰テスト ( Regression Test : リグレッションテスト ) を行う場面で煩雑な作業を省略できる ・ソースコード変更後、繰り返し自動テストを行えるので、修正を加えやすい ・カバレッジ (テストコードの網羅率) 次第だが、ソースコードの不具合 (バグ) を特定するまでの時間が短縮される ・テストコードから書き始めるので、設計時により疎結合を意識するようになる ・テストコード & テスト駆動開発の知識がないと開発が進まない ・最初のうちはテストが正しく動作しているのか、テストのテスト (動作検証) が必要 ・再利用頻度の少ないソースコードではテストコードの価値が薄い (テストコードを書く場所を見極める必要がある) ・複雑な手の動きをコードベースで書くのはやや面倒な場面もある 完璧なテストは不可能なので、「十分に良いテスト」を書けるようまず触ってみるのが良い 難しかった点
  30. https://docs.microsoft.com/en-us/dotnet/api/microsoft.mixedreality.toolkit.tests?view=mixed-reality-toolkit-unity-2020-dotnet-2.7.0 Microsoft.MixedReality.Toolkit.Tests Namespace Writing and running tests https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/contributing/unit-tests?view=mrtkunity-2021-05#play-mode-tests https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/release-notes/mrtk-25-release-notes?view=mrtkunity-2021-05#testutilities-package TestUtilities

    package ( MRTK v2.5 Release notes ) https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/packages/mrtk-packages?view=mrtkunity-2021-05#test-utilities-package Test utilities package https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/getting-started.html Getting started with Unity Test Framework 参考文献 本資料作成時に、参考にさせていただいた技術書籍・Webサイト一覧 公式サイト 書籍 ・JUnit 実践入門 (技術評論社) ・Unity ゲーム プログラミング・バイブル 2nd (株式会社ボーンデジタル) ・レガシーコードからの脱却 (O’REILLY)
  31. Qiita にも公開予定 本日、お話させていただいた内容を Qiita にも公開予定です。 こちらの QR コード から Qiita

    ページに飛べます。
  32. ご視聴いただき、ありがとうございました! Thank you XR Kaigi 2021