Index: [Article Count Order] [Thread]

Date:  Tue, 20 Feb 2001 08:53:14 +0900
From:  Kenji Hiranabe <hiranabe@....jp>
Subject:  [XP-jp:01629] Re: XP で再利用できますか?
To:  extremeprogramming-jp@....jp
Message-Id:  <20010220085314W.hiranabe@....jp>
In-Reply-To:  Your message of "Mon, 19 Feb 2001 21:57:35 +0900"	<20010219123616231.AAA187@....jp@ginza>
References:  <20010219123616231.AAA187@....jp@ginza>
X-Mail-Count: 01629

平鍋です.

 > 寺田さん,
>> > 単体テストとリファクタリングの繰り返しで「解」に漸近しようという思想は
>> > とっても面白いと思ってます.「解の公式」で根を求めるのではなく,Newton 
>> > 法で収束計算して根を求めようというのと似てますよね.ソフトウェアの設計に
>> > 「解の公式」が見つからない以上,収束計算で解を求めるしかないですもんね.

 > さりげなく書きましたが,実はちょっと反応してもらいたかったところなんです(笑)
 > 我ながら上手い「メタファー」なんじゃないかと,自画自賛モード入ってます.
 > 反応して頂いて,ありがとうございます.

実は,私もリファクタリングという過程が,エネルギー極小値とな
る局所解を求める作業と考えています.どんどん坂を下がって行っ
て最適化していくイメージです.

 > 実はもうちょっと続きが考えてあります.(^^;

 > 関数形によっては,根が複数ある場合がありますよね.Newton 法による解がどの根に
 > 収束するかは,初期値によって決まります.あるいは,初期値を間違えると Newton 法
 > は発散してしまうこともあります.
 > 同様に,XP によるプロジェクトが最終的にどのような形に落ち着くのかは,テストと
 > リファクタリングの繰り返しが開始する前の,「最初の設計」に左右されるのかもしれ
 > ない,と思います.それどころか,初期値である「最初の設計」がまずいと,XP プロ
 > ジェクトも発散してしまうかもしれません.
 > Newton 法で解を正しく収束させるにはある程度の初期値の選定が必要です.同様に,X
 > P もある程度は「最初の設計」をやらないとまずいかもしれません.つまり,モデリン
 > グです.

従来は,「アーキテクチャ」というのがこの初期値になっていたの
ではないでしょうか.XP の言葉では,「最初にシステムの典型的
なストーリーを選ぶ」ことで,この「アーキテクチャ」を「創発」
させようとしています.

 > XP でもモデリングが必要かどうかは,賛否両論で結論が出ていない問題なのだと思い
 > ます.この問題を Newton 法のメタファで考えると,根を求めたい関数が,初期値の選
 > 定を必要とする関数なのかどうか,というところに行き着くのだと思います.

 > その「関数」は,ひょっとするとプロジェクトごとや,対象の問題領域ごとに異なるも
 > のなのかもしれません.しかし,ソフトウェア開発は,考えうる限り最も難しい「最適
 > 値探索問題」の一つなのではないか,と思います.ソフトウェア開発がそんなに単純な
 > 「関数形」であるとは思えません.
 > 多分,モデリングは多少は必要なんじゃないかなぁ,と予想してます.

 > Kent Beck 氏のような優れた技術者ならば,モデリングの儀式を明示的に行わなくても,
 > 本能的に適切な「初期値(=最初の設計)」を設定できるのかもしれませんけど.

うまく解が求まらない場合のもう1つの脱出法は,(寺田さんはうさ
ん臭く感じられるでしょうが),間違った解に行きそうになった時
に「勇気」を出して別の初期値(アーキテクチャ)からやり直すこ
と,と XP では言っています.この勇気,ですが,天才の出現より
も実現可能性が高いかもしれません.XP の公式では,

    communication + simplicity + feedback = courage

です.左辺の3つがあって始めてこの「勇気」を決断できるので
す.(このあたりは工学的ではありませんが,スピリットとしてこ
うなのです!)

先の,リファクタリングの局所解の話でいうと,あるところで,こ
れ以上エネルギーが下がらず,周囲にはもう道がなさそうなとき,
「勇気」を出して,大規模な修正を含めた「ジャンプ」をする必要
があります.この「ジャンプ」が,別の初期値(アーキテクチャ)の
採用にあたるのだと思います.

以上