Translate

2020/06/11

UML+SysML としての使い方(1)

前回の記事「SysML 1.6 でのモデリング」ではSysMLプロジェクトを作成する方法を簡単に説明しましたが、SysMLプロジェクト単独では「UML + SysMLとなるモデル化を行いたい」という場合には(多分)うまく扱えないと思います。

「UML + SysMLとなるモデル化」とは、UMLとSysMLの関係を示す下記のFigure 4-1 (SysML仕様書から抜粋)において、両集合の和となるようなUMLとSysMLの要素をシームレスに扱いたいという場合です。


Figure 4-1: Overview of SysML/UML Interrelationship
前のやり方ではSysMLプロジェクトとして作成されるためUMLのダイアグラムを扱うことが出来ず、関連するUMLモデルを別モデルファイルとして作成し、そのモデルをImportすることで関連付けを行い、UMLモデル側でダイアグラムを扱うならばUMLとして扱えます。
また逆に、システムエンジニアリング→ソフトウェアエンジニアリングとして進める場合で考えるとUMLモデル側にSysMLモデルをImportして使うとして同様に進めれば「UML+SysML」は扱えます。
ただ、別モデルファイルであるため扱いづらいですし、Papyrus上でモデル切り替えを行う際に操作系としてのタイムラグが発生するので切り替え頻度が高い場合はフラストレーションもたまります。

なお、自分が「UML+SysML」として扱いたいケースは、

  • SysMLでシステム設計を行った後の設計対象がソフトウェアであるため、その先の関係者が扱う「通常のUML」にシームレスに繋げて、UMLとして機能内容等をブレークダウンしていきたい。
  • (同じく主体がソフトウェアであるため)UMLを主として、そこにSysMLの「Stakeholder、View、Viewpoint」や「Requirement」のみを上位側の概念として使いたい。

です。特に後者の方が多いです。

昔のPapyrusでは、「UML+SysML」としての混在が楽だったのですが、現在の「Architecture Context」を明示的に指定する方法(最初にモデルを作る時に Software Engineering か System Engineering かを選択)になってからは対応しづらくなりました。

もちろん、現在の方が利点も多いですし、そもそも別れている世界だと考えると問題はありませんし、SysML側で再定義されたモデル要素をUML/SysMLのどちらの意味で扱うのか等の問題も存在していますが、それでも「UML+SysML」として使いたいケースも多いです。

今回はそのやり方について紹介したいと思います。

なお今回のやり方は「UMLをベースとしてモデルやダイアグラムを扱い、そこに一部のSysML要素を使いたい」の例となります。


まず、UMLのプロジェクト/モデルを作成します。

作成したモデルの最上位を Model Explorer 上で選択し、PropertiesタブのProfileを開きます。


このProfileパネルの右上にある「Apply registered profile」と表示されるボタンである

をクリックします。

すると「Apply profiles from Papyrus repository」となるダイアログが上がってくるので、そこで
SysML 1.6
を選択して[OK]を押します。


すると
Choose profile(s) to apply
というダイアログが上がってきます。ここで任意のプロファイルを選択します。自分は全てを選択して使っています。


これでUMLモデル上で SysML プロファイルを扱うことが出来るようになりました。


それではUMLモデル上でSysMLの「Stakeholder」を使用してみたいと思います。

まず「Actor」を作成します。

Actorを直接的に扱えるダイアグラムは「UseCase」のためユースケース図で作成してみます。

自分は ModelExplorer 上で直接モデルを作成することが多いですが、Actorの線画アイコンがそのまま表示されるユースケース図を使って進めようと思います。


通常のモデル作成操作(NodesからActorを選択して作成)を行います。

これで名前が「StakeholderA」となるUMLのActorが作成されました。

ここでActorのProfileパネルを開きます(Propertiesタブ→Profile)。


Applied stereotypesで前と同じく [+] ボタンをクリックします。


左側の「Applicable Stereotypes」上に
Stakeholder
が現れるので、ダイアログ中央の[⇒]ボタンを使って、右側に移動します。


これで[OK]を押すと、Actorに「SysMLのStakeholderステレオタイプ」が適用され、ユースケース図上ではステレオタイプ名となる <<Stakeholder>> が適用されます。

また Profileパネルの Applied stereotypes の所で、Stakeholder ステレオタイプが持つプロパティである
concern
のプロパティが扱えるようになったことが分かります。


「Stakeholder」を作成したので「関心事」(concern)を規定して行きたいと思います。

上記図から見て取れる様に「concernList」としてCommentを複数登録可能です。

concernListをマウスで選択し、ここでも同じく右上の[+]ボタンをクリックします。

するとconcernListに関するダイアログが表示されます。


既にCommentとして作成されている concern があれば、それを左側で選択し右側に[⇒]で移動すれば選択出来ますが、まだ存在(作成)していない場合には、ダイアログ右端中央にある[+]ボタンをクリックします。

すると「Create a new Comment」というダイアログが上がってきます。


まず、Comment要素を保持する Container を指定する所から始めます。

Container: の所にある […] ボタンをクリックします。

すると作成するCommentを持つモデル要素を選択出来るので、適切なコンテナを指定します。

ここでは作成した「StakeholderA」をコンテナとして指定して進めます。


[OK]ボタンを押すと以下のダイアログの様に選択されるので [OK] ボタンを押します。


この後、通常の Comment 作成用のダイアログが上がってくるのですが、そこでの入力操作については割愛します(キャプチャし忘れました…)。

今回は、そのコメント内容(body)を
「継続してサービスが提供出来る仕組みか」
として作成しました(内容は雰囲気で適当に書きました)。


これでOKを押します。

これにより基本的には

  • Stakeholderステレオタイプが作成され、
  • そのStakeholderの関心事がモデルとして規定された

となるのですが、残念ながらダイアグラム上での見た目は変わりません。



ダイアグラム上で表示として見せるためには、もう少しだけ手間が必要です。

StakeholderAのPropertiesタブのAppearanceパネルを開きます。


その中央ぐらいにある
Stereotype display
の表で諸々の指定を行うことで表示をコントロールできます。

この表のStakeholder行とIn Comment列が交差するセルのチェックボックをチェックすると、


と無事に関心事がStakeholderにリンクされたコメントとして表示されました。

このモデルはUMLベースであるため、画面のダイアグラム操作系からも見て取れるように、他の関係するモデルとして通常のUMLが扱えます。

このようにしてUML上でSysML要素を扱うことが可能です。

なお、幾つか追加で説明しておきたい話や注意点がありますので、それについては次の記事に書こうかと思います。