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

また本格的なシステム開発に耐えるモデルとしては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 件のコメント:
コメントを投稿