Index: [Article Count Order] [Thread]

Date:  13 Mar 2001 18:37:46 +0900
From:  Takeshi Kakeda <kakeda@....jp>
Subject:  [XP-jp:01724] Re: XP 事例 (
To:  extremeprogramming-jp@....jp
Message-Id:  <87zoeqvwk5.fsf@....com>
In-Reply-To:  <4.2.0.58.J.20010312201036.03217c40@....jp> (Hada Akihiro's message of "Mon, 12 Mar 2001 21:03:55 +0900")
References:  <3AAC797E.3040007@....com> <20010312132542Z.hiranabe@....jp> <3AAC797E.3040007@....com> <4.2.0.58.J.20010312201036.03217c40@....jp>
X-Mail-Count: 01724

こんにちは、懸田です。
書きかけを送信してしまいました。すみませんでしたm(_ _)m

>>>>> In [extremeprogramming-jp : No.01712] 
>>>     Hada Akihiro <Akihiro.Hada@....jp>さん wrote:

> 牛尾さん、懸田さん、今日は。
> 平鍋さん、紹介ありがとうございます。
> 筆者に成り代わり、回答します。
ご丁寧にありがとうございます。

> At 午後 04:53 01/03/12 +0900, Takeshi Kakeda wrote:

[...]

> まず、前提として(アンケートにも書きましたが)
> この事例は、XP を実践することを目的としている訳ではなく、
> 短期開発で、プログラマーの生産性を最大にすることが必要となり、
> XP を念頭に置きつつ、開発し、あとで XP 的に振り返ってみた、ということです。
なるほど、結果としてXP的な開発になった、ということですね。
もちろん、要所要所でXPを意識しつつ...ですよね?

[...]

> 単体テストはしていますが、(extreme な)Unit Test はしていない、ということです。
> つまり、
> ・ 単体テストに、testing framework を利用していない。
> ・ 単体テストを、インテグレーション時に自動的に行なうようなことをしていない。
> ・ 単体テストを、コーディングより先にしていない。
> ということです。
>
> なぜか、というと、端的に言えば、アプリケーション・ロジックが単純である。
> ということです。
> 単純なアプリケーション・ロジックである場合、コードの外側に、intention を
> 書く必要があると考えていません。
> (オブジェクト指向言語なのですから。)
> 実際、JavaDoc とシナリオで十分でした。
> では、例外的なこと(失敗すべきテスト)はどうなるかですが、
> ・J2EE 環境で開発していて、失敗すべきテストは、
>     基本的に環境に任せればいい。
> ・システム的、言語的には把握できない"失敗"は、
>     function test で書けばいい。
> と考えました。
(extremeな)UnitTestは意図的にはずしたということですね。「単純」というの
がどの程度かわかりかねますが、XP的に考えるならば「単純」であっても
「UnitTest」は含めるものだと思います。

今回の事例に関しては、「単純なので必要ない」が「リファクタリングに必要」
「プログラマに勇気を持たせる」「毎回テストが通るのが快感」などといった
UnitTestによるメリットを上回った、もしくはXPが目的ではないので無理して
採用する必要はないということでしょうか。

> >UnitTestが徹底されていないが、機能テストを徹底してフィードバックする
> >ということを行ったと記述してありますが、品質の上で可なのでしょうか?
> で、十分な品質を持ったシステムとして、稼動しています。
> (そうでない事例を、ユーザ名・システム名を明示して紹介できません(^^))
はい、もちろん品質にいちゃもん付けているわけではありません(^^;
開発側ではなく、ユーザが満足しているからこそ公表できるのですし。

> 単体テストは、各自に任せましたが、一例は、
> シェル+peanuts+Java 
XP OFFの時に平鍋さんが「スクリプト言語でテスト」という話をされていたので
気になっていました。Javaでいえば、PerlやRubyのJavaInterfaceを通じて
テストできれば面白いかと考えています。Pnutsもよさそうですね。
Pnutsを使用したTestingFrameworkはまだ実現されてはいないのでしょうか。

> まず、test first について。
> 難しいアプリケーションであれば、やっています。
> というか、オブジェクト指向言語で書く場合、そうしないと書けない、
> というのが実感です。
> しかし今回のアプリケーションは単純なので、
> Refactoring するというほどのプログラムではありません。
> "機能を変えずに、実装を替える"という余地がほとんど無いのです。
> ほんとにナイーブなプログラマーから見れば、自由度はあるのかも
> 知れませんが、ある程度の域に達していれば、一つの解しかない、
> といような類です。
> ので、辛くありませんでした。
了解しました。Refactoringをするまでもないということなのですね。

> >あと文中には触れられていませんが、メタファーの実践について詳しく話を
> >伺いたいですね。
> 白板に、クラス図とシーケンス図を書いて、共有した、というのが
> 実践の全てのようです。
> "詳しく"とは、どのようなストーリを期待していますか?
私の「メタファー」に対する理解は、「プロジェクト内共通のメタファーを
作って相互理解を高める」というものです。
上記の「ホワイトボードにクラス図とシーケンス図」はメタファーというよりも
(12のプラクティスにはありませんが)ファシリティ戦略なのかな?とも受けとれ
ます。ちなみにホワイトボード上のUMLは、紙や電子媒体として別に残していた
のでしょうか?

[...]

> このお客さんの"時間があるのか"という質問の意図が不明ですね。
> 納期が、短かろうが、長かろうが、
> 書く必要のあるテストは書き、必要の無いテストは書かない。
> 仕事なのですから。
上記の件は別スレッドにします。

> 今回のシステムの特徴と、必要な品質を確保するための手段を考えた場合、
> Unit Test が必要と考えなかった、ということです。
はい、従来方式でも、根拠と実績、信念があれば各プラクティスの代替案として
機能する、という実例として受けとめることにします。

> XP を前提にしても、
> そもそも、プラクティスにあるのは、Testing であって、Unit Tests では
> ありません。Unit test と Function(Acceptance) test の分業?は、
> ケースバイケースなのではないでしょうか。
確かにTesting=UnitTestという図式は明言されてはいませんが、XPに関する
資料を見るとTesting=(UnitTest && AcceptanceTest)というのが私の認識です。

UnitTest = プログラマが作成、実行する
AcceptanceTest = ユーザが作成、実行する

というように、個々に別々の役割がありますので、両者を行うのがXP的には
必要だと考えます。

> 確かに、自動的なテストは役に立ちます。
> しかし、残念ながら、
> 以前、GUI のテストで話題になったように、十分に実用的な web ベースの
> testing framework が無いのが、現状(少なくとも半年前には)でしょう。
ブラウザも含めたWebベースのテストが今後も課題ですね。
HttpUnitやWebUnitでも、WWWBrowserの挙動もエミュレートすることができれば
かなりのところまで自動テストができるのですが。

> 如何ですか?回答になっていますでしょうか?
はい、大変参考になりました。作者の方にもよろしくお伝えください。


[おまけ]
テストに関してはAntがまた熱いです。テスト結果のXML出力、及びXMLファ
イルを読み込んでのXalan,Xerceを使用したHTML化が1.3では可能になっています。
これだけでも自動テストとしてはかなり使えると思うのですが。

では。

--
Takeshi Kakeda
  mailto:kakeda@....jp
  mailto:kakeda@....jp