软件架构发展的几个阶段

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. 如何向小白讲述软件架构发展历程?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 作者简介:kimmking,关注于互联网电商,金融,支付等系统领域,10多年研发管理和架构经 ...

  2. 软件架构发展历程分享

    本文来自作者 kimmking 在 GitChat 上分享 「软件架构发展历程分享」,「阅读原文」查看交流实录. 编辑 | 哈比 什么是架构 计算机科学和程序设计的飞速发展,使得软件设计应用到从航空航 ...

  3. 计算机几个发展阶段相关介绍,计算机的发展经历了哪几个阶段

    计算机的发展经历了哪几个阶段以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 第1代:电子管数字机(1946-1958年) ...

  4. 2017计算机发展,【2017年整理】计算机发展的四个阶段.doc

    [2017年整理]计算机发展的四个阶段 计算机发展的四个阶段 第一代计算机:电子管数字计算机(1946-1958年) 硬件方面,逻辑元件采用电子管,主存储器采用汞延迟线.磁鼓.磁芯:外存储器采用磁带. ...

  5. 中国商业环境发展的五个阶段浅析

    从中国改革开放到现在,中国的商业环境也是经历了很多的变化,这里主要总结下中国商业发展的五个阶段: 当我们在看很多商业案例的时候,真正懂得学习的人是会学习它背后的运作思维.理念而不是表面的方法.每个案例 ...

  6. 划分计算机发展的四个阶段主要依据,计算机的发展划分为4个阶段,分别为什么、什么、什么和什么。...

    计算机的发展划分为4个阶段,分别为什么.什么.什么和什么.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 计算机的发展划 ...

  7. 计算机的发展各阶段使用的元器件是什么,计算机的发展经历了哪几个阶段?各阶段的主要特征是什么?...

    一共有四个发展阶段:第一代计算机 特征是采用电子管作为主要元器件第二代计算机 特征是采用晶体管作为主要器件第三代计算机 特征是半导体中小规模集成电路第四代计算机 特征是大规模和超大规模集成电路电子管( ...

  8. 计算机技术的发展包括几个阶段,目前电子计算机处于哪个阶段?计算机发展的四个阶段...

    <目前电子计算机处于哪个阶段?计算机发展的四个阶段>由会员分享,可在线阅读,更多相关<目前电子计算机处于哪个阶段?计算机发展的四个阶段(3页珍藏版)>请在人人文库网上搜索. 1 ...

  9. 计算机发展网络的四个阶段,计算机发展的四个阶段

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 计算机发展的四个阶段分别是: 第一个阶段(第1代):电子管数字机(1946至1958年). 第二个阶段(第2代):晶体管数字机(1 ...

  10. 不同时代阶段的计算机,计算机发展的四个阶段和计算机时代的开始

    <计算机发展的四个阶段和计算机时代的开始>由会员分享,可在线阅读,更多相关<计算机发展的四个阶段和计算机时代的开始(2页珍藏版)>请在人人文库网上搜索. 1.计算机发展的四个阶 ...

最新文章

  1. Node.js express 之mongoose 从异步回调函数返回值,类似于同步
  2. 第四节 莎士比亚模板
  3. 防火墙安装的十步骤,加强网络第一道保护屏
  4. sql删除语句_Part 3 | SQL学习:删除行
  5. 根文件系统使用登录模式
  6. Access restriction: The type BASE64Encoder is not accessible due to restrict
  7. 2 小时学会 springboot ( 附实例讲解 )
  8. CNNIC公告称半个月已处理不良网站域名万例
  9. AWS Lambda中的Cron表达式解析器
  10. 20210501:字符串与哈希表力扣专题学习记录
  11. java毕业设计—— 基于java+JSP+SSH的网上购物系统设计与实现(毕业论文+程序源码)——网上购物系统
  12. wpa_supplicant 使用
  13. python海龟绘图画玫瑰花的简笔画_用python的小海龟 Turtle 画一朵好看又有趣的小花-Go语言中文社区...
  14. 西班牙首相被中国新零售圈粉!天猫总裁靖捷透露了一个“合伙人计划”
  15. 网易云信第三方接口调用超详细Demo
  16. rails--图片的使用
  17. Android 信号查看,安卓Android手机怎么快速查看系统信号强度
  18. 【阅读笔记】联邦学习实战——联邦学习在智能物联网中的应用案例
  19. 解决安卓PIE无法运行问题
  20. 队列(先进先出的数据结构)

热门文章

  1. swing JTable
  2. ios FMDB 更新二进制图片数据
  3. document.readyState 属性
  4. linux 下解决arp病毒攻击时上网问题的最简单的治标办法
  5. adb命令获取app布局文件xml
  6. bzoj 1414: [ZJOI2009]对称的正方形
  7. eclipse Maven配置
  8. 一道装呀(状压)DP
  9. Apex 获取真正的IP地址
  10. atitit.编程语言的未来趋势与进化结果