Successfully reported this slideshow.
動けばいいじゃない!
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 > 1...
$b > 10ってなんだ。
0.9ってなんだ?
意味分からん。
/**
* 価格計算
* @param int $price 価格
* @param int $quantity 個数
* @return int
*/
function calcAmount($price, $quantity)
{
$amo...
読める!
動くのが分かる!
これが、
可読詩片
リーダブルコード
ところで
もし、あなたが
プログラミング初心者
or
その指導者なら
TDDは有用です
• •
どんな背景でも
シチュエーション
まず、テストを書いて
実装を始めるといいよ。
学習には最適。
[Phpカンファレンス関西2014 lt]動けばいいじゃない
[Phpカンファレンス関西2014 lt]動けばいいじゃない
Upcoming SlideShare
Loading in …5
×

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

2,628 views

Published on

  • Be the first to comment

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

  1. 1. 動けばいいじゃない! PHPカンファレンス関西 2014 ウェブニウム株式会社 取締役CTO 田中康一 a.k.a MugeSo
  2. 2. 自己紹介 • 職業: ウェブニウム株式会社 取締役 CTO • 名前: 田中 康一 • Twitter: @mugeso • 誰: 
 PHPカンファレンス2013 実行委員長
 「やはり、お前らのMVCは間違っている」の人
  3. 3. 今日は割と • • 初心者向け
  4. 4. まず、
  5. 5. ソフトウェアの正義 について 言いたい事がある。
  6. 6. すなわち!
  7. 7. 動く事が正義
  8. 8. さて、
  9. 9. テストコードのあるコード • • VS テストコードの無いコード • •
  10. 10. あなたはどちらで 書きますか。
  11. 11. 「ある方!」
  12. 12. と、答えたあなた!
  13. 13. そう、あなた!
  14. 14. 正解です!
  15. 15. ……一般的にはね。
  16. 16. 実は、 さっきの質問には
 背景が抜け落ちてる。 シチュエーション
  17. 17. 例①
  18. 18. お遊びのハッカソン
  19. 19. 限られた時間で、 動くプロダクト を作る事が目的
  20. 20. テストコードが 有っても
  21. 21. 動かなければ 意味が無い!
  22. 22. テストコード < 動く事
  23. 23. 類例だと
  24. 24. プロトタイピングが ある。
  25. 25. 例②
  26. 26. 保守しなくていい コード
  27. 27. つまり
  28. 28. 使い捨てのコード
  29. 29. 保守しないなら
  30. 30. 当然、
  31. 31. コードが動くかぎり テストコードを書く
 コストが無駄
  32. 32. Gistにあげる程度の
  33. 33. 屁みたいなコードに
  34. 34. テストコードは 不釣り合い
  35. 35. テストコードなんて
  36. 36. 窓から投げ捨てろ!
  37. 37. テストコード・͡ ヾ(*́ー`) ポイ
  38. 38. あっ。。。
  39. 39. 睨まないで!
  40. 40. 「今更そんな事」
  41. 41. とか
  42. 42. 「それでもテストは 必要だ!!!」
  43. 43. とか
  44. 44. 言いたそうに、 睨まないで!
  45. 45. 話の途中で
 邪険にするなんて
  46. 46. CakePHP以外に
 触れないで
  47. 47. 「PHPを窓から投げ捨てる」 とか
 言う様なものですよ!
  48. 48. 閑話休題
  49. 49. コードが動作する と言う条件下で
  50. 50. テストが いらない例を 出した訳ですが。。。
  51. 51. コードの動作は 誰が保証するんだ?
  52. 52. と、思われた方
  53. 53. 鋭い!
  54. 54. コードが動く保証が • • 必要
  55. 55. つまり
  56. 56. テストが必要。
  57. 57. だからって、
 テストコードが • • • 必要なのでは無い • • • •
  58. 58. 例えば
  59. 59. /** * 足し算 * @param int $a 足す数 * @param int $b 足される数 */ function sum($a, $b) { return $a + $b; }
  60. 60. 見りゃ分かる。
  61. 61.
  62. 62. 目視による脳内テストで • • • • • 動作を保証できる
  63. 63. つまり、 先にあげた背景なら
  64. 64. テストコードは • • • いらない。
  65. 65. あと
  66. 66. この規模なら
  67. 67. 実際に動かして
 動作確認してもいい。
  68. 68.
  69. 69. 手動テスト • • •
  70. 70. ただし、
  71. 71. テストコードを書く時間 > 手動のテスト時間のトータル
  72. 72. の場合
  73. 73. に限ります。
  74. 74. もちろん、
  75. 75. 逆説的に
  76. 76. 見て把握できない場合
  77. 77. かつ
  78. 78. テストコードを書く時間 < 手動のテスト時間のトータル
  79. 79. ならば
  80. 80. テストコードが必要
  81. 81. ユニットテストでも
  82. 82. 振る舞いテストでも
  83. 83. なんでもいい。
  84. 84. に角
  85. 85. テストコードが必要。
  86. 86. お前らは
  87. 87. 超人じゃない。
  88. 88. だから
  89. 89. 見て把握できるのには 限度がある。
  90. 90. 超高速で手動テスト できない。
  91. 91. なので
  92. 92. 多くのケースで テストコードが必要。
  93. 93. 今一度、言いたい。
  94. 94. 動く事が正義
  95. 95. 動く事を 己で保証できぬなら
  96. 96. テストコード書け。
  97. 97. 以上。
  98. 98. 以下、おまけ
  99. 99. ここで朗報です。
  100. 100. ちょっと複雑な コードでも
  101. 101. 工夫一つで目視で • • • 動作を保証できる ようになります
  102. 102. /** * 価格計算 * @param int $a 価格 * @param int $b 個数 * @return int */ function calc($a, $b) { return intval($a * $b * ( $b > 10 ? 0.9 : 1)); }
  103. 103. $b > 10ってなんだ。
  104. 104. 0.9ってなんだ?
  105. 105. 意味分からん。
  106. 106. /** * 価格計算 * @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); }
  107. 107. 読める!
  108. 108. 動くのが分かる!
  109. 109. これが、 可読詩片 リーダブルコード
  110. 110. ところで
  111. 111. もし、あなたが
  112. 112. プログラミング初心者 or その指導者なら
  113. 113. TDDは有用です • •
  114. 114. どんな背景でも シチュエーション
  115. 115. まず、テストを書いて 実装を始めるといいよ。
  116. 116. 学習には最適。

×