テスト駆動開発の進化

20,813 views
21,065 views

Published on

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

Published in: Technology
1 Comment
27 Likes
Statistics
Notes
No Downloads
Views
Total views
20,813
On SlideShare
0
From Embeds
0
Number of Embeds
14,898
Actions
Shares
0
Downloads
71
Comments
1
Likes
27
Embeds 0
No embeds

No notes for slide

テスト駆動開発の進化

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

×