`
cloudtech
  • 浏览: 4596172 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

软件架构发展的几个阶段

 
阅读更多

软件架构发展的几个阶段

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年开始,召开了一系列国际软件架构会议,成为大家发表和讨论架构领域最新研究成果的大论坛。

分享到:
评论

相关推荐

    基于架构的软件设计方法

    经过近十几年的发展,架构设计已经成为软件工程领域一门重要的学科。在一个软件项目设计之初,首先进行体系架构设计已经成为广大软件开发人员的共识。但大多数项目只是停留在整个软件项目的大的体系架构设计层次,渐深...

    架构重构趋势谈

    我用一张图来刻画架构师的几个“主战场”(如图1所示),以辅助我们更准确地“定位”架构重构在架构师工作中的位置。图1架构师的主战场随着不同产品的推出、不同版本的发布,需要维护的遗留代码越来越多,重构也就...

    软件设计规范

    软件项目的3个部分:(把3个阶段由纵向横过来,进行统筹) 分解文档,集成平台,可维护性要求。 软件设计必须有自说明特性。不能对文档产生依赖性。软件代码中合适的地方,需要对文档进行恰如其分说明。原则是,每...

    从一个故事说起,谈谈企业应用架构的演变史

    不论是传统企业,还是互联网公司,发展到一定阶段,都需要一整套体系化的应用架构来支撑其运转。良好的、合理的应用架构可以支持企业高效开展业务,控制经营风险,而混乱的、不合理的应用架构则会限制企业的快速发展...

    漫谈企业应用架构的演变

    不论是传统企业,还是互联网公司,发展到一定阶段,都需要一整套体系化的应用架构来支撑其运转。良好的、合理的应用架构可以支持企业高效开展业务,控制经营风险,而混乱的、不合理的应用架构则会限制企业的快速发展...

    软件工程知识点

    它包含:软件定义、软件开发、软件运行维护三个时期,并可以细分为可行性研究、项目计划、需求分析、概要设计、详细设计、编码实现与单元测试、系统集成测试、系统确认验证、系统运行与维护等几个阶段。 软件定义...

    基于J2EE架构的在线考试系统(源代码+论文+开题报告+外文翻译+英文文献+答辩PPT).zip

    前者主要的缺点是维护、升级较麻烦,后者是近几年伴随Internet迅速发展而应运而生的一种技术,在这种模式下,客户端需要一个浏览器,服务器端是Web Server ,而Web Server是与数据库和应用服务器的紧密结合,可见,...

    java版飞机大战源码-Understanding-of-Architecture:应用架构、技术价值、架构价值观、终局思维

    笔者经常反思,假设自己可以早几年达到当下的认知水平,可能会发展更好一些。所以确实期望这些文字可以帮助到一些架构从业者,也借此描绘出他们的内心世界,给仍在这条路上继续前行的人一丝力量。 当然可能大部分...

    软件项目管理师大全(大纲+论文格式+经典案例)

    成功的软件项目需要几点要求 26 对软件项目管理的探讨 27 给项目管理一双慧眼 33 工程项目管理的新挑战—可持续发展 37 管理的三化与六法 40 管理项目失败的教训 41 论项目管理中的量化管理 43 浅谈如何实行有效的...

    云计算实验室子建设方案.doc

    云计算实验室建设背景 云计算的演变从1990年左右开始,经历了网格计算、效用计算、软件即服务(SaaS )几个阶段。随着物联网的快速发展,从技术角度看,严重制约物联网发展的因素,既 不是芯片技术,无线网络技术和...

    测试覆盖率

     武友文以自己在国际公司的实践经验,一再强调,软件测试是软件开发过程中的一个重要步骤,或者说测试应该贯穿在软件开发过程的每一个阶段。软件测试所起到的作用就是:能够确保在软件开发的过程中,随时发现问题,...

    百度地图开发java源码-BizMDA:BizMDA-模型驱动的商业应用构建平台

    软件建模的不变应万变:和软件架构的快速变迁不同,针对软件的E-R、UML等建模体系,反而比较稳定,十几年都没有太多的改变。但是软件建模只是在软件设计阶段的产物,在编码形成代码交付测试后,建模只体现在设计文档...

    信息系统项目管理师 论文 信息系统项目管理师范文

    成功的软件项目需要几点要求 26 对软件项目管理的探讨 27 给项目管理一双慧眼 33 工程项目管理的新挑战—可持续发展 37 管理的三化与六法 40 管理项目失败的教训 41 论项目管理中的量化管理 43 浅谈如何实行有效的...

    学生宿舍管理系统数据库设计说明书.pdf

    这个视 图由几个表产生就用连字符"_"连接几个表的名,如果表过多可以将表名适当简 化。 存储过程命名约定:P_表名_存取过程名(缩写),比如P_User_Deleted。 数据库、表、字段、索引、视图等一系列与数据库相关的名称...

Global site tag (gtag.js) - Google Analytics