软件系统架构设计东北大学信息学院人工智能与机器人研究所贾同•课程内容•软件系统架构•软件工程•C#与.net•参考书目1.软件架构的艺术,李伟、吴庆海著,电子工业出版社,2009.4。2.架构之美,O’Relly,机械工业出版社,2010.1。3.软件设计精要与模式,张逸著,电子工业出版社,2010.4。4.一线架构师实际指南,温昱著,电子工业出版社,2009.10。5.软件工程,王忠群著,中国科学技术大学出版社,2009.11。6.大道至简-软件工程实践者的思想,电子工业出版社,2010.1。7.软件演化过程与进化论,张凯著,清华大学出版社,2008.12。8.软件构件与体系结构,王映辉著,机械工业出版社,2009.9。•课时安排总学时:42学时周学时:3学时(1-13周,周五9-11节)•考试方式笔试:70%平时:30%,第一章软件系统架构介绍•1.1架构概念•1.2系统架构与软件架构•1.3软件架构的历程•1.4架构结构•1.5软件架构生命周期第一章软件系统架构介绍•问题什么是“架构”?什么是“软件架构”?“系统架构”与“软件架构”的区别和联系?“系统设计”与“软件设计”的区别和联系?1.1架构概念•什么是架构?如果你问五个不同的人,可能会得到五种不同的答案•-----IvarJacobson,《AOSD中文版》•很多人都试图给“架构”下定义,而这些定义本身却很难统一•------MartinFowler,《企业应用架构模式》1.1架构概念•“架构”一词最早来自建筑学,原意为建筑物设计和建造的艺术。在软件工程领域,软件架构不是一个新名词,只是在早期的著作中人们将软件架构称为软件体系结构;1.1架构概念•软件架构作为在研究和实践中不断发展演化的理论,加上对软件过程中的各种制品没有形成真正意义上的准确界定与标准名称,因此软件架构尚未形成一个公认的统一定义;•业界中的定义归结而言可分为:组成派和决策派两大流派:决策派•Booch、Rumbaugh和Jacobson的定义:•----架构是一系列重要决策的集合,这些决策与以下内容•有关:软件的组织,构成系统的及其接口的选择,这些元•素在相互协作中明确表现出的行为,这些结构元素和行为•元素进一步组合所构成的更大规模的子系统,以及指导这•一组织-包括这些元素及其接口、它们的协作和它们的组•合---架构风格;决策派•EoinWoods的观点:•----软件架构是一系列设计决策,如果作了不正确的决•策,你的项目可能最终会被取消(Softwarearchitecture•isthesetofdesigndecisionswhich,ifmade•incorrectly,maycauseyourprojecttobecancelled)组成派•Garlan和Shaw的定义:•----架构包括组件(Component)、连接件(Connector)和约•束(Constrain)三大要素。组件可以是一组代码(例如程序•模块),也可以是独立的程序(例如数据库服务器)。连接件•可以是过程调用、管道和消息等,用于表示组件之间的相•互关系。“约束”一般为组件连接时的条件;组成派•Perry和Wolf的定义:•----软件架构是一组具有特定形式的架构元素,这些元素•分为三类:负责完成数据加工的处理元素(Processing•Elements)、作为被加工信息的数据元素(DataElements)•及用于把架构的不同部分组合在一起的连接元素•(ConnectingElements)1.1架构概念•从以上不同研究者的观点看出,不论是组成派还是决策派,其本质思想是一样的,只是从不同的角度对这个概念进行描述;•组成派的观点更关注软件,倾向于“组件+交互”的思想;•决策派的观点更关注人,倾向于重大决策集合的思想,除了结构和行为,还关注一些非功能的因素。1.1架构概念•综上,我们可以给“架构”一个简单的定义:•所谓“架构”,就是人们对一个结构内的元素及元素间关系的一种主观映射的产物。1.2系统架构与软件架构•无论在哪个工程领域,从演化历史分析,都有其共同点:-----人类的恐惧•人类本能:对不确定的、感觉到威胁的事物具有强烈的不安全感。从而激发了人类尽量把这些恐惧的因素控制在最小范围内的愿望。•因此,各工程学科在日记月累的发展历程中,逐步规范化、科学化、系列化以及统一化,最终保证人类在复杂环境中,不确定的因素存在时,依然能够进行有效的控制和协调。1.2系统架构与软件架构•1997年,EberhardtRechtin与MarkWMaier在其论著中,为计算机科学总结了系统架构方面的实践成果,从而奠定了系统科学和系统架构在计算机科学中的基石:无论何种系统架构应用领域,目的都是一样的,即完整地、高一致性地、平衡各种利弊地、有技术和市场前瞻性地设计系统和实施系统。1.2系统架构与软件架构•比尔盖茨定义自己为:首席软件架构师•因此带来的问题是:•“系统架构”或“系统设计”与“软件架构”或“软件设计”的区别于联系是什么?1.2系统架构与软件架构例子CT机是现代医学诊断中不可缺少的设备。通过X线对人体的某一部分按一定厚度进行扫描,由于人体各组织的疏密程度不同,X线的穿透能力也不同,所以检测接收到的射线就有了差异。由此产生的信号转变为数字信息后由计算机进行处理,并输出到显示屏上,显示出人体组织图像,以发现病变的相对空间位置、大小、数目等。1.2系统架构与软件架构•CT机的关键部分包括X线系统,高压发生器,检测器,成像系统,机架与床等,设计电子、机械、图像处理、计算机等多学科。•针对CT机质量方面的系统级要求:•安全性•保密性•可靠性•健壮性•可测试性•可服务性•可配置性•可扩展性1.2系统架构与软件架构•除了以上,CT机的非功能性要求包括:•可用性•有吸引力的图像界面•快速的响应时间•高质量的图像质量•高精度计算•运输和移动方便•资源利用率高1.2系统架构与软件架构•对以上非功能性要求汇总可以发现,这些要求都是系统级的设计要求。这些要求,有些是与机械和电子设计相关的,但绝大多数是与软件架构和设计相联系的。这意味着,一个完整的CT机系统的非功能性指标是由多个子系统和多种技术结合在一起才得以实现,即一个系统往往是软硬结合的。1.2系统架构与软件架构•通过以上分析,我们可以得出如下结论:•系统架构的主要任务是界定系统级的功能与非功能要求、规划要设计的整体系统的特征、规划并设计实现系统级的各项要求的手段,同时利用各种学科技术完成子系统的结构构建。1.2系统架构与软件架构•软件架构首先要理解系统架构,并从软件架构学科的视角对系统架构提出相应的意见,同时从软件的视角协助规划、设计那些实现系统级的各项要求的手段,并最终为各软件子系统提供架构和设计。1.2系统架构与软件架构•结论:在系统架构中,由于对软件越来越深入的依赖,软件架构的任务也体现出重要的作用。而且系统架构与软件架构是紧密联系和互相依赖的。•本课程的重点集中在“软件架构”,而非“系统架构”上。1.3软件架构的历程•1.基础研究阶段(1985年-1994年)•成果:将数据/信息隐藏和封装、利用抽象数据模型、以一系列的黑盒元素组成软件结构等。•代表人物:LourisCoglianese与EMettala---阐述了在特定的产品线环境及特点的应用领域内的经验和分析,如:航空电子工业领域、导弹控制领域。1.3软件架构的历程•2.概念确立阶段(1992年-1996年)•成果:软件架构进入了一个新的重要阶段。包括:架构描述语言的发展、初步的架构表述及分析规则的制定、架构元素及架构风格的分类研究、架构的评估方法、可借鉴的架构视角等。•代表人物:RNTaylor---提出软件架构描述语言ADL---4+1架构视角,是UML视图的基础。1.3软件架构的历程•3.探索发展阶段(1995年-2000年)•成果:软件架构得到了业界更大程度的认可,标志为1995年IEEETonSoftwareEngineering出版了专门针对该领域的特刊;其他顶级期刊、学术会议也定期召开该领域的工作年会。•代表人物:DavidGarlan---2000年发表《软件架构的路线图》---1997年提出ACME架构语言1.3软件架构的历程•4.内部改进阶段(1996年-2003年)•成果:软件架构逐步应用到了软件工程领域,是从理论到实践的重要阶段。包括:架构模式与设计模式结合,实现了系统设计上的严格的高低层次搭配;架构及系统分析与评估也逐步走向完善。•代表人物:Felixbacmann---提出了一系列架构模式,即后来的架构战术手段。1.3软件架构的历程•5.外部改进拓展阶段(1998年至今)•成果:架构领域的研究日趋成熟,认可广泛,并结出了丰硕果实。包括:•大规模架构扩展到一些公司,代表性的是Raytheon公司的REAP。•UML(集成构建语言):架构设计的奇葩,由Rational软件公司开发(现已被IBM收购)已经成为工业及应用界公认并且统一应用的架构描述语言。其工具包(RationalRequisite,RationalRose等)已成为最流行的需求分析、架构设计和系统实施的工具集。1.3软件架构的历程•成果:架构领域的研究日趋成熟,认可广泛,并结出了丰硕果实。包括:•出现了多种面向对象的软件架构框架或架构平台,这些框架为面向对象的软件系统开发提供了强有力的环境支撑。---Sun公司的J2EE---Microsoft公司的.NET1.3软件架构的历程•6.普及应用阶段(2000年至今)•成果:进入普及应用阶段,产品级的软件产品开发进入市场,用户群快速扩大。包括:•几乎一夜之间,接口定义、设计规格说明语言、构建、层等字眼出现,风靡业界。•客户端/服务器架构风格•基于代理的架构风格•面向服务的架构风格(SOA)•新的术语:首席架构师•进入本科教学(美国2000,中国2001)1.4架构结构•功能性•可变性•性能•容量•生态系统•模块化•可构建性•产品化•安全性1.4架构结构1.信息隐藏结构2.使用结构3.进程结构4.访问结构1.4架构结构-经典架构1.A-7E舰载飞行处理器2.朗讯电话交换机3.万维网4.UNIX系统1.5软件架构误区•误区一:不知道架构与设计的区别•一般架构师都是技术出身,认为设计、编码就是软件架构一切(错!)•真正的架构师必须有长期设计经验,并在系统化的提升之后才能成为合格的架构师。需要考虑:商业概念、商业运作、系统结构、结构优化等更为宏观的方面,然后选择那些最经典的实践参考模型,才能构建出合格的软件架构。(对!)1.5软件架构误区•误区二:不知道系统架构该如何做•一个单纯为了一系列功能的实现而构建的架构,是软件架构的全部?(错!)•真正的软件架构,需要考虑:灵活可维护性用户数量增加时或最大峰值时,架构还能应对能预测系统下一个时刻的状态可与其他系统集成1.5软件架构误区•误区三只盲目追随业界通用框架•过多依赖成熟的软件框架产品(错!)•世界上没有万能的解药•框架或中间件是用来帮助你的,而不是代替你去思考和工作的。我们必须根据实际的系统要求(功能和非功能要求),自己去构建适合现状的软件架构。(对!)1.6软件架构生命周期1.架构初步构建阶段2.架构逐步优化阶段3.架构成熟阶段4.架构老化阶段5.架构消亡阶段思考问题•架构定义是什么?及其流派?•系统架构与软件架构的区别与联系?•软件架构经历了哪些发展阶段?•架构结构包括哪些?•软件架构的生命周期是什么?