SlideShare ist ein Scribd-Unternehmen logo
1 von 118
Downloaden Sie, um offline zu lesen
動けばいいじゃない!
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は有用です
• •
どんな背景でも
シチュエーション
まず、テストを書いて
実装を始めるといいよ。
学習には最適。

Weitere ähnliche Inhalte

Andere mochten auch

アジャイルマインドの重要性(長野)
アジャイルマインドの重要性(長野)アジャイルマインドの重要性(長野)
アジャイルマインドの重要性(長野)Akiyah
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)VOYAGE GROUP
 
eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」ericsagnes
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜Yuji Nojima
 
形態素解析も辞書も言語モデルもいらないend-to-end音声認識
形態素解析も辞書も言語モデルもいらないend-to-end音声認識形態素解析も辞書も言語モデルもいらないend-to-end音声認識
形態素解析も辞書も言語モデルもいらないend-to-end音声認識Tomoki Hayashi
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016Rui Hirokawa
 
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いiOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いKen Morishita
 
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot CampYuki KAN
 
なぜなに Windows Universal App (パイロット版)
なぜなに Windows Universal App (パイロット版)なぜなに Windows Universal App (パイロット版)
なぜなに Windows Universal App (パイロット版)Yuki KAN
 
【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~
【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~
【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~Yuuki Ogino
 

Andere mochten auch (14)

MVC 03
MVC 03MVC 03
MVC 03
 
MVC 01
MVC 01MVC 01
MVC 01
 
Twilio client for android
Twilio client for androidTwilio client for android
Twilio client for android
 
アジャイルマインドの重要性(長野)
アジャイルマインドの重要性(長野)アジャイルマインドの重要性(長野)
アジャイルマインドの重要性(長野)
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
 
eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」
 
Ansible+Docker
Ansible+DockerAnsible+Docker
Ansible+Docker
 
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
 
形態素解析も辞書も言語モデルもいらないend-to-end音声認識
形態素解析も辞書も言語モデルもいらないend-to-end音声認識形態素解析も辞書も言語モデルもいらないend-to-end音声認識
形態素解析も辞書も言語モデルもいらないend-to-end音声認識
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞いiOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
 
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
2015/04/25 Azure JavaScript API App つくったよ (LT) / Global Azure Boot Camp
 
なぜなに Windows Universal App (パイロット版)
なぜなに Windows Universal App (パイロット版)なぜなに Windows Universal App (パイロット版)
なぜなに Windows Universal App (パイロット版)
 
【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~
【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~
【VR Tech Tokyo #6@Microsoft】VR開発しくじり先生 ~OculusStoreにリジェクトされるのが得意なフレンズなんだね~
 

Ähnlich wie [Phpカンファレンス関西2014 lt]動けばいいじゃない

_s + bootstrapで始めるWordPressテーマ開発入門
_s + bootstrapで始めるWordPressテーマ開発入門_s + bootstrapで始めるWordPressテーマ開発入門
_s + bootstrapで始めるWordPressテーマ開発入門Hidetaka Okamoto
 
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノートAndroidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノートHiroyuki Shimanishi
 
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話Yuki Kuramochi
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-nishio
 
自社開発をしていなかった会社が Python を選んだ理由
自社開発をしていなかった会社が Python を選んだ理由自社開発をしていなかった会社が Python を選んだ理由
自社開発をしていなかった会社が Python を選んだ理由Daisuke Komatsu
 
パフォーマンステストいつやる??
パフォーマンステストいつやる??パフォーマンステストいつやる??
パフォーマンステストいつやる??Shuichi Takaku
 
ペルソナシナリオとプロトタイプ2
ペルソナシナリオとプロトタイプ2ペルソナシナリオとプロトタイプ2
ペルソナシナリオとプロトタイプ2Shuhei Iitsuka
 
amikakawasaki.06272
amikakawasaki.06272amikakawasaki.06272
amikakawasaki.06272amika_k
 
Word bench神戸の紹介
Word bench神戸の紹介Word bench神戸の紹介
Word bench神戸の紹介BREN
 
第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会ha1t
 
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devloveTakao Oyobe
 
リーンスタートアップ概論
リーンスタートアップ概論リーンスタートアップ概論
リーンスタートアップ概論Itsuki Kuroda
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方Yusuke Wada
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
from_beginner_to_engineer
from_beginner_to_engineerfrom_beginner_to_engineer
from_beginner_to_engineerYuka Tokuyama
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門Kohei Kadowaki
 
市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方Daiki Tanoguchi
 

Ähnlich wie [Phpカンファレンス関西2014 lt]動けばいいじゃない (20)

_s + bootstrapで始めるWordPressテーマ開発入門
_s + bootstrapで始めるWordPressテーマ開発入門_s + bootstrapで始めるWordPressテーマ開発入門
_s + bootstrapで始めるWordPressテーマ開発入門
 
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノートAndroidアプリ 長い黒髪のマイカノジョ 制作ノート
Androidアプリ 長い黒髪のマイカノジョ 制作ノート
 
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
「現場のプロが教えるWebデザイン新・スタンダードテクニック37」に載っているテクニックでLP作ってみた話
 
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
 
自社開発をしていなかった会社が Python を選んだ理由
自社開発をしていなかった会社が Python を選んだ理由自社開発をしていなかった会社が Python を選んだ理由
自社開発をしていなかった会社が Python を選んだ理由
 
パフォーマンステストいつやる??
パフォーマンステストいつやる??パフォーマンステストいつやる??
パフォーマンステストいつやる??
 
ペルソナシナリオとプロトタイプ2
ペルソナシナリオとプロトタイプ2ペルソナシナリオとプロトタイプ2
ペルソナシナリオとプロトタイプ2
 
PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013PHPコアから読み解く定石の嘘ホント #phpcon2013
PHPコアから読み解く定石の嘘ホント #phpcon2013
 
amikakawasaki.06272
amikakawasaki.06272amikakawasaki.06272
amikakawasaki.06272
 
Word bench神戸の紹介
Word bench神戸の紹介Word bench神戸の紹介
Word bench神戸の紹介
 
第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会
 
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
 
私とインクス
私とインクス私とインクス
私とインクス
 
リーンスタートアップ概論
リーンスタートアップ概論リーンスタートアップ概論
リーンスタートアップ概論
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
from_beginner_to_engineer
from_beginner_to_engineerfrom_beginner_to_engineer
from_beginner_to_engineer
 
いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門いまさら聞けない!?Backbone.js 超入門
いまさら聞けない!?Backbone.js 超入門
 
PHP with Visual Studio
PHP with Visual StudioPHP with Visual Studio
PHP with Visual Studio
 
市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方市場価値を高める仕事のつかみ方
市場価値を高める仕事のつかみ方
 

[Phpカンファレンス関西2014 lt]動けばいいじゃない