Index: [Article Count Order] [Thread]

Date:  Wed, 05 Mar 2003 08:18:24 +0900
From:  Shin <omura@....jp>
Subject:  [XP-jp:04162] Re: 幻覚剤としてのテストファースト
To:  extremeprogramming-jp@....jp
Message-Id:  <9CC2E2A45A8A2Eomura@....jp>
In-Reply-To:  <3E642F93.8000801@....jp>
References:  <3E642F93.8000801@....jp>
X-Mail-Count: 04162

おおむらです

------------------
Tue, 04 Mar 2003 13:46:11 +0900
安井 <yasui@....jp> さんのメールから

|安井@Aspacです。

こんにちは

| はじめまして。横から参加させてください。
|
|Shin wrote:
|> つまり言いたかったのは、特定の値についてテストを書くとき、
|> 実は、テストを書く人の頭の中には、もっと一般的だったり
|> 抽象的な概念がうずまいていると思うのですよ。その世界は
|> 無限の世界で、だから、実行することができないのだと
|> 思います。
|>
|> それを、実行可能なテストにするために、そういう無限の世界から、
|> 有限の世界におりてきて、特定の値のテストを書く。そういう
|> ことをしているのだと思います。
|
| 実際にプログラムを書いているときには、抽象的な問題を取り扱
|うことは少ないように感じます。逆に、取り扱う範囲をできるだけ
|具体的に絞り込んでいけるように、設計しています。
|
| たとえば、ATMの手数料を計算するときに「すべての日時に対し
|て計算する」というものを、「曜日と時間帯に対して計算する」よ
|うに具体的に落としていく方向で考えています。そしてテストでは、
|  ・平日(たとえば月曜)、土曜、日曜
|  ・料金の変わる時刻の前後
|の組み合わせだけについて記述します。


私のいいたかったことは、この例だと、問題を考えているときは
「平日」というわれわれにはわかりやすい概念を使っているのに
テストを書くために、わざわざ「2003年3月3日」などという特定
の日付を使っているということです。
数字の上からは、平日は無限に存在しますよね。


|> ちなみに、XPでは、インターフェイスやクラスの構成はユニットテスト
|> 以前に決めてしまうから、その部分の仕様は当然、テストファーストの
|> 範囲外ですね。
|
| 横道になっちゃうんですが、インターフェイスやクラスの構成っ
|て仕様ですか?わたしは設計だと思います。ここで「設計」と言う
|のは、仕様を実装に落とすために必要なモノの意味です。具体的に
|イメージするのは、実装レベルのクラス図やシーケンス図、サンプ
|ルのソースコード、複雑なロジックの実現方法の説明、などです。


インターフェイスを仕様だといいたいわけではなく、
インターフェイスやクラスの設計が、仕様を満たしているか
どうかをユニットテストではテストしていないということ
が言いたかったことです。

仕様に対する正しさをいうときは、メソッドだけでなくクラスや
インターフェイスの設計の正しさも示す必要があると思います。

XPではそれはアクセプタンステストで行うことになるのでしょうが、
これはやはりテストで、仕様ではないですね。

XPでは、仕様にあたるのはストーリーなのかな。
ストーリーとコードを結ぶものがアクセプタンステストかな。


| また、XP(というかTDD)では、インターフェイスやクラスの構成
|もテストドリブンで作っていけると思います(自分ではそうしてい
|るつもりです)。

それは、単にテストファーストだけでなく、リファクタリングも
含めた、より大きなスケールでのプロセスにおいて、の話のように
思いますが、違うでしょうか?

インターフェイスやクラスの定義は、テストを書く前に決めて
いないとテストが書けないので
テストファーストだけでは、設計をすすめることはできないと思う
のですが、テストドリブンだと、できるのでしょうか。