これは
放送大学大学院文化科学研究科の「ソフトウェア工学」という授業で使われる「ソフトウェア工学」という教材書籍を自分なりにまとめたものです.
第 6 章「モデル化技法と UML」では...
- モデル化の目的
- 開発するシステムのイメージをつかむ
- 動作確認と特性の分析
- システム開発のベースとする
- モデル化で重要なのは, 「対象の抽象化」であり, 関心の無い側面は捨象する
- モデル化はグラフや UML, 形式モデルによって行う
- モデルは模擬実行やモデル検査を行う
等, 主にモデル化とその手法 (グラフ, UML, 形式モデル) 及びそれらの検証方法の概要について学んだ.
尚, 本まとめについては, 以下の Github リポジトリで管理しており, 加筆修正はリポジトリのみ行います.
7. モデル化技法と UML
はじめに
- ソフトウェア工学全般にわたって, モデルという概念とモデル化の技法は重要である
- 6 章ではモデルに共通する特徴とモデル化の基本的な考え方を整理し, ソフトウェアにおけるモデルの役割を明確化する
1. ソフトウェアのモデル
(1) モデルとは
- モデルの目的は大きく二つ
- 工学的なモデル (風洞実験に使って空気特性を確認するため等に作られる)
- 外から見たデザインを検討する為のモデル
- ソフトウェアのモデル
- 現在は存在しないこれから作るソフトウェアについて, 構造や動作をある観点から抽象化したもの
- このモデルに基いて目標となるソフトウェアを開発する
- 共通する特徴
- 本物ではない
- 視覚的である
(2) モデルを作成する目的
モデル作成の目的は以下の通り.
- 開発するシステムのイメージを掴み, その利便性を検討し, また問題点を発見する
- システムの動作確認, システムの持つ特性を分析する
- モデルをシステムの骨組みとみなして, それを詳細化し具体化したシステムを設計し開発する為のベースとする
モデルを作ることは, 対象の抽象化であり, 裏を返すと関心のない側面を捨象 (しゃしょう) するものである.
(3) さまざまなモデル
- モデル化はこれから作るシステムだけを対象するとは限らない
- 現存のソフトウェアを逆に抽象化してモデルとして表現し, 分析の対象とすることもある
- 環境 (問題領域) のモデル化
- システムのモデルと並行して作ることもある
- これらの相互作用も両方のモデル内に組み入れる必要がある
2. モデル記述
(1) グラフ表現
- モデルを記述する言語
- 文字と図が使われる
- 図式表現が好まれる
- グラフ表現 (頂点の集合と頂点間を結ぶ辺の集合からなる位相幾何学的なグラフを意味する)
- グラフ表現は日常的に新聞, 雑誌, テレビや報告書等で利用されている
- グラフ表現の注意点
- 頂点があらわすもの, 辺が表すものが, それぞれ一貫性をもつこと
- 多くの記号・図形を用いて頂点や辺を区別することは問題
- モデル化の失敗を示唆している
- フローチャート
- 制御を表す
- データの流れを表すデータフロー図
- オートマトンの状態遷移図
- 静的なモデル
- 頂点 A と B を結ぶ辺が A と B との関係を表す
- 辺が無向の場合には「A と B が関係がある」, 有向の場合には「A は B とある関係をもつ」ことを示す
- ER モデル, クラス図, 意味ネットワーク
- 動的なモデル
- 頂点 A から B への辺が A から B への何らかの異動を表す
- 辺は有効
- 制御の流れやデータの流れを表現する
(2) UML
- UML (Unified Modeling Language)
- Booch, Rumbaugh, Jacobson らによって 1995 年に提案された
- 統一手法
- 1997 年 11 月に UML 1.1
- 2005 年 7 月に UML 2.0
- 最新版は UML 2.4.1 (2012 年末現在)
- テキストよりも図式を中心とした記法を定めたもの
以下のような 3 つのカテゴリに分類された 13 種類の図表現が定義されている.
上記の中から代表的な図の構造をグラフ表現としてみると, 以下のように整理出来る.
頂点 | 辺 | |
---|---|---|
クラス図 | クラス | 汎化, 集約, 関連 |
状態機械図 | 状態 | 遷移 |
活動図 | 動作 | 制御の流れ |
通信図 | オブジェクト | メッセージの流れ |
系列図 | メッセージ受発信の時点 | メッセージの流れ |
- UML を使うための全般的な注意点
- 全ての図を使う必要は無い
- 例えば, クラス図を書く場合に, クラス図で用いることが出来る全ての構成用を使う必要は無い
- 選択の判断は開発組織で統一し標準化すべき
- グラフ構造という共通の形式をもっている為, 各図の差異を十分に認識して使用すべき
- 全ての図を使う必要は無い
(3) 形式モデル
- UML モデルはモデルの意味が曖昧だという批判がある
- 最も厳密性の高いモデル記法の方法
以下, Event-B による「橋の信号制御」のモデル化について.
constant: d axiom0_1: d ∈ N variables: a, b, c inv1_1: a ∈ N inv1_2: b ∈ N inv1_3: c ∈ N inv1_4: a + b + c ≦ d inv1_5: a = 0 V b = 0
「橋の信号制御」問題の状態空間は以下の定数と変数で定められる.
- d は定数
- 橋と島にある車の台数上限
- a, b, c は変数
- a は橋の上にあって本土から島に向かう車の台数
- b は島の上にある車の台数
- c は橋の上にあって島から本土に向かう車の台数
- inv は不変条件
- この状態空間で常に成り立つべき性質を表す
- N は自然数の集合
- inv1_5 で橋が一方通行であることが形式的に定められている
1 台の車が本土を出て橋に入る事象 ML_out は, Event-B では次のように定義出来る.
ML_out when a + b < d c = 0 then a: = a + 1 end
他の事象も同様に定義出来る.
3. モデル分析とモデル変換
- モデルを作る大きな目的
- モデル上で種々の分析を行い, これから開発するシステムのもつべき性質を確かめ, 信頼性を向上させること
(1) 模擬実行
- 操作的な意味が与えられているモデルでは, それを模擬的に実行して, 実際のシステムの挙動に関する知見を得ることが出来る
- 動画機能
- 状態遷移モデルを扱うツールに備わっている, ユーザーが事象を指定することにより, 模擬的な実行を可能とする機能
(2) モデル検査
- モデルが与えられた性質をみたすかどうかを自動的に検証する方法
- 状態遷移モデルを仮定し, 性質は時相理論 (temporal logic) で表すことが一般的
- 時相理論 (temporal logic)
- 時相理論を用いると以下のような性質を記述することが出来る
- 安全性
- 望ましくない状況がどんな遷移経路をたどっても決しておこらないという性質
- 活性
- 望ましい状況がいつか必ず実現するという性質
- 安全性
- 自動的に実行するアルゴリズムは工夫されており, アルゴリズムを具体化したツールが公開されている
- SPIN
- NuSMV
- Uppaal
- モデル検査の特徴
- モデルと性質を与えれば, 検査は自動的に行われる
- 検査に失敗した時 (モデルが所定の性質を満たさないと判定された場合), その反例が提示される
(3) モデル洗練と正しさの証明
- モデル検査対象となる性質をどう与えるかには任意性があり, ユーザーのセンスに任される...
- 性質は対象となるシステムの仕様から導かれるので, おのずと適切なものが定まる...
- モデルが開発すべきシステムを完全に表現したものであるかどうかについては疑問の余地が残る
- 形式モデルの手法であれば, 仕様とモデルの整合性を満たすことは数学的な手法で証明されているので, より高い信頼性が得られる
- 定理証明系の問題点
- モデル検査系と異なり, 全自動というわけには必ずしもいかない
- 証明プロセスに人が介在して, 対話的に証明を進行させなければならないケースがある
(4) モデル駆動開発とモデル変換
- モデル駆動アーキテクチャ MDA (Model Driven Architecture)
- メタモデル階層
- MDA で強調される概念の 1 つ
- モデルの集合に対してそれを規定するより抽象化されたモデルのモデルを提供
- モデル層に対して 1 レベル上位層を形成する
- MDE (Model Driven Enginnering)
- モデル変換の対象は DSL だけではない