tdd の おさらい

28
わわわわわわ わわわわわわ #17 TDD の のののの biac Twitter: @biac http://www.tdd-net.jp/ のののののののの ? ののののののののののの ? 14:40

Upload: serena-guthrie

Post on 01-Jan-2016

33 views

Category:

Documents


0 download

DESCRIPTION

TDD の おさらい. どうやるんだっけ ? なに が美味しいんだっけ ?. Twitter: @biac http://www.tdd-net.jp/. biac. 14:40. 自己紹介. 1957 年 名古屋生まれ ( 宇宙時代以前 ) 大学の専攻 は航空工学 卒業後、本田技術研究所で 機械設計 1994 年 プログラマーに転身 2001 年 Windows XP のリリースと前後して XP と TDD を知る. 宣伝 : TDD.NET. http://www. tdd-net.jp / - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

TDD の おさらい

biac Twitter: @biachttp://www.tdd-net.jp/

どうやるんだっけ ? なにが美味しいんだっけ ?

14:40

Page 2: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

自己紹介• 1957 年 名古屋生まれ ( 宇宙時代以前 )• 大学の専攻は航空工学• 卒業後、本田技術研究所で機械設計

• 1994 年 プログラマーに転身• 2001 年 Windows XP のリリースと前

後して XP と TDD を知る

Page 3: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

宣伝 : TDD.NET• http://www.tdd-net.jp/

– 「 VB2010 Express + NUnit 2.5 で、 初めての TDD Step by Step 」 (PDF 版 ,72 ページ )http://www.tdd-net.jp/vb2010ee-nunit25-tdd-stepbystep.html

VB.NET でTDD の実際を

詳しく解説

今日は C# でやるけど…

Page 4: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

TDD = テストファースト + リファクタリング

• Test Driven Development– テスト駆動「開発」と言うけど、実装の話。

テストファースト

リファクタリング

Page 5: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

TDD = テストファースト + リファクタリング

• テストファースト = 外部設計– メソッドレベルの外部設計を、テストケー

スとして少しずつ決めていきながら、実現できることも立証する。

• リファクタリング = 内部設計– メソッドレベルの外部設計を固定し、かつ、

作ることができると証明してから、メソッドの内部をどうするか考える。

Page 6: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト

TEST FIRST

14:45

Page 7: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : RED → GREEN

• テストケースをひとつ書く失敗することを確認する (RED) ↓テストケースに通るだけの製品コードを書く成功することを確認する (GREEN)

テストケースファーストと呼ぶべきかも

Page 8: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : 先に外部設計を決める

• メソッドの外部設計 = メソッド利用者に対する公約、早く決めねば !

メソッドの中身 - 後からいくらでも変更可能。みんな、メソッドの外部設計やってる ?

• テストケース = 外部設計の厳密な例示メソッドの外部設計 = 入出力、オブジェクトの状態遷移日本語による仕様書 = あいまい数式やコードによる表現 = 厳密例示 : 全ての入出力をテストコードで記述することは非現実的

Page 9: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : 実際にやってみよう

… と言っても。

現状、プログラム全部をテストファーストで作ることは、まず無い。 ⇒ UI 部分は大変すぎ ※ UI は従来のやり方、ロジックだけ TDD でやることが多い

Page 10: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

外部設計例 : FizzBuzz 画面

• 最初は "1 - 1" 、次は "2 - 2" 、 "3 - Fizz"…• Fizz Buzz ルール

– 番号が 3 の倍数のとき、 "Fizz" と発言する– 番号が 5 の倍数のとき、 "Buzz"– 番号が 3 と 5 の倍数のときは "Fizz Buzz"

プログラムの外部設計

Page 11: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

外部設計例 : FizzBuzz 入出力表

呼び出し ( 入力 )

返値 ( 出力 )

1 回目 "1 - 1"

2 回目 "2 - 2"

3 回目 "3 - Fizz"

4 回目 "4 - 4"

5 回目 "5 - Buzz"

6 回目 "6 - Fizz"

7 回目 "7 - 7"

呼び出し 返値

14 回目 "14 - 14"

15 回目 "15 - Fizz Buzz"

16 回目 "16 - 16"

※ Interger.MaxValue の前後は、 今回は省略します。

この表の全部をテストコードに書くわけじゃないからねっ !!メソッドの

外部設計

Page 12: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

デモ : テストファーストで FizzBuzz

• Visual C# 2010 Express• NUnit 2.6(β)• ※ UI は作ってある

DEMO

14:50

Page 13: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : TDD 三原則1. 失敗するユニットテストを成功させるためにしか、

プロダクトコードを書いてはならない。

2. 失敗させるためにしか、ユニットテストを書いてはならない。 ( コンパイルエラーは失敗に数える。 )

3. ユニットテストを 1 つだけ成功させる以上に、プロダクトコードを書いてはならない。

※ 出典 : Robert C Martin (UncleBob) ( 翻訳 安井力 ) http://www.butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd http://twitter.com/unclebobmartin http://twitter.com/yattom

15:05

Page 14: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : 小刻みの法則• テストケース単位でひとつずつ進む

※ TDD 三原則の 1. ~ 3.

– 一度に取り組む問題を小さくする

– すばやいフィードバックを得る ↑ 機械設計者の悲願

1 日に何十回でも試作できるなんて !!

Page 15: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : 終了条件• 失敗するテストケースをもう思いつかない

⇒ テストファースト終了※ TDD 三原則の 2.※ 外部設計を満たすコードが書けることは証明できた。

ここでチェックイン ! / コミット !

• 追加のテストケースを書いても良い※ TDD 三原則からは外れる , メンテするテストコードが増える– 安心を得る– API ドキュメントとして

Page 16: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : 効果• 仕様書のレビュー

• ムダなコードは無い※ すべてのコードが、テストケースを通すために必要 (C0 カバレッジ 100%)

• 使いやすいメソッド ( 外部設計優先 )

• Combat Proven (戦闘証明済み )

Page 17: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

テストファースト : 得られない効果

• 品質保証ではない– 開発者が理解したメソッドの外部設計が、プ

ログラム仕様を満たしている保証は無い。 (そのプログラム仕様も、顧客の要求を満たしている保証は無い。 ) … 実装の話なんだから、あたりまえ !

– テストケースを網羅していない (←TDD 三原則の 2.)

• アーキテクチャ設計ではない– TDD の中からアーキテクチャは出てくるが、

実際にはそれでは遅い ( とくに多人数開発 )

Page 18: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング

リファクタ

リング15:10

Page 19: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング : 後で内部設計を考える

• 外部設計 ( 公約 ) を変えない限り、中身はどれだけ変えてもいいじゃないか !– テストファーストで外部設計は固まった– 全テスト合格 (= 外部設計不変 ) を維持しな

がら内部設計を洗練する

テストファースト完了時は、たとえるならば

ブレッドボードで組んだ回路

Page 20: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング : GREEN! GREEN! GREEN!

• 良くなる方向を考える ↓製品コードをちょっと直す ↓テストが成功することを確認する (GREEN)

※ 大股に歩くとコケるぞ ! (そのときはいさぎよく戻す )

Page 21: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

デモ : FizzBuzz のリファクタリング

• Visual C# 2010 Express• NUnit 2.6(β)• テストファーストは、さっき終わった

DEMO

15:15

Page 22: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング : 技法• ファウラー本を読んでね !

「リファクタリング ― プログラムの体質改善テクニック」 マーチン ファウラー (著 ) ピアソンエデュケーション (2000/05) ISBN-13: 978-4894712287

http://www.amazon.co.jp/exec/obidos/ASIN/4894712288/bluewatersoft-22

15:25

Page 23: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング : 目的• リファクタリングを世に広めた Martin Fowler の

言葉

リファクタリングとは、理解や修正が簡単になるための変更だと私は思っている。同じ変更でも、目的が異なれば、それはリファクタリングとは言わない。

– Martin Fowler's Bliki in Japanese - 「リファクタリングの境界線」http://capsctrl.que.jp/kdmsnr/wiki/bliki/?RefactoringBoundary

Page 24: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング : 目安• 三歩歩いたら読めなくなりそうなコード

⇒ 必須。ヤレ、ゼッタイ !

• メンテナンスしにくそうだ ⇒ 余裕があれば

• 将来の拡張に備える ⇒ 実際に拡張するときに

Page 25: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

リファクタリング : 効果• きれいなコード・読みやすいコード・重複の無いコード ↓・追加 /修正コストの削減 ( 開発中、カットオーバーまでにも頻繁に発生 )・なんといっても、気持ちよくコードを書ける !

※ オマケ効果 : 発見「こんな書き方も出来るんだ ! 」

Page 26: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

TDD = テストファースト + リファクタリング

ということで…

15:28

Page 27: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

TDD の達人になるには ?• 1 に鍛錬

– "Software Craftsman" Uncle Bob の言葉 「 TDD は学術研究の話じゃない、鍛錬だよ。」"TDD is a discipline, not an area of academic study."http://twitter.com/unclebobmartin/status/36839149881270272

– 写経、ペアプロ、道場• 2 に勉強 … TDD って、ようするに実装の話だもん

– よいコード、デザインパターン、 Mock の使い方、ソースコードリポジトリ… 全部 !

• F# とか関数型言語もやるといいかも

Page 28: TDD  の おさらい

わんくま同盟 名古屋勉強会 #17

おねがい• ぼくと契約して翻訳家になってよ !!

NUnit マニュアル翻訳プロジェクト http://www45.atwiki.jp/nunitjp/NUnit3( 今夏予定 ) を待って、活動開始予定 !

15:30