[phpカンファレンス関西2014 lt]動けばいいじゃない
TRANSCRIPT
動けばいいじゃない!PHPカンファレンス関西 2014
ウェブニウム株式会社 取締役CTO 田中康一 a.k.a MugeSo
自己紹介• 職業: ウェブニウム株式会社 取締役 CTO
• 名前: 田中 康一
• Twitter: @mugeso
• 誰: PHPカンファレンス2013 実行委員長「やはり、お前らのMVCは間違っている」の人
今日は割と • •
初心者向け
まず、
ソフトウェアの正義 について
言いたい事がある。
すなわち!
動く事が正義
さて、
テストコードのあるコード• •
VSテストコードの無いコード
• •
あなたはどちらで 書きますか。
「ある方!」
と、答えたあなた!
そう、あなた!
正解です!
……一般的にはね。
実は、 さっきの質問には背景が抜け落ちてる。シチュエーション
例①
お遊びのハッカソン
限られた時間で、 動くプロダクト を作る事が目的
テストコードが 有っても
動かなければ 意味が無い!
テストコード <
動く事
類例だと
プロトタイピングが ある。
例②
保守しなくていい コード
つまり
使い捨てのコード
保守しないなら
当然、
コードが動くかぎり テストコードを書くコストが無駄
Gistにあげる程度の
屁みたいなコードに
テストコードは 不釣り合い
テストコードなんて
窓から投げ捨てろ!
テストコード・⌒ ヾ(*́ー`) ポイ
あっ。。。
睨まないで!
「今更そんな事」
とか
「それでもテストは 必要だ!!!」
とか
言いたそうに、 睨まないで!
話の途中で邪険にするなんて
CakePHP以外に触れないで
「PHPを窓から投げ捨てる」 とか
言う様なものですよ!
閑話休題
コードが動作する と言う条件下で
テストが いらない例を
出した訳ですが。。。
コードの動作は 誰が保証するんだ?
と、思われた方
鋭い!
コードが動く保証が • •
必要
つまり
テストが必要。
だからって、テストコードが
• • •
必要なのでは無い• • • •
例えば
/** * 足し算
* @param int $a 足す数
* @param int $b 足される数
*/ function sum($a, $b) { return $a + $b; }
見りゃ分かる。
=
目視による脳内テストで • • • • •
動作を保証できる
つまり、 先にあげた背景なら
テストコードは • • •
いらない。
あと
この規模なら
実際に動かして動作確認してもいい。
=
手動テスト• • •
ただし、
テストコードを書く時間 >
手動のテスト時間のトータル
の場合
に限ります。
もちろん、
逆説的に
見て把握できない場合
かつ
テストコードを書く時間 <
手動のテスト時間のトータル
ならば
テストコードが必要
ユニットテストでも
振る舞いテストでも
なんでもいい。
兎に角
テストコードが必要。
お前らは
超人じゃない。
だから
見て把握できるのには限度がある。
超高速で手動テスト できない。
なので
多くのケースで テストコードが必要。
今一度、言いたい。
動く事が正義
動く事を 己で保証できぬなら
テストコード書け。
以上。
以下、おまけ
ここで朗報です。
ちょっと複雑な コードでも
工夫一つで目視で • • •
動作を保証できる ようになります
/** * 価格計算
* @param int $a 価格 * @param int $b 個数 * @return int */ function calc($a, $b) { return intval($a * $b * ( $b > 10 ? 0.9 : 1)); }
$b > 10ってなんだ。
0.9ってなんだ?
意味分からん。
/** * 価格計算
* @param int $price 価格 * @param int $quantity 個数 * @return int */ function calcAmount($price, $quantity) { $amount = $price * $quantity; if ($quantity < self::PRICE_DOWN_THRESHOLD) { return $amount; } ! return intval($amount * self::PRICE_DOWN_RATE); }
読める!
動くのが分かる!
これが、 可読詩片リーダブルコード
ところで
もし、あなたが
プログラミング初心者 or
その指導者なら
TDDは有用です• •
どんな背景でもシチュエーション
まず、テストを書いて 実装を始めるといいよ。
学習には最適。