biac
BluewaterSoft
biac (山本 康彦)
    BluewaterSoft http://www.bluewatersoft.jp/
    略歴
    - 名古屋大学工学部(修士)
    - HONDA R&Dで自動車設計
    - 1994~ ソフトウェア業界
    - 2012~ BluewaterSoft
    著書
    「速攻入門 C#」(2012/3) 技術評論社、共著
    「ソフトな彼女とハードな彼氏。」(2012/3) アジャイルマインドvol.1掲載




2013/1/18             Visual Studio ハッカソン事前勉強会   2
連載
    「C#でTDD入門」 CodeZine
    「WinRT/Metro Tips」 @IT .NET開発者中心

    Web
    TDD.NET http://www.tdd-net.jp/
    biac の それさえもおそらくは幸せな日々@nifty
         http://bluewatersoft.cocolog-nifty.com/blog/




2013/1/18             Visual Studio ハッカソン事前勉強会          3
“Test Driven Development:
By Example” (2002)            参考訳
  We drive                       自動化されたテストを
  development with               使って、私たちは開発
  automated tests, a             を駆動する。それがテ
  style of development           スト駆動開発(TDD)と呼
  called Test-Driven             ばれる開発のスタイル
  Development (TDD).             だ。


            × テスト                     × テストが駆動する
            ○ 自動化されたテスト               ○ 私たちが駆動する
2013/1/18         Visual Studio ハッカソン事前勉強会         4
“Test Driven Development:                    テストファースト
By Example” (2002)            参考訳
  In Test-Driven                 TDDでは、
  Development, we                ・自動化されたテスト
  ・Write new code                が失敗したときだけ、
  only if an automated           新しいコードを書く
  test has failed                ・重複を無くす
  ・Eliminate
  duplication                    たった2つのシンプルな
                                 ルール
  These are two simple
  rules.                                     リファクタリング

2013/1/18         Visual Studio ハッカソン事前勉強会              5
レッド / グリーン / リファクタ
    「黄金の三角形」by @t_wada
    テストファースト
    失敗する自動化されたテスト ⇒
    新しいコードを書いてパスさせる ⇒
    リファクタリング
    All Greenを維持したまま改良 ⇒



2013/1/18   Visual Studio ハッカソン事前勉強会   6
プロのモノ作りとして 当たり前の手順



2013/1/18    Visual Studio ハッカソン事前勉強会   7
私の造語
    あまりにも当たり前すぎて、この概念を示
    す言葉が無いっぽい
    つまり…
    なにを作るかを決めてから
    ↓
    どうやって作るかを考える



2013/1/18   Visual Studio ハッカソン事前勉強会   8
スペックを決める
    - 外観
    - 性能 ex)最高速300km/h以上 etc.

    ↓

    作り方を考える
    - 構造は?
    - 部品は?
    - 製造ラインは?
    画像は「自動車製品開発のプロセスと組織」(藤本隆宏)より
2013/1/18            Visual Studio ハッカソン事前勉強会   9
スペックを決めてから
    → 作り方を考える

    ゴールを決めてから
    → それをクリアすべく行動する

    外部設計 (external design - 外から見た設計)
    → 内部設計 (internal design - 内から見た設計)
            ※ 外部設計を満たすような内部構造を設計


2013/1/18         Visual Studio ハッカソン事前勉強会   10
An act of identifying something precisely or
    of stating a precise requirement.
    ( Oxford Dictionaries
    http://oxforddictionaries.com/definition/english/specification )
    何かを正確に識別するか、正確な要求を述
    べる行為
    Could you be a little more specific?
    もう少し具体的に言ってください
    スペック=具体的な要求
    製造業の製品開発においては、
    検証可能(合否を判断できる)であること。
2013/1/18                  Visual Studio ハッカソン事前勉強会                    11
an abstract idea
    ( Oxford Dictionaries
    http://oxforddictionaries.com/definition/english/concept )
    抽象的なアイデア
    「世界一速いクルマ」 ← コンセプト、要望
    「2ℓエンジン市販車で最高速300km/h超」
     ← スペック、仕様
    違いは、検証可能かどうか。
    言い換えると「テスタブル」か否か。
    あなたのところの要件定義書や外部設計書
    は、スペック? or コンセプト?
2013/1/18                 Visual Studio ハッカソン事前勉強会               12
スペック ファーストしてますか?

    製造業で部品の図面を描くとき。
    たとえば、ネジ1本
    1. 設計者は、ネジのスペックを設定する。
      引張り強度、最大締め付けトルク、
      防錆性能(塩水噴霧試験時間) etc. etc.
    2. 設計者は、スペックを満たす部品形状・
       材質etc.を決定し、ネジの図面を描く。
            (スペックも図面に記載することが多い)

2013/1/18          Visual Studio ハッカソン事前勉強会   13
FizzBuzzプログラムの仕様
    ・1,2,…という整数に対し、1,2,…と答える
    ・ただし、3の倍数のときはFizzと答える
    ・ただし、5の倍数のときはBuzzと答える
    ・ただし、3の倍数でかつ5の倍数のときは
       Fizz Buzzと答える
    いいえ、スペックではありません!
    これだけでは、どうやって検証すればよい
    か分からないから。
    PCの前で「いち」と言うと、プログラムが
    「いち」と喋るのかもしれないよ!
2013/1/18   Visual Studio ハッカソン事前勉強会   14
FizzBuzzメソッドのスペック(例)
    シグネチャ:
          public static string FizzBuzz(int n)
    動作:     引数nが          引数nが
             3の倍数?              5の倍数?               返値

              false               false          n.ToString()
              true                false             "Fizz"
              false               true             "Buzz"
              true                true           "Fizz Buzz"

    …あれ? ここまで明確にできたのなら、
    コードで表現(=自動化)できるんじゃ!?
2013/1/18             Visual Studio ハッカソン事前勉強会                  15
FizzBuzzメソッドのスペックをコード化
    ただし、すべてのnについて書くと多すぎる
    ので、例示に留める。
        [TestCase(1, "1")]
        [TestCase(2, "2")]
        [TestCase(3, "Fizz")]
        [TestCase(5, "Buzz")]
        [TestCase(6, "Fizz")]
        [TestCase(10, "Buzz")]
        [TestCase(15, "Fizz Buzz")]
        public void FizzBuzzTest(int n, string expected) {
            string result = FizzBuzzer.FizzBuzz(n);
            Assert.AreEqual(expected, result);
        }

2013/1/18               Visual Studio ハッカソン事前勉強会             16
あとはスペックを満たすメソッドを書くだ
    けだ!
    これぞ「テスト ファースト」!?

    いいえ、
    テスト ファーストではありません!!

    スペック ファーストという当たり前のこと
    を、ちょっと自動化してみただけです。


2013/1/18   Visual Studio ハッカソン事前勉強会   17
“Test Driven Development: By                 テストファースト
Example” (2002)              参考訳
  In Test-Driven                 TDDでは、
  Development, we                ・自動化されたテス
  ・Write new code                トが失敗したときだ
  only if an                     け新しいコードを書く
  automated test has             ・重複を無くす
  failed
  ・Eliminate duplication         たった2つのシンプルな
                                 ルール
  These are two simple
  rules.                                     リファクタリング

2013/1/18         Visual Studio ハッカソン事前勉強会          18
例示でスペックを表現する … … どれだけ
    例示したら完璧なのか、分からない!!
    例示の仕分け:
    コードを育てるのに有用か否か?
    例示を追加 → 検証をパス
    コードを直さなくてパスするなら、今追加
    した例示はコードを育てていない → 不要
    例示を追加 → 検証失敗
    コードを直さねばならない = コードを育て
    る例示である → 有用
2013/1/18   Visual Studio ハッカソン事前勉強会   19
テスト ファースト =

    スペック ファースト +
    (モノ作りでは当たり前の手順)


    automated test +
    (例示によるスペック表現)


    例示を最少化するテクニック
    ※ ただし、不安を解消するためや、ドキュメントの役割
    を持たせるため等で、例示を追加しても構わない。

2013/1/18           Visual Studio ハッカソン事前勉強会   20
TDDの原理 ~ スペック・ファースト ~




2013/1/18         Visual Studio ハッカソン事前勉強会   21

More Related Content

PDF
20141101渋谷ruby会議
PDF
Tddのすゝめ
PPTX
単体テストのすゝめ
PDF
テストファースト、自動テストを導入するという事について(@社内勉強会)
PDF
Test Yourself - テストを書くと何がどう変わるか
PDF
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
PDF
俺とコーディング規約とツール
PPTX
20130603 aspnet勉強会 実践的debugging
20141101渋谷ruby会議
Tddのすゝめ
単体テストのすゝめ
テストファースト、自動テストを導入するという事について(@社内勉強会)
Test Yourself - テストを書くと何がどう変わるか
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
俺とコーディング規約とツール
20130603 aspnet勉強会 実践的debugging

What's hot (20)

PDF
自動テストの誤解とアンチパターン in 楽天 Tech Talk
PPTX
TDDはじめる前に
PDF
nseg第5回勉強会
PDF
ソースコードの品質向上のための効果的で効率的なコードレビュー
PDF
Hey It's Not My TDD!
PPT
wankuma #28
PDF
CodeZineAcademy TDD実践講座PR資料
PDF
Test Driven Development in LabVIEW
PDF
組織にテストを書く文化を根付かせる戦略と戦術
PDF
ペアプログラミング ホントのところ
PDF
Emergent Design - ObLove 2009 summer
PPT
ExtJS 事例  2ちゃんビューアー「Cromartie49」
PDF
TDD のこころ @ OSH2014
PDF
C# から java へのプログラム移植で体験したtddの効果は?
PDF
納涼!みんなで持ち寄る『ゾッ!とする話』
PDF
JavaScript And Debug
PDF
OpenCV4Androidで画像処理アプリのススメ
PDF
最近の単体テスト
PPTX
Code Contracts in .NET 4
自動テストの誤解とアンチパターン in 楽天 Tech Talk
TDDはじめる前に
nseg第5回勉強会
ソースコードの品質向上のための効果的で効率的なコードレビュー
Hey It's Not My TDD!
wankuma #28
CodeZineAcademy TDD実践講座PR資料
Test Driven Development in LabVIEW
組織にテストを書く文化を根付かせる戦略と戦術
ペアプログラミング ホントのところ
Emergent Design - ObLove 2009 summer
ExtJS 事例  2ちゃんビューアー「Cromartie49」
TDD のこころ @ OSH2014
C# から java へのプログラム移植で体験したtddの効果は?
納涼!みんなで持ち寄る『ゾッ!とする話』
JavaScript And Debug
OpenCV4Androidで画像処理アプリのススメ
最近の単体テスト
Code Contracts in .NET 4
Ad

Similar to TDDの原理 ~ スペック・ファースト (20)

PDF
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
PDF
C# コーディングガイドライン 2013/02/26
PDF
C#coding guideline その2_20130325
PDF
アジャイルなテストの見積もりと計画作り
KEY
テスト駆動開発入門
PDF
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
PDF
Code complete ch22_developper_test
PPTX
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
PDF
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
PDF
テストを分類してみよう!
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
PDF
#NagoyaTesting アジャイルなテストの見積りと計画づくり
PDF
TDD を自分の道具にしよう
PDF
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
PDF
地図を捨ててコンパスを頼りに進め
PDF
地図を捨ててコンパスを頼りに進め
PDF
Gamedevenvstudy1
PDF
【Agile Conference tokyo 2011】 継続的フィードバック
PDF
AJ2010_20100409_maegawasensei
PDF
テスト駆動開発のはじめ方
プログラマとデザイナで時計を作るVisual studioハッカソン ~ TDDの考え方を開発全体に応用してみよう!
C# コーディングガイドライン 2013/02/26
C#coding guideline その2_20130325
アジャイルなテストの見積もりと計画作り
テスト駆動開発入門
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Code complete ch22_developper_test
Test Manager + Team Foundation Server /Visual Studio Team Services 手順書(共有パラメー...
わんくま名古屋#25(20121201) TDD道場#13 ~ Metroアプリをテストファーストするときのポイント
テストを分類してみよう!
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
#NagoyaTesting アジャイルなテストの見積りと計画づくり
TDD を自分の道具にしよう
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
Gamedevenvstudy1
【Agile Conference tokyo 2011】 継続的フィードバック
AJ2010_20100409_maegawasensei
テスト駆動開発のはじめ方
Ad

More from Yasuhiko Yamamoto (20)

PDF
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
PDF
わんくま名古屋 #38 (20160521) Xamarin入門
PDF
UWP アプリを JavaScript で作る 3つの方法
PDF
無償のVisual studioで作るクライアント アプリ
PPTX
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
PPTX
わんくま名古屋 #37 (20151114) TDD道場 #25
PDF
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
PDF
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
PDF
わんくま名古屋#34(20150214) TDD道場#22
PDF
わんくま名古屋#33(20141115) モノ作り半生
PDF
わんくま名古屋#33(20141115) TDD道場#21
PDF
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
PPTX
わんくま名古屋 #32 (20140823) TDD道場 #20
PDF
わんくま名古屋#31(20140524) TDD道場 #19
PDF
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
PDF
Windows ストア アプリでスレッド間排他処理
PPTX
Windows 8.1 Update 1 の噂をまとめてみた
PPT
タダで始めるテストファースト入門 ~ C# Express + NUnit
PPTX
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
PPTX
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #38 (20160521) Xamarin入門
UWP アプリを JavaScript で作る 3つの方法
無償のVisual studioで作るクライアント アプリ
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) TDD道場 #25
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
わんくま名古屋#34(20150214) TDD道場#22
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) TDD道場#21
開発ツールを買わずに作る♪ ユニバーサルWindowsアプリ!
わんくま名古屋 #32 (20140823) TDD道場 #20
わんくま名古屋#31(20140524) TDD道場 #19
わんくま名古屋#31(20140524) ユニバーサルWindowsアプリ開発の勧め
Windows ストア アプリでスレッド間排他処理
Windows 8.1 Update 1 の噂をまとめてみた
タダで始めるテストファースト入門 ~ C# Express + NUnit
わんくま名古屋 #29 (2013/11/23) TDD道場 #17
わんくま名古屋#28(20130824) c#で、ライフゲームを高速化してみるよ

TDDの原理 ~ スペック・ファースト

  • 2. biac (山本 康彦) BluewaterSoft http://www.bluewatersoft.jp/ 略歴 - 名古屋大学工学部(修士) - HONDA R&Dで自動車設計 - 1994~ ソフトウェア業界 - 2012~ BluewaterSoft 著書 「速攻入門 C#」(2012/3) 技術評論社、共著 「ソフトな彼女とハードな彼氏。」(2012/3) アジャイルマインドvol.1掲載 2013/1/18 Visual Studio ハッカソン事前勉強会 2
  • 3. 連載 「C#でTDD入門」 CodeZine 「WinRT/Metro Tips」 @IT .NET開発者中心 Web TDD.NET http://www.tdd-net.jp/ biac の それさえもおそらくは幸せな日々@nifty http://bluewatersoft.cocolog-nifty.com/blog/ 2013/1/18 Visual Studio ハッカソン事前勉強会 3
  • 4. “Test Driven Development: By Example” (2002) 参考訳 We drive 自動化されたテストを development with 使って、私たちは開発 automated tests, a を駆動する。それがテ style of development スト駆動開発(TDD)と呼 called Test-Driven ばれる開発のスタイル Development (TDD). だ。 × テスト × テストが駆動する ○ 自動化されたテスト ○ 私たちが駆動する 2013/1/18 Visual Studio ハッカソン事前勉強会 4
  • 5. “Test Driven Development: テストファースト By Example” (2002) 参考訳 In Test-Driven TDDでは、 Development, we ・自動化されたテスト ・Write new code が失敗したときだけ、 only if an automated 新しいコードを書く test has failed ・重複を無くす ・Eliminate duplication たった2つのシンプルな ルール These are two simple rules. リファクタリング 2013/1/18 Visual Studio ハッカソン事前勉強会 5
  • 6. レッド / グリーン / リファクタ 「黄金の三角形」by @t_wada テストファースト 失敗する自動化されたテスト ⇒ 新しいコードを書いてパスさせる ⇒ リファクタリング All Greenを維持したまま改良 ⇒ 2013/1/18 Visual Studio ハッカソン事前勉強会 6
  • 7. プロのモノ作りとして 当たり前の手順 2013/1/18 Visual Studio ハッカソン事前勉強会 7
  • 8. 私の造語 あまりにも当たり前すぎて、この概念を示 す言葉が無いっぽい つまり… なにを作るかを決めてから ↓ どうやって作るかを考える 2013/1/18 Visual Studio ハッカソン事前勉強会 8
  • 9. スペックを決める - 外観 - 性能 ex)最高速300km/h以上 etc. ↓ 作り方を考える - 構造は? - 部品は? - 製造ラインは? 画像は「自動車製品開発のプロセスと組織」(藤本隆宏)より 2013/1/18 Visual Studio ハッカソン事前勉強会 9
  • 10. スペックを決めてから → 作り方を考える ゴールを決めてから → それをクリアすべく行動する 外部設計 (external design - 外から見た設計) → 内部設計 (internal design - 内から見た設計) ※ 外部設計を満たすような内部構造を設計 2013/1/18 Visual Studio ハッカソン事前勉強会 10
  • 11. An act of identifying something precisely or of stating a precise requirement. ( Oxford Dictionaries http://oxforddictionaries.com/definition/english/specification ) 何かを正確に識別するか、正確な要求を述 べる行為 Could you be a little more specific? もう少し具体的に言ってください スペック=具体的な要求 製造業の製品開発においては、 検証可能(合否を判断できる)であること。 2013/1/18 Visual Studio ハッカソン事前勉強会 11
  • 12. an abstract idea ( Oxford Dictionaries http://oxforddictionaries.com/definition/english/concept ) 抽象的なアイデア 「世界一速いクルマ」 ← コンセプト、要望 「2ℓエンジン市販車で最高速300km/h超」 ← スペック、仕様 違いは、検証可能かどうか。 言い換えると「テスタブル」か否か。 あなたのところの要件定義書や外部設計書 は、スペック? or コンセプト? 2013/1/18 Visual Studio ハッカソン事前勉強会 12
  • 13. スペック ファーストしてますか? 製造業で部品の図面を描くとき。 たとえば、ネジ1本 1. 設計者は、ネジのスペックを設定する。 引張り強度、最大締め付けトルク、 防錆性能(塩水噴霧試験時間) etc. etc. 2. 設計者は、スペックを満たす部品形状・ 材質etc.を決定し、ネジの図面を描く。 (スペックも図面に記載することが多い) 2013/1/18 Visual Studio ハッカソン事前勉強会 13
  • 14. FizzBuzzプログラムの仕様 ・1,2,…という整数に対し、1,2,…と答える ・ただし、3の倍数のときはFizzと答える ・ただし、5の倍数のときはBuzzと答える ・ただし、3の倍数でかつ5の倍数のときは Fizz Buzzと答える いいえ、スペックではありません! これだけでは、どうやって検証すればよい か分からないから。 PCの前で「いち」と言うと、プログラムが 「いち」と喋るのかもしれないよ! 2013/1/18 Visual Studio ハッカソン事前勉強会 14
  • 15. FizzBuzzメソッドのスペック(例) シグネチャ: public static string FizzBuzz(int n) 動作: 引数nが 引数nが 3の倍数? 5の倍数? 返値 false false n.ToString() true false "Fizz" false true "Buzz" true true "Fizz Buzz" …あれ? ここまで明確にできたのなら、 コードで表現(=自動化)できるんじゃ!? 2013/1/18 Visual Studio ハッカソン事前勉強会 15
  • 16. FizzBuzzメソッドのスペックをコード化 ただし、すべてのnについて書くと多すぎる ので、例示に留める。 [TestCase(1, "1")] [TestCase(2, "2")] [TestCase(3, "Fizz")] [TestCase(5, "Buzz")] [TestCase(6, "Fizz")] [TestCase(10, "Buzz")] [TestCase(15, "Fizz Buzz")] public void FizzBuzzTest(int n, string expected) { string result = FizzBuzzer.FizzBuzz(n); Assert.AreEqual(expected, result); } 2013/1/18 Visual Studio ハッカソン事前勉強会 16
  • 17. あとはスペックを満たすメソッドを書くだ けだ! これぞ「テスト ファースト」!? いいえ、 テスト ファーストではありません!! スペック ファーストという当たり前のこと を、ちょっと自動化してみただけです。 2013/1/18 Visual Studio ハッカソン事前勉強会 17
  • 18. “Test Driven Development: By テストファースト Example” (2002) 参考訳 In Test-Driven TDDでは、 Development, we ・自動化されたテス ・Write new code トが失敗したときだ only if an け新しいコードを書く automated test has ・重複を無くす failed ・Eliminate duplication たった2つのシンプルな ルール These are two simple rules. リファクタリング 2013/1/18 Visual Studio ハッカソン事前勉強会 18
  • 19. 例示でスペックを表現する … … どれだけ 例示したら完璧なのか、分からない!! 例示の仕分け: コードを育てるのに有用か否か? 例示を追加 → 検証をパス コードを直さなくてパスするなら、今追加 した例示はコードを育てていない → 不要 例示を追加 → 検証失敗 コードを直さねばならない = コードを育て る例示である → 有用 2013/1/18 Visual Studio ハッカソン事前勉強会 19
  • 20. テスト ファースト = スペック ファースト + (モノ作りでは当たり前の手順) automated test + (例示によるスペック表現) 例示を最少化するテクニック ※ ただし、不安を解消するためや、ドキュメントの役割 を持たせるため等で、例示を追加しても構わない。 2013/1/18 Visual Studio ハッカソン事前勉強会 20
  • 21. TDDの原理 ~ スペック・ファースト ~ 2013/1/18 Visual Studio ハッカソン事前勉強会 21