什么是软件架构?

      我想每一位做开发的同仁都对“架构”这个词都不会陌生,都连学习编程新入门的“新兵蛋子”也会对架构侃侃其谈,但究竞什么是软件架构?谁又对此下一个准确的定义 ?

     软件架构,这是一个不清晰的概念,令人容易混淆的概念,没有在IT或软件产品设计、开发领域有足够的经验的话就很难对它能准确的下定义。而且对于虽然有一定的开发经验的人群,对软件架构的理解也各不相同,但都大同小异,都逃不出那些技术的框架。

    从1985年开始,在过去的二十多年里,关于什么是“软件架构(Software Architecture)”已经基本得到了软件工程领域普遍的认同。其中一些重要的定义介绍如下。

  “软件架构代表了系统的组织结构。这包括将系统分解为不同的部分、界定它们之间的连接、确定它们之间的交换机制、并且为后续的设计提供指导性的原则” ---出自UML的著名原创者James Rumbaugh、Grady Booch 及 Ivar Jacobson (即架构界俗称的“三个火枪手”)。

  “软件架构表述了一个系统的一个或一系列组织结构。这包扩了软件构件、这些构件的外部可见特征,以及这些构件之间的关系。”  ---出自Bass Len、Paul Clements、Rick Kazman 在2003年出版的经典的《架构的实践》一书。很惭愧这本书我也没有读过,我想国外那些大牛们写的书还是很值得我们看的,尤其是IT、计算机编程这方面的书,很多最新的技术,编程语言,架构思想,设计模式都是从国外传过来的,这方面我想我们真需虚心的学习。国内出的书不是不好,而是太理论了,而不重视具体的实践,这也是跟编书的作者经历有关习的,无庸置疑地是大部分都是理论高手,而不一定有真正的项目或产品的经历和经验。

    IEEE在2004年4月公布的“IEEE Standard 1471”中,提出了IEEE自己对软件架构的定义:“软件系统架构是根据具有参考意义的实践而定义出来的。主要表述了有一个系统的基本组织结构、基本组成构件和互相的关系,以及构件于外部环境间的关系。同时,软件系统架构为后续的设计和架构演化提供了指导性原则”。IEEE Standard 1471也澄清了架构领域的许多其他感念,例如架构描述、架构标准等。

    可以看出,上述诸多不同用词的“软件架构”的定义,其实都表达了近乎一致的思想。我们可以引用Frank Buschmann 的经典论述来定义一个架构师:“一个软件系统的架构师是一个要担负起软件系统的定义、架构的实现、系统的实施、系统架构演化和系统演化的人。换句话说,是一个要为系统整个生命周期负责的人。”

    但有意思的是,软件工程领域基本上没有一致的有关“软件架构师(Software Architecture)”的定义。很多公司也没有这样的职位;有些公司虽然有这样的职位,但却说不清楚这个职位所要求的技能和工作职责;另外但我们对比不同公司关于该职位的描述时,也能看到其中的不一致,例如Microsoft公司与Motorola公司对架够师的职位表述就很不一样。更常见的是这些职位描述严重混淆了很多概念,例如:当年的Rational公司就混淆了“软件架构师”与“高级程序员”的概念。

    这样的现象,无论是在国内还是国外都很相似。这也导致了我们可以见到大量的不同职位名称出现在软件工程行业中的观象,例如有解决方案架构师、系统架构师、软件架构师、企业架构师、总工、首席架构师、Java架构师、微软架构师及.NET架构师。

源文参照:http://www.chinaar.com/html/ruanjianjiagou/2009/0718/13.html

原文地址:https://www.cnblogs.com/jakemanse/p/1931383.html