Monday, December 4, 2006

ソフトウェアアーキテクチャ その1 - ソフトウェアの現状 [arch]

ここ最近,ソフトウェアアーキテクチャについて深く携わる機会がある.経緯や素性についてあまり詳しいことは書けないが,内容については Blog で公開しても良いとの許可を関係者に頂いたので,これから何回かに渡り情報を共有したいと思う.

Blog に書くからには定期的に更新していきたいと思うし,ご意見やご指摘等,幅広くコメントを頂けるとありがたい.


具体的な内容は次回以降に譲るとして,まずは少し概念的なところから始めてみよう.

Reference:
Software Architecture: Perspectives on an Emerging Discipline,
by Mary Shaw and David Garlan, Prentice Hall 1996

--> Chapter 1

ソフトウェアアーキテクチャを最初に定義した本.

1996年発行と内容は少し古く,今日の開発に実践できる内容は少ないが,ソフトウェアアーキテクチャのいわゆる「クラシックエッセンス」に触れることができる.

エンジニアとして「自分の引き出しを増やす」という意味では,ぜひ手元に置いておきたい1冊だ.



本書は,ソフトウェアにおいて少なくとも3つのデザインレベルが定義できるとしている.

1. アーキテクチャ
焦点はシステム全体の相互作用であり,扱う要素はソフトウェアモジュール.

2. ソースコード
焦点はアルゴリズムやデータ構造であり,扱う要素はプログラミング言語の基本構成物 (数字,キャラクタ,ポインタ等).

3. 実行コード (executable)
焦点はメモリマップ,データレイアウト,コールスタック,レジスタ配置等であり,扱う要素はハードウェアがサポートするビットパターン.

この「ソフトウェアアーキテクチャ」とは急に湧いて出てきたものではない,むしろ先人達が,より良いソフトウェアの解釈方法,及びより大規模かつ複雑なソフトウェアの構築方法を探求した結果の,長年に渡る自然的な設計概念の進化である.


ではよく「ソフトウェアエンジニア」とか「ソフトウェア工学 」という言葉を聞くが,そもそも「エンジニアリング (工学)」とは何だろうか?

本書では長々と議論がされているが,私なりに一言で要約してしまうと「専門家や職人がいなくても,一般人を問題解決可能とさせる知識または手法」といった所だろうか.

さらに本書ではエンジニアリングの進化の過程をモデル化しており,"Craft" "Commercial" "Professional Engineering" という3つのレベルを定義すると共に (つまりエンジニアリングは2段階の進化を経て成熟する),その最終形の Professional Engineering には

- Educated professional
- Analysis and theory
- Progress relies on science
- Educated professional class
- Enabling new applications through analysis
- Market segmentation by product variety

が存在する,としている.

ならばソフトウェアに目を向けた時,「ソフトウェアエンジニアリング」は "Professional Engineering" の域に達しているだろうか? 10年前に書かれた本書の中の答えは「否」であり,コンパイラ,アルゴリズムややデータ構造など,ソフトウェアのほんの一部分だけが Professional Engineering をかすめているとしている.

時は経ち2006年の今日,確かにデザイン言語 (UML 等) やデザインツール (Rational Rose 等) が確立され,多くの設計手法 (MDA,AOP 等) も提唱されている.だが実際の開発現場ではデスマーチが繰り返され,ソフトウェアを定義するドキュメントも読み手によって捉え方が異なってしまうような「線と箱」で書かれ,勘に頼った設計を行っていないだろうか.

今日でも,ソフトウェア開発コストの6割以上はメンテナンスに使われ,開発者の時間の過半数が既存システムのソースコードやドキュメントの理解に費やされるという統計が出ている.この現状を考えると,まだまだソフトウェアが工学として発展する余地はありそうだ.システムが小さかった頃は設計を介在させない「力ずく」のプログラミングも通用しただろうが,ソフトウェアが巨大になった今日ではそうはいかない.

それでは要件を正しく分析し,重要なシステム特性を実現し,コストを抑え,ソフトウェアに論理性を持たらすにはどうすれば良いだろうか?

次回から少しずつ紐解いていきたいと思う.

今回は,本書のこの一文を引用して終わりとしよう ("that" とは "Professional Engineering" を指している).

Though we have not yet matured to that state, it is an achievable goal.


0 comments: