LoginSignup
15
20

More than 5 years have passed since last update.

PlantUMLでSysMLの要求図を描いてみる

Last updated at Posted at 2017-06-15

SysMLとは

巷ではIoTが叫ばれていますが、複数のシステムが複雑に連携するサービスが増えるにつれ、ソフトウェアだけではなく、システムをモデリングできる言語が必要とされ、開発されました。

要求図とは

世の中には、要求を階層的に記述する手法として、USDM(Universal Specification Describing Manner)1などが開発されているが、SysMLの要求図もその一種で、ダイアグラムを使って記述する方法です。

今回の趣旨

SysMLを記述するツールとしては、EnterpriseArchitectastah*SysMLなどが代表的ですが、個人で購入するには敷居が高いのが正直なところ。eclipse上でモデリングできるソフトもいくつかありますが、どうも学習用には取っつきにくい印象があります。そこで、テキストに記述した内容からUMLのダイアグラムを気軽に生成できるPlantUMLを使用して、要求図のモデリングが可能か試してみたいと思います。

題材

いきなり仮想の要求図を描いてもいいのですが、ツールの実力を試すために、すでに何かしらのSysMLモデリングツールを使用して作成された題材を使い、その再現性を確認してみようと思います。今回選んだのは、オージス総研さんのウェブサイトにあった記事の中の図5の要求図を選びました。

モデリング結果

req.png

再現性の確認

ダイアグラムとしては、もともと要求図はクラス図をベースに開発されているので、大きな差異は出なかったです。SysMLの要求図を試しに描いてみたい人には十分ではないでしょうか。

再現できなかった点

  • 同じ要求名のブロック作成ができない。
  • レイアウトの再現性

PlantUMLはクラス名で個々のブロックを識別しているので、題材のように「利用部品」という同じ名称の要求を別のブロックとして取り扱うことができませんでした。仕方なく「利用部品1」というように連番で名称を変えました。
キーワード as を使用することで、同じクラス名でも定義名を分けることで、同じ名称の「利用部品」という要求を複数作成することが可能となりました。

レイアウトに関しては、かなり近いところまでは再現できたとは思いますが、PlantUMLは、レイアウトの制御は最低限なので、関連に対するノートは、「なぜそこに入れる!」と言いたくなる位置です。

まとめ

SysMLの要求図を学習したり、スケッチしたりする目的には、PlantUMLは十分利用できるといえるのではないでしょうか。
次は、他のダイアグラムについても検証してみたいと思います。

おまけ

作図に使用したソースコードです。

rq.pu
@startuml

hide circle
hide empty members
hide method

!define REQ1 "主要求"
!define REQ2 "実現可能性"
!define REQ3 "コスト"
!define REQ4 "利用部品"
!define REQ5 "利用部品"
!define REQ6 "利用部品"
!define REQ7 "手段"

!definelong req(name,txt,label)
class "name" as label <<requirement>> {
Text=txt
}
!enddefinelong

!definelong freq(name,txt,label)
class "name" as label <<functionalRequirement>> {
Text=txt
}
!enddefinelong

!definelong dcnstr(name,txt,label)
class "name" as label <<designConstraint>> {
Text=txt
}
!enddefinelong

!define nest(x,y) x +-- y
!define derive(x,y) x <.. y : <<deriveReqt>>
!define refine(x,y) x <.. y : <<refine>>
!define derivel(x,y) x <.. y : <<deriveReqt>> link


title 図5 サービスレベル要求図

package "req サービス要求" <<Frame>> {
    req(REQ1,システムエンジニアリングを経験する,A1)
    freq(REQ2,ハードウェアを含めて実現可能である,A2)
    dcnstr(REQ3,なるべくコストをかけない,A3)
    dcnstr(REQ4,使える既存システムは流用する,A4)
    dcnstr(REQ5,CPLDを利用する,A5)
    dcnstr(REQ6,既存の電光掲示板システムを流用する,A6)
    req(REQ7,電光掲示板をCPLD駆動に変更する,A7)
    note "allocatedFrom\n<<useCase>>システムエンジニアリングを経験する" as N2
}

nest(A1,A2)
nest(A1,A3)
nest(A1,A4)

derive(A2,A5)
note top on link : <<rationale>>\nCPLDならハードウェア\n回路の変更が容易
derive(A3,A5)
derive(A3,A6)
derive(A4,A6)
derive(A5,A7)
derive(A6,A7)

refine(A1,A7)

N2 .. A1

@enduml

  1. (株)システムクリエイツの清水 吉男 氏が提唱する表記法 

15
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
20