「やる夫で学ぶTDD」二日目 Myersの三角形 二等辺三角形 #ytdd

某SIerで if(true == false) のような神コードのインスペクションで廃人化しているやらない夫こと太田先生の「やる夫で学ぶTDD」二日目です。
12
Kenichiro Ota @oota_ken

やる夫:assertTrue(triangle.isIsoscelesTriangle());したら、もちろんメソッドがないから、コンパイルエラーが出たお。

2011-02-03 23:41:33
Kenichiro Ota @oota_ken

やらない夫:そこはEclispeのクイックフィックスで簡単にメソッドが作れる。

2011-02-03 23:42:09
Kenichiro Ota @oota_ken

やる夫:作ったお!そして、最初実装は最も簡単にがTDDだったので、return true;が中身だお!

2011-02-03 23:42:40
Kenichiro Ota @oota_ken

やる夫:でも、最初はあえて作られたメソッドスタブの実装のreturn false;のまま失敗させるほうがいいお。

2011-02-03 23:43:42
Kenichiro Ota @oota_ken

やる夫:テストが失敗したから、成功するようにreturn true;に変えるお!

2011-02-03 23:44:42
Kenichiro Ota @oota_ken

やる夫:成功したお!で、次は二等辺三角形じゃないテストケースを作ればいいんだな。

2011-02-03 23:45:32
Kenichiro Ota @oota_ken

やらない夫:待て!TDDではテストケース自体の重複も保守に当たっては問題になるんだ。

2011-02-03 23:46:05
Kenichiro Ota @oota_ken

やる夫:どういうことだお!テスト技法も使っているのに何が問題なんだお?

2011-02-03 23:46:24
Kenichiro Ota @oota_ken

やらない夫:テストケース自体が重複を含んでいたり、冗長だったりすると、対象のプログラムと同じような保守性の問題を抱えるからだ。

2011-02-03 23:47:30
Kenichiro Ota @oota_ken

とも子:コンサルでいうところのMECEね。Mutually Exclusive and Collectively Exhaustive、重複なく・漏れなくということよ。テストケースも同じくそうあるべきということ。

2011-02-03 23:48:37
Kenichiro Ota @oota_ken

光たん:We say 不漏沒有重複地 in Chinese.

2011-02-03 23:50:30
Kenichiro Ota @oota_ken

やる夫:正三角形のために作ったテストケースの中に、すでに二等辺三角形じゃないものがあるということかお。確かにあるお!

2011-02-03 23:53:32
Kenichiro Ota @oota_ken

やる夫:テストケース自体もリファクタリングっていうのが必要だってことかお!やらない夫ととも子すごいお!

2011-02-03 23:54:10
Kenichiro Ota @oota_ken

光たん:やる夫、?也厲害 (やる夫もすごいよ!)

2011-02-03 23:54:49
Kenichiro Ota @oota_ken

やる夫:2 1 1は・・・これはちょっと微妙だお…確かに正三角形でも二等辺三角形でもないけど、そもそも、三角形ですらないお・・・ 2 1 1じゃ直線になっちゃお

2011-02-03 23:56:18
Kenichiro Ota @oota_ken

やらない夫:確かに、これはちょっと適切じゃなかったな。テストケース自体をリファクタリングするか、二等辺三角形でないことを検証する新たなテストケースを作るかは自由だ。今回は後者にしてみようか。今回は分かり易さを優先して、 5 4 3にしてみよう。

2011-02-03 23:59:10
Kenichiro Ota @oota_ken

やらない夫:5 4 3は直角三角形だけど、二等辺三角形ではない。

2011-02-03 23:59:32
Kenichiro Ota @oota_ken

やる夫:もちろん失敗したお。成功するようにリファクタリングするお。二等辺三角形がであることは前の正三角形と同じようにnullじゃないことと、正の整数の事前条件を満たし、かつ二辺が等しいことだお!

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

やる夫:return preCondition() && a.equals(b); これで全ケース合格だお!

2011-02-04 00:04:11
Kenichiro Ota @oota_ken

やらない夫: 2 2 1 以外にも 1 2 2 , 2 1 2についても二等辺三角形だよな。

2011-02-04 00:05:04
Kenichiro Ota @oota_ken

やる夫:同じくテストケースを作ってそしてリファクタリングしていくお!

2011-02-04 00:05:20
Kenichiro Ota @oota_ken

やる夫:return preCondition() && (a.equals(b) || b.equals(c) || c.equals(a)); で全テストケースが合格したお!

2011-02-04 00:07:24
Kenichiro Ota @oota_ken

やらない夫:ここで、テストケースのリファクタリングをしようか。

2011-02-04 00:07:48
Kenichiro Ota @oota_ken

やらない夫:正三角形は二等辺三角形でもあるから・・・そして、正三角形でなく、かつ二等辺三角形でもないケースについては

2011-02-04 00:08:41
Kenichiro Ota @oota_ken

やる夫:それぞれのテストケースに、assert*(triangle.isIsoscelesTriangle());のアサーションを加えればいいってことかお?

2011-02-04 00:09:29