「やる夫で学ぶTDD」一日目 #ytdd

某SIerで if(true == false) のような神コードをインスペクションし、廃人化しているやらない夫こと太田さんのTDDツィートが逸品すぎるのでトゥギャってみました。
24
Kenichiro Ota @oota_ken

やる夫:正三角形だお。

2011-02-02 23:50:43
Kenichiro Ota @oota_ken

やらない夫:じゃあ、それでテストケースを作ろう。

2011-02-02 23:50:58
Kenichiro Ota @oota_ken

triangle.setA(BigDecimal.valueOf(1)); triangle.setB(BigDecimal.valueOf(1)); triangle.setC(BigDecimal.valueOf(1));

2011-02-02 23:52:44
Kenichiro Ota @oota_ken

assertTrue(triangle.isEquilateralTriangle());

2011-02-02 23:52:55
Kenichiro Ota @oota_ken

やる夫:やらない夫・・対象のクラスがないお、頭おかしいのかお?これじゃコンパイルエラーだお。やらない夫はコンパイルもできないプログラムを書けっていうのかお?

2011-02-02 23:53:59
Kenichiro Ota @oota_ken

やらない夫:テストから先に書くのがTDDなんだ。テスト対象のクラスも、メソッドもEclipseとかVisual Studioのリファクタリングやクイックフィックスとかの機能を使えば簡単に作れるぞ。

2011-02-02 23:55:58
Kenichiro Ota @oota_ken

やる夫:やるおは「メモ帳」でプログラム書いていたから知らなかったお。そんな便利なツールがあるのかお。すぐ使うお。会社で申請してもらうお。

2011-02-02 23:57:05
Kenichiro Ota @oota_ken

やらない夫:今回のEclipseは無料だからそんなのいらない。Visual StudioもExpressとかだったらただなので家でも勉強できるぞ。

2011-02-02 23:58:00
Kenichiro Ota @oota_ken

やる夫:じゃあ、実装書くお!

2011-02-02 23:58:37
Kenichiro Ota @oota_ken

やる夫:やらない夫はすぐ引き止めるからうざいお。実装するお!

2011-02-02 23:59:27
Kenichiro Ota @oota_ken

やらない夫:いや、実装はしてもいいんだが、最も簡単な実装をしないか? とりあえず、 return true; だ

2011-02-03 00:00:12
Kenichiro Ota @oota_ken

やる夫:なんでそんな分かりきったことするんだお。

2011-02-03 00:00:35
Kenichiro Ota @oota_ken

やらない夫:いや、でも今のテストケースに対しては正しい答えだろう。もっと簡単な実装ならバグも少ない。というか今のテストケースに対してはバグゼロだ。

2011-02-03 00:01:23
Kenichiro Ota @oota_ken

やる夫:・・・確かに・・・でも、これじゃ正三角形じゃない三辺を与えたらテスト失敗するお

2011-02-03 00:02:03
Kenichiro Ota @oota_ken

triangle.setA(BigDecimal.valueOf(2)); triangle.setB(BigDecimal.valueOf(1)); triangle.setC(BigDecimal.valueOf(1));

2011-02-03 00:02:39
Kenichiro Ota @oota_ken

やらない夫:やる夫ちゃんとテストケースを考えらえるようになってきたじゃないか。 2 1 1はまあ三角形ですらないんだけど、正三角形でないことは確かだな。

2011-02-03 00:03:35
Kenichiro Ota @oota_ken

やる夫:そして、 assertFalse(triangle.isEquilateralTriangle()); これ実行すると失敗するお・・・

2011-02-03 00:04:44
Kenichiro Ota @oota_ken

やらない夫:成功させるにはどうしたらいい?

2011-02-03 00:05:08
Kenichiro Ota @oota_ken

やる夫: return true; を return a.equals(b);に書き換えればいいお

2011-02-03 00:05:56
Kenichiro Ota @oota_ken

やらない夫:グリーンになったようだな。同じようにしてテストケースを追加して、そのたびに実装コードをテストケースを合格させるように実装する。

2011-02-03 00:06:49
Kenichiro Ota @oota_ken

やる夫:1 1 1, 2 1 1, 1 2 1, 1 1 2, 最後、こうなったお。 return a.equals(b) && b.equals(c) && c.equals(a); もう大丈夫だお。

2011-02-03 00:07:57
Kenichiro Ota @oota_ken

やらない夫:本当にそれで大丈夫か?たとえば、 三辺が0の時は果たして正三角形なのか?

2011-02-03 00:09:57
Kenichiro Ota @oota_ken

やる夫:0はそもそも長さがないから、三角形ですらないお。・・・・テストケースを作ってみるお。 

2011-02-03 00:12:15
Kenichiro Ota @oota_ken

やる夫: triangle.setA(BigDecimal.ZERO); triangle.setA(BigDecimal.ZERO); triangle.setA(BigDecimal.ZERO); JDK 1.5からBigDecimal.ZEROが使えるお!

2011-02-03 00:13:07