ドメインモデルの構成法
上智大学 理工学部
代表者:伊藤 潔
本稿は,EAGL基礎研究で進めたドメイン分析・モデリングに関する研究報告である.この中で述べるシステムNAVIは,オブジェクト指向に基づく分析結果を出力するが,この部分は,EAGL戦略研究HITO(青山学院大学 原田実助教授,上智大学 伊藤潔教授,筑波大学 田中二郎助教授,立命館大学 大西淳教授)プロジェクトでの連携として,上智大学側で研究開発したものである.
1. 研究の目的
ソフトウェアシステムの開発の基幹技術として,ドメイン分析・モデリングの重要性が認識されている[Arango91][Prieto-Diaz87][Tracz92][伊藤95a,96].これは,複雑で大規模なシステム開発での生産性の向上と再利用の促進のために,同じドメインに属する対象システム自身の本来の各種の性質や開発上の多様な知識を認識し,システム開発に有効な固有なドメインモデルを得る技術である.このドメインモデルは,そのドメインのシステムを繰り返して開発する際のひな型として使われ,開発の生産性と再利用性を向上させる.
ドメイン分析・モデリングの対象は,システム化したい問題群を表すドメイン問題モデルと,システム化したい解群を表すドメインプロダクトモデルである.著者らの対象は,さらに,これらのモデルに加えて,開発技術も再利用の対象とするためのドメインモデル,即ち,前者から後者を導出する過程を表すドメインプロセスモデルである[伊藤94,95b].
筆者らは,レンタルドメイン,販売ドメイン[平井95] [田村95,96],図書館ドメイン,ホテル予約ドメイン,履修登録ドメイン,OLTP的なリアルタイムシステムドメイン[伊藤96],プラントドメイン[Itoh94ab],車検ドメイン,運輸ドメイン [川端96ab] [Kawabata97],協調作業ドメイン[新開96abc] [Itoh97]などの主要なドメインを分析して,各々のドメインプロセスモデルを見出す作業を行ってきた.
たとえば,レンタルドメインでは,その問題モデルとなる,問題のとらえ方,構成要素を明らかにし,そのプロダクトモデルとなるDBとそのトランザクションを明らかにし,それらを結ぶ開発のプロセスモデルを明らかにした.同様に他のドメインに対しても,問題モデル,プロダクトモデル,開発のプロセスモデルを明らかにしてきた.
ドメイン毎には,固有の用語集(語彙)がある.筆者らは,ドメインの用語集に含まれる用語を,ドメイン用語とよぶ.ドメインの1つ1つのシステムは,それぞれの用語を使う.これをシステム用語とよぶ.多くの場合,ドメイン用語(これが問題モデルに対応)を基本にして,若干の追加・削除をした後,ドメイン用語に対してシステム用語を割り付ける(これがプロダクトモデルに対応).これがドメインモデルを用いたシステム開発の主要なプロセスモデルである.
ドメインによっては,用語の対応のみではなく,ドメイン用語を用いたチャートでモデルを表現した方がよい,プラントドメイン,運輸ドメイン,協調作業ドメイン[新開96ab]などがある.これらではチャートの上で,ドメイン用語とシステム用語の対応をとるプロセスが,開発のプロセスモデルである.対応をとるチャートをドメインチャートとシステムチャートとよぶ.
ドメイン毎に,ドメイン用語とシステム用語を内蔵し,用語集やチャート上の置き換えプロセスのサポートをするナビゲータの試作を行っている.このナビゲータは,ドメイン開発プロセスの実装である.
本研究では,特に,酒倉庫業務ドメインをはじめとするRDBで実装可能なドメインについてナビゲータNAVIを開発した.このナビゲータNAVIの出力にはRSL形式とSQL形式がある.
HITOプロジェクトとして,NAVIはオブジェクト指向に基づくRSL形式の分析仕様を出力する.RSL形式は,HITOプロジェクトの中のCAMEO/Dに渡され,設計エディタの入力になる.
2. ドメインモデルとシステムインスタンスの階層
2.1 ドメインモデルとシステムインスタンス
ドメインモデルとは,業務に固有でシステム開発のひな型となるものである.これは,論理名(ドメイン用語)をもった構成要素から成るととらえる.システムインスタンスとは,ドメインモデルをもとに作り出した個々のシステムである.これは,ドメインモデルが持つ各々の構成要素に付けられたドメイン用語に,個々のシステムにローカルな物理名(システム用語)を割り振ったり,追加・修正したものであるととらえる.ドメイン用語の各々には,1つ以上のシステム用語が対応できる.
2.2 ドメインモデルライブラリとシステムインスタンスライブラリ
ドメインモデルのライブラリは,複数のドメインモデルを集めたものである.個々のドメインモデルの構成要素に付けられたドメイン用語に,1つ以上のシステム用語が対応しているので,これらから選択してシステムインスタンスを生成できる.さらに,このようにして得られたシステムインスタンスのうち,典型的なものは,システムインスタンスライブラリの中に登録できる.
3.RDBで実装可能なシステムのドメインモデル
RDBに実装可能なシステムのドメインモデルライブラリに,酒倉庫業務,図書館業務,CDレンタル業務,レンタカー業務,授業登録業務,ホテル業務,新聞配達業務のドメインモデルを登録している.
RDBに実装可能なシステムの内,酒倉庫業務ドメインを例に挙げる.このドメインは,定型的な帳票を用いて取り引きを行い,商品の流通とそれに伴う金銭の授受が主な業務となる.
酒倉庫業務ドメインの分析で得られたドメインモデルの構成要素は次のものである.この構成要素に付けられた名前が,ドメイン用語である.
がある.
酒倉庫業務の中には,発注伝票を用いないもの,売り手と買い手の間に1種類の伝票のみあるものなどのバリエーションがある.
伝票とは,発注者・受注者間で渡される取り引き内容を記したものである.また,台帳とは,商品,問屋,小売店の情報をまとめたものである.要員とは,取り引きに関わる人員である.関連とは,要員やPEIの間の関係を表す.
RDBで実装可能なシステムのドメインプロセスモデルは,次のようになる.
4.開発支援ナビゲータ
RDBに実装可能なシステムのドメインモデルに基づき,個々のシステム開発を支援するナビゲータNAVIの開発を行った.このNAVIは,前節のドメインプロセスモデルに従ってシステム開発のナビゲーションを行うものであり,さらに,ドメインモデルライブラリやシステムインスタンスライブラリを有することで,システム開発プロセスをショートカットできるため,再利用性が高まり,システム開発の作業を軽減することができる.
4.1 ナビゲータの機能
NAVIの主要な機能は,以下の4つである.
(1)クラス(要員・伝票・台帳)の構造記述:伝票・台帳・要員の属性を記述
(2)クラス間の関連記述:伝票・台帳・要員の関連記述
(3)用語の登録・割当て:ドメイン用語・システム用語の登録・割当て
(4)トランザクションの定義:要員の伝票類に対する操作内容を定義
(5)ドメインモデルやシステムインスタンスをライブラリの中に登録
(1)のクラスの構造記述については,次の詳細機能がある.
(1−1) クラス(要員/台帳・伝票)の新規作成
(1−2) クラスの利用・非利用を指定
:登録されているクラスから必要なものを選択
(1−3) 属性の新規作成
(1−4) 属性の利用・非利用を指定
:登録されている属性から必要なものを選択
(2)のクラス間の関連記述では,各クラスのTopViewでの関連付けを行う
(3)の用語の登録・割当てについては,次の詳細機能がある.
(3−1) クラス名,属性名,関連動詞,トランザクション名の全てについて,
ドメイン用語とシステム用語の対応付けを行う
(3−2) 新規にドメイン用語を追加
(4)のトランザクションの定義では,操作の対象や属性,操作の種類とその順番を記述する.
また,システムインスタンスの一貫性を保つために,次の機能が必要である.
(6)同一ドメイン内でシステム用語の変更を,すべてのクラス,関連,トランザクションに反映させる.それらの変更が反映される用語には,クラス名,属性,関連動詞,トランザクション名がある.また,この変更は,出力されるRSL表現やSQLにも反映させる.
さらに,作成したドメインモデルやシステムインスタンスを管理する次の機能を持つ.
(7)ドメインモデルライブラリに登録されているものの中から,ドメインモデルを選択
(8)システムインスタンスライブラリに登録されているものの中から,システムインスタンスを選択
(9)変更を加えたドメインモデルやシステムインスタンスを新しいドメインモデルやシステムインスタンスとして登録
図1 システム開発ナビゲータのプロセス
4.2 ナビゲータのプロセス
図1にNAVIのプロセスを示す.
以下の(b)から(e)は,図1のNAVIの主要なプロセスである.
(b)クラスの選択:ドメインモデル内のPEIと要員のクラスを示し,必要なクラスを選択させる.
(c)ドメイン用語の提示・システム用語の指定:(b)で選択されたクラス別に,システム用語を列挙し,それらを対象システムで使用するか否かを決定する.あるいは,新たなシステム用語を登録する.またそのシステム用語のデータ型の指定を行う.
(d)ドメイン用語の新規追加:(c)で列挙されたドメイン用語以外に必要となる用語の追加を行う.
(e)クラス間の関連の提示・クラス間の関連を提示し選択させる.
(f)要員の発するトランザクションの定義
図2は,上記の(a)のドメインモデルの選択プロセスを示している.酒倉庫業務ドメインモデルが選択された.図3は,(b)(c)に対応し,PEIのシステム用語を決定している.図4は,要員クラスを選択した.図5は,上記(e)に対応し,クラス間の関連を定義している.図6は,要員が発するトランザクションをSQLで記述したものである.
図2 ドメインモデルの一覧
図3 PEIクラスの定義
図4 要員クラスの定義
図5 クラス間の関連の定義
図6 トランザクションの定義
[cls1,class,商品受注台帳,active,[]]
[cls2,class,小売店台帳,active,[]]
[cls3,class,商品台帳,active,[]]
[cls4,class,発注伝票,active,[]]
[cls5,class,出荷指示伝票,active,[]]
[cls6,class,出荷伝票,active,[]]
[cls7,class,小売店,active,[]]
[cls8,class,問屋受付係,active,[]]
[cls9,class,問屋倉庫係,active,[]]
[att1,attribute,受注コード,class(商品受注台帳),type(int),mul(),[]]
[att2,attribute,受注日付,class(商品受注台帳),type(datetime),mul(),[]]
[att3,attribute,小売店コード,class(商品受注台帳),type(int),mul(),[]]
[att4,attribute,小売店名,class(商品受注台帳),type(char*),mul(),[]]
[att5,attribute,商品コード,class(商品受注台帳),type(int),mul(),[]]
[att6,attribute,商品名,class(商品受注台帳),type(char*),mul(),[]]
[att7,attribute,単価,class(商品受注台帳),type(currency),mul(),[]]
[att8,attribute,数量,class(商品受注台帳),type(int),mul(),[]]
[att9,attribute,合計,class(商品受注台帳),type(currency),mul(),[]]
[att10,attribute,出庫予定日,class(商品受注台帳),type(datetime),mul(),[]]
[att11,attribute,小売店コード,class(小売店台帳),type(int),mul(),[]]
[att12,attribute,小売店名,class(小売店台帳),type(char*),mul(),[]]
[att13,attribute,住所,class(小売店台帳),type(char*),mul(),[]]
[att14,attribute,TEL,class(小売店台帳),type(char*),mul(),[]]
[att15,attribute,商品コード,class(商品台帳),type(int),mul(),[]]
[att16,attribute,商品名,class(商品台帳),type(char*),mul(),[]]
[att17,attribute,単価,class(商品台帳),type(currency),mul(),[]]
[att18,attribute,数量,class(商品台帳),type(int),mul(),[]]
[att19,attribute,伝票コード,class(発注伝票),type(int),mul(),[]]
[att20,attribute,作成日,class(発注伝票),type(char*),mul(),[]]
[att21,attribute,小売店コード,class(発注伝票),type(int),mul(),[]]
[att22,attribute,小売店名,class(発注伝票),type(char*),mul(),[]]
[att23,attribute,発送希望日,class(発注伝票),type(datetime),mul(),[]]
[att24,attribute,商品コード,class(発注伝票),type(int),mul(),[]]
[att25,attribute,商品名,class(発注伝票),type(char*),mul(),[]]
[att26,attribute,単価,class(発注伝票),type(currency),mul(),[]]
[att27,attribute,数量,class(発注伝票),type(int),mul(),[]]
[att28,attribute,合計,class(発注伝票),type(currency),mul(),[]]
[att29,attribute,伝票コード,class(出荷指示伝票),type(int),mul(),[]]
[att30,attribute,作成日,class(出荷指示伝票),type(char*),mul(),[]]
[att31,attribute,小売店コード,class(出荷指示伝票),type(int),mul(),[]]
[att32,attribute,小売店名,class(出荷指示伝票),type(char*),mul(),[]]
[att33,attribute,発送日,class(出荷指示伝票),type(datetime),mul(),[]]
[att34,attribute,商品コード,class(出荷指示伝票),type(int),mul(),[]]
[att35,attribute,商品名,class(出荷指示伝票),type(char*),mul(),[]]
[att36,attribute,単価,class(出荷指示伝票),type(currency),mul(),[]]
[att37,attribute,数量,class(出荷指示伝票),type(int),mul(),[]]
[att38,attribute,合計,class(出荷指示伝票),type(currency),mul(),[]]
[att39,attribute,伝票コード,class(出荷伝票),type(int),mul(),[]]
[att40,attribute,作成日,class(出荷伝票),type(char*),mul(),[]]
[att41,attribute,小売店コード,class(出荷伝票),type(int),mul(),[]]
[att42,attribute,小売店名,class(出荷伝票),type(char*),mul(),[]]
[att43,attribute,発送日,class(出荷伝票),type(datetime),mul(),[]]
[att44,attribute,商品コード,class(出荷伝票),type(int),mul(),[]]
[att45,attribute,商品名,class(出荷伝票),type(char*),mul(),[]]
[att46,attribute,単価,class(出荷伝票),type(currency),mul(),[]]
[att47,attribute,数量,class(出荷伝票),type(int),mul(),[]]
[att48,attribute,合計,class(出荷伝票),type(currency),mul(),[]]
[att49,attribute,小売店コード,class(小売店),type(int),mul(),[]]
[att50,attribute,小売店名,class(小売店),type(char*),mul(),[]]
[att51,attribute,住所,class(小売店),type(char*),mul(),[]]
[att52,attribute,TEL,class(小売店),type(char*),mul(),[]]
[ass1,association,記入する,from(小売店),to(発注伝票),mul(),[]]
[ass2,association,記入する,from(問屋受付係),to(商品受注台帳),mul(),[]]
[ass3,association,在庫を確認する,from(問屋受付係),to(問屋倉庫係),mul(),[]]
[ass4,association,記入する,from(問屋受付係),to(出荷指示伝票),mul(),[]]
[ass5,association,出荷を指示する,from(問屋受付係),to(問屋倉庫係),mul(),[]]
[ass6,association,記入する,from(問屋倉庫係),to(商品台帳),mul(),[]]
[ass7,association,在庫を報告する,from(問屋倉庫係),to(問屋受付係),mul(),[]]
[ass8,association,在庫を確認する,from(問屋倉庫係),to(商品台帳),mul(),[]]
図7 酒倉庫業務インスタンスのRSL表現
create table 商品受注台帳(受注コード number(8,0) 受注日付 char(50) 小売店コード char(50) 小売店名 char(50) 商品コード char(50) 商品名 char(50) 単価 char(50) 数量 char(50) 合計 char(50) 出庫予定日 char(50) );
create table 小売店台帳(小売店コード char(50) 小売店名 char(50) 住所 char(50) TEL char(50) );
create table 商品台帳(商品コード char(50) 商品名 char(50) 単価 char(50) 数量 char(50) );
create table 発注伝票(伝票コード char(50) 作成日 char(50) 小売店コード char(50) 小売店名 char(50) 発送希望日 char(50) 商品コード char(50) 商品名 char(50) 単価 char(50) 数量 char(50) 合計 char(50) );
create table 出荷指示伝票(伝票コード char(50) 作成日 char(50) 小売店コード char(50) 小売店名 char(50) 発送日 char(50) 商品コード char(50) 商品名 char(50) 単価 char(50) 数量 char(50) 合計 char(50) );
create table 出荷伝票(伝票コード char(50) 作成日 char(50) 小売店コード char(50) 小売店名 char(50) 発送日 char(50) 商品コード char(50) 商品名 char(50) 単価 char(50) 数量 char(50) 合計 char(50) );
create table 小売店(小売店コード char(50) 小売店名 char(50) 住所 char(50) TEL char(50) );
create table 問屋受付係(社員コード char(50) 氏名 char(50));
create table 問屋倉庫係(社員コード char(50) 氏名 char(50));
(1) 受注(問屋受付係)
INSERT INTO 商品受注台帳(受注コード,受注日付,小売店コード,小売店名,商品コード,商品名,単価,数量,合計金額,出庫予定日) VALUES(受注コード,sysdate,小売店コード,小売店名,商品コード,商品名,単価,数量,単価*数量,出庫予定日)
(2) 出荷指示(問屋受付係)
DECLARE
V_STORECODE 商品受注台帳.小売店コード%TYPE;
V_STORENAME 商品受注台帳.小売店名%TYPE;
V_ITEMCODE 商品受注台帳.商品コード%TYPE;
V_ITEMNAME 商品受注台帳.商品名%TYPE;
V_UNITPRICE 商品受注台帳.単価%TYPE;
V_ITEMQUANTITY 商品受注台帳.数量%TYPE;
V_TOTALPRICE 商品受注台帳.合計金額%TYPE;
BEGIN
SELECT 小売店コード,小売店名,商品コード,商品名,単価,数量,合計金額
INTO V_STORECODE,V_STORENAME,V_ITEMCODE,V_ITEMNAME,V_UNITPRICE,V_ITEMQUANTITY, V_TOTALPRICE
FROM 商品受注台帳
WHERE 受注コード=x;
INSERT INTO 出荷指示伝票 (伝票コード,作成日,小売店コード,小売店名,発送日,商品コード,商品名,単価,数量,合計)
VALUES(伝票コード,SYSDATE,V_STORECODE,V_STORENAME,V_ITEMCODE,V_ITEMNAME,V_UNITPRICE,V_ITEMQUANTITY, V_TOTALPRICE);
End;
(3) 小売店台帳登録(問屋受付係)
INSERT INTO 小売店台帳(小売店コード,小売店名,住所,TEL) VALUES(小売店コード,小売店名,住所,TEL)
(4) 小売店台帳抹消(問屋受付係)
DELETE FROM 小売店台帳 WHERE 小売店コード = X;
(5) 商品台帳登録(問屋倉庫係)
INSERT INTO 商品台帳(商品コード,商品名,単価) VALUES(商品コード,商品名,単価)
(6) 商品台帳抹消(問屋倉庫係)
DELETE FROM 商品台帳 WHERE 商品コード = X;
(7) 在庫問合せ(問屋受付係)
SELECT 在庫数 FROM 商品台帳 WHERE 商品コード =X;
(8) 出荷(問屋倉庫係)
DECLARE
V_STORECODE 出荷指示伝票.小売店コード%TYPE;
V_STORENAME 出荷指示伝票.小売店名%TYPE;
V_ITEMCODE 出荷指示伝票.商品コード%TYPE;
V_ITEMNAME 出荷指示伝票.商品名%TYPE;
V_UNITPRICE 出荷指示伝票.単価%TYPE;
V_ITEMQUANTITY 出荷指示伝票.数量%TYPE;
V_TOTALPRICE 出荷指示伝票.合計金額%TYPE;
BEGIN
SELECT 小売店コード,小売店名,商品コード,商品名,単価,数量,合計金額
INTO V_STORECODE,V_STORENAME,V_ITEMCODE,V_ITEMNAME,V_UNITPRICE,V_ITEMQUANTITY, V_TOTALPRICE
FROM 出荷指示伝票
WHERE 伝票コード=x;
INSERT INTO 出荷伝票 (伝票コード,作成日,小売店コード,小売店名,発送日,商品コード,商品名,単価,数量,合計金額)
VALUES(伝票コード,SYSDATE,V_STORECODE,V_STORENAME,V_ITEMCODE,V_ITEMNAME,V_UNITPRICE,V_ITEMQUANTITY, V_TOTALPRICE);
UPDATE 商品台帳
SET 在庫数=在庫数-V_ITEMQUANTITY
WHERE 商品コード=V_ITEMCODE;
End;
図8 酒倉庫業務インスタンスのSQL表現
4.3 ナビゲータの出力
NAVIによって得られる出力は,そのドメインモデルのインスタンスとして登録される場合(図1の内側のフィードバックループ)と,ドメインモデルの新規ライブラリとして登録し拡充する場合(図1の外側のフィードバックループ)がある.後者は,ドメイン用語の大幅な追加・削除や,クラスの追加・削除が生じたときに,新たなドメインモデルが獲得されたことを示す.これによって,再びシステム開発を行う際に,より豊富なドメインモデル/システムインスタンスのライブラリを提供することができる.
出力の形式は,システムインスタンスの仕様のRSL形式とSQL形式である.図7に酒倉庫業務インスタンスのRSL表現,図8にSQL表現を示す.このSQL出力はORACLE Ver.7で実行検証済みである.
これは,HITOプロジェクトの中で,CAMEO/Dに渡され,設計エディタの入力になる.
本稿は,まずRDBに実装可能なシステムのドメインモデルと,これに基づくシステム開発を支援するNAVIについて述べた.CDレンタル業務,ホテル業務,図書館業務,レンタカー業務,講義管理,酒倉庫業務,新聞社業務についてもドメイン分析・モデリングを行い,同様な形式のナビゲータが開発できることが認識された.
筆者らは,レンタルドメイン,販売管理ドメイン,図書館ドメイン,OLTP的なリアルタイムシステムドメイン,プラントドメイン,車検ドメイン,鉄道ドメインなどの様々な重要なドメインを分析して,各々のドメインプロセスモデルを見出す作業を行ってきた.これらのドメインの分析の中で,これらのドメインで,たとえば,協調業務,割当て業務,監視業務,運用業務,売買業務といった同種の業務が行なわれていることを認識した.図9に示す通り,これらを共通タスク(generic task)として捉え,ドメインにまたがる共通タスク毎にプロセスモデルを獲得していくことが重要であるとの認識を得た.
それぞれのドメインでは,特定の組織,機関が様々な業務を行い,ある目的を達成している.ドメインをいくつかの業務の組み合わせとして捉えることができる.ここで複数のドメインを横断的にまたがり,共通に同種の業務が行われるということで,この同種の業務が共通タスクである.
システムを開発する際のドメイン分析のアプローチを示したい.
まずドメインの問題モデルを獲得する.ここでは,そのドメインで用いられる用語が獲得され,これを蓄積する.続いてそのドメインで行われる共通タスクが何であるかを明らかにし列挙する.共通タスクが明らかになれば,過去に蓄積された共通タスクのプロセスモデルを再利用し,それぞれのプロダクトモデルを獲得する.共通タスクのドメインモデルは,複数のドメインを横断的にまたがって再利用可能である.従来のドメインモデルは共通タスクドメインモデルの集合として表される.
たとえば,協調業務について,その問題モデルとなる,問題のとらえ方,構成要素を明らかにし,そのプロダクトモデルとなるSFCとERDを明らかにしておく.さらにそれらを結ぶ開発のプロセスモデルも明らかにしておく.これらがあれば,病院ドメイン,車検ドメインなどの様々なドメインでも協調業務の部分は同様に分析可能である.
共通タスク毎の問題/プロセス/プロダクトの3つのモデルがあれば,ドメインを代えると,その固有の用語の置き換えが重要な要素となり,開発プロセスモデル自体の再利用が可能となる.この共通タスク毎のプロセスモデルは,ドメインをまたがっても再利用できるドメイン分析のプロセスモデルとなる.汎用的ではないが,共通タスク毎に適用できる有効なモデルとなる.また,ドメインを固定すると,そのドメインの一つの共通タスクのプロセスモデルは,そのドメインのその業務のシステムを開発するプロセスのモデルとなる.
図m1 ナビゲータのメイン画面
・Select Domain ボタン
ドメインライブラリに登録されているドメインモデルの中からドメインモデルを選択します.
ボタンを押すと下の画面が出てきますのでその中からモデルを選択しOKボタンを押します.
図m2 ドメインモデルの選択
・Register Domain ボタン
現在作業中のシステムインスタンスをドメインモデルとして登録します.
・Select Instance ボタン
システムインスタンスライブラリに登録されているシステムインスタンスの中から,
システムインスタンスライブラリを選択します.
ボタンを押すと下の画面が出てきますのでその中からモデルを選択しOKボタンを押します.
・Register Instance ボタン
現在作業中のシステムインスタンスを新しいシステムインスタンスモデルとして登録します.
図m3 システムインスタンスの選択
・Create Domain ボタン
新規にドメインモデルを作成します.
ボタンを押すと,まず,新しいドメインモデルの名前を聞いてきますので,ドメインモデルの名前を入力してOKボタンを押します.次にドメインモデルのファイル名を聴いてきます.このファイル名は,モデルをディスク上に記憶するためのファイルの名前ですので,半角アルファベットで8文字以内の名前を入力してください.次に新しいクラスの名前を聞いてきます.ここでクラスの名前を入力してください.OKボタンを押すと,今入力した属性を持たないクラスだけのモデルができます.
図m4 新規ドメインの作成
・Add Class ボタン
新しいクラスを追加します.
ボタンを押すと,クラス名を聞いてきますので,クラス名を入力し,Okボタンを押すと属性を持たないクラスができます.このクラス名はドメイン用語として登録されます.
メイン画面の@のオプションボタンで,そのクラスが台帳(Ledger),伝票(Slip),人(Personnel)かを選びます.また,Aのチェックボックスでそのクラスを使用するかどうかを決定します.
図m5 Classの作成
・Add Attribute ボタン
属性を追加します.
ボタンを押すと属性名を聞いてきますので,属性名を入力してOKボタンを押してください.現在選択されているクラスに属性が追加されます.この追加された属性名はドメイン用語として登録されます.
メイン画面のBのチェックボックスでその属性を使うかどうかを決定します.
図m6 属性の追加
・OUTPUT SQL ボタン
現在選択されているシステムインスタンスをSQL形式で出力します.
ボタンを押すと,SQLファイル名を聞いてきますので名前を入力して保存ボタンを押してください.
図m7 SQLの出力
・OUTPUT RSL ボタン
現在選択されているシステムインスタンスをRSL形式で出力します.
ボタンを押すと,RSLファイル名を聞いてきますので名前を入力して保存ボタンを押してください.
図m8 RSLの出力
・Change Term ボタン
クラス名のドメイン用語とシステム用語の対応づけを行います.
ボタンを押すと以下の画面が表示されます.
図m9 クラス名のドメイン用語/システム用語対応づけ
ドメイン用語に対応したシステム用語群がSystemTermに表示されます.
現在対応しているシステム用語が青帯で選択されています.
DomainTermの中から対応づけを変更したいクラス名を選び,SystemTermの中から
対応づけたいシステム用語をクリックすると,DomainTermにSystemTermが対応づけされます.
Add Termボタンは現在選択されているドメイン用語に対してシステム用語を追加します.
・Delete Class ボタン
現在選択されているクラスを削除します.
・Association ボタン
関連を作成します.
ボタンを押すと以下の画面が表示されます.
図m10 関連の作成
関連の作成の仕方
Add Association ボタンで関連の行が追加されます.「From」「AssociationVerb」「To」の各々を選択します.「From」「To」はメイン画面で作成されたクラスの中から選択するようになっています.
Deleteボタンを押すことで関連の行が1行削除されます.
Add Verbボタンを押すと以下の画面が表示されます.
図m11関連動詞の追加
ここでAddVerbボタンを押すと関連動詞を追加できます.AddVerbTerbボタンで関連動詞のドメイン用語に対応したシステム用語を追加できます.
・Edit Transaction
トランザクションを作成します.
ボタンを押すと以下の画面が表示されます.
図m12 トランザクションの作成
TransactionNameの中から編集するトランザクションを選びSQLのテキストボックスでSQLを編集します.
Add Transactionボタンでトランザクションを追加します.SystemTermで,トランザクションのドメイン用語に対応するシステム用語を選択します.Add SystemTermボタンでシステム用語を追加できます.
・Assign Transaction ボタン
トランザクションと人との割当てを行います.
ボタンを押すと以下の画面が表示されます.
図m13 トランザクションと要員の割当て
Operatorの中から割当てを行う要員を選択します.次に,その人に行わせたいトランザクション横のUseチェックボックスをチェックします.
Naviのプログラムは,
ftp://celes.softlab.is.tsukuba.ac.jp/pub/eagl/Navi/から入手できる.プログラムはVisualBasic5.0で作成した.EXE形式のファイルのみであるため,VisualBasic5.0を購入して実行してください.
<参考文献>
[Arango91]Arango,G., Prieto-Diaz,R.: Introduction and Overview: Domain Analysis Concepts and Research Directions, pp.9-26, Domain Analysis and Software Systems Modeling (R.Prieto-Diaz and G.Arangoed.), IEEE,(1991).
[平井95]平井俊光,田村恭久,伊藤潔:セールスドメインにおけるドメインモデルの獲得とその再利用情報処理学会ソフトウェア工学研究会 95-SE-105-4, (September,1995).
[伊藤94]伊藤潔,田村恭久,杵嶋修三:Triadic Domain Modelに基づくシステムの分析・設計,ソフトウェア工学の基礎, 日本ソフトウェア科学会, Vol.1, (December,1994).
[Itoh94a]Itoh,K., Kishima,S., Tamura,Y.: Systems Integration on Specification, Design and Generation of Reactive System - Triadic Domain Model-Based Approach -, IEEE ICSI'94 (3rd International Conference on Systems Integration), pp.1082-1095, (August 1994).
[Itoh94b]Itoh,K., Kishima,S., Tamura,Y.: Triadic Domain Model-Based Development of Sotware Systems, IEEE ICSR'94 (3rd International Conference on Software Reuse), (November 1994).
[伊藤95a]伊藤潔,田村恭久,杵嶋修三:ドメイン分析・モデリング概説,情報処理学会ソフトウェア工学研究会, (March, 1995).
[伊藤95b]伊藤潔,田村恭久,杵嶋修三:ドメイン分析・モデリングの利用法・研究法,情報処理学会ソフトウェア工学研究会 95-SE-103, (March, 1995)
[伊藤96]伊藤潔,杵島修三,田村恭久,廣田豊彦,吉田裕之:ドメイン分析・モデリング,共立出版,(August,1996)
[Itoh97]Itoh,K., Shinkai,J., Kumagai,S., Kishima,S.: A Method for Domain Analysis and Modeling of Cooperative Work, SCS CEE'97 (Concurrent Engineering in Europe), pp.37-44, (April, 1997).
[Prieto-Diaz87]Prieto-Diaz,R.: Domain Analysis for Reusability, COMPSAC'87, pp.23-29, (1987).
[川端96a]川端亮,田村恭久,伊藤潔,富井規雄:割当て業務向きドメインモデル,電子情報通信学会技術研究報告,KBSE96-6,(March,1996)
[川端96b]川端亮,田村恭久,伊藤潔,富井規雄:割当て業務向きドメイン分析とその支援ナビゲータ,情報処理学会ドメイン分析モデリングシンポジウム,(September 1996).
[Kawabata97] Kawabata,R., Tamura,Y., Itoh,K., Tomii,N.: Concurrent Work Specification for Co-related Assignment Tasks with Domain-oriented Abstraction, SCS CEE'97 (Concurrent Engineering in Europe), pp.133-140, (April 1997).
[新開96a]新開治郎,田村恭久,伊藤潔,熊谷敏,杵嶋修三:協調作業を含む業務のドメイン分析とモデリング,情報処理学会ソフトウェア工学研究会,(March 1996).
[新開96b]新開治郎,田村恭久,伊藤潔,熊谷敏,杵嶋修三:協調作業を含む業務のドメイン分析・モデリングとその支援ナビゲータ,情報処理学会ドメイン分析モデリングシンポジウム,
(September 1996).
[新開96c]新開治郎,田村恭久,伊藤潔,熊谷敏,杵嶋修三:協調作業を含む業務のドメイン分析:ドメインにまたがる共通業務のドメイン分析とその再利用に関する考察,ソフトウェア工学の基礎, 日本ソフトウェア科学会, Vol.3,
(December 1996).
[田村95]田村恭久,平井俊光,伊藤潔: 複数の類似ドメインにおけるドメインモデルの洗練と再利用,ソフトウェア工学の基礎, 日本ソフトウェア科学会, Vol.2, (December, 1995).
[田村96]田村恭久,各務辰哉,伊藤潔:ドメインモデルに基づくシステム開発ナビゲータ,ソフトウェア工学の基礎, 日本ソフトウェア科学会, Vol.3, (December, 1996).
[Tracz92]Tracz,W.: Domain Analysis Working Group Report, First Int. Workshop on Software Reusability, ACM SIGSOFT SE.Notes, Vol.17, No.3, pp.27-34, (1992).