SlideShare a Scribd company logo
phpspecで始める
BDD
yuuki takezawa
profile
• ytake(GitHub), ex_takezawa(twitter)
• java, php, node.js, RDBMS, NoSQL, VoltDB
• 初福岡
Laravelエキスパート養成読本4章担当
ご興味がある方は是非お願いします
What is BDD?
(Behavior Driven
Development)?
開発のサイクルを
振り返りましょう
小さい範囲での開発
テスト
コーディング
テストを先に記述し、
実装に着手
テストが成功するまで
最小限のサイクルで開発
より大きな範囲
テスト
コーディング
小さい範囲のサイクルは
そのままに
設計
設計とリファクタリング
高い品質へ
何のためのサイクルですか?
アジャイルとの関連性も
一つのポイント
技術的卓越性と
優れた設計に対する
不断の注意が
機敏さを高めます
実装コードが正しく動くか?
実装要件を満たすか?
テストとリファクタリングを
繰り返す
-> 継続的インテグレーション
ビヘイビア駆動開発とは?
開発スケジュール
• データベースライブラリ入れ替え XX日
• メルマガ発行のため、

Queueの導入と実装 XX日
• といった工数の出し方したことありませんか?
ビジネスの観点で
評価ができるか?
プロジェクトオーナーの存在
情報を伝えるもっとも効率的
で効果的な方法は
フェイス・トゥ・フェイスで
話をすることです
ユーザーストーリー
<役割>として
<機能>が出来る
それは<ビジネスの価値>
のためだ
テスト
コーディング設計
プロダクトへの理解と品質
要件
ストーリーをサポートする
Behat
要求仕様をサポートする
PHPSpec
http://www.phpspec.net
"require-dev": {
"phpspec/phpspec": "~2.1"
},
PHPSpec
• オブジェクトの振る舞いを仕様として記述

例). ○を追加したら配列に含まれること
• 仕様(spec)を先に書いて実装する
• 記述方法は自然言語(英語) => 仕様になる
$ phpspec describe App/FizzBuzz
phpspec describe
• 振る舞いを記述するクラスとして指定
• 実クラスが無くて構いません

specファーストの為、対象はphpspecが作成
namespace specApp;
use PhpSpecObjectBehavior;
use ProphecyArgument;
class FizzBuzzSpec extends ObjectBehavior
{
function it_is_initializable()
{
$this->shouldHaveType('AppFizzBuzz');
}
}
Specを記述
• スネークケースでit, またはitsから書き始める
• Spec内の$thisは振る舞うオブジェクトを指す
• 存在すると仮定するメソッドを記述し、

返却すべき値を記述
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');
}
期待する返却値を記述
$ phpspec run
phpspec run
• テストを実行
• メソッドがない場合は作成

—fakeオプションで簡単な返却値も生成
• 失敗時のサポート
phpspecで始めるBDD
テスト失敗時
返却すべき値を表示してくれる
わかりやすい
よく利用するもの
• モック
• マッチャー = assertに相当するもの
• コンストラクタの振る舞い
• featureファイルのサンプルが付属しています
function let(Message $message)
{
$this->beConstructedWith($message);
}
function it_is_initializable()
{
$this->shouldHaveType('AppFizzBuzz');
}
function it_should_return_message_for_3(
Message $message
) {

$message->getText(3)

->shouldBeCalled()->willReturn(‘message’);
$this->transform(3)->shouldReturn('message');
}
まとめ
• 仕様書としてもカバー
• 最小のサイクルとフェイス・トゥ・フェイス
• 包括的なドキュメントよりも

動くソフトウェア
• スクラムにも、個人開発にも

More Related Content

PDF
PHPUnit でテスト駆動開発を始めよう
PDF
Laravel5.1 Release
PDF
Javaで1から10まで書いた話(sanitized)
PDF
よりよいPHPUnitの実行方法を求めて
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
PPTX
Behat Driven Development
PDF
AspectMock 最強のモッキングフレームワーク
PPTX
今日から始めるLaravel
PHPUnit でテスト駆動開発を始めよう
Laravel5.1 Release
Javaで1から10まで書いた話(sanitized)
よりよいPHPUnitの実行方法を求めて
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
Behat Driven Development
AspectMock 最強のモッキングフレームワーク
今日から始めるLaravel

What's hot (20)

PPT
PHP agile test tips
PPTX
テストしなイカ? Seleniumで自動ブラウザテスト
PDF
Javaのログ出力: 道具と考え方
PDF
Cake php + php unitによる実践的ユニットテスト
PDF
Behatで行う、E2Eテスト入門
PDF
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
PPTX
nGrinder3 : だれもが簡単にできる性能テスト
PDF
Laravel 5.1 LTSでサービスを作る
PDF
PHPデプロイツールの世界
KEY
初めての単体テスト
PDF
Laravelのパッケージのテストに便利なパッケージ
PPTX
活動報告9 laravel5入門-
PDF
いまどきのPHP開発現場 -2015年秋-
PDF
プログラミング言語Clojureのニャンパスでの活用事例
PDF
Phpstudy44 Zend Frameworkが抱えている問題は多い。
PPTX
Net fringejp2016
PDF
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
PPTX
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
PDF
Laravelとテストについて
PPTX
.NET vNext
PHP agile test tips
テストしなイカ? Seleniumで自動ブラウザテスト
Javaのログ出力: 道具と考え方
Cake php + php unitによる実践的ユニットテスト
Behatで行う、E2Eテスト入門
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
nGrinder3 : だれもが簡単にできる性能テスト
Laravel 5.1 LTSでサービスを作る
PHPデプロイツールの世界
初めての単体テスト
Laravelのパッケージのテストに便利なパッケージ
活動報告9 laravel5入門-
いまどきのPHP開発現場 -2015年秋-
プログラミング言語Clojureのニャンパスでの活用事例
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Net fringejp2016
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
Laravelとテストについて
.NET vNext
Ad

Viewers also liked (20)

PDF
zend-expressiveを触ってみよう
PDF
php開発で使うタスクランナー gulp
PDF
Laravel / Lumen 次の一歩
PDF
LaravelとMVCの先へ
PDF
behatで始めるBDD
PDF
今更はじめるCucumber
PDF
KPTのすすめ
KEY
Behat+Symfony2ではじめるBDD超入門
PDF
第4回勉強会 単体テストのすすめ
PDF
CakePHP3ウォークスルー
PDF
最近の単体テスト
PDF
ひよこテスト駆動開発(PHPカンファレンス2014)
PDF
behatエクステンションの作り方
PPT
初心者向けPHPソースコード診断
PDF
よいことも悪いこともぜんぶPHPが教えてくれた
PDF
Scrutinizer CIでPHPも静的解析 #phpstudy
PDF
とある事業の脱レガシー
PPTX
LaravelアプリケーションをSeleniumでテストしてみた
PDF
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
PDF
Codeceptionの受け入れテストをマネる
zend-expressiveを触ってみよう
php開発で使うタスクランナー gulp
Laravel / Lumen 次の一歩
LaravelとMVCの先へ
behatで始めるBDD
今更はじめるCucumber
KPTのすすめ
Behat+Symfony2ではじめるBDD超入門
第4回勉強会 単体テストのすすめ
CakePHP3ウォークスルー
最近の単体テスト
ひよこテスト駆動開発(PHPカンファレンス2014)
behatエクステンションの作り方
初心者向けPHPソースコード診断
よいことも悪いこともぜんぶPHPが教えてくれた
Scrutinizer CIでPHPも静的解析 #phpstudy
とある事業の脱レガシー
LaravelアプリケーションをSeleniumでテストしてみた
Test-driven Development with Drupal and Codeception (DrupalCamp Brighton)
Codeceptionの受け入れテストをマネる
Ad

Similar to phpspecで始めるBDD (16)

PPTX
Php development efficiency improvement
PDF
Symfony2 Behat/BDD (#Symfony2study 4)
PDF
Introduction to Continuous Test Runner MakeGood
PDF
Getting Started with Testing using PHPUnit
PPTX
PHP基礎勉強会
PPTX
DrupalでBDDテストを実施してみる①
KEY
EC-CUBE + PHPUnit で 実践テスト駆動開発
PPTX
Benkyokai
PDF
PHP Coding in BEAR.Sunday
PPT
第4部「Tddとペアプロのめざめ」
PDF
いよいよPHPerもリーンで行こう
PPTX
Rspec勉強会
KEY
TDD #NagoyaTesting
PDF
8時間耐久PHPUnitの教室
PDF
Hey It's Not My TDD!
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
Php development efficiency improvement
Symfony2 Behat/BDD (#Symfony2study 4)
Introduction to Continuous Test Runner MakeGood
Getting Started with Testing using PHPUnit
PHP基礎勉強会
DrupalでBDDテストを実施してみる①
EC-CUBE + PHPUnit で 実践テスト駆動開発
Benkyokai
PHP Coding in BEAR.Sunday
第4部「Tddとペアプロのめざめ」
いよいよPHPerもリーンで行こう
Rspec勉強会
TDD #NagoyaTesting
8時間耐久PHPUnitの教室
Hey It's Not My TDD!
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】

phpspecで始めるBDD