Saturday, November 24, 2007

Software architecture only when it hurts [arch]

愛読 Blog の1つ,Hitchhiker's Guide より.
What is Software Architecture

「ソフトウェアアーキテクチャの定義」というものは世の中に無数にあり,私の開発現場でも度々議論になるし,Peace Pipe でも "Software Architecture in Practice" における定義を紹介したことがある.
Peace Pipe: ソフトウェアアーキテクチャ その2 - 「ソフトウェアアーキテクチャ」とは [arch]

それでここでは,Michael Stal 曰く

Software architecture denotes the set of artifacts and practices required to build a software system so that it achieves its implicit and explicit qualities.

It includes the systematic partitioning of the software system into appropriate subsystems and relationships as well as the guiding principles used for that purpose. The partitioning of responsibilities and interactions need to be modelled using an interrelated set of viewpoints to address the functional and non-functional qualities.

"systematic" という単語をあえて使っているのは,アドホックなものは「ソフトウェアアーキテクチャ」とは認めていないからなのだとか.その上で,ソフトウェアアーキテクチャは "both an entity and an act" としている.



Software architecture is the collection of the fundamental decisions about a software product/solution designed to meet the project's quality attribute requirements. The architecture includes the main components, their main attributes, and their collaboration (i.e. interactions and behavior) to meet the quality attributes. Architecture can and usually should be expressed in several levels of abstraction (depending on the project's size).


If an architecture is to be intentional (rather than accidental), it should be communicated. Architecture is communicated from multiple viewpoints to cater the needs of the different stakeholders.


…で,前置きがずいぶん長くなったが,本来紹介したかったのはこのエントリーで Stal が言っている

You may also define it as follows:

Software architecture is taken into consideration only when it hurts.