「やる夫で学ぶTDD」 三日目 不等辺三角形 そして伝説へ・・・ #ytdd

某SIerで if(true == false) のような神コードのインスペクションで廃人化しているやらない夫こと太田先生の「やる夫で学ぶTDD」三日目です。 ⇒ AAバージョン by @hanisinatakuan http://changegetter1.blog63.fc2.com/blog-entry-100.html
7
Kenichiro Ota @oota_ken

やる夫:0 0 0のときは、 a < b + c, b < a + c, c < a + bはすべてFalseになるから当然&&結んだらFalseでOKだった苧。ちょっと焦ったお!

2011-02-05 00:26:49
Kenichiro Ota @oota_ken

やらない夫:じゃあ, null の時も行こうか。

2011-02-05 00:27:23
Kenichiro Ota @oota_ken

やる夫:isTriangleはまだnullチェックしていないから落ちるお!実装するお

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

やらない夫:やる夫いま、 a != null && b != null && c != null のコードをpreConditionメソッドからコピペしたろう。それはリファクタリングの匂い、重複を含む匂いだ。

2011-02-05 00:30:46
Kenichiro Ota @oota_ken

やる夫:つまり、preConditionを呼び出すように変えるべきということかお。

2011-02-05 00:31:07
Kenichiro Ota @oota_ken

やらない夫:そうだ、変えてみよう。

2011-02-05 00:31:19
Kenichiro Ota @oota_ken

やらない夫:テストは合格する。常にテストが守ってくれるというのがTDDの強さだな。

2011-02-05 00:31:57
Kenichiro Ota @oota_ken

やる夫:確かにデバッグの時間が激減したお。これは気分的にも楽だお。

2011-02-05 00:32:16
Kenichiro Ota @oota_ken

やらない夫:引き続き、2 2 1の二等辺三角形のテストケースにについても assertTrue(triangle.isTriangle()); を追加する。 #ytdd

2011-02-05 00:34:33
Kenichiro Ota @oota_ken

やる夫:1 2 2 , 2 1 2のケースも同様だお。テスト合格だお!

2011-02-05 00:35:39
Kenichiro Ota @oota_ken

やらない夫:5 4 3の二等辺三角形じゃないケースについても assertTrue(triangle.isTriangle());を追加して、テストする。

2011-02-05 00:37:07
Kenichiro Ota @oota_ken

やらない夫:これは実は二等辺三角形じゃなくて、直角三角形なんだけど、今回の使用上の定義では不等辺三角形だから、テストメソッドを変更して・・・testScaleneTriangleisTrueとする。

2011-02-05 00:39:52
Kenichiro Ota @oota_ken

やる夫:assertTrue(triangle.iScaleneTriangle());を用意するお!コンパイルエラーで当然こけるお!

2011-02-05 00:41:29
Kenichiro Ota @oota_ken

やる夫:次はreturn trueにする方法もあるけど、前のテストケースから分かることは、不等辺三角形とは 三角形であってしかも二等辺三角形じゃないものだから、こう実装しちゃうのが早いお。

2011-02-05 00:43:22
Kenichiro Ota @oota_ken

やる夫: return assertTrue(triangle.iScaleneTriangle());だお。そして、testScaleneTriangleisTrueのテストケース自体から、

2011-02-05 00:44:49
Kenichiro Ota @oota_ken

やる夫:ssertFalse(triangle.isIsoscelesTriangle());を取りのぞくお! #ytdd

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

やる夫:実はこの調子でてテストケースのメソッドと、対象のソースコード自体を見直していくとあることが分かるお。

2011-02-05 00:45:55
Kenichiro Ota @oota_ken

やる夫:まず、正三角形は三角形であり、かつ三辺が等しいことだから、isTriangleを条件に追加する必要があるお。これでテストを再実行すると成功するお。

2011-02-05 00:47:55
Kenichiro Ota @oota_ken

やる夫:正三角形は不等辺三角形ではないから、 testEquilateralTriangleIsTrueに assertFalse(triangle.iScaleneTriangle()); を追加するお。

2011-02-05 00:49:33
Kenichiro Ota @oota_ken

やる夫:逆に自明になった assertTrue(triangle.isTriangle()); は削除するお

2011-02-05 00:50:06
Kenichiro Ota @oota_ken

やらない夫:同じようにして二等辺三角形もテストと対象コードの両方をリファクタリングしていく。 #ytdd

2011-02-05 00:50:52
Kenichiro Ota @oota_ken

やる夫:isTriangleとisIsoscelesTriangle, isEquilateralTriangleの3つの中で、preConditionを読んでいるので、:isTriangle内のみに集約するお!この時もテストコードが守ってくれるお!

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

やる夫:で、できたおー、3辺を与えると、正三角形、二等辺三角形、不等辺三角形が判別できるようになったおー #ytdd

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

やらない夫:テストケースもいい感じにリファクタリングできているな。不等辺三角形かどうかを確かめるケースは

2011-02-05 01:02:19