Index: [Article Count Order] [Thread]

Date:  Fri, 29 Aug 2008 13:53:16 +0900
From:  Akira Hayakawa <ruby@....jp>
Subject:  [XP-jp:05363] テストファーストについて
To:  extremeprogramming-jp@....jp
Message-Id:  <20080829135316.87230454.ruby@....jp>
X-Mail-Count: 05363

初めまして。Akiraといいます。

言語はjavaで、一人きりでぼっちプログラミングしています。京大の学生です。
設計のインターフェイスを明確にする為にテストファーストというものをマジメに導入しようかと考えていますが、いくつか疑問があります。

1)どこまでテストすべきか?
例えば、ある設計においては、あるクラスAがクラスBに依存している事がほとんどかと思います(例えば引数にとったり、返り値にそのクラスを使ったりします)。

この場合、Aのテストケースを書いたとして、それが正しい事を証明するにはBが正しく動いている必要があります。最終的には、依存しているのは正しくテストされてるであろうと思われる、javaライブラリにのみ依存しているクラスまでテストを書いていく必要があると思いますが、非常に無駄に思えます。多くの場合、データを格納して返すだけとかその程度の振る舞いしかせず、わざわざ書く必要もないからです。
逆に、そういう末端までテストケースを書くのはめんどくさいという事で、ユーザに見せるトップのクラスのテストだけを真剣に書いて、それが通れば成功という風にやっていくのは気が遠すぎてやる気がしないのと、たぶんテストファーストの理念にそぐわないような気がします。

では、どの階層でテストを書いていくべきかという事で一つの疑問として持ち上がるかと思います。みなさんの意見をお聞かせください。
javaは静的言語なので、テストコードが非常に長く複雑になりがちです、また私が書くとなぜかキャストがいっぱい出てきます。出来れば無駄なテストコードを書きたくないのです。

2)コピペを使うべきかどうか?
テストをそれぞれのクラスについて書いていくと、例えばsetUpなどで同じような事を何回も書く事になります。これはとても手間です。
例えば生成をメソッドとしてくりぬいて、それを再利用させるべきでしょうか?
私としてはコンストラクタやあるいはテストケースのsetUpメソッドなどで、メソッド呼び出しを使う事にためらいがあるのですが、何か良い方法はないでしょうか?

よろしくお願いします。

-- 
Akira Hayakawa <ruby@....jp>