Index: [Article Count Order] [Thread]

Date:  Mon, 18 Aug 2003 13:40:15 +0900 (JST)
From:  Susumu YAMAZAKI <yamazaki@....jp>
Subject:  [XP-jp:04626] Re: 「 AnExtremeProgrammingEpisode 」の翻訳版を掲載しました
To:  extremeprogramming-jp@....jp, akasaka.h@....com
Message-Id:  <20030818.134015.91280814.yamazaki@....jp>
In-Reply-To:  <20030817092021.EC92.AKASAKA.H@....com>
References:  <20030816134905.00A0.AKASAKA.H@....com>	<20030817.075049.01374035.yamazaki@....jp>	<20030817092021.EC92.AKASAKA.H@....com>
X-Mail-Count: 04626

山崎@東工大です。

> > > コードは以下みたいな感じで書きたいです。
> > >   // Input ⇒ (Intermediary ⇒) Output
> > >   Input input;
> > >   Intermediary inter = Input.toIntermediary();
> > >   Output output = Inter.toOutput()
> > 
> > Intermediary inter = input.toIntermediary();
> > Output output = inter.toOutput();
> > 
> > ですよね?
> 
> え?そうですけど、何か違ってましたか?
> # inputが未初期化のこと?...きっと、入力パラメータですね(^^;;

いや、Input.toIntermediary(); と小文字でなく大文字でクラスメソッドのよ
うに書いていたものですから。細かくてすみません。

> > Input -> Intermediary -> Output のようにクラスが変化するならばこれで良
> > いと思うのですが、同一のクラスに、データが蓄積されたり、内部データが変
> > 換されたりする場合には、どのようにするのが良いとお考えですか?
> 
> データが蓄積される場合は、それは重要な別の概念としてクラスを抽出します。
> 内部データが変換されるケースは、状況にもよると思いますが、
> 内部データの状態(に付属する変化するデータ構造)として扱いたいですね。

Intermediary のフィールドとして蓄積されるデータや状態を表すオブジェク
トを用意するということですね。

> > そこで、解決策としては処理を分割する時に、将来の変更の余地がないほど粒
> > 度を細かく分割し、粗粒度の機能クラスを細粒度の機能クラスのコンポジショ
> > ンとして構成すればよいのではないかと考えてみました。
> > 
> > 図に書くと次のようなイメージです。
> > +------------------------+    
> > |Process1                | -> ...
> > +------------------------+
> >    |        |        | 
> > +------+ +------+ +------+
> > |Sub1-1| |Sub1-2| |Sub1-3|
> > +------+ +------+ +------+
> > 
> > テストケースは細粒度の機能クラスに対して書きます。テストケースクラス自
> > 体は増えますが、一つ一つの機能クラスは単純なので、一つのクラスに対して
> > 考えるべきテストケースは少なく抑えることができ、全体のテストの数はあま
> > り増加しないでしょう。このテストは処理の組み換えが起こっても再利用する
> > ことができます。
(中略)
> > 粗粒度の機能クラスに対するテストは結合テストとなるので、処理の組み換え
> > が起こると書き直す必要があるでしょう。しかし、細粒度の機能クラスの単体
> > テストが十分整備されていれば、結合テストの数を抑えることができるので、
> > 書き直しのコストは減るものと思われます。
> 
> でも、(これも状況次第になってしまいますが)
> 実はこれら小粒度の機能クラスについては、適切なメソッドに分割されていれば、
> 「メソッドの移動」で充分に対応可能な(それほど大変ではない)のではないか
> とも思いますが、いかがでしょうか?

細粒度の機能クラスを抽出すること自体は、それほど大変ではないのかもしれ
ません。むしろ大変なのは、テストケースの構成を変えなくてはいけないこと
で、細粒度の機能クラスの単体テストを整備して、必要に応じて粗粒度の機能
クラスの結合テストを変更しなくてはならないわけですから。

              山崎 進 --- yamazaki@....jp
               東京工業大学数理計算科学専攻柴山研