english japanese german



astah* SysML チュートリアル


Object Management Group (OMGR)によって策定されたSysML1.3仕様書に掲載されたサンプルの一部を課題として、実際に手を動かし描きながら、astah* SysMLの基本的な操作方法を身につけられます

対象図:ブロック定義図、内部ブロック定義図、パラメトリック図、要求図、
    ユースケース図、アクティビティ図、シーケンス図、状態遷移図

最終更新:2017年6月1日
利用エディション:astah* SysML 1.4.0


 §1. システムモデリングツール astah* SysMLとは?

astah* SysMLは、システムモデリング言語SysMLでの分析・設計を支援するシステム設計ツールです。SysMLの各ダイアグラムを一つのツールで描画・作成でき、要求分析からシステム設計まで、様々なシーンで利用できます。
astah*シリーズとして「その場で使える直感的なGUIによって、ツール初心者でも各図をきれいにスイスイ描ける」などの特徴を活かし、導入後すぐに活用できます。
主な特徴を挙げてみます。

  1. SysMLの各図をサポート(要求図、ブロック定義図、内部ブロック図、パラメトリック図、
    ユースケース図、ステートマシン図、アクティビティ図、シーケンス図)
  2. その場で使える直感的で分かりやすいGUIによって、インストール後すぐにスラスラと描けます
  3. 要求収集に利用できるマインドマップを標準搭載。発想を描くマインドマップと連携することで、
    アイディアをトピックとして各図の要素とリンク可能

その他の特徴については、astah* SysMLの製品情報をご参照ください。

▶ メニューに戻る


 §2. astah* SysMLのインストール

ダウンロード

システム要件を確認して、ダウンロードページから、astah* SysMLをダウンロードします。

インストール

ダウンロード完了後、インストーラをダブルクリックして、インストールします。
(Linuxでご利用の場合は、こちらも参考にしてください)

起動

スタートメニュー、またはデスクトップのastahアイコンから起動します。

▶ メニューに戻る


 §3. astah*の画面構成と基本操作

astahの画面構成と基本操作を説明します。

  • マネジメントビュー
    astahのベースとなるビューです。メニューバーとツールバーを持ちます。
  • 構造ツリー
    パッケージやクラスなどの入れ子構造をツリー形式で表示します。ポップアップメニューでパッケージや図、クラスなどの要素を追加、削除できます。
  • 継承ツリー
    選択中のクラスやインタフェースの親や子をツリー形式で表示します。
  • マップビュー
    アクティブな図の全体を表示します。大きめの図の編集時にその全体を見渡すために利用します。 マウス操作により表示範囲を簡単に変更できます
  • プロパティビュー
    選択されたアイテムの属性を編集するビューです。
  • ダイアグラムエディタ
    図を表示、編集するビューです。図のアイテム作成用のツールボタン群(ツールパレット)を持ちます。

基本操作(1):新規プロジェクトを作成する

astah* SysMLでは、SysMLのデータを"プロジェクト"という拡張子.asmlのファイルに保存します。起動後は何もプロジェクトを開いていない状態のため、まず新規のプロジェクトを作成します。
【ファイル】- 【プロジェクトの新規作成】を選択すると、プロジェクトが作成され、空の構造ツリーとプロパティビューが表示されます。


基本操作(2):パッケージや図の作成

新規のパッケージは、主に構造ツリー上のポップアップメニューから追加します。
新しい図は、構造ツリー上のポップアップメニューから、または【図】メニューから選択して作成します。


基本操作(3):アイテムの作成と編集

図を描くための基本的な操作方法は、一般的なドローイングソフトでの操作方法とそれほど変わりません。 ドローイングソフトに慣れている場合は、どんどん編集を進めてみてください。

▶ メニューに戻る


 §4. SysML1.2仕様書に掲載されたサンプルの概要

サンプルは、SysMLを用いてハイブリッドSUV車の要件設計・分析を示すものです。
このチュートリアルは、あくまでツールを使ってastah*とSysMLに慣れることを目的とするため、掲載されたサンプルを一部抜粋しています。
それではSysML図を描き始めましょう。

▶ メニューに戻る


 §5. ブロック定義図を描いてみる

課題

次のようなブロック定義図を描きましょう。




描き方

メインメニュー【図】-【ブロック定義図】を選択すると、ダイアグラムエディタが表示されます。




構造ツリーでプロジェクトを右クリックして表示されるポップアップメニュー【図の追加】-【ブロック定義図の追加】からも、ダイアグラムエディタを表示できます。




ダイアグラムエディタには、ブロック定義図編集用のツールボタンが並んでいます。




各ボタンが何のためのボタンかは、マウスポインタをボタン上に止めると表示されるツールチップで確認できます。 これらのアイコンとツールチップは、SysMLの要素名と表記を覚えるのに有効です。


まず、[Automotive Value Types]パッケージと全バリュータイプを作成しましょう。パッケージは、ツールバーの左から2番目にあるパッケージボタンを押して、図上をクリックして作成します。続けてパッケージの名前に"Automotive Value Types"と入力してEnterを押します。

次にバリュータイプと[Automotive Units]パッケージを作成します。

ツールバー上でバリュータイプボタンを押して、作成した[Automotive Value Types]パッケージをクリックします。すると、バリュータイプが [Automotive Value Types]パッケージ内に作成されます。
バリュータイプの名前に"Accel"と入力してEnterを押します。"Accel"バリュータイプの作成後、他の5つのバリュータイプを描いてください。
同様に、ツールバー上でパッケージボタンを押して、作成した[Automotive Value Types]パッケージをクリックします。すると、パッケージが [Automotive Value Types]パッケージ内に作成されます。 パッケージの名前に"Automotive Units"と入力してEnterを押します。

図上の各アイテムは、ドラッグで移動可能です。 バリュータイプなどの名前を再編集したい場合は、名前の部分を2回クリックすることで、編集可能です。

さて、次にバリュータイプ間の継承を引きましょう。
継承のツールボタンを押し、継承作成モードにします。 継承を作成する場合は、2箇所クリックします。
"Accel"バリュータイプをクリック後、"Real"バリュータイプをクリックしてください。 継承が引けました。同様に、他のバリュータイプ間の継承を作成してください。
全ユニットを作成してみてください。 ユニットの作成方法はバリュータイプと同様です。

さて、次にユニットに量種別を設定しましょう。
構造ツリーで[Automotive Value Types]パッケージを右クリックして表示されるポップアップメニュー【モデルの追加】-【量種別の追加】を選択すると、量種別が[Automotive Value Types]パッケージ下に作成されます。続けて量種別の名前を入力してEnterを押します。

今度は、ユニットのプロパティビューから量種別を設定してみましょう。ユニットを選択すると プロパティビューが次のようになりますので量種別を設定しましょう。




ここまで、SUV車の設計に必要なバリュータイプとユニットを定義しました。
ここからは、次のようなブロック定義図で、SUV車におけるPowerSubSystemの燃料供給システムを定義していきましょう。




PowerSubsystem Fuel Flow Definition"ブロック定義図を格納するHSUVをまず作成しましょう!
構造ツリーでプロジェクトを右クリックして表示されるポップアップメニュー【モデルの追加】-【ブロックの追加】を選択すると、ブロックがプロジェクト下に作成されます。続けてブロックの名前として"HSUV"を入力してEnterを押します。

“ブロック図をプロジェクトに追加します。
構造ツリー上で"HSUV"ブロックのポップアップメニューから、【図の追加】-【ブロック定義図の追加】を選択します。図名を"PowerSubsystem Fuel Flow Definition"とします。図が追加され、その図がダイアグラムエディタで表示されます。

さて、ブロックを描いてから細かいところを描きましょう。全てのブロックを作成してみてください。
ブロックのツールボタンを押して、作成した[PowerSubsystem Fuel Flow Definition]ブロック定義図内をクリックするとブロックを配置できます。
全てのブロックを作成後は、各ブロック間に関連を作成しましょう。
関連のツールボタンを押し、関連作成モードにします。 関連を作成する場合は、2箇所クリックします。
"PowerSubsystem"ブロックをクリック後、"FuelTankAssembly"ブロックをクリックしてください。 関連が引けました。 同様に、"PowerSubsystem"ブロックと、"InternalCombustionEngine"ブロック間の関連を作成してください。

関連には、コンポジションや関連端名などそれぞれの端点に関するプロパティがあります。
ここでは"PowerSubsystem"ブロック側の端点にコンポジションを設定します。 今までと違う編集方法を使いますので、注意してください。

  ・方法1:関連の端点に関するポップアップメニューで設定
  ・方法2:関連のプロパティビューにおけるロールタブから設定
  ・方法3:コンポジションのツールボタンから設定

今回は、方法1で、コンポジションをポップアップメニューから設定してみましょう。




関連のポップアップメニューの表示位置で動作が変わります。 図のように関連の"PowerSubsystem"ブロック側でポップアップメニューを表示するとその端点に関する編集が可能です。

今度は、関連端名を、方法2のプロパティビューから設定してみましょう。
"FuelTankAssembly"と"PowerSyvStsttem"ブロック間の関連線を選択して、プロパティビューの[関連端B]タブの"名前"から関連端名を設定しましょう。




関連端タブが二つの端点に対応して二つあるので、注意が必要です。
今は、ターゲットが"FuelTankAssembly"となっている方(関連端B)のタブで関連端名をftと設定します。
同様に、InternalCombustionEngine側の関連端名も"ice"と設定します。
後はブロックのフロープロパティの追加です。

"FuelTankAssembly"ブロックに二つのフロープロパティを追加しましょう。
追加するには、次の四つの方法があります。


  ・方法1:図上のポップアップメニューから追加
  ・方法2:図上のブロックのフロープロパティ区画のドロー・サジェストから追加(★TIPS(9)参照
  ・方法3:ブロックのプロパティビューにおけるフロープロパティタブから追加
  ・方法4:構造ツリーのブロックのポップアップメニューから追加

今回は、方法1で追加してみましょう。
図上で"FuelTankAssembl"ブロックのポップアップメニューを表示し、【要素の追加】- 【フロープロパティの追加】 を選択します。 その後、フロープロパティ名として"fuelSupply"と入力します。
フロープロパティの削除はプロパティビューまたは構造ツリーから行います。方向はinがデフォルトです。ここでは"fuelSupply"フロープロパティのプロパティビューから方向をoutに変更します。




さらに"fuelSupply"フロープロパティのプロパティビューから型を"Fuel"ブロックに変更します。




次にブロックにポートを追加します。
ポートのツールボタンを押して、作成した[FuelTankAssembly]ブロックをクリックするとポートをブロック上に配置できます。
ポートのプロパティビュー[ベース]タブからポート名を"FuelTankFitting"に変更します。
さらにプロパティビューから型を"FuelFlow"ブロックに設定します。
SysML1.2の仕様によって、"FuelFlow"ブロックは双方向のフロープロパティを保有しているため、 "FuelTank Fitting "上に双方向の矢印が表示されます。

"Fuel"ブロックに二つのバリュープロパティを追加しましょう。
フロープロパティと同様、追加するには、次の四つの方法があります。

  ・方法1:図上のポップアップメニューから追加
  ・方法2:図上のブロックのバリュープロパティ区画のドロー・サジェストから追加
  ・方法3:ブロックのプロパティビューにおけるバリュープロパティタブから追加
  ・方法4:構造ツリーのブロックのポップアップメニューから追加

では、方法1で追加してみましょう。
図上で"Fuel"ブロックのポップアップメニューを表示し、【要素の追加】- 【バリューの追加】 を選択します。その後、バリュープロパティ名として"temperature"と入力します。 バリュープロパティの削除はプロパティビューまたは構造ツリーから行います。"temperature"バリュープロパティのプロパティビューから型を"Temp"バリュータイプに変更します。
あとは、"InternalCombustionEngine"ブロック上にICEFuelFittingを追加すれば、目的の図の完成です。


知っておくと便利なTIPS


TIPS(1) 関係作成途中のキャンセル

例えば、予定外のアイテムをクリックしてしまった場合など、関連作成途中でやり直したくなった場合は、 ESCキーまたは、マウスを右クリックすると始めの状態に戻ります。 関連以外の汎化や実現、依存など二つのアイテム間の関係線を編集する場合でも、操作方法は関連と同様です。
編集しながら気付いたと思いますが、作成したブロックやユニットは、構造ツリー上にも追加されています。 左下のプロパティビューには、図上やツリー上で選択したアイテムのプロパティが表示されます。
SysMLのデータをダイアグラムエディタ上や、構造ツリー上、そしてプロパティビュー上などから編集可能になっています。 場面に応じて、使いやすい編集方法を選択しましょう。

TIPS(2) アイテム削除時の注意点

図上に追加したブロックやユースケースを削除するには、 ポップアップメニューから【図から削除】または【モデルから削除】を実行します。 削除メニューが二つあるのは、そのブロックやユースケースを、 モデルを共有したまま他の図にも配置できるためです。

  ・図から削除:図上からのみ削除します。モデル自体は削除されません。
  ・モデルから削除:モデルを削除します。そのアイテムが全図から削除されます。


TIPS(3) ズームとスクロール

一つ目の図が描けたところで、表示に関する操作を確認しておきましょう。
今描いた図は小さいのであまり必要性はありませんが、大きな図を描く場合は、表示領域を変えながら編集する必要があります。
astah* では、図上での右ドラッグで、図を描いた紙をドラッグできます。斜め方向の移動も簡単です。
図の拡大・縮小は【表示】メニューまたはツールバーから行います。ショートカットキーもぜひ活用してください。もちろんマップビューからも操作可能です。


TIPS(4) UndoとRedo

astah は、しっかりしたUndo(編集の取り消し) / Redo(編集のやり直し)機能を持っていて、100回前の編集まで取り消すことが可能です。 試しにマネジメントウィンドウの【Undo】ボタンを押しっぱなしにしてみてください。その後、【Redo】ボタンで元の状態に戻ります。
操作の間違いを恐れなくてもよさそうですね。


TIPS(5) アイテムの連続作成

アイテムの連続作成は、慣れると非常に便利ですので、ぜひ習得しましょう
  ・方法1:ツールパレットの右から四番目のロックボタンでモードをロックする方法
  ・方法2:Shiftキーを押しながら描く方法

  

TIPS(6) 複数選択

図上でアイテムを複数選択するには、選択モードにおいて以下の方法があります。
  ・方法1:図上でのドラッグによる矩形領域での選択法
  ・方法2:図上のポップアップメニューからの【全選択】
  ・方法3:Shiftキーを押したまま選択していくことによる追加選択

  

TIPS(7) 線のスタイル

線には4つのスタイルがあります。
  ・通常線 : 特別な制約なし。斜め方向の線を含めた自由な折れ線。
  ・直角線 : 水平方向または垂直方向の制約あり。折れ線は直角のみ。
  ・曲線
  ・直角曲線

  

TIPS(8) パッケージ名の本体表示/非表示

パッケージのコンテキストメニュー【名前を本体に表示】から、パッケージ名の本体表示/非表示を選択できます。




TIPS(9) ドロー・サジェスト機能

ダイアグラムエディタ上で編集をサポートします。ツールバーやポップアップメニューを経由せず、アイコンのホバー表示からモデルを編集できます。図上でモデルを選択すると、そのモデルから作成・追加できるモデルがアイコン表示されます。((★「フロープロパティの追加」にもどる




▶ メニューに戻る


 §6. 内部ブロック図を描いてみる

課題

次の内部ブロック図を描きましょう。




描き方

"PowerSubsystem"ブロックについて内部構造を描いてみましょう。
内部ブロック図をプロジェクトに追加します。 ブロック定義図上で"PowerSubsystem"ブロックのポップアップメニューから、【内部ブロック図の追加】を選択します。
内部ブロック図が追加され、その図がダイアグラムエディタで表示されます。コンポジション関連で接続されてる"FuelTankAssembly"ブロックなどは、パートとして配置されます。"ft"などの関連端名は、パート名となります。




全パートを作成してみてください。
パートのツールボタンを押して、作成した内部ブロック図エディタをクリックすると、[パートの追加]ダイアログが表示されます。
パートを新規作成するので、了解を押してください。パートを配置できます。続けて":"の前の部分にパート名として"epc"を入力し、":"の後の部分にパートの型として"ElectricalPowerController"を入力します。




"ElectricalPowerController"ブロックがプロジェクトに存在しないため、"ブロックになるElectricalPower Controllerを新規作成しますか"と質問されますので、"はい"ボタンを押します。
構造ツリーに"ElectricalPowerController"ブロックが作成されたことが確認できます。


図要素名が1行表示では長い場合、パートのサイズを変更して折り返してみましょう。
サイズ変更は、アイテムの外枠を選択後、四隅に表示されるノブをドラッグします。
残り3つのパートも作成しましょう。




ドラッグにより、外部パートを追加してみましょう。
構造ツリーでプロジェクトを右クリックして表示されるポップアップメニュー【モデルの追加】-【ブロックの追加】を選択して、"BrakePadel"ブロックを新規作成します。
"BrakePadel"ブロックを内部ブロック図上にドロップするとパートの種類について質問されますが、ここで外部パートを選択します。図上でパート名をダブルクリックしてパートの編集方法と同様に、パート名を "bkp" に設定します。構造ツリーで複数のブロックを選択し、一度に図にドラッグすることも可能です。

次に、"epc:ElectricalPowerController"パートに"I_IEPC"ポートを追加します。
ブロック図上のポートの追加方法と同様、ポートのツールボタンを押して、作成した "epc:ElectricalPowerController" パートをクリックするとポートをパート上に配置できます。
ポートのプロパティビュー[ベース]タブからポート名を"I_IEPC"に変更します。すべてのポートをパート上に追加してみてください。

アイテムフローを追加していきましょう。
アイテムフローのツールボタンを押し、アイテムフロー作成モードにします。 アイテムフローを作成する場合は、2箇所クリックします。先にクリックされたポートは、アイテムフローの源となります。
"ElectricalPowerController"ブロックのポートをクリック後、"ElectricMotorGenerator"ブロックのポートをクリックしてください。
"ElectricalPowerController"ブロックのポートから、"ElectricMotorGenerator"ブロックのポートへのアイテムフローが引けました。
同様に、逆方向のアイテムフローを作成してください。

作成したアイテムフローにConveyを追加してみましょう。
アイテムフローのプロパティビューからConveyを追加できます。
【追加】ボタンでConveyとなるブロックを追加します。ここでは、"ElectricCurrent"ブロックを選択。
【削除】ボタンは、選択されているConveyを削除します。




では、"epc:ElectricalPowerController"パートの"I_IEPC"ポートに提供インターフェースと要求インターフェースを追加しましょう。
次の三つの方法があります。

  ・方法1:図上のポートポップアップメニューにおける、【要求インターフェースの追加】と
       【提供インターフェースの追加】から追加
  ・方法2:ポートのプロパティビューにおける要求インターフェースタブと提供インターフェース
       タブから追加
  ・方法3:要求インターフェースツールボタンと提供インターフェースツールボタンから追加

方法1を用いてみましょう。図上で"epc:ElectricalPowerController"パートの"I_IEPC"ポートのポップアップメニューを表示し、【要求インターフェースの追加】を選択します。
その後、インターフェース名として"I_IEPCData"と入力します。

次に、"I_IEPCCmd"インターフェースを要求インターフェースとして"epc:PowerControlUnit"パートの "I_IEPC"ポートに接続します。
要素間のモデル関連によって、"I_IEPCCmd"インターフェースを構造ツリーから内部ブロック図上にドロップすると、"epc:ElectricalPowerController"パートの"I_IEPC"ポートに提供インターフェースとして接続し、 "epc:PowerControlUnit" パートの"I_IEPC"ポートに要求インターフェースとして接続します。
提供インターフェースと要求インターフェース間を右クリックし、ポップアップメニューから分離します。



知っておくと便利なTIPS


TIPS(10) ブロックの内部ブロック図を開く

ブロックの内部ブロック図を開くには、以下の方法があります。
  ・方法1:構造ツリーでのブロックの配下にある内部ブロック図の選択
  ・方法2:図上のブロックのポップアップメニューからの【内部ブロック図を開く】


TIPS(11) パートのネスト表現

パートをネストするには、まず親となるパートを作成します。
(型名を持たないパートはネストを作れません)
次に、下のいずれかの方法で、子パートを追加します。
  ・方法1:ツールパレットから[パート]ボタンを選択し、図上の親パート内を直接クリックして、
       子パートを追加します。
  ・方法2:ツールパレットから[パート]ボタンを選択し、図上をクリックして、子となるパートを
       作成します。その後、子となるパートを親パート内にドラッグ&ドロップします。


▶ メニューに戻る


 §7. パラメトリック図を描いてみる

課題

次のパラメトリック図を描いてみましょう。




描き方

"PowerSubsystem Fuel Flow Definition"ブロック定義図上で"PowerSubsystem"ブロックのポップアップメニューから、【パラメトリック図の追加】を選択します。パラメトリック図が追加され、その図がダイアグラムエディタで表示されます。

今まで描いてきた内部ブロックとは結構見た目が似てますね。
パラメトリック図は、制限された内部ブロック図です。そのため、パラメトリック図の作成は、内部ブロック図の作成方法と同様です。
さらに、制約プロパティを、内部ブロック図のパートと、制約パラメータをポートとを見直しながら作成できます。ただし、制約プロパティの型は、制約ブロックに制限されています。
内部ブロック図の作成を思い出してください。"fuelflow:FuelFlow"制約プロパティと全制約パラメータを描いてみましょう。

制約プロパティに制約を追加していきましょう。
制約プロパティは、型となる制約ブロックの制約を表示します。
"parametricDomain"パッケージにあるFuelFlow制約ブロックを構造ツリー上から選択します。そのプロパティビューにおける制約タブから制約を追加し、制約の編集区域に"flowrate=press/(4*injectorDemand)"を入力します。




さて、次に"ice.fi.fuelDemand"バリュープロパティを作成しましょう。
バリュープロパティのツールボタンを押し、バリュープロパティ作成モードにします。
図上をクリックすると[バリューの追加]ダイアログが表示されます。デフォルトは、"パート階層上のブロックからValueを選択する"になっています。
"Ice:InternalCombustionEngine"パートの配下を展開し、パート階層上の"fi:FuelDemand"パートの "fuelDemand:Real" を選択し、了解を押します。

"ice.fi.fuelDemand"バリュープロパティが作成できました。
他のバリュープロパティも作成してみてください。





次に、制約パラメータを追加していきましょう。
制約パラメータのツールボタンを押して、作成した[fuelflow : FuelFlow]制約プロパティをクリックすると制約パラメータを制約プロパティ上に配置できます。制約パラメータ名を"injectorDemand"に変更します。

バイディングコネクタで、バリュープロパティと制約パラメータをつないでいきましょう。
バイディングコネクタのツールボタンを押し、バイディングコネクタ作成モードにします。バイディングコネクタを作成する場合は、2箇所クリックします。
"ice.fi.fuelDemand"バリュープロパティをクリックして、"injectorDemand:Real"制約パラメータをクリックします。
"ice.fi.fuelDemand"バリュープロパティと、"injectorDemand:Real"制約パラメータをバイディングコネクタでつなぎました。"ice.fi.fuelFlowRate"バリュープロパティと、"flowrate:Real"制約パラメータをバイディングコネクタでつないでください。

▶ メニューに戻る


 §8. ユースケース図を描いてみる

課題

次のようなユースケース図を描きましょう。




描き方

ユースケース図をプロジェクトに追加します。
構造ツリー上で"parametricDomain"パッケージのポップアップメニューから、【ユースケース図の追加】を選択します。
ユースケース図が追加され、その図がダイアグラムエディタで表示されます。




アクターのボタンを押して、図上をクリックするとアクターを配置できます。
続けてアクターの名前である"Driver"と入力してEnterを押します。
6つのユースケースも同様に作成しましょう。

さて、次にアクターとユースケース間の線を引きましょう。
線にはいくつかの種類がありますが、ここでは関連です。関連のツールボタンを押し、関連作成モードにします。 関連を作成する場合は、2箇所クリックします。
"Driver"アクターをクリック後、"Park"ユースケースをクリックしてください。 関連が引けました。
同様に、他の関連を作成してください。
ユースケース間の線は包含と拡張です。関連の作成方法と同様になるので、すべての包含と拡張を作成してみてください。

▶ メニューに戻る


 §9. 要求図を描いてみる

課題

"HSUV"に関する要求とテストケースを整理しましょう。




描き方

要求図を"HSUVRequirements"パッケージに追加します。
構造ツリー上で"HSUVRequirements"パッケージのポップアップメニューから、【図の追加】-【要求図の追加】を選択します。 要求図が追加され、その図がダイアグラムエディタで表示されます。
まず矢印線以外の要求とテストケースを作成していきましょう。 作成方法は、ブロックの作成方法と同様で、それぞれのモードにして作成したい位置をクリックするだけです。

ユースケースは、要求図のツールバーから作成することができませんが、既存のユースケースを要求図にドロップ&ドロップで描画できます。
"Accelerate"ユースケースを構造ツリーから、要求図上にドラッグ&ドロップします。

同様に、ブロックも要求図のツールバーからは作成できませんが、既存のブロックを要求図にドラッグ&ドロップで描画できます。
"PowerSubsystem"ブロックを要求図上にドラッグ&ドロップします。

さて、要求間の関連を表す導出で"Acceleration"要求と"Power"要求をつなぎましょう。 導出のツールボタンを押し、導出作成モードにします。
導出を作成する場合は、2箇所クリックします。
"Power"要求をクリック後、"Acceleration"要求をクリックしてください。 導出が引けました。
同様に、他の導出や洗練、トレースを作成してください。

▶ メニューに戻る


 §10. アクティビティ図を描いてみる

課題

次のアクティビティ図を描きましょう。




描き方

"PowerSubsystem"ブロックについて処理の流れを描いてみましょう。
アクティビティ図を"PowerSubsystem"ブロックに追加します。 構造ツリー上で"PowerSubsystem"ブロックのポップアップメニューから、【図の追加】-【アクティビティ図の追加】-【新規アクティビティ図の追加】を選択します。
アクティビティ図が追加され、ダイアグラムエディタで表示されます。




アクティビティ図の名前を変更しておきましょう。
構造ツリー、又はアクティビティ図のプロパティビューから"PowerSubsystem Activities"という名前に変更します。

アクティビティ図を描いていきましょう。
アクティビティ図は、フローチャート図に近い図で動作の流れを表現しますので、分かりやすいですね。
まず全ての縦パーティションを作成していきましょう。縦パーティションのボタンを押して、図上をクリックすると縦パーティションを配置できます。
パーティションの名前を変更しておきましょう。 "pcu:PowerControlUnit"という名前にします。
次に、右側の"Ice:InternalCombustionEngine"パーティションを作成しましょう。作成方法は、 "pcu:PowerControlUnit" パーティションと同様で、"pcu:PowerControlUnit"パーティションの右側をクリックすると作成できます。
更に"epc:ElectricalPowerController"パーティションも作成してください。

ここから、矢印線以外のアクション状態とパラメータノードを作成していきましょう。
作成方法は、ブロックやユースケースと同様で、 それぞれのモードにして配置したい位置をクリックするだけです。
パラメータノードに設定するブロック(ベースブロック)は、図上で編集するかプロパティビューで編集します。

さて、次に入力ピンを作成しましょう。
作成方法は、ポートと制約パラメータの作成方法と同様で、 入力ピンツールボタンを選択して、作成したいアクション状態をクリックするだけです。

最後に、動作の流れを表す矢印で各アイテムをつないでいきましょう。
この矢印は遷移です。 接続する二箇所をクリックしますが、今度はクリックする順序が違うと向きが逆になりますから注意しましょう 。

▶ メニューに戻る


 §11. シーケンス図を描いてみる

課題

次のシーケンス図を描きましょう。




描き方

次はシーケンス図です。
"HSUV"ブロックの発進・停車操作を中心とした処理の流れを描いてみましょう。
アクティビティ図と同様で、シーケンス図も、構造ツリーにおいてユースケースの下や、ブロックの下に追加することができます。 "HSUV"ブロックのポップアップメニューを表示し、【図の追加】-【シーケンス図の追加】を選択してください。




アクティビティ図でも似たような処理の流れを描けますが、シーケンス図ではオブジェクト間のメッセージのやり取りを時系列で表現しています。

“ElectricalPowerCrontoller"ブロックを構造ツリーからドロップするとオブジェクトの名前が編集状態になります。
ここでは特にオブジェクトを区別しませんので省略しています。この場合BackSpaseキーで名前を空にしてEnterを押します。構造ツリーで複数のブロックを選択し、一度に図にドラッグすることも可能です。




次にメッセージを作成していきます。
サンプル図を見ると、フレームから"PowerControlUnit"オブジェクトへのメッセージは、非同期メッセージになっています。ツールパレットの左から4番目のボタンで、非同期メッセージ作成モードにしましょう。
後は、フレーム上をクリックし、さらに"PowerControl"のライフライン上をクリックすれば、メッセージの矢印が引かれます。
メッセージ0という名前を2回クリックして"Enable"に変更しましょう。

今度は同期メッセージです。これは、"PowerControlUnit"オブジェクトから"ElectricalPowerController"オブジェクトへメッセージを送付しています。
ツールパレットの左から3番目のボタンで同期メッセージ作成モードにしましょう。
先ほどは、フレーム上の点をクリックしてメッセージを作成しましたが、今度は活性区間上をクリックするように注意してください。
ツールパレットの左から7番目のボタンで、同期メッセージの"ready"Replyメッセージを作成しましょう。
1点目も2点目も活性区間上をクリックしましょう。

最後に相互作用の利用を作成しましょう。
相互作用の利用のツールボタンを選択して相互作用の利用の作成モードにします。
相互作用の利用となる長方形の左上の位置をマウスの左ボタンで選択し、左ボタンを放さずに "Power ControlUnit" ライフラインと "ElectricalPowerController" ライフラインを選択します。選択されたライフラインはハイライトされたはずです。
マウスの左ボタンをリリースすると、相互作用の利用が作成され、名前が編集状態になります。 "Park/ShutdownVehicle"を入力しましょう。




相互作用の利用が参照するシーケンス図を作成するには、次の三つの方法があります。

  ・方法1:図上の相互作用の利用のポートポップアップメニューにおける、
       【シーケンス図を作成する】から追加
  ・方法2:図上の相互作用の利用をダブルクリックすることで追加
  ・方法3:相互作用の利用のプロパティビューにおける参照先の新規作成ボタンから追加

▶ メニューに戻る


 §12. ステートマシン図を描いてみる

課題

SUV運転操作に関する状態を描いたステートマシン図を描きましょう。




描き方

まず矢印線以外の状態を作成していきましょう。
作成方法は、ブロックやユースケースと同様で、 それぞれのモードにして作成したい位置をクリックするだけです。

では、状態の遷移を表す矢印で各状態をつないでいきましょう。
この矢印は遷移です。 接続する二箇所をクリックしますが、今度はクリックする順序が違うと向きが逆になりますから注意します。
"start"などの名前は、遷移のトリガーにあたります。遷移の矢印をクリックして選択し、 プロパティビューで、トリガーの欄に遷移のトリガー名を入力しましょう。




▶ メニューに戻る


 §13. その他のastah*の機能

astahはこの記事で使った機能以外にも、以下の機能を持っています。今後の編集で利用してみてください。


▶ メニューに戻る


 最後に

ここでは、みなさんと一緒にUMLモデリングツール astah*SysML を使っていくつかの図を描いてきました。
astah*で基本的なSysMLダイアグラムを描くことができるようになったのではないでしょうか?
自分で手を動かすことで、あれ?どうだっけと思うこともあったのではないかと思います。
みなさんのSysMLとastah* SysMLについての理解がこの記事により、少しでも深まったなら幸いです。

最後に、astah 開発者の1人である筆者から、みなさんにお願いがあります。
astahは、ユーザのみなさんからの声を受けながら、手に馴染むツールへ向け日々改善しています。ぜひ要望やコメントなどをコミュニティサイトメールでお寄せください。

▶ メニューに戻る