软件架构发展的几个阶段

来源:互联网 发布:linux系统卸载snmp 编辑:程序博客网 时间:2024/04/27 23:07

软件架构发展的几个阶段

 

 1.基础研究阶段(1985年~1994年)
    从20世纪60年代到20世纪80年代中期,软件系统的设计人员就已经习惯使用一些没有统一格式和语义的图线来描述系统的结构。当然,这样对所设计系统的表述是一种很直观和容易理解的下意识的做法。虽然这样的做法已经有二十几年的历史,长期的实践经验也使这些设计人员认识到:虽然描述的是各自负责的不同类型的系统,但在描述风格和手段方面却有着很多共性的东西。更重要的是,不同系统之间也有着很多设计手段或风格上的共性。不幸的是,大家依旧使用各自的办法、各自的思路和设计手段来解决相似的问题。这样花样百出的系统结构描述和设计方式已经开始被当时的软件工程界接受为“架构”。但是,系统化的、风格通用的、严谨而且是结构化可重用的软件系统设计方法并没有被总结出来。
    具有里程碑意义的是,从20世纪80年代中期开始,一些重要的基本思想和基础概念开始浮出水面。这些重要的思想包括:将数据/信息隐藏和封装、利用抽象数据类型、以一系列封装的黑盒元素组成软件结构等。软件设计就是从这些重要的基础概念(有趣的是,这些基础概念也是经过了Redwine/Riddle模型所界定了15年到20年的演化历程)开始了自己的辉煌历程。当今最为著名的所谓面向对象的软件设计和开发就是来源于这些基础思想(当然,那是90年代以后的事了)。Dijkstra和Parnas在他们各自的著作里详尽阐述了这些通过自己多年实践观察所得来的重要思想。但是,这些基础概念不足以解决软件系统设计中遇到的其他典型问题,例如:如何解决模块之间的依赖性?如何使设计有利于设计和代码的维护和扩展?
    从20世纪80年代晚期开始,软件设计界开始尝试总结一些为了解决特定行业、特定问题所采用的具有明显针对性的设计手段和设计结构。试图探索出为了开发这样的特定软件系统,在结构设计时所带来的经验;同时总结出同类系统可重用的设计手法及其优缺点。这个时期的主要代表Louis Coglianese和E. Mettala分别在他们的研究结果中阐述了在特定的产品线环境以及特定的应用领域内的经验和分析。例如:航空电子工业领域、导弹控制领域。
    就在同一时期,其他的相关研究也正逐渐起步。这些研究的目的是试图从那些非正式、不标准的经验知识中,提炼和组织出构造软件架构可利用的、相似的问题解决手段和设计风格。这样,研究的成果就可以被不同的领域、在解决相似的问题时所重用。这些研究都是针对当时一些著名系统进行分析和总结的,试图识别出那些通用的系统架构风格和设计手法。其中,由Gregory Andrews领导的研究小组,分析和识别了很多不同类型系统的架构形式;由Robert Allen和David Garlan领导的研究小组,尝试找到和应用一些通用的方法来描述不同类型的系统结构。他们的不懈努力最终奠定了后人前进的基石。1992年以后,后人在他们研究成果的基础上,完善和建立了一些著名的系统架构风格,例如:pipe-filter架构风格、repository架构风格、隐式调用、流程协同等。他们的研究成果和基础思想,直到今天还被很多文章引用。
2.概念确立阶段(1992年~1996年)
    从1992年至1996年,人类在软件架构方面的发展历程明显进入了新的一个重要阶段:架构基本概念和模型的确立。它是以五个方面的长足进展为标志的:架构描述语言的发展、初步的架构表述及分析规则的制定、架构元素及架构风格的分类研究、架构的评估方法(例如SAAM)、可借鉴的架构视角(例如4+1视角)。处于这个阶段的人们下意识地把主要的精力放在了所有软件系统结构中可能具有的共性方面。希望通过总结性的研究,发现那些在实践中反复出现的、具有共性的结构;并且能够把这些发现以比较严格的逻辑和规则统一描述出来,以方便业界同行的交流、改进和重用。
    以R.N.Taylor为代表,软件架构描述语言(ADL)方面的众多研究成果,成为了充实架构各个细节方面的强有力的媒介和载体。这个时期出现了很多架构描述语言,基本上都是以实践为根据,着重强调如何以缜密的逻辑方式来表述一些软件系统的组织结构。其中比较著名的包括:由David Garlan 领导的Aesop语言,它揭示了不同架构风格所具有的不同特征;由美国加州大学N. Medvidovic领导的C2语言,它揭示了基于事件处理的架构设计的魅力;由英国伦敦皇家大学J. Magee领导的Darwin语言,它揭示了动态分布式系统设计风格的实践;由P. Blinn与S. Vestal协同发布的Meta-H,它成为了实时系统设计在航空控制领域的经典;D.C. Luckham为架构描述语言家族增添了著名的Rapide语言,它为大家阐述了如何模拟和分析系统结构中动态行为的最佳实践;作为基于构件的系统,Robert Allen和David Garlan在1994年为业界提供了近乎完美的描述构件、构件端口、连接器、角色、交互的架构描述语言——Wright。我们还能举出那个时期其他很多的成就,例如Acme描述语言、UniCon描述语言等。
    架构表述及分析规则的制定是概念确立阶段的另外一个重要标志。它的完善也使架构描述语言得到了发展。这些规则有时很好地在架构描述语言中得到了应用。其中Darwin语言、Rapide语言和Wright语言就是表述规则和表述语言的和谐集成。但是,同时期也有一些其他人制定的架构表述规则(例如Robert Allen领导制定的表述规则),它们没有和某种语言结合,而是主要用来描述架构风格的;Kevin Sullivan提出的分析规则,可以用来分析特定的一些架构模型(比如说基于构件的架构模型)。C. Locke在一些应用领域分析方面也提出了自己的分析规则。后来,P. Kruchten认识到,只有提炼和总结上述各种规则,才能使架构分析更加趋于完善,同时也间接地帮助客户规范对系统的需求。
    架构元素及架构风格分类的研究同时在概念确立阶段得到了长足的发展。其中,Mary Shaw 与Paul Clements提出的一些架构风格的分类原则和各种架构风格的实际应用场景分析,成为了后人继续研究的基础。这个时期针对架构元素及架构风格的研究,已经开始尝试运用我们今天所运用的方式来进行表述,即设计模式的表述方式。其中具有里程碑性质的成果,包括Gang of four(即中国架构界俗称的“四人帮”)最著名的23个设计模式的成果,包括Frank Buschmann通过多年实践获取的经典设计模式和设计理念,还包括Mary Shaw和David Garlan为软件架构未来的发展所总结出的优秀架构风格与设计实践。
    Redwine/Riddle模型表明,在概念确立阶段还需要不断地提炼和完善所研究问题的结构。架构评估技术和方法就是在这个时期应运而生的。早期的架构设计人员通过自己长年的实践经验意识到:要设计一个架构,并检验该架构的有效性,一般是先明确该系统在质量方面的要求(即要解决的问题),然后从众多候选问题的解决方法中选用最适当的方法,这样的过程就是后来架构领域经常提到的一个用语——“设计决策”。只有系统在质量方面的要求与设计决策完全对应起来,才能确保该系统架构是有效的。所以该时期出现的一些常用方法有:Richard W. Selby与Ronald Reimer提出的衡量大型软件系统内各个部件互联关系的标准;AT&T公司提供给架构师的检查列表;C.Smith提出的基于系统的不同属性要求(例如性能要求)而可以采用的架构分析评估方法等。综合上面这些经验,R.Kazman等人在1994年汇总形成了更为通用的架构评估方法SAAM(Software Architecture Analysis Method)。
    概念确立阶段的最后的一个重要实践总结,是为后人发扬光大的“架构视角(Architecture View)”概念。其实,早在1974年,D. L. Parnas在《On a “buzzword”: hierarchical structure》一文中就已经为架构视角的研究开创了先河。他在对众多软件系统进行研究后提出了自己的成果:不同的软件系统运用不同形式的结构来构建和表述,是因为不同的构建形式能够满足不同的工程需求和目标。之后,架构视角的研究本身也经历了自己完整的Redwine/Riddle周期。期间出现了众多高质量的研究结果,当中最著名的是P. Kruchten在1995年提出的“4+1”视角,他为以后的架构实践奠定了坚实的基础。当今设计领域经常应用的那些UML视图,就是一个很典型的例子。
    1992年至1996年期间,国际上开始组织众多国际会议(例如软件设计国际大会),明显地完成了Redwine/Riddle模型中概念确立阶段的职能:沟通基本思想和概念并形成统一的认知。这些会议成为软件架构领域内从业人员的大家庭。为了有效地组织和确立研究团队、密切配合解决各个具体的子问题、逐步明确未来的研究方向、划分研究领域,国际软件架构研究会在1995年正式成立。在该组织的带领下,从1995年开始,召开了一系列国际软件架构会议,成为大家发表和讨论架构领域最新研究成果的大论坛。

原创粉丝点击