そもそもシステムって何? ~ SysMLってこんなもの(その1)

2022年12月1日

私はソフトウェア開発に一切関わったことがない、コーディングをしたこともない、もちろんSysMLの元になったUMLもオブジェクト指向も知らない。そういう超素人目線で「SysMLとは何か」を説明しようと思う。

Web検索や本を見るとSysMLをサラッと説明してあるのだが、わかるようでよくわからない。何やら難しい専門用語で煙に巻かれただけのような気がする・・・という人向けの記事です、これは。

まずはよく見かけるSysMLの説明文を並べてみる

  • システムを記述するためのモデリング言語である。
  • 軍事、医療、自動車、航空宇宙、通信分野などで幅広く活用されている。
  • UML(統一モデリング言語)の流れを汲む、オブジェクト指向の言語である。
  • モデルベースエンジニアリング/モデルベースシステムエンジニアリングで使われる。
  • OMG(コンピュータ関連の標準化コンソーシアム)が策定。オープンソースである。
  • グラフィカルなダイアグラムでシステムを記述し・・・・
  • 構造、振舞い、要求、パラメトリックの4本柱

だいたいこんなところでしょうか。「~である」と断言されても何のことだかわからない。ここではこれらの言葉たちを素人目線でかみくだき、SysMLとは何かを考えていこうと思います。

説明文を説明してみよう(1)

「SysMLはシステムを記述するためのモデリング言語である」‥‥そもそもシステムって?モデルって何?って話ですよ。まずシステムから。

システムって何?

全体は部分の総和以上 The whole is greater than the sum of its parts. ~アリストテレス

構成要素を集めた総和以上の何かを「システム」といいます。では総和以上の「以上」って何?答えは簡単、要素と要素の「つながり」「関係性」です。システムとは構成要素と、それらのつながりと考えればよろしい、やや乱暴な表現ですが。だから同じ要素の集まりであっても、つなげ方が違うとそれは違うシステムです。システムを表すときによく使われるのが数学でいうところの「グラフ」というやつです(下図)。要素をノードで、つながりをエッジで表現しています。で、SysML言語とそのツールは「システムを表すグラフ」を作るためのもの、と思えばよろしい、やや乱暴な表現ですが。

システムの要素はなんらかの形で他の要素とつながり、影響しあっています。そのため、ある要素に「刺激」を与えてそれが「反応」すると、その反応が刺激となってつながっている別の要素が反応し、同じようにつながっている要素につながっている要素も、つながっている要素につながっている要素につながっている要素も、つながっている(以下略)も反応し、その結果システム全体が刺激に対して反応することになります。

要素とそのつなぎ方(すなわちシステム)によって様々な「刺激」と「反応」の連鎖パターンを作ることができます。個々の要素の刺激と反応の関係は単純でも、それらを連鎖させれば様々な、複雑な反応を生み出せます。例えば埃単品では「風が吹く」と「舞う」だけですが、他のものと組み合わせると「風が吹く」→「桶屋が儲かる」という複雑な反応を作り出すことができます。これがシステムの強力なところ。

でもシステムは複雑ですから、人々の役に立つ、希望通りの反応を作りだそうと思うとシステムの構成要素を選んだりつなぎ方を考えたり、多くの試行錯誤が必要です。この試行錯誤のことをシステムデザインといい、システムデザインのためにはシステムを表現できるSysML言語が必要になる、という訳です。

モデルって何?

一口に「モデル」といっても色々あります、ファッションモデル、プラモデル、シミュレーションモデル、数理モデル、ビジネスモデル…。同じものを対象にしても、いろんなモデルが考えられます。例えば「人体モデル」、下図のように色々なものがあります。

見た目は千差万別ですが、どれも「人体モデル」です。じゃあ「モデル」と呼ばれるものの共通点は何か?

  1. 「本物」ではないけど本物と似ている/相似形をしている。
  2. 特定の視点(目的や関心事)から見た対象の姿である。
  3. 視点から外れているものは省略されている。

視点が変わればものの見え方が変わる、モデルも同じ。人体モデルの例で説明すると、(a)は人の姿形の美しさ、(b)は体の組織の種類とその形、(c)は力学的な運動、(d)はマインクラフト、(e)は体のもつ機能が関心事で、それぞれの関心事に沿って人体を表現しています。また視点に死角があるように、モデルでも関心事から外れていることは省略されます。それが端的に表れているのが(c)と(e)で、同じ人体のモデルなのに(c)のモデルに(e)の要素は出てこないし、(e)に(c)の要素もありません。また(c)と(d)のように目的によって省略の度合いが変わるというケースもあります。

こんな説明も思いついた。恋人探しでAさんは年収、Bさんは顔、Cさんは性格を見て選ぶ、他のことは気にしない。Aさんの恋人モデルは年収の数値で、Bさんの恋人モデルは顔写真、Cさんは恋人モデルは性格診断です。このようにモデルというものは偏った視点で作られ、単純化されたものなのです。

「SysMLはエンジニアリングの世界で使われるんだから、モデルといえばシミュレーションモデルのことでしょ?」という先入観を持っている人もいるかもしれません。しかしSysMLのモデルはシミュレーションモデルに限りません。もっと広範囲な意味です。先に書いた「システムを表現したグラフ(例えば人体モデル(c),(d),(e))」は全てモデルです。色んな視点から描いたシステムのグラフ、およびそれらを統合したもの(三面図に対する立体模型のようなもの)がSysMLで言う「モデル」です。ちょっと話を先回りしますがSysMLの「四本柱」(構造、振舞い、要求、パラメトリック)も、要はモデルの「視点」のことなのです(これもやや乱暴な表現ですが)。

ここまでのまとめ、そして続きはまた気が向いたときに

長くなったので今回はこれで終わり。今回のまとめは以下のとおり

  • SysMLは要素とそのつながりを描いたグラフでシステムを表現する
  • 「モデル」はある視点(関心事)からみたシステムの姿で、関心のない要素は省略されている
  • SysMLでのモデルとは、システムを表現したグラフおよびその集合体のことである

次は「『オブジェクト指向』って何?」の予定。