仕様分析

仕様分析とは、対象となる世界を深く知る作業です。

ドメイン分割

仕様分析で最初にやる仕事は「ドメイン分割」です。システムにどういうドメ インがあるのかを考え、ドメインごとに内容を考えていきます。ドメインとは 何かというのは以前にお話ししました。「問題領域」です。つまりシステムの どの部分について考えるのかということです。

とはいっても、最初に必要なドメインをすべて挙げなくてはならないわけでは ありません。それぞれのドメインは独立していますので、後から新たにドメイ ンを追加しても問題になる事はあまりありません。しかしシステムにどんなド メインがあるかを最初から考えておくのはいい事です。

どんなドメインがあるか

「ドメイン」というのは多くの人にとって聞き慣れない言葉でしょうから、 「ドメインに分けろ」と言われてもピンとこないかもしれません。そしてこの 作業の意義がわからないとその後の作業もすべて訳がわからなくなってしまい ます。ですから「ドメインとは何か」というのをまずきちんと理解して下さい。

ドメインというのはつまり「どんな観点でモデル化するのか」という問いに答 えるものです。「ソフトウェア製作の立場で」という解答は不適切です。そん な事ができないから皆こうやって苦労しているのですから。ソフトウェアを様々 な観点から分析しないといけないのであり、その時の「観点」がドメインなの です。

そして、それでもよくわからない人は次のドメインを考えてみて下さい。多く のデータ管理型ソフトウェアではこの3つのドメインがあります。 [1]

アプリケーションドメイン
ソフトウェアが管理対象とする実世界をモデル化したもの
ユーザインターフェース(UI)ドメイン
画面表示や入力など、ユーザとの接点になる部分をモデル化したもの
データベースドメイン
データの蓄積とその操作に関するもの

アプリケーションドメインを真っ先に考えて下さい。そして、分析しなければ いけない事柄のうち、本当にアプリケーションドメインに入るべきものだけを 考えて下さい。画面表示や入力手順はユーザインターフェースドメインにあた りますから、アプリケーションドメインでは考えてはいけないのです。

そしてアプリケーションドメインができあがったら次にユーザインターフェー スドメインの分析をやってみて下さい。するとなぜこの2つが「ドメイン」と いう単位で分割されているかが理解できるはずです。それが「ドメイン」の概 念を理解したという事です。そうしたら後はシステムに必要なドメインを自分 で考えてみて下さい。

一つ注意しておきます。システムにドメインはそうたくさんあるものではあり ません。あまりにもドメインが乱立しているようでしたら、似たものを統合す ることを考えましょう。

ドメインと意味論

ドメインの概念がよくわからない人はまず「アプリケーションドメイン」と 「ユーザインターフェースドメイン」という2つのドメインを考えてみて下さ いと言いました。システムの説明として言いたい事をこの2つのドメインのど ちらかに振り分けていくという作業をしてみて下さい。この2つが根本的に違 うものだということがわかるはずです。

さて、ここでは何が違うかをお話ししましょう。「意味論」、英語で言う 「semantics」が違うのです。意味論とは「記号とそれが意 味するものとの対応づけ」の事です。記号とはすなわち言葉でありオブジェク トです。ドメインによって使う言葉は違うし、同じ言葉でもドメインによって 意味するものが違うというわけです。

例えば「楽曲データベース」では、アプリケー ションドメインでは「曲」というものについて考えます。曲の作曲者とか作ら れた年、ジャンルといったものが問題になります。それに対してユーザインター フェースドメインではウィンドウとその上に表示されるテキストボックスや画 像、あるいはユーザからのキー入力に対する反応について考えます。説明に使 う言葉がのジャンルがまったく違うことがわかるでしょう。

この2つのドメインでは例えば「曲」という言葉の意味するものが違いま す。アプリケーションドメインではこの言葉は実際の曲を意味しますが、 ユーザインターフェースドメインでは名前や作曲者、解説などが書かれたデー タの事を指します。つまりユーザインターフェースドメインではそれがどんな 旋律なのかはどうでもよく、それに対してどんな解説文がつけられているかと いう事の方が重要なのです。

敢えて誤解を恐れず大ざっぱに言えば、ドメインとは専門分野だとも言えるで しょう。楽曲データベースが欲しいと思っている音楽関係の人はウィンドウだ テキストボックスだと言われてもちんぷんかんぷんです。そして画面を設計す るデザイナーから見れば逆にバンドの構成だとか曲のジャンルとか調がどうだ と言われてもわからないでしょう。そしてプログラマーがSQLサーバがどうだ とかユーザ認証方式がどうだと議論しているのもやっぱり他の人には何のこと だかわかりません。つまりそれぞれの人は自分達なりの「世界」を持っていて、 そこで使われている専門用語はその世界の中でだけ意味を持つのです。そして そういった用語とその意味するものの対応が「意味論」なのです。

ドメインとは何かがおぼろげながらわかってきたでしょうか?システムをいく つかの専門分野に区切って、その世界の中だけで議論するのです。

ブリッジ

さて、上でドメインという閉じた世界の中で個別に議論を進めていくのだと言 いました。しかしそれらが完全に独立したままではうまくシステムとしてまと まりません。こうしたドメインをつなぐものを「ブリッジ」と呼びます。

ブリッジというのはドメインをつなぐ約束事です。例えば「アプリケーション ドメインにある『曲』というのはユーザインターフェースドメインではどう扱 うのか」といった事が書かれています。もしかしたら曲に関するデータは実は RDB上にあって、曲の各項目を表示したい場合はSQLで問い合わせをするのかも しれません。あるいは曲ごとにWebページを一つずつ生成して、情報を見たい 場合にはそのURLにアクセスさせるだけなのかもしれません。こうした「他の ドメインのオブジェクトをどう扱うのか」を記したものがブリッジです.

ドメインが変わるとオブジェクトの扱い方も変わる点に注意して下さい。アプ リケーションドメインでは「曲」と「作曲者」は何の共通点もない別物ですが、 表示しようとする場合には「名前がある」という共通点があります。リストを 表示しようとする場合、曲リストも作曲者リストも同じように名前をリストアッ プすればいいのですから。というように、別のドメインではまったく違うオブ ジェクトが一くくりになってしまったり、あるいはオブジェクトとは見なされ なくなってしまうこともあります。

ドメインの記述

システムに存在するドメインとブリッジがはっきりしたら、それぞれのドメイ ンについて「ドメイン記述」を書きます。ドメイン記述とはつまりこのドメイ ンに関する説明です。

ドメイン記述には次の事を書きます。

  • このドメインはどんな事象を対象としているのか

  • このドメインで出てくる典型的な単語や概念は何か

  • このドメインではどんな事象は対象としないのか

このドメインが「何であるか」を書くのは当然として、「何でないか」を書く のもまた有効です。これによって各々のドメインの境目がはっきりします。

ドメインの説明を書いたら次にブリッジの記述に移ります。ドメインA上のど んな概念がドメインBの何にあたるかを説明するのです。もちろん関係のない ドメイン間にはブリッジは存在しませんから記述の必要はありません。


  1. いわゆるMVCモデルです。 ↩︎