phpspecで始めるBDD

5,285 views

Published on

BDDと開発サイクルについて、phpspecでBDDを始めるには

Published in: Software
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,285
On SlideShare
0
From Embeds
0
Number of Embeds
2,494
Actions
Shares
0
Downloads
29
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

phpspecで始めるBDD

  1. 1. phpspecで始める BDD yuuki takezawa
  2. 2. profile • ytake(GitHub), ex_takezawa(twitter) • java, php, node.js, RDBMS, NoSQL, VoltDB • 初福岡
  3. 3. Laravelエキスパート養成読本4章担当 ご興味がある方は是非お願いします
  4. 4. What is BDD? (Behavior Driven Development)?
  5. 5. 開発のサイクルを 振り返りましょう
  6. 6. 小さい範囲での開発
  7. 7. テスト コーディング テストを先に記述し、 実装に着手 テストが成功するまで 最小限のサイクルで開発
  8. 8. より大きな範囲
  9. 9. テスト コーディング 小さい範囲のサイクルは そのままに 設計 設計とリファクタリング 高い品質へ
  10. 10. 何のためのサイクルですか?
  11. 11. アジャイルとの関連性も 一つのポイント
  12. 12. 技術的卓越性と 優れた設計に対する 不断の注意が 機敏さを高めます
  13. 13. 実装コードが正しく動くか? 実装要件を満たすか?
  14. 14. テストとリファクタリングを 繰り返す -> 継続的インテグレーション
  15. 15. ビヘイビア駆動開発とは?
  16. 16. 開発スケジュール • データベースライブラリ入れ替え XX日 • メルマガ発行のため、
 Queueの導入と実装 XX日 • といった工数の出し方したことありませんか?
  17. 17. ビジネスの観点で 評価ができるか?
  18. 18. プロジェクトオーナーの存在
  19. 19. 情報を伝えるもっとも効率的 で効果的な方法は フェイス・トゥ・フェイスで 話をすることです
  20. 20. ユーザーストーリー
  21. 21. <役割>として <機能>が出来る それは<ビジネスの価値> のためだ
  22. 22. テスト コーディング設計 プロダクトへの理解と品質 要件
  23. 23. ストーリーをサポートする Behat 要求仕様をサポートする PHPSpec
  24. 24. http://www.phpspec.net
  25. 25. "require-dev": { "phpspec/phpspec": "~2.1" },
  26. 26. PHPSpec • オブジェクトの振る舞いを仕様として記述
 例). ○を追加したら配列に含まれること • 仕様(spec)を先に書いて実装する • 記述方法は自然言語(英語) => 仕様になる
  27. 27. $ phpspec describe App/FizzBuzz
  28. 28. phpspec describe • 振る舞いを記述するクラスとして指定 • 実クラスが無くて構いません
 specファーストの為、対象はphpspecが作成
  29. 29. namespace specApp; use PhpSpecObjectBehavior; use ProphecyArgument; class FizzBuzzSpec extends ObjectBehavior { function it_is_initializable() { $this->shouldHaveType('AppFizzBuzz'); } }
  30. 30. Specを記述 • スネークケースでit, またはitsから書き始める • Spec内の$thisは振る舞うオブジェクトを指す • 存在すると仮定するメソッドを記述し、
 返却すべき値を記述
  31. 31. function it_return_1_for_1() { $this->transform(1)->shouldReturn(1); } function it_return_2_for_2() { $this->transform(2)->shouldReturn(2); } function it_should_return_crazy_for_3() { $this->transform(3)->shouldReturn('crazy'); } 期待する返却値を記述
  32. 32. $ phpspec run
  33. 33. phpspec run • テストを実行 • メソッドがない場合は作成
 —fakeオプションで簡単な返却値も生成 • 失敗時のサポート
  34. 34. テスト失敗時 返却すべき値を表示してくれる わかりやすい
  35. 35. よく利用するもの • モック • マッチャー = assertに相当するもの • コンストラクタの振る舞い • featureファイルのサンプルが付属しています
  36. 36. function let(Message $message) { $this->beConstructedWith($message); } function it_is_initializable() { $this->shouldHaveType('AppFizzBuzz'); }
  37. 37. function it_should_return_message_for_3( Message $message ) {
 $message->getText(3)
 ->shouldBeCalled()->willReturn(‘message’); $this->transform(3)->shouldReturn('message'); }
  38. 38. まとめ • 仕様書としてもカバー • 最小のサイクルとフェイス・トゥ・フェイス • 包括的なドキュメントよりも
 動くソフトウェア • スクラムにも、個人開発にも

×