• Like
TDDの原理 ~ スペック・ファースト
Upcoming SlideShare
Loading in...5
×

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

  • 797 views
Uploaded on

TDDBC 大阪 for C#(Visual Studioハッカソン事前勉強会) 2013/01/18 …

TDDBC 大阪 for C#(Visual Studioハッカソン事前勉強会) 2013/01/18
http://atnd.org/events/34775

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
797
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
5
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. biacBluewaterSoft
  • 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