• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHPUnit でテスト駆動開発を始めよう
 

PHPUnit でテスト駆動開発を始めよう

on

  • 21,206 views

 

Statistics

Views

Total Views
21,206
Views on SlideShare
19,949
Embed Views
1,257

Actions

Likes
58
Downloads
92
Comments
1

21 Embeds 1,257

http://blog.yuyat.jp 645
http://yuyat.jp 353
http://192.168.33.10 56
http://ss.dotbranch.com 51
http://localhost 31
https://twitter.com 23
http://coderwall.com 20
http://asklife.info 20
http://s.deeeki.com 20
http://webcache.googleusercontent.com 11
http://us-w1.rockmelt.com 5
http://party4r.com 4
http://sc.dotbranch.com 4
http://10.211.55.6 4
http://192.168.245.164 2
http://www.twylah.com 2
https://si0.twimg.com 2
http://tweetedtimes.com 1
http://pascal.plustar.jp 1
http://54.248.222.153 1
https://www.chatwork.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 黒地に白が読み難い...
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHPUnit でテスト駆動開発を始めよう PHPUnit でテスト駆動開発を始めよう Presentation Transcript

    • PHPUnit でテスト駆動開発を 始めよう @yuya_takeyama
    • このスライドは以前の発表を抜粋・再編集・加筆してお送りします http://blog.yuyat.jp/archives/1386
    • アジェンダ•PHPUnit とは何か•何故ユニットテストを書くか•免責事項 (PHPUnit 的な意味で)•蛇足 : オレはこう思う
    • What’sPHPUnit?
    • PHPUnit とは•テスティングフレームワーク•ユニットテストを書く•比較的簡単に書ける•多機能
    • 何故 PHPUnit か•豊富なドキュメント•日本語訳も充実(PHP マニュアルでもおなじみ高木正弘さん)•豊富な利用実績 (ZF, Symfony2, etc)
    • http://www.phpunit.de/manual/current/ja/
    • これ読むだけでもかなり勉強になるの でオススメですhttp://www.phpunit.de/manual/current/ja/
    • class CalculatorTest extends PHPUnit_Framework_TestCase{    public function setUp()    {        $this->calc = new Calculator;    }    public function test_add_引数の和を返す()    {        $result = $this->calc->add(1, 2);        $this->assertSame(3, $result);    }}
    • class CalculatorTest extends PHPUnit_Framework_TestCase{    public function setUp()    { 1        $this->calc = new Calculator;    }    public function test_add_引数の和を返す()    {        $result = $this->calc->add(1, 2);        $this->assertSame(3, $result);    }} テストに必要な物の用意
    • class CalculatorTest extends PHPUnit_Framework_TestCase{    public function setUp()    {        $this->calc = new Calculator;    }    public function test_add_引数の和を返す()    { 2        $result = $this->calc->add(1, 2);        $this->assertSame(3, $result);    }} テスト対象の実行
    • class CalculatorTest extends PHPUnit_Framework_TestCase{    public function setUp()    {        $this->calc = new Calculator;    }    public function test_add_引数の和を返す()    { 3        $result = $this->calc->add(1, 2);        $this->assertSame(3, $result);    }} 実行結果の検証 (アサーション)
    • WhyUnit-test?
    • ドキュメントとして•Tests as Documentation• API の一覧• 動作するサンプルコード
    • 回帰テストとして•リグレッションテストともいう•ある修正が新たなバグを生んでいないか•同じ過ちを繰り返さないため
    • リファクタリングとは•振る舞いを帰ること無く• ソースコードの内部構造を• 変更すること• ソースコードの体質改善
    • 設計のためのテスト•Test Driven Design• ライブラリは API が 9 割• API のユーザビリティテスト• リファクタリングで継続的改
    • テストは質のためならず
    • 設計のためのテスト•オブジェクト指向の原則や•デザインパターンを武器に•テスタビリティの高いコードを書き•リファクタリングで継続的改
    • テストを中心に据えることで機能・設計を継続的に改善することができる
    • 何故テストを書くか•ドキュメントとして• 回帰テストとして• 設計のため• リファクタリングのため• 継続的改善のため
    • 免責事項(PHPUnit 的な意味で)
    • テストを書けば全てが解決するわけではなく, テストを書くことで新たに起こる問題もある
    • それらの問題を何でもPHPUnit や TDD のせいにするのではなく,妥協点を見つける必要がある
    • という話をします
    • Q. テストを書いていたら開発工数が増えるんだが!!!
    • A. 冗長化して書いているので当然です
    • http://d.hatena.ne.jp/nowokay/20120222
    • テストを書くポイントを選ぶ•やみくもに書けばいいというものではない•品質が求められる部分•頻繁に変更が起こり壊れやすい部分•不安を感じる部分•初期コストをかけることで, あとで回収で きるかどうか
    • テストもリスク/コスト•テストを書く時間•テストをメンテする時間•コストに見合った対価が得られるか•カバレッジが同じならテストは少ない方が良い•可読性重要
    • Q. テストを書いても開発が駆動 (Drive) されないのだが!!!
    • A. 今作っているものに TDD がフィットしてないのでは?
    • TDD が向かないもの•自分が作ろうとしているものが全くイメージで きない場合•開発の初期段階で, 作ろうとしているもの自体 がコロコロ変わる場合•テストを書こうとすることで, これらの問題に 早期に気づくことができる (という話もある)
    • とりあえず動くものを 作ることが大事
    • http://d.hatena.ne.jp/sotarok/20120105/1325698126
    • テストファーストが絶対ではない (と, 個人的には思ってます)
    • http://www.slideshare.net/t_wada/javaja-tdd-2nd
    • テストは後からでも書けるし後からでも書くべき
    • ※やみくもにテストを書いて痛い目を見ることで得ら れるものがあることも付記しておきます
    • 蛇足 : オレはこう思う
    • プログラマの「オレが全部書き直してやんよ!」病 について
    • オレが全部(ry•酷いレガシーコードの塊•こんなの読んでられない!!•全部書き直した方が早いのでは???
    • オレが全部(ry 本当に•酷いレガシーコードの塊• それで こんなの読んでられない!!•全部書き直した方が早いので いいのか? は???
    • 解決したい問題は何か
    • レガシーコードが抱える問題•理解するのに時間がかかる•ちょっと改修するとすぐ壊れる•拡張が著しく困難
    • 要約すると
    • レガシーコードが抱える問題•「オレ」が気に入らない
    • 解決したい問題は何か
    • 全部書き換えればレガシーコードは無くなるのか
    • 短期的には Yes であることもある
    • 長期的には大体 No
    • コードは腐る
    • 全部書き換える前にコードを腐らせない技術を身につける必要がある
    • レガシーコード と立ち向かう勇気
    • ...を, 身につけるためにこれの読書会とかしたいですね
    • ご清聴 ありがとうございました