中島@ブレーンです。
現在、弊社ではWalrusというWEBアプリケーションサーバを開発しています。
このソフトはXP、特にテストファーストを支援するような機能を持っています。
そこで、宣伝のようで恐縮ですが、XPに関連する部分について説明させていた
だき、できれば皆様のご意見をお聞きしたいと思います。
○ 概略
WalrusはRubyをベースしたWEBアプリケーションサーバであり、GPL2ライセン
スで配布するオープンソースソフトウエアです。データベースを使うWEBサイ
トを効率的に開発できることをめざしています。特に、小規模で修正の多いサ
イトに適していると思います。
http://walrus-ruby.hoops.ne.jp/
特色としては以下のとおりです。
・ HTMLテンプレート展開による、ビジネスロジックとビューの分離
・ コンポーネント指向のWEBサイト開発
・ RubyUnit連動のテストファーストプログラミングの支援機能
○ WEB開発における問題点
一般的に、WEBシステムの開発では次のような問題があります。
・ 色や各種項目の配置など「みばえ」に関するロジック(コード)と、動的に
変化する内容、中身が一本のソースに混在する
・ そのためデザイナーとプログラマーの分業が難しい
・ 単なるデザインの修正でも、ロジックを意識した作業が必要
・ テストのためにブラウザによる対話的な操作が必要
特にXPにおける単体テストを行なおうとすると、次の困難があります。
・ ブラウザの操作という介入なしのテストスイートの作成の負荷
・ ページ全体のHTMLを生成する長いメソッドを作りがちだが、これは
テストが困難(UnitTestの考え方と合わない)
・ デザインの変更で生成するHTMLが変化するので、テストデータの修正が必要
Walrusは、開発当初からXPを意識しており、UnitTestを簡単に行なうことを目
的としてアーキテクチャーやAPIを設計しています。
○ Walrusにおけるデザインとビジネスロジックの分離
Walrusでは、テンプレートは特殊なタグを含まない一般的なHTMLファイルです。
通常のHTMLの中にID=xxxという属性を付加して、動的に生成する内容を指定し
ます。例えば、
<h1 id=title></h1>
というHTMLを処理する時に、id=の属性値、すなわち title をメソッド名とみ
なし、このメソッドを実行します。もし、このメソッドが
def title
"WalrusとXP"
end
と定義されていたとすると、
<h1>WalrusとXP</h1>
というHTMLが生成され、クライアント(ブラウザ)に送信されます。
これは一番単純な例ですが、id属性を持つ要素をネストさせたり、対応するメ
ソッドが、配列やハッシュ(の組み合わせ)等の複雑なデータ構造を返却するこ
とで、いろいろなパターンのHTMLを生成することができます。詳細は下記に説
明してあります。
http://walrus-ruby.hoops.ne.jp/manual/obaq/html/index.html
○ WalrusにおけるUnitTest
既存のシステムで上記の処理を単体テストしようとしたら、
assert_equal("<h1>WalrusとXP</h1>", ...)
というテストが必要になります。もし、HTMLの表示内容が変化して、例えば、
タイトルが次のようにテーブルの中に入ったとします。
<tr><th>WalrusとXP</th></tr>
すると当然、テストも次のように修正する必要が生じます。
assert_equal("<tr><th>WalrusとXP</th></tr>", ....)
Walrusでは、ロジックの中にHTMLのタグが含まれないので、次のようなかたち
でのUnitTestが可能です。
assert_equal("WalrusとXP", doc.title)
<h1>から<tr><th>への変更のようなデザイン(みばえ)の変更は、ロジックやテ
ストに影響を与えません。
また、項目単位の部分的なテストが用意なので、本来のUnitTestとして細かい
テストを実施することができます。このあたりは下記に説明してあります。
http://walrus-ruby.hoops.ne.jp/manual/tutorial/db/index.html
http://walrus-ruby.hoops.ne.jp/manual/tutorial/db/db6.html
○ その他のテスト支援
Walrusのテストスクリプトには次の機能も含めることができます。
・ データベースの作成
・ テーブル定義
・ テストデータの作成
そのため、データベースの項目の追加等があっても、一気に過去の単体テスト
を走らせることが容易にできるようになっています。
○ データベースノ変化モ抱擁セヨ
もうひとつXP向けの機能として「データモデルオブジェクト」と「ラッパーオ
ブジェクト」があります。長くなるので詳細は省かせていただきますが、どち
らも、データベースの項目追加、修正を最低限の修正ですませる機能です。
XPなどの適応型開発手法はオブジェクト指向言語を活用することで、変化を受
けいれやすくしていますが、システムがデータベースを使用していると、そこ
がネックになって、修正コストが増大する場合があります。Walrusはこの機能
によってミスマッチを少なくするような工夫をしています。
http://localhost/koutetu/manual/reference/sql/sql1.html
○ 最後に
Walrusは開発途上なので、まだAPIも確定してないしドキュメントや品質は全
く不十分で、正直言って現段階では実際のシステムに適用することは難しいと
思います。しかし、逆に言うとまだ「いじる」余地が多いにあります。ぜひと
もみなさんの意見をいただいて、さらにXPに適したWEB開発システムにしたい
と思っていますので、よろしくお願いいたします。
--
「stableでなければ生きていけない。unstableでなければ生きてる意味がない」
中島 拓 (tnaka@....com)
http://www03.u-page.so-net.ne.jp/dc4/tnaka/