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

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

assertFalse(triangle.isEquilateralTriangle());

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

しばしお待ちを TDD中筆者が誤った理解をしていたため、デバッグ中ですw

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

やる夫:テストコードが間違っていたお。手抜きでコピー過ぎたお。正しいのは、 triangle.setA(BigDecimal.ZERO); triangle.setB(BigDecimal.ZERO); triangle.setC(BigDecimal.ZERO);

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

やる夫:assertFalse(triangle.isEquilateralTriangle()); レッドになったお・・・修正が必要ってことかお

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

やる夫:return a.compareTo(BigDecimal.ZERO) == 1 && b.compareTo(BigDecimal.ZERO) == 1 && c.compareTo(BigDecimal.ZERO) == 1 を左に付けたしたお!

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

やらない夫:ちょっと一気にやりすぎた感はあるが、テストケースは成功だな。副作用がないか、全テストケースを実行してみよう。これもグリーンだ。いいだろう。

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

失敗してほしいテストが合格したからですw RT @softest: @oota_ken このテストコードの誤りはどうやって見つけたんでしょうか?

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

やる夫:もう眠いので今日はこれで終わりにしたいお・・・

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

やらない夫:だめだ、まだ重要なことが残っている・・・ nullを与えたらどうなる?

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

やる夫:そんなの知らないお!

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

やらない夫:そんなこと言わずにこれ今日最後にするからテストケース作ってみようやる夫

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

やる夫:triangle.setA(null); triangle.setB(BigDecimal.valueOf(1)); triangle.setC(BigDecimal.valueOf(1));

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

やる夫:assertFalse(triangle.isEquilateralTriangle()); こうかお。実行!

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

やる夫:ヌルポで落ちたおおおおおおおおおお これがテストで出ると、いつも鬼畜王ランス14 おっぱいがいっぱいプロジェクトの人はかんかんだおー 前、やる夫のクラスで出て殴られたお

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

やらない夫:落ち着け、nullの対処をすればいい。

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

やる夫:a != null && b != null && c != null  かお。

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

やらない夫:ちょっと一気にやりすぎだ。まあいい、 1 null 1, 1 1 nullのテストケースも追加しておけよ。これは仕様から見たテストと構造からみたテストの両方の観点からで追加が必要だ。充粋なTDDの場合仕様から見て追加するな。

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

やらない夫:今回やる夫は一気に実装コードを追加しすぎたので、その場合、構造を見て構造のカバレッジを取るとという観点で、1 null 1, 1 1 nullを追加することになる。

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

やる夫:ちょっと条件式がえぐくなり過ぎな気がするお。

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

やらない夫:そうだな。最初のいくつかの条件式は、正三角形の条件というより三角形や辺としての前提条件だな。りふぁくタイリングの機能を使って、条件式の一部をメソッドとして切り出そう。

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

やる夫:とすると 本体は return preCondition() && a.equals(b) && b.equals(c) && c.equals(a); な感じでシンプルになる。

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

やる夫:もちろんここで全テストを再実行するんだお。リファクタリングしたら必ず壊れてないことを確かめるために再実行するんだお。

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

やらない夫:全合格だな。 privateになった条件式は a != null && b != null && c != null &&

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

やらない夫:a.compareTo(BigDecimal.ZERO) == 1 && b.compareTo(BigDecimal.ZERO) == 1 && c.compareTo(BigDecimal.ZERO) == 1

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

やらない夫:今日はここまでにするか。明日は二等辺三角形やろうか。

2011-02-03 00:48:09