2012年10月17日水曜日

MindmapModelingと集合知(11) - SmartDox DSLによるユビキタス言語

ユビキタス言語で説明した通り、ユビキタス言語をハブにして日本語、モデル、プログラムを連携します。

元々、マインドマップモデリングをユビキタス言語として使用していましたが、マインドマップの記述力では本格的なシステム開発に耐えるモデルを記述するには無理があります。あくまでも、ブレインストーミングや教育の用途向けになります。



また本格的なシステム開発に耐えるモデルとしてはScalaをホスト言語とした内部DSLを使用していましたが、プログラミング寄りの記述方法なのでユビキタス言語としては難がありました。

この問題を解決するために開発したのがSmartDox DSLです。

SmartDox DSLは基本的にマインドマップと同じ文書構造になっており、システム側の語彙も共通しています。ただし、表組みなどを使ってより精密なモデルを記述できるようになっています。

SmartDox DSLでは、以下の2種類の語彙があります。

  • システム語彙
  • アプリケーション語彙

システム語彙

以下の用語にユビキタス言語の構造上の意味を持たせています。

語彙OO用語OO用語(英語)
登場人物アクターactor
道具リソースresource
出来事イベントevent
要約サマリsummary
役割ロールrole
物語ビジネス・ユースケースbusiness use case
規則ビジネス・ルールbusiness rule
特色トレイトtrait
区分パワータイプpowertype
種類汎化generalization
参照, 関連関連association
部品, 集約集約aggregation
部品, 合成合成composition
属性属性attribute
脚本(ユースケースの)フロー(use case) flow
主役プライマリ・アクターprimary actor
相手役セカンダリ・アクターsecondary actor
脇役サポーティング・アクターsupporting actor
状況の変化状態遷移state transition
状態状態state
状態機械状態機械state machine
サービスサービスservice
基底基底クラスbase class
多重度多重度multiplicity
目的目的goal
注記アノテーションannotation
性質プロパティproperty

アプリケーション語彙

システム言語の語彙と文章の構造を用いて、アプリケーション言語の語彙を定義します。

前回の例では以下のクラス図が示すモデルをSmartDox DSLで記述しました。



このモデルでは以下のアプリケーション語彙が定義されています。

種別アプリケーション語彙
アクター顧客
リソース商品
イベント購入
トレイトMaster, Transaction, LogicalDeletable, Tagable, ImageHolder

「固いモデル」と「柔らかいモデル」の整合性

アウトラインや表組みの中の所定の場所にシステム語彙やアプリケーション語彙を記述することで、プログラム生成に必要な精度のモデルを記述します。この部分はツールと人間が共通に認識します。ここの部分を「固いモデル」と呼んでいます。

それと同時に、日本語の文章で各モデル要素の仕様を記述します。この部分はツールはモデルとしては扱わず、人間が仕様を理解するための情報になります。ここの部分を「柔らかいモデル」と呼んでいます。

柔らかいモデルの意図は、要求仕様といった人間側の情報をまとめ固いモデルへ紐付ける点にあります。要求仕様と固いモデルの整合性は、人間が「柔らかいモデルの文章」を読んでアナログに判断していきます。

従来のプログラミング言語よりの固いモデルと人間よりの柔らかいモデルが別々に存在しており、2つのモデル間の連携が不十分でした。

固いモデルと柔らかいモデルを統合したユビキタス言語を用いることで、アプリケーション開発のライフサイクルを通して持続的にこの2つのモデルの整合性を保っていく事が可能になるのではないかと考えています。

0 件のコメント:

コメントを投稿