TDD道場                                        TDD
                                          やってみよう!




                              わんくま同盟         biac
                             名古屋勉強会 #25
                      名古屋市
2012年12月1日   名古屋ソフトウェアセンター



             わんくま同盟 名古屋勉強会 #25 – TDD道場 #13          1/15
• 著書
        自己紹介                        著作
                                             – 「速攻入門 C#」 (2012/3)
                                               技術評論社、共著
                                             – 「ソフトな彼女とハードな彼
                                               氏。」(2012/3) アジャイルマイ
                                               ンドvol.1 掲載
                                            • 記事
        biac (山本 康彦)                         – 連載 「C#でTDD入門」
                                               CodeZine
          BluewaterSoft                      –   週刊連載「WinRT/Metro Tips」
                                                 @IT - .NET開発者中心
    http://www.bluewatersoft.jp/                 …etc.

                                            Windows 8 Metro Style App.
•   名古屋大学工学部(修士)
                                            Windows Phone 8
•   HONDA R&Dで自動車設計                ソフトウェア   …Windows系の最新技術
•   1994~ ソフトウェア業界                   開発
•   2012~ BluewaterSoft                     TDD(コーディング技法)の普及

                   わんくま同盟 名古屋勉強会 #25 – TDD道場 #13                         2/15
Test
    Driven
    Development
     テスト駆動開発
わんくま同盟 名古屋勉強会 #25 – TDD道場 #13   3/15
TDD – テスト駆動開発

・「テスト」と言ってるけど、
 TDDは品質保証テストじゃない。
・「開発」と言ってるけど、
 TDDは開発プロセスじゃない。

   わんくま同盟 名古屋勉強会 #25 – TDD道場 #13   4/15
TDDの考案者
               Kent Beck の説明
        “Test Driven Development: By Example” (2002) より。


 「
We drive development with automated tests,
 a style of development called Test-Driven
             Development (TDD).
                                                       」
        わんくま同盟 名古屋勉強会 #25 – TDD道場 #13                      5/15
具体的には?
           “Test Driven Development: By Example” (2002) より。



In Test-Driven Development, we
・Write new code only if an automated test has failed
・Eliminate duplication
These are two simple rules.


           わんくま同盟 名古屋勉強会 #25 – TDD道場 #13                      6/15
Test
      Driven
      Development
= 自動化されたテストを使って
  開発を駆動するスタイル
 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13   7/15
大事なことなのでもう1度
「自動化されたテスト」
…を作ってからコードを書くのだ。


 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13   8/15
本日の
    テーマ
•Metroスタイル
 アプリをテスト
 ファーストする
(Windows 8)

                   Metro スタイル アプリ (と、かつて呼ばれていたナ
                   ニカ) をテストファーストで作る時のポイントは?

          わんくま同盟 名古屋勉強会 #25 – TDD道場 #13       9/15
テストツール

•VS2012 Express
 ⇒MSTest 標準
•VS2012 有償版       Visual Studio 2012 有償版の「拡張機能と更新プログラム」ダイアログ



 ⇒NUnit 等も        ・上の画像では「NUnit Test Adapter」がインストー
                  ルされている。Test Adapterがあれば、任意のユニッ

 組み込み可能           トテスト フレームワークをIDEから実行できる。
                  ・ExpressにもMSTestが組み込まれた。他のユニット
                  テスト フレームワークは、IDE外で実行する。

        わんくま同盟 名古屋勉強会 #25 – TDD道場 #13                    10/15
テスト
プロジェクト
•Metroアプリを
 対象にするには、
 専用のテスト
 プロジェクト
              ・[上] Metroアプリ用の単体テストプロジェクト
              ・[下] 一般のクラス ライブラリ用

     わんくま同盟 名古屋勉強会 #25 – TDD道場 #13         11/15
Metro用テスト
プロジェクト                                   Metro用.NET


•appxmanifest
 などが含まれる
                                         マニフェスト



                                           証明書
※ テスト対象と同じケイ
パビリティ設定が必要
※ テスト対象がCOMを
使っているとテスト不可
                Metroアプリ用の単体テストプロジェクト (Express)

       わんくま同盟 名古屋勉強会 #25 – TDD道場 #13            12/15
.xaml.cs/.vb
   のテスト
•ユニットテスト
 では画面をイン
 スタンス化する
 のは困難
•staticメソッド
 はテスト可能         画面をインスタンス化しようとすると、スレ違いで
                怒られる。

       わんくま同盟 名古屋勉強会 #25 – TDD道場 #13   13/15
async/await
                                       void → async Task




   のテスト
• 普通に書くと
  「すっぽ抜ける」
• テストメソッドの           テストメソッド中の await で制御が一旦テストラン
  型を async Task      ナーに戻ると、そこでテスト失敗の監視は終了して
                     しまう。
  にする。               テストメソッドの型を void から Task に変える。
  (MSTest, NUnit)    するとテストランナーは await してくれるので、テ
                     ストメソッドの完了までテスト失敗を監視できる。
        ※ 未対応のテストランナーでは、await せずに Task.Wait() して対応する。
         わんくま同盟 名古屋勉強会 #25 – TDD道場 #13                     14/15
おしまい


まとめ
・Metro画面には、専用の
 テストプロジェクト
・asyncメソッドでは、非
 同期の完了を待機させる


        わんくま同盟 名古屋勉強会 #25 – TDD道場 #13   15/15

わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント

  • 1.
    TDD道場 TDD やってみよう! わんくま同盟 biac 名古屋勉強会 #25 名古屋市 2012年12月1日 名古屋ソフトウェアセンター わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 1/15
  • 2.
    • 著書 自己紹介 著作 – 「速攻入門 C#」 (2012/3) 技術評論社、共著 – 「ソフトな彼女とハードな彼 氏。」(2012/3) アジャイルマイ ンドvol.1 掲載 • 記事 biac (山本 康彦) – 連載 「C#でTDD入門」 CodeZine BluewaterSoft – 週刊連載「WinRT/Metro Tips」 @IT - .NET開発者中心 http://www.bluewatersoft.jp/ …etc. Windows 8 Metro Style App. • 名古屋大学工学部(修士) Windows Phone 8 • HONDA R&Dで自動車設計 ソフトウェア …Windows系の最新技術 • 1994~ ソフトウェア業界 開発 • 2012~ BluewaterSoft TDD(コーディング技法)の普及 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 2/15
  • 3.
    Test Driven Development テスト駆動開発 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 3/15
  • 4.
    TDD – テスト駆動開発 ・「テスト」と言ってるけど、 TDDは品質保証テストじゃない。 ・「開発」と言ってるけど、 TDDは開発プロセスじゃない。 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 4/15
  • 5.
    TDDの考案者 Kent Beck の説明 “Test Driven Development: By Example” (2002) より。 「 We drive development with automated tests, a style of development called Test-Driven Development (TDD). 」 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 5/15
  • 6.
    具体的には? “Test Driven Development: By Example” (2002) より。 In Test-Driven Development, we ・Write new code only if an automated test has failed ・Eliminate duplication These are two simple rules. わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 6/15
  • 7.
    Test Driven Development = 自動化されたテストを使って 開発を駆動するスタイル わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 7/15
  • 8.
  • 9.
    本日の テーマ •Metroスタイル アプリをテスト ファーストする (Windows 8) Metro スタイル アプリ (と、かつて呼ばれていたナ ニカ) をテストファーストで作る時のポイントは? わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 9/15
  • 10.
    テストツール •VS2012 Express ⇒MSTest標準 •VS2012 有償版 Visual Studio 2012 有償版の「拡張機能と更新プログラム」ダイアログ ⇒NUnit 等も ・上の画像では「NUnit Test Adapter」がインストー ルされている。Test Adapterがあれば、任意のユニッ 組み込み可能 トテスト フレームワークをIDEから実行できる。 ・ExpressにもMSTestが組み込まれた。他のユニット テスト フレームワークは、IDE外で実行する。 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 10/15
  • 11.
    テスト プロジェクト •Metroアプリを 対象にするには、 専用のテスト プロジェクト ・[上] Metroアプリ用の単体テストプロジェクト ・[下] 一般のクラス ライブラリ用 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 11/15
  • 12.
    Metro用テスト プロジェクト Metro用.NET •appxmanifest などが含まれる マニフェスト 証明書 ※ テスト対象と同じケイ パビリティ設定が必要 ※ テスト対象がCOMを 使っているとテスト不可 Metroアプリ用の単体テストプロジェクト (Express) わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 12/15
  • 13.
    .xaml.cs/.vb のテスト •ユニットテスト では画面をイン スタンス化する のは困難 •staticメソッド はテスト可能 画面をインスタンス化しようとすると、スレ違いで 怒られる。 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 13/15
  • 14.
    async/await void → async Task のテスト • 普通に書くと 「すっぽ抜ける」 • テストメソッドの テストメソッド中の await で制御が一旦テストラン 型を async Task ナーに戻ると、そこでテスト失敗の監視は終了して しまう。 にする。 テストメソッドの型を void から Task に変える。 (MSTest, NUnit) するとテストランナーは await してくれるので、テ ストメソッドの完了までテスト失敗を監視できる。 ※ 未対応のテストランナーでは、await せずに Task.Wait() して対応する。 わんくま同盟 名古屋勉強会 #25 – TDD道場 #13 14/15
  • 15.