Your SlideShare is downloading. ×
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
テスト駆動開発の進化
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

テスト駆動開発の進化

17,644

Published on

「デブサミ関西 2012」での講演資料

「デブサミ関西 2012」での講演資料

Published in: Technology
1 Comment
24 Likes
Statistics
Notes
No Downloads
Views
Total Views
17,644
On Slideshare
0
From Embeds
0
Number of Embeds
19
Actions
Shares
0
Downloads
66
Comments
1
Likes
24
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. テスト駆動開発の進化 #kansumiA3 和智 右桂 グロースエクスパートナーズ株式会社 ソリューションデリバリー部 ITアーキテクト Developers Summit 2012
  • 2. 自己紹介§  和智右桂(わち ゆうけい) §  @digitalsoul0124§  システム開発 §  グロースエクスパートナーズ株式会社 §  ITアーキテクト§  翻訳(鈍器系) §  エリック・エヴァンスのドメイン駆動設計 §  継続的デリバリー Developers Summit 2012
  • 3. GOOS日本語版出版 Developers Summit 2012
  • 4. テスト駆動開発の進化 2002 Developers Summit 2012 2007
  • 5. Ø テスト駆動開発の進化とは?Ø GOOSのポイントØ 開発の現場に活かすには? Developers Summit 2012
  • 6. テスト駆動開発の進化テスト駆動開発の進化とは? Developers Summit 2012
  • 7. TDDの基本的なサイクルレッド/グリーン/リファクタリング Developers Summit 2012
  • 8. TDDの基本的なサイクルクラスをひとつ書く場合ならテストコードも悩まず書ける テスト Money コード クラス Developers Summit 2012
  • 9. TDDの基本的なサイクル本格的なアプリを作る場合、どこから手をつければいいだろう? 他システム APサーバ DBサーバ Developers Summit 2012
  • 10. TDDの黄金律“まずは を書く” どんなテストを書けばよいだろう? Developers Summit 2012
  • 11. 受け入れテスト§  システムが実装すべきフィーチャ Menu http://www.flickr.com/photos/sifu_renka/6761779847/ by Sifu Renka Developers Summit 2012
  • 12. システムのスライス§  受け入れテストはエンドツーエンドに 他システム DB UI 端から端まで(End to End) Developers Summit 2012
  • 13. 進化したTDDサイクル 二重のテストループ “Growing Object-Oriented Software, Guided by Tests” p.8より Developers Summit 2012
  • 14. 外から内へ§  外側のテストは 進 の指標に§  内側のテストは コードの質のため London assembly stair http://www.flickr.com/photos/mcginnly/2196879337 by mcginnly Developers Summit 2012
  • 15. テスト駆動開発の進化とは… Developers Summit 2012
  • 16. コードを書くことから 356/365: An Evolution of Rivalry- for Matt http://www.flickr.com/photos/practicalowl/1468829205/ by an practicalowl ソフトウェアを作ることへ Developers Summit 2012
  • 17. テスト駆動開発の進化GOOSのポイント Developers Summit 2012
  • 18. GOOSのポイントとは?• モック• ウォーキングスケルトン I Just Have To Make One More Call, He Said http://www.flickr.com/photos/an_untrained_eye/2524462429/ Developers Summit 2012 by an untrained eye
  • 19. モックについて Developers Summit 2012
  • 20. オブジェクト指向観オブジェクト指向システムは協力し合うオブジェクトの網の目のようなものだクラスよりも Developers Summit 2012
  • 21. 網の目の中のオブジェクトは どうテストしたらいいだろう?テスト ? ? ? “Growing Object Oriented Software, Guided By Tests” p.19の図を元に作成 Developers Summit 2012
  • 22. モックの登場隣り合うオブジェクトをモックに差し替える モッカリーテスト ? ? ? Developers Summit 2012
  • 23. 具体例Developers Summit 2012
  • 24. 仕様§ オブジェクトをロードするフレー ムワークに対してキーを元にした 検索を行い、その結果をキャッ シュする§ ロードされてから一定時間が経つ と、そのインスタンスは使えなく なるので、時々リロードする Developers Summit 2012
  • 25. クラス構造ObjectLoaderの手前に、TimedCacheクラスを作る Timed Object テスト Cache Loader load Developers Summit 2012
  • 26. 呼び出しシーケンスTimedCacheは、最初に呼び出されたとき、ObjectLoaderにアクセスする テストコード TimedCache ObjectLoader lookup("KEY") load("KEY") "VALUE" "VALUE" Developers Summit 2012
  • 27. テストコード@Testpublic void キャッシュされていないオブジェクトはロードする() throws Exception { final ObjectLoader mockLoader = context.mock(ObjectLoader.class); context.checking(new Expectations() { { oneOf(mockLoader).load("KEY"); will(returnValue("VALUE")); } }); TimedCache cache = new TimedCache(mockLoader); assertThat((String) cache.lookup("KEY"), is("VALUE"));} Developers Summit 2012
  • 28. 参考§ ロールをモックせよ §  http://jmock.org/oopsla2004_ja.pdf http://www.jmock.org/ Developers Summit 2012
  • 29. インターフェイスの発見インターフェイスを発見しながら、外から内へ開発を進める B受け入れ UI A B テスト D C C D ユニット E E テスト1 ユニット テスト2 外から内へ Developers Summit 2012
  • 30. オブジェクトの登場パターン§  分解(Breaking out) §  あるオブジェクトが責務を持ちすぎている 場合、ふるまいの凝集した単位を分割する§  発芽(Budding off) §  新しい概念が登場したときにプレースホル ダー型をラップする(値)もしくは、サービ スを定義する(オブジェクト)§  包含(Bundling up) §  関連するオブジェクトの集団をひとつのオ ブジェクトにまとめる Developers Summit 2012
  • 31. ビジネスドメインの概念§  アプリケーションの中核は、 ビジネスドメインの言語を使って記述する Business Ambassadors http://www.flickr.com/photos/number10gov/5345434419/ by The Prime Ministers Office Developers Summit 2012
  • 32. あわせて読みたい Developers Summit 2012
  • 33. ウォーキングスケルトン について Developers Summit 2012
  • 34. 最初のフィーチャのパラドクス§  フィーチャをエンドツーエンドに開発§  テスト基盤も同時に開発 Paradox of Freedom: the leash http://www.flickr.com/photos/theilr/4265521288/ by theilr Developers Summit 2012
  • 35. ウォーキングスケルトン§  フィーチャの薄いスライス§  ただし、エンドツーエンドに Cake http://www.flickr.com/photos/rosada/7244940166/ by TAU* Developers Summit 2012
  • 36. 継続的デリバリーまずは基盤をつくり、ビルド/デプロイ/テストを自動化する 下準備 アーキテクチャを ビルド、デプロイ、テストの 問題を理解する 定める 自動化 二重のループ Developers Summit 2012
  • 37. あわせて読みたい Developers Summit 2012
  • 38. 中間のまとめ Developers Summit 2012
  • 39. フィードバックループ§  エンドツーエンドのベースを作ろう§  一フィーチャずつ差し込んでいこう “Growing Object-Oriented Software, Guided by Tests” p.8より Developers Summit 2012
  • 40. ふるまい駆動開発テストを考えるということは、外側から見たシステムのふるまいを考えるということ Just lookin in http://www.flickr.com/photos/eyesore9/4223978728/ by eyesore9 Developers Summit 2012
  • 41. テスト駆動開発の進化開発の現場に活かすには Developers Summit 2012
  • 42. 想定§ 受託開発 § お客様の業務を学びながら開発§ 中規模∼大規模 § 画面/帳票/バッチで200など § プログラマ30名程度 § ある程度のウォーターフォール Developers Summit 2012
  • 43. ...どうしよう?Puzzled http://www.flickr.com/photos/54027476@N07/4999919941/ by andy.brandon50 Developers Summit 2012
  • 44. 二重ループのさらに外最初の受け入れテストはどうやって書いたらいいだろう?下準備 アーキテクチャを ビルド、デプロイ、テストの問題を理解する 定める 自動化 二重のループ Developers Summit 2012
  • 45. GrowingObject-OrientedSoftware,Guided by Tests Developers Summit 2012
  • 46. 事前のドメイン分析業務分析からドメインを抽出ドメインごとに特性を見極める ドメインC ドメインA ドメインDユーザー 他システム ドメインB Developers Summit 2012
  • 47. 複雑さを吸収する場所業務が複雑化すれば、システムも複雑化する。それをどこで受け止めるのか? Role Entity Role Role Entity Entity Role Entity Developers Summit 2012
  • 48. エンティティ主体のドメイン§ ロジックがSQLに集約§ 設計すべきはデータパターン Diagram http://www.flickr.com/photos/synx508/4817848887/ by synx508 Developers Summit 2012
  • 49. ロール主体のドメイン§ ロジックがオブジェクト間の インタラクションに集約§ 設計すべきはシナリオパターン Developers Summit 2012
  • 50. まとめ§ 作るべきものの特性を見極め、 それに合わせたアーキテクチャを 策定しよう§ アーキテクチャとは 成長の方向性を 規定する型だ Green Fields http://www.flickr.com/photos/21257551@N02/2258301753/ by Pollys Dad Developers Summit 2012
  • 51. ありがとうございました! Developers Summit 2012

×