torutkのブログ

ソフトウェア・エンジニアのブログ

ソフトウェア・アーキテクチャの定義

@ITの連載記事"The Rational Edge"シリーズの最新記事「ソフトウェアアーキテクチャって何なの?(前編)」が掲載されています。その最初の一文

こと「アーキテクチャ」に関しては十分定義され尽くしている

を読んで、えっ、そうだったの?と驚愕しました。記事を読み進めてみると、定義され尽くしているというわけではないのですが、アーキテクチャとは何かについて整理されている記事は稀少なので少し追ってみます。

この記事では、IEEE 1472.1 "Recommended Practice for Architectural Description of Software-Intensive Systems"におけるアーキテクチャの定義を紹介しています。"Software-Intensive"ということは、ハードウェアが含まれているが、主要な機能をソフトウェアが実現しているシステムが対象となるので、業務系だけでなく、制御系やある範囲の組み込み系システムにも適用できると思います。

孫引きになりますが、上記記事で引用しているアーキテクチャの定義に関するIEEE1471の文面を引用します。

アーキテクチャとは、「コンポーネント」、コンポーネント間および「環境」との「関係」、またその設計と進化の指針となる原理に体現された「システム」の基本「構造」である

修飾語句を取り除くと、「アーキテクチャとはシステムの基本構造である」となります。
同記事より、システムの定義に関するIEEE1471の文面を引用します。

「システム」は、特定の機能もしくは機能セット実現のために組織化されたコンポーネントの集合である。システムという用語には、個々のアプリケーション、従来の意味である体系、サブシステム、システムのシステム、製品ラインアップ、製品ファミリー、企業全体、そのほかあらゆる関心事が含まれている。システムは、それがある環境における1つ以上の「ミッション」を遂行するために存在する

修飾語句を取り除くと、「システムはコンポーネントの集合である」となります。
コンポーネントの定義については、同記事では

アーキテクチャの大半の定義では「コンポーネント」という用語が定義されておらず、業界で多くの解釈ができるよう、これを故意にあいまいなままにしており、IEEE 1471もその例外ではない。

と記述しており、コンポーネントの定義については現状不十分であるとのことです。記事では、ここからコンポーネントの定義についてはUML2.0を引用しています。

コンポーネントとは]システムのモジュール部分で、その内容はカプセル化されていて、実現形が環境内で代替可能なものである。コンポーネントは、提供された必須インターフェイスの観点からその動作を定義する。そのようなことから、コンポーネントはこれらの提供された必須インターフェイス(静的意味論と動的意味論の両方を含む)によって整合性が定義される1つのタイプであることが多い。

UML2.0の定義でも、抽象的でぼかされて明確に把握することが難しいです。

この後どのような展開になるのか、後編に期待します。