読者です 読者をやめる 読者になる 読者になる

組み込みUMLでの、分析モデリングでのクラスの識別アプローチについて文献まとめ

 組み込み向けのUML解説本で、概念モデルのクラスの識別をどのように行っているか、今回まとめた。
 まとめた本は以下の本+α。組み込みUMLの技術書5冊と、組み込みではないが、クラス識別に関する名著(オブジェクトデザイン、実践UMLユースケース駆動開発実践ガイド)をピックアップした。

f:id:goyoki:20161103200548j:plain

 初学者向けの個人的な推薦図書としては、「組込みソフトウェアのためのオブジェクト指向モデリング」で入門し、「リアルタイムUML」「リアルタイムUMLワークショップ」で具体的な解説を学び、「オブジェクトデザイン」で知見を深めるのが良いと思う。

組込みソフトウェアのためのオブジェクト指向モデリング

組込みソフトウェア開発のための オブジェクト指向モデリング (組込みエンジニア教科書)

本の概要

 現時点での組み込みUMLの定番の入門書。読みやすく、要点をシンプルにまとめていて、初学者の一冊目としておすすめできる。なお入門書としては参考文献の提示がほとんどないので、他書にも触れたほうが良いと思う。

オブジェクトやクラスの識別方法

 主に責務抽出法を扱う。大まかな流れは以下の通り。これらはイテレーティブに実施してモデルを洗練させる。

  1. コンテキストダイアグラムで対象のインターフェースを明確化する。
  2. クラス候補を抽出する。
    • クラス候補を「有形物」「役割」「出来事」「相互作用」「仕様」の観点で抽出する。
    • システムの本質(要求仕様の中でも重要で基本的な機能)を抽出する。
    • 本質を構成するクラス候補をキー抽象(本質の概念モデルを構成するクラス)として抽出する。
  3. モデル化指針に従って、クラス候補をクラス図として関連付ける。
  4. 本質となるモデルを詳細化・補強して、要求仕様を実現する分析モデルを得る。また静的な分析モデルは、動解析(状態遷移モデルとコミュニケーション図の分析が主)やシナリオに対する妥当性確認を通して洗練する。

 なお本書は教科書的な解説を行っており、クラス識別のアプローチも複数解説している。責務抽出法以外にも、名詞句抽出法、図解抽出法、直感抽出法を扱っている。

オブジェクトやクラスの識別のインプット

 責務駆動設計と同じ。本質を考えるために要求仕様を再解釈しているため、要求モデルの形式に縛りはない。UML本なので一応書籍ではユースケース記述をインプットにしているが、他の要求モデル(たとえばUSDMやユーザストーリーなど)にも適用可能だと思う。

リアルタイムUML第2版

リアルタイムUML オブジェクト指向による組込みシステム開発入門 (Object Oriented Selection)

本の概要

 古くからの組み込みUMLの定番書。組み込み特有の分析の観点やパターンの解説が豊富でおすすめできる。組み込み開発で重要になるシステムモデリングアーキテクチャ設計の解説が充実しているのにも好感を持てる。
 ただ古いのが問題。差分プログラミングを肯定的に解説してるなど今となっては微妙な記述がある。UML2.0啓蒙期に書かれた本のため、UMLの記法の説明にかなり紙面を消費している。

オブジェクトやクラスの識別方法

 大まかに、名詞句抽出法でオブジェクト・クラスを識別する。RUP/UPのように、最初は重要な課題について分析し、それからイテレーティブにモデルを洗練させていく方法を取る(著者はこのやり方をHarmonyという独自のUML活用プロセスとして提唱している)。
 オブジェクトの識別では、名詞句抽出法を使う。名詞句に下線を引き「関心あるオブジェクト」「関心のないオブジェクト」「アクター」「オブジェクトの属性」でカテゴリ分けして、オブジェクト候補を抽出する。次に候補となる名詞句に対し、「要因(アクション、イベント、メッセージの出処)」「サービス」「実世界の事象」「物理デバイス」「キー概念」「トランザクション」「永続情報」「視覚的要素」「制御要素」という観点を用いて、オブジェクトを識別する。
 オブジェクトを識別したらクラスを識別する。クラスの識別では、同じ性質を持つオブジェクトを共通化する、オブジェクトを抽象化するなどしてクラスを識別する。ここでは組み込みに特化した観点を用いる。例えばRTOSならば「タスク」「RTOSカーネル」「I/Oチャンネル」などで構成した典型的なクラスモデルを参考にして、クラスを識別する。
 なお識別したクラスは、ふるまいの分析や要求モデルに対する妥当性の確認を通して洗練させる。

オブジェクトやクラスの識別のインプット

 要求モデルはユースケース、システムモデル(システムを主にクラス図とシーケンス図で表現)が中心。名詞句抽出法で分析モデリングを正しく進められるように、システムモデルと要求モデルには正しさ・具体性が求められる。

リアルタイムUMLワークショップ

リアルタイムUMLワークショップ

本の概要

 著者の提唱するUML活用プロセス、Harmony(和)プロセスの解説本である。著者が同じということもあり、前述のリアルタイムUML第2版と内容はほぼ同じ。ただ演習問題と回答の形式で解説する形式を取る。事例を使った具体的な解説をしているほか、現場実践にあたっての名詞句抽出法の制約とその対策を扱っていて、今回のテーマにとっては有用な書籍。

オブジェクトやクラスの識別方法

 リアルタイムUML第2版と同じ流れを取る。
 細かな差分として、名詞句を抽出した後のオブジェクトの抽出では「原因エージェント」「サービス」「メッセージや情報フロー」「実世界のアイテム」「物理装置」「キー概念」「トランザクション」「永続情報」「ビジュアル要素」「制御要素」の観点を用いる(ただ微妙に違うのは翻訳揺れと思われる)。
 また名詞句抽出方法の課題として、実際に現場のドキュメントに適用すると同義語が多数されるほか分析が大規模になる点をあげている。それについて、名詞句の整理や、重要なユースケースの名詞句に絞って分析しその成果を他に展開するアプローチが解説されている。

オブジェクトやクラスの識別のインプット

 リアルタイムUML第2版と基本同じだった。具体的な事例の解説を行っているため、インプットとなるシステムズモデル、サブシステムモデルをかなり詳細に作成している。それらはブラックボックスユースケース、シナリオ)、ホワイトボックス(シーケンス、内部ブロック図)の2方向で表現する。

組み込みUML eUMLによるオブジェクト指向組み込みシステム開発

組み込みUML eUMLによるオブジェクト指向組み込みシステム開発 (OOP Foundations)

本の概要

 UMLを活用するプラクティスを体系化したeUMLという開発方法を解説している。メーカーの本棚には大抵置いてあるのでこれも定番書と言って良いかもしれない。概念的な解説というより、プロセス定義を解説しているような内容。管理、デバッグまで含めたアクティビティを広く浅く扱っている。

オブジェクトやクラスの識別方法

 分析モデルは、事前に分類したアプリケーションドメインユースケースから作成する。
 おおかかに、本書も重要な対象のモデリングを行って、イテレーティブに洗練させていく方針を取る。ただ具体的なクラス識別の方法を指定していない。参考例として、クラスカテゴリを観点に抽出する方法が解説されている。クラスカテゴリは「制御の対象となるもの(デバイス、温度など現実世界の対象物)」「業務知識(工程、データテーブルなど業務に関する情報)」からなるエンティティ、といったカテゴリ。
 またクラスを抽出した後の、クラスの詳細化や関連付けにデータモデリングを活用している。そこでは将来的な変更も加味した業務データを正規化し、そのデータモデルを概念モデルに展開している。

オブジェクトやクラスの識別のインプットにするもの

 ユースケースユースケースの補助(状態遷移モデル等)、アーキテクチャ要求をインプットとする。
 また事前にドメイン構造を作成する。ドメイン構造は、共通のルールやデータを使用する問題領域ごとに、ユースケースを分類したもの。ドメイン構造の大まかな分類として、アプリケーション、ユーザーインターフェース、メカニズム、デバイスの4つを上げている。これらは機能数や複雑さに応じて分割されていく。ドメイン構造はパッケージ図で表現する。
 アプリケーションのドメインが明確化されていれば、インプットの形式に制約は少ないと思われる。

UML動的モデルによる組み込み開発

UML動的モデルによる組み込み開発 分析・設計・実装・テスト

本の概要

 主に状態遷移モデルを使ったモデル駆動開発の解説書。本書はPLCやLSIといったソフトから離れた話も触れており、純粋なソフトウェアのモデリングの解説は限定的。UMLを使った分析モデルについても触れているのと、オブジェクトの識別で他とは少し違ったUML活用方法を取っているためピックアップした。

オブジェクトやクラスの識別方法

 UMLを使ったモデリングの手法は、eUMLを参照している。説明もeUMLを踏襲したものになっている。
 なお無線制御ソフトウェアの事例解説での分析モデリングのやり方が独特。ユースケース図でオブジェクトを導き出している。
 具体的には、構造化設計手法でDFDの代わりにユースケース図をかく方法を取っている。最初にコンテキストダイアグラムをユースケース図で書く。そしてユースケース内には、内部のデータフローをユースケースで記述する(includeやextedのような関係でなくデータフローのようにユースケースを記述)。構造化設計と同じようにユースケースを適切な粒度まで詳細化して、ユースケースをオブジェクトとする。

オブジェクトやクラスの識別のインプットにするもの

 eUMLと同じく、特に要求モデルに制約はないと思われる。無線制御の例ではユースケース図を前提にしているが、コンテキストダイアグラムでも問題ないと思う。
 なお本書は状態遷移のモデル駆動開発をテーマにしていることから、要求分析からステートマシン図を重視しているけれど、今回のテーマから外れるので触れていない。

オブジェクトデザイン

オブジェクトデザイン (Object Oriented SELECTION)

本の概要

 組み込み以外のおまけその1。組み込みの本ではないが、オブジェクトやクラスの識別についてかなり有名な名著なので今回紹介する。責務駆動設計のバイブル的書籍。今回のテーマについて学ぶなら必読だと思う。

オブジェクトやクラスの識別方法

 本書の代名詞ともいえる責務駆動設計を使う。大まかな流れは以下の通り。

  1. 重要な要求をストーリで表現する。その分析を幹に分析モデルを洗練させていく。重要な要求はアプリケーションの中心的な関心事や、開発の重大な課題となるコア設計である。
  2. ストーリから、分析のテーマを抽出する。
  3. そのテーマを実現するためのロール、責務を分析し、オブジェクトを発見する。ロールや責務の分析では、ロールのステレオタイプという典型的なロールのパターンや、責務のパターンを観点に、オブジェクトのロールや責務を考えていく。とっかかりには「システムが行う作業」「ソフトウェアが直接影響するもの」「ソフトウェア内を流れる情報」「判断、制御、調整アクティビティ」「オブジェクトの構造のグループ」「実世界の物事を表現するもの」といった観点をテーマに適用して分析候補を洗い出す解説が行われている。
オブジェクトやクラスの識別のインプットにするもの

 本書のやり方では、モデル分析しやすいように、一旦要求をストーリに再構築するので、要求モデルに制約はない。ユースケースでも、それ以外の方法でも問題ないと思う。ストーリ形式を用いていることから、ユーザストーリで整理されているとやりやすいかもしれない。別に、アプリケーションの中心的な関心事や、開発上の制約が分かる情報(計画書など)が要求される。

実践UML第3版

実践UML 第3版 オブジェクト指向分析設計と反復型開発入門

本の概要

 組み込み以外のおまけその2。責務駆動設計の一種であるGRASPのバイブル的な著作。書名はUML入門書のような印象だけれど、中身はガチのUP(ユニファイドプロセス)の解説書。今回のテーマについて学ぶならおすすめできる。ただ有名なGRASPは設計モデル向けの話なので使うので、今回は扱わない。

オブジェクトやクラスの識別方法

 問題領域モデルのクラス抽出方法として、既存モデルの再利用、カテゴリリストの使用、名詞句識別の3つを取り上げている
 「カテゴリリストの使用」では、クラスの候補リスト(分析の観点の一種)を用意し、それを要求に適用してクラスを識別する。候補リストとしては、ウェブの例として「ビジネス取引」「取引の明細」「取引が記録される場所」「物理的なオブジェクト」「協調する他のシステム」などからなるリストを紹介している。
 名詞句識別は、他書の名詞句抽出法と同じである。

オブジェクトやクラスの識別のインプットにするもの

 UPの解説なので、インプットはUPの形式であることが求められる。UPではユースケース記述が主なインプットになる。他にユースケース図、アクティビティ図、用語集等で要求を表現する。

ユースケース駆動開発実践ガイド

ユースケース駆動開発実践ガイド

本の概要

 組み込み以外のおまけその3。ICONIXロバストネス分析バイブル的著作。設計モデリングでのオブジェクト・クラスの識別に関して著名な本。なお有名なロバストネス分析は設計モデリングの話なので今回は触れない。

オブジェクトやクラスの識別方法

 他と同じく、反復的にモデルを洗練させるアプローチを取る。概念モデルを作るタイミングは、ユースケース記述の前。
 ICONIXでの概念モデルの扱いはかなりさっぱりしている。ユースケース記述、ロバストネス分析のための語彙を整理・明示するために作成する。使用する語彙が書かれていればよく、最初は、多重度、操作、属性の記述はやめるように解説されているほか、抜け漏れも許容される(後のユースケース記述、ロバストネス分析の中で加筆していく)。大まかな作成の流れは以下の通り。

  1. 要求モデリングで使用する名詞、名詞句を抽出する。
  2. 名詞・名詞句を整理する。同じものをまとめる、適切な命名をする、抽象度・具体度を揃える、不要なものを除くなど。
  3. ざっとクラス図でまとめる。
オブジェクトやクラスの識別のインプットにするもの

 概念モデルはユースケース記述を行う前から作る。そのためインプットには、ユースケースを作る前のより上流の要求も用いる。
 なおICONIXの概念モデルの記述はゆるいので、インプットも縛りはなく自由度がある。

大まかなまとめ

 古い本は名詞句抽出法、新しい本は責務抽出法をつかってクラスを識別している。
 識別では、組み込みに合せた分析の観点や、標準的なクラスモデル、責務パターンを用いている。
 識別のインプットは、責務抽出法では特に制約がない。名詞句抽出法ではシステムモデルや要求モデルに正しさ・完成度をもとめる。