Index: [Article Count Order] [Thread]

Date:  Sat, 2 Dec 2000 19:06:11 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:01227] Re: Test First Programming 	でも、デバッグは必要ですね。
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B64EF878.2D9A%khosokawa@....com>
In-Reply-To:  <NEBBLCBLMJKDLAMIAMIGMEENCOAA.mishii@....jp>
Posted:  Sat, 02 Dec 2000 19:05:28 +0900
X-Mail-Count: 01227

ホソカワです。

> 石井です.
> 
>> 実は、この話には、おちがあります。プログラムを読みたくない方は、ここで、「
>> ここまで」をサーチして、そこからお読み下さい。
> 
> すみません,読みたくないっていうわけじゃありませんが,プログラム
> 読んでません(^^;.
> 
>> 結局、Test First Programming は、凄いというつもりが言えなくなってしまいま
> し
>> た。print文に頼らざるえなくなったのは、以下の理由からかと思っています。
> 
> print文のデバッグは,僕も結構やってますし,そんなに気にしてませんよ.
> 

「Test First Debugging」ができるのではないかと思っていました。プリント文を使
わずにテストを追加して、プログラムの状態を検出して、デバッグできるのではない
かと思っていたのです。今回は、出来ませんでしたが、何か手法があるのではないか
と思っています。

>> 1.乗ってくるとテストを書かなくなる。20分ぐらい、テストなしで
>> コードをかいていますね。これは、ペアプログラミングをしていれば、相方が
>> 注意してくれたでしょうか?
> 
> 僕の場合,Unit Test 書き始めのころのコードを見ると,テストが甘く
> もっとTest First を徹底しておけばよかったと思うことが多いです.
> 後からテストコードを追加するという作業はかなりつらいです.
> ペアでないとくじけそうになります.一度痛い目を見ないと,テストを
> 先に書くという習慣はつかないかもしれません.
> 

私は(軽い)痛い目に会いましたが、今回のキャストの問題はテストだけ(プリント
文なし)でデバッグできるのでしょうか?振り返って、テストだけで、プリント文と
同等の情報を得る事ができるのか考えてみたいと思っています。

>> 2.コンパイルを通すために芋づる的にどんどんコードだけを書いてしまう
>> ような気がします。中身のないメソッド、例えば、return null だけのメソッド、
>> を書いてコンパイルを通すような事をもっと行うべきか?
> 
> これはテストをテストするために必要ですね.テストコードが正しいかどうか
> を検証するには,わざとエラーを出すようにしてみるのが手っ取り早いです.
> それと,一旦テストが通ったらリファクタリングできないか考える習慣も
> つける必要があると思います.
> 
>> 3.メソッドがprivateだったため、テストを怠ったところがありました。
>> SummarizerのsummarizeとfindSumは、テストが必要だったでしょう。
> 
> private もテストすべきという立場と public だけで十分という立場があるよう
> ですが,これは,一般論で考えるより,private でもそのメソッドが失敗
> しそうならテストすべき,と思うほうが現実的じゃないかと思います.
> private まで徹底的にテストすると,リファクタリングするときに困るし.
> 
>> 4.それから、今回、問題の根源であったSummarizerTestHelperのisEqualは、
>> publicでは、ありましたが、テストのヘルパーという位置付けのため、テスト
>> をする事を全く考えていませんでした。
> 
> こっちも上と同じかな.
> 

privateであろうが、ヘルパーであろうが、テストが必要と感じたところは、テスト
するべきですね。

> Test First Programming がすごい,というのではなくて実際にはテストを先に
> 書かないとテストが甘くなる,または書かない,というのが本当のところだと思
> います.
> 
> では.
> 

わたしは、「Test First Programming (TFP)」を広めようと思っています。そこで、
「TFP はなんでいいの?」に対する答えとして、「デバッグが楽になるから」といい
たいのです。でも、今回の結果は、プリント文を使い、ふつうのデバッグになってし
まいました。このようなデバッグは、「TFPを実践すれば少なくなる」と言いたいの
ですが、言えないのでしょうか?

-- 
Kaoru Hosokawa
khosokawa@....com