おおむらです
------------------
Tue, 04 Mar 2003 13:46:11 +0900
安井 <yasui@....jp> さんのメールから
|安井@Aspacです。
こんにちは
| はじめまして。横から参加させてください。
|
|Shin wrote:
|> つまり言いたかったのは、特定の値についてテストを書くとき、
|> 実は、テストを書く人の頭の中には、もっと一般的だったり
|> 抽象的な概念がうずまいていると思うのですよ。その世界は
|> 無限の世界で、だから、実行することができないのだと
|> 思います。
|>
|> それを、実行可能なテストにするために、そういう無限の世界から、
|> 有限の世界におりてきて、特定の値のテストを書く。そういう
|> ことをしているのだと思います。
|
| 実際にプログラムを書いているときには、抽象的な問題を取り扱
|うことは少ないように感じます。逆に、取り扱う範囲をできるだけ
|具体的に絞り込んでいけるように、設計しています。
|
| たとえば、ATMの手数料を計算するときに「すべての日時に対し
|て計算する」というものを、「曜日と時間帯に対して計算する」よ
|うに具体的に落としていく方向で考えています。そしてテストでは、
| ・平日(たとえば月曜)、土曜、日曜
| ・料金の変わる時刻の前後
|の組み合わせだけについて記述します。
私のいいたかったことは、この例だと、問題を考えているときは
「平日」というわれわれにはわかりやすい概念を使っているのに
テストを書くために、わざわざ「2003年3月3日」などという特定
の日付を使っているということです。
数字の上からは、平日は無限に存在しますよね。
|> ちなみに、XPでは、インターフェイスやクラスの構成はユニットテスト
|> 以前に決めてしまうから、その部分の仕様は当然、テストファーストの
|> 範囲外ですね。
|
| 横道になっちゃうんですが、インターフェイスやクラスの構成っ
|て仕様ですか?わたしは設計だと思います。ここで「設計」と言う
|のは、仕様を実装に落とすために必要なモノの意味です。具体的に
|イメージするのは、実装レベルのクラス図やシーケンス図、サンプ
|ルのソースコード、複雑なロジックの実現方法の説明、などです。
インターフェイスを仕様だといいたいわけではなく、
インターフェイスやクラスの設計が、仕様を満たしているか
どうかをユニットテストではテストしていないということ
が言いたかったことです。
仕様に対する正しさをいうときは、メソッドだけでなくクラスや
インターフェイスの設計の正しさも示す必要があると思います。
XPではそれはアクセプタンステストで行うことになるのでしょうが、
これはやはりテストで、仕様ではないですね。
XPでは、仕様にあたるのはストーリーなのかな。
ストーリーとコードを結ぶものがアクセプタンステストかな。
| また、XP(というかTDD)では、インターフェイスやクラスの構成
|もテストドリブンで作っていけると思います(自分ではそうしてい
|るつもりです)。
それは、単にテストファーストだけでなく、リファクタリングも
含めた、より大きなスケールでのプロセスにおいて、の話のように
思いますが、違うでしょうか?
インターフェイスやクラスの定義は、テストを書く前に決めて
いないとテストが書けないので
テストファーストだけでは、設計をすすめることはできないと思う
のですが、テストドリブンだと、できるのでしょうか。