アーキテクチャ記述言語

アーキテクチャ記述言語(ADL)とは



アーキテクチャ記述言語(Architecture Description Language、ADL)は、ソフトウェアやシステムのアーキテクチャを記述するための形式的な言語または概念モデルです。ADLは、開発者間でのアーキテクチャに関するコミュニケーション、開発者と発注者間での認識共有、およびエンタープライズモデリングなど、様々な場面で利用されます。

ソフトウェア工学の分野では、Acme、AADL、C2、Darwin、Wrightなどが代表的なADLとして知られています。一方、事業体モデリングの分野では、ArchiMate、DEMO、ABACUSといったエンタープライズレベルのアーキテクチャ記述言語が開発されています。これらの言語は、必ずしもソフトウェアコンポーネントを記述するものではありませんが、アプリケーションのアーキテクチャをソフトウェア技術者に伝える役割を果たします。

この記事では、主にソフトウェア工学におけるADLに焦点を当てて解説します。

ADLの概要



アーキテクチャを記述するための標準的な記法(ADL)が存在することで、開発者間のコミュニケーションが円滑になり、初期段階での設計決定を具体化する際の作業が効率的に進められます。また、ADLで記述されたアーキテクチャは、遠隔地にいる関係者とも共有することが可能です。

従来、アーキテクチャは、コンポーネントを四角形で表現し、それらを線で接続した図として示されることが一般的でした。しかし、このような図では、コンポーネントの役割や特徴、コンポーネント間の関係、システム全体の動作などを十分に表現することが困難でした。ADLは、アーキテクチャを形式的に表現するための言語であり、従来の図による表現の欠点を補完します。また、洗練されたADLは、アーキテクチャにおける設計上の決定を早期に分析し、その実現可能性を評価する上で重要な役割を果たします。

ADLの歴史



ADLは、大きく分けて以下の3つのカテゴリに分類できます。

1. 箱と線で描く図: これは、最も基本的な形式であり、コンポーネントを箱で、それらの関係を線で表現するものです。
2. 形式的な言語: こちらは、より厳密な構文と意味論を持つ言語であり、システムのアーキテクチャを明確かつ詳細に記述するために用いられます。
3. UMLベースの記法: UML(Unified Modeling Language)をベースとした記法であり、ソフトウェアアーキテクチャのモデリングにUMLを活用するものです。

当初、システムアーキテクチャの記述には「箱と線」が主に用いられていましたが、これは非形式的であるため、アーキテクチャの説明としての有効性は限定的でした。そのため、より厳密なアーキテクチャ記述法が求められるようになりました。また、仕様書は単に明確で正確な文書であるだけでなく、自動的な分析が可能で潜在的な問題を検出できるものであることが理想とされました。

その後、システムアーキテクチャ記述のための形式言語の研究が進められ、様々な概念要素、文法、意味論を持つADLが提案されました。これらのADLには、特定の分野に特化したものや、特定の分析手法に対応したものなどがありました。例えば、組み込みシステムやリアルタイムシステム向け(AADL、EAST-ADL、EADL)、制御ループ向け(DiaSpec)、製造ライン向け(Koala)、動的システム向け(Π-ADL)などがあります。また、可用性、信頼性、セキュリティ、リソース消費、データ品質、リアルタイム性能分析を考慮したADLも提案されています。

しかし、これらの成果は産業界では広く採用されていません。その理由として、形式的ADLはソフトウェア開発にあまり採用されておらず、主要なツールでもサポートされていないことが挙げられます。また、ADLは一般に解説書が少なく、特定分野に特化しており、新機能を追加する余地がないという課題もあります。

このような既存のADLの限界を打破する代替手法として、UMLが有力な選択肢となっています。UMLを使用または拡張してソフトウェアアーキテクチャをモデリングする方法が多数提案されています。最近の研究では、ソフトウェア開発者は使用するADLの設計面の機能については満足しているものの、分析面の機能や機能以外の特性を定義する能力については不満を持っていることが明らかになっています。

ADLの特徴



ADLは、単なる記述言語にとどまらず、アーキテクチャの表現と分析の両方に対応しているものが多く存在します。ADLは、ソリューションを記述するための言語であり、問題を記述するための要求仕様記述言語ではありません。また、ADLは抽象化されたアーキテクチャを特定の解法に結び付けるものではないため、プログラミング言語とも異なります。ADLはコンポーネントを表現するものであり、システム全体の振る舞いを記述するモデリング言語とも異なります。ただし、ドメイン固有モデリング(DSM)の言語は、コンポーネントの表現に焦点を当てています。

ADLが最低限備えるべき特徴は以下の通りです。

システムの関係者全員がアーキテクチャについてやり取りするのに適していること
アーキテクチャの作成、修正、検証に必要な機能を備えていること
後の実装に必要な情報を提供できること(設計段階でADL記述を追記することで、最終的なシステム仕様を作成できる)
一般的なアーキテクチャのスタイルを表現できること
分析機能を備えるか、プロトタイプ実装を簡単に生成できること

ADLは、一般に形式的に定義された文法と意味を備えたグラフィカルな構文にテキストを埋め込む形式を取ります。また、分散システムをモデル化する機能や、設計情報を扱う機能は少ないですが、汎用の注釈を埋め込む機能を備えているものが多いです。さらに、詳細さの階層構造を表現できるものや、アーキテクチャレベルでデッドラインやタスクの優先度といったリアルタイム性に関する記述ができるものもあります。オブジェクト指向設計的なスタイル(継承など)をサポートするものや、1つのアーキテクチャ記述から製品ラインの定義に従って複数の実体化をサポートするものもあります。

ADLの長所と短所



長所:

アーキテクチャを形式的に表現できる
人間もマシンも読むことができる
従来の手法よりも高い抽象レベルでシステムを記述できる
アーキテクチャを分析できる(完全性、一貫性、曖昧性、性能)
ソフトウェアの自動生成に対応できる

短所:

UMLのような汎用的なものを除き、国際的な標準規格がない
現状のADLの構文解析は複雑であり、商用ツールでの対応が限定的
研究レベルに留まっており、商業的に広く使われるには至っていない
特定の分析に特化して最適化されているものがほとんどである

ADLにおけるアーキテクチャの概念



ADLにおいては、ソフトウェアアーキテクチャはコンポーネント群とそれらの関係を指すのが一般的です。しかし、アーキテクチャには以下のような見方もあります。

オブジェクト連携アーキテクチャ: オブジェクト指向システムのインタフェースと連携から構成されます。インタフェースはモジュール群が提供する機能を意味し、連携はインタフェース間の呼び出し関係を指します。さらにプログラミング言語への適合などが付随します。
インタフェース連携アーキテクチャ: インタフェースと連携の役割を拡張したものです。インタフェースとしてはコンポーネントが必要とする(他のコンポーネントの)インタフェースと、そのコンポーネントが(他のコンポーネントに)提供するインタフェースを記述します。連携はその両方のインタフェースの間で成立する関係です。さらに各種制限が付与されます。

多くのADLは、後者のインタフェース連携アーキテクチャを実装しています。

アーキテクチャと設計



アーキテクチャと設計という用語の違いは、アーキテクチャが機能以外の決定と機能的要求仕様の区分に関わるのに対し、設計は機能要求仕様を具体化する作業全体を指す点です。アーキテクチャ上のヒューリスティックは一段階下のレベルで行う必要があるため、アーキテクトは区分を有効にするために概要レベルの設計にも関与する必要があります。

具体例



以下に、ADLの具体例をいくつか示します。

ACME (CMU)
ADML
Rapide (スタンフォード大学)
Wright (CMU)
ByADL (Build Your ADL) (ラクイラ大学)
Unicon (CMU)
LePUS3 and Class-Z (エセックス大学)
ABACUS (UTS)
Aesop (CMU)
AADL (SAE)
C2 SADL (UCI)
Dually: Providing Architectural Languages and Tools Interoperability through Model Transformation Technologies
ArchC
AO-ADL
ArchiMate
DAOP-ADL
xADL

アーキテクチャ手法



アーキテクチャ手法は、学術的手法と産業的手法の2つに大別されます。

学術的手法:

アーキテクチャモデルの解析評価が中心
個別にモデル化
厳密なモデル記述
強力な解析技法
幅よりも深さ優先
問題毎の解法

産業的手法:

開発上の各種問題の解決が中心
モデルのファミリ化
厳密さよりも実用性
開発する上での大雑把な図面としてのアーキテクチャ
深さよりも幅優先
* 汎用的解法

まとめ



アーキテクチャ記述言語(ADL)は、ソフトウェアやシステムの構造を形式的に記述するための重要なツールです。ADLを使用することで、開発者間のコミュニケーションが円滑になり、設計の初期段階における意思決定を効率的に行うことができます。しかし、ADLにはまだ課題も多く、さらなる発展が期待されます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。