《软件设计与体系结构秦航课件.ppt》由会员分享,可在线阅读,更多相关《软件设计与体系结构秦航课件.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件设计和体系结构软件设计和体系结构第第1章章 软件工程和软件设软件工程和软件设计计1清华大学出版社内容提要内容提要p1.1 软件软件l1.1.1软件的本质l1.1.2软件神话 6p1.2 软件工程软件工程l1.2.1软件工程l1.2.2软件过程和软件工程实践l1.2.3网络环境带来的影响p1.3 软件设计软件设计l1.3.1软件工程中的设计l1.3.2设计过程和设计质量l1.3.3软件设计原则p1.4 软件体系结构软件体系结构l1.4.1什么是软件体系结构l1.4.2软件体系结构的内容l1.4.3设计阶段的软件体系结构p1.5 小结小结2清华大学出版社1.1 软件软件1.1.1软件的本质软件
2、的本质p计算机软件,是由专业人员计算机软件,是由专业人员开发并长期维护的软件产品。开发并长期维护的软件产品。l软件科学成为了今天商业、科学、工程必需的技术,促进了新科技的创新和发展 p但是,无论国外、国内,软但是,无论国外、国内,软件危机的达摩克利斯之剑,件危机的达摩克利斯之剑,一直高悬在软件从业者头顶,一直高悬在软件从业者头顶,至今挥之不去。至今挥之不去。3清华大学出版社软件与信息转换软件与信息转换 软件不是有形的物理产品,而是人类软件不是有形的物理产品,而是人类思维的产物,软件不是被制造出来,而思维的产物,软件不是被制造出来,而是思考出来的。是思考出来的。4清华大学出版社软件的特性软件的特
3、性 p软件是设计开发的,而不是传统意义上生软件是设计开发的,而不是传统意义上生产制造的产制造的p软件不会磨损软件不会磨损!p随着基于构件的构造模式发展,大多数软随着基于构件的构造模式发展,大多数软件需要根据实际的顾客需求定制件需要根据实际的顾客需求定制5清华大学出版社硬件和软件的失效曲线硬件和软件的失效曲线 软件,不会受引起硬件磨损软件,不会受引起硬件磨损的环境问题的影响。的环境问题的影响。6清华大学出版社计算机软件分类计算机软件分类 p系统软件系统软件p应用软件应用软件p嵌入式软件嵌入式软件p科学和工程计算软件科学和工程计算软件p产品线软件产品线软件p人工智能软件人工智能软件p网络化软件网络
4、化软件p计算机软件分为七计算机软件分为七个大类,软件工程个大类,软件工程师正面临着持续挑师正面临着持续挑战。战。7清华大学出版社新的挑战新的挑战 p开放计算开放计算p网络资源网络资源p开源软件开源软件p所有这些新的挑战,所有这些新的挑战,毫无疑问,将对商毫无疑问,将对商务人员、软件工程务人员、软件工程师、最终用户产生师、最终用户产生无法预测的结果。无法预测的结果。8清华大学出版社软件的演变和认识过程软件的演变和认识过程 9清华大学出版社程序设计语言的发展有三个层面程序设计语言的发展有三个层面 p以标准以标准C语言簇为典型代表的面向过程的语言簇为典型代表的面向过程的软件设计方法软件设计方法p以以
5、JAVA语言簇为典型代表的面向对象的语言簇为典型代表的面向对象的软件设计方法软件设计方法p以以XML语言为典型代表的面向构件的软件语言为典型代表的面向构件的软件设计方法设计方法10清华大学出版社人月神话人月神话 人月神话人月神话的内容,源于的内容,源于作者布鲁克斯在作者布鲁克斯在IBM公司公司SYSTEM/360家族(最长寿家族(最长寿的计算机体系结构之一)的计算机体系结构之一)和和OS/360中的项目管理经验。中的项目管理经验。11清华大学出版社1.2 软件工程软件工程p1.2.1软件工程软件工程p美国电气与电子工程师协会(美国电气与电子工程师协会(IEEE)给)给出的:出的:l软件工程是:
6、(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。(2)在(1)中所述方法的研究。12清华大学出版社软件工程层次图软件工程层次图 包括软件工程在内的任何工程方法,必须构建在质量的基础之上。包括软件工程在内的任何工程方法,必须构建在质量的基础之上。质量关注点(quality focus)过程(process)方法(method)工具(tool)软件工程是一种层次化的技术软件工程是一种层次化的技术!13清华大学出版社软件工程与计算机科学的差别软件工程与计算机科学的差别 软软件工程件工程计计算机科学算机科学目标在时间、资源、人员这3个主要限制条件下构建满足
7、用户需求的软件系统探索正确的计算和建模方法,从而改进计算方法本身产品软件(比如办公包和编译器)算法(比如希尔排序法)和抽象的问题(比如哲学家进餐问题)进度与时间表软件专案都有特定的进度与时间表研究专案一般不具有设置的进度与时间表关注点软件工程关注如何为用户实现价值软件理论关注的是软件本身运行的原理,比如时间复杂度,空间复杂度,和算法的正确性变化程度随着技术和用户需求的不断变化,软件开发人员必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中对于某一种特定问题的正确解决方法将永远不会改变需要的其他知识相关领域的知识数学著名的探索者和教育家Barry Boehm,David
8、Parnas,布鲁克斯Edsger Dijkstra,高德纳,Robert Tarjan,Peter Slater,艾伦图灵,姚期智著名的实践者John Backus,Dan Bricklin,蒂姆伯纳斯-李 林纳斯托瓦兹,理查德马修斯托曼无14清华大学出版社1.2.2软件过程和软件工程实践软件过程和软件工程实践p一个通用的软件工程过程框架,通常包含一个通用的软件工程过程框架,通常包含5个活动:个活动:l沟通:沟通:在技术工作开始之前,和客户的沟通、协作极其重要目的是理解利益相关者的项目目标,并收集需求,以定义软件特性、功能。l策划:策划:软件项目好比是一个复杂的旅程,策划活动,就是创建一个使
9、任何复杂的旅程都变得简单的地图,以指导团队的项目旅程,该地图称为软件。l建模建模:无论是庭园设计家、桥梁建造者、航空工程师、木匠还是建筑师,每天的工作都离不开模型。他们会画一张草图,来辅助理解整个项目大的构想,包括体系结构、不同的构件如何结合,以及其它特征。l构建:构建:包括手写的、自动生成的编码和测试,以发现编码中的错误。l部署:部署:软件以全部、部分增量的形式交付给用户,用户对其进行评测,并给出反馈意见。15清华大学出版社7条简单的原则条简单的原则 p存在价值:存在价值:软件系统因能给用户提供价值,而具有存在价值。所有软件系统因能给用户提供价值,而具有存在价值。所有的决定,都应基于该思想。
10、的决定,都应基于该思想。p保持简洁:保持简洁:软件设计并不是随意的过程,软件设计中需要考虑很多软件设计并不是随意的过程,软件设计中需要考虑很多因素。所有的设计,都应该尽可能简洁,因素。所有的设计,都应该尽可能简洁,p保持愿景:保持愿景:清晰的愿景,是软件项目成功的基础。没有愿景,项目清晰的愿景,是软件项目成功的基础。没有愿景,项目将会有多种设计思想而永远不能结束。如果缺乏一致性,将会有多种设计思想而永远不能结束。如果缺乏一致性,p关注使用者:关注使用者:有产业实力的软件系统,不是在真空中开发、使用的。有产业实力的软件系统,不是在真空中开发、使用的。通常,软件系统必定是由开发者以外的人员使用、维
11、护和编制文档,通常,软件系统必定是由开发者以外的人员使用、维护和编制文档,等等,这就必须要让别人理解你的系统。因此,在需求说明、设计等等,这就必须要让别人理解你的系统。因此,在需求说明、设计和实现过程时和实现过程时p面向未来:面向未来:生命期持久的系统,具有更高的价值。在现在的计算环生命期持久的系统,具有更高的价值。在现在的计算环境中,需求规格说明随时会变境中,需求规格说明随时会变p计划复用:计划复用:复用既省时又省力。软件系统开发过程中,高水平的复复用既省时又省力。软件系统开发过程中,高水平的复用,是一个很难实现的目标。面向对象技术会给代码和设计复用带用,是一个很难实现的目标。面向对象技术会
12、给代码和设计复用带来好处来好处p认真思考:认真思考:这最后一条规则,可能最容易忽略。行动之前,清晰定这最后一条规则,可能最容易忽略。行动之前,清晰定位、完整思考,通常能产生更好的结果。仔细思考,可以提高做好位、完整思考,通常能产生更好的结果。仔细思考,可以提高做好事情的可能性事情的可能性16清华大学出版社10个重要的软件工程思想个重要的软件工程思想 17清华大学出版社1.2.3网络环境带来的影响网络环境带来的影响 p美国南加州大学的巴里美国南加州大学的巴里贝姆(贝姆(Barry Boehm)教授,总结了国际上软件教授,总结了国际上软件工程的发展历程:工程的发展历程:l20世纪50年代的类似硬件
13、工程l60年代的软件手工生产、70年代的形式化方法和瀑布模型l80年代的软件生产率和可扩展性l90年代的软件并发和顺序进程l21世纪初的软件敏捷性和价值18清华大学出版社软件工程在软件工程在40年发展历程中关注年发展历程中关注域转向需求域转向需求 p40年来,软件工程的发展都是以系统为中心的,年来,软件工程的发展都是以系统为中心的,基于图灵计算模式,图灵计算时代,计算机软件基于图灵计算模式,图灵计算时代,计算机软件是与计算机系统操作有关的程序、规程、规则及是与计算机系统操作有关的程序、规程、规则及如何与之有关的数据结构和文档,即:如何与之有关的数据结构和文档,即:l软件=程序+数据结构+文档p
14、随着一个划时代的转变,人们开始推崇随着一个划时代的转变,人们开始推崇“软件即软件即服务服务”的思想。的思想。p那么,计算机软件是与满足需求的信息及与之有那么,计算机软件是与满足需求的信息及与之有关的服务工具,即:关的服务工具,即:l软件=满足需求的信息+服务工具pGoogle的成功,就是一个现实的例子。的成功,就是一个现实的例子。19清华大学出版社传统的与互联网时代的软件工程传统的与互联网时代的软件工程观比较观比较 传统软传统软件工程件工程观观互互联联网网时时代代软软件工程件工程观观基础理论基于系统,以中央处理器为核心;基于图灵计算理论和冯诺依曼结构。基于网络,节点是图灵机或智能体等主体对象,
15、主体间相互作用;网络化软件具有小世界、无标度和高集聚的特性,研究网络动力学行为。研究方法操作系统屏蔽硬件的异构性,中间件屏蔽操作系统的异构性;用层次结构描述软件单元间的相互关系;自顶向下分解、逐步求精的开发;软件生命周期、软件评测和软件成熟度。网络成为一个虚拟资源环境;重视在不同时间段、不同软件规模上的软件间的相互关系和协同;软件按偏好依附生长,逐步演化。工程方法软件业是制造业;面向系统的结构;要求用户提供确定的需求、明确的系统边界。软件即服务,软件业是服务业;面向服务的架构;用户主导,随需即取,规模定制,敏捷开发。20清华大学出版社1.3 软件设计软件设计p朗曼字典里,对朗曼字典里,对“设计
16、设计”的解释包括:的解释包括:l描述某个事物如何被制造出来的图样或模式。l形成上述图样或模式的艺术。l对人造产品中组成部分的一种安排,将对产品在实践中的可用性具有影响。l人的头脑中的一种规则,等等。p由上述定义可见,设计是一种由上述定义可见,设计是一种“图样、图样、模式或规划模式或规划”,其目标,就是要描述一,其目标,就是要描述一个产品如何被制造出来。个产品如何被制造出来。p因此,软件设计可以被看作是因此,软件设计可以被看作是“对软件对软件将如何开发出来的一种描述将如何开发出来的一种描述”。如果把。如果把设计当作一个动词,那么软件设计就是设计当作一个动词,那么软件设计就是“得到这种描述的活动或
17、过程得到这种描述的活动或过程”。21清华大学出版社1.3.1软件工程中的设计软件工程中的设计p分析模型分析模型p数据数据/类设计类设计p体系结构设计体系结构设计p接口设计接口设计p构件级设计构件级设计p对软件需求进行分析和建模开始后,对软件需求进行分析和建模开始后,软件设计是建模活动的最后一个软件软件设计是建模活动的最后一个软件工程活动,接着便要进入构造阶段,工程活动,接着便要进入构造阶段,并生成代码和测试。并生成代码和测试。22清华大学出版社1.3.2设计过程和设计质量设计过程和设计质量p在整个设计过程中,要使用一系列正式技在整个设计过程中,要使用一系列正式技术评审或设计走查,来评估设计演化
18、的质术评审或设计走查,来评估设计演化的质量。标准如下:量。标准如下:l设计必须实现所有分析模型中的明确需求,而且满足客户期望的所有隐性需求。l对于生成代码的人、进行测试的人、维护软件的人,设计必须是可读的、可理解的指南。l设计必须提供软件的全貌,并从实现的角度说明数据域、功能域、行为域。23清华大学出版社1.3.3软件设计原则软件设计原则p抽象抽象p体系结构体系结构p模式模式p模块化模块化p信息隐蔽信息隐蔽p功能独立功能独立p求精求精p重构重构p设计类设计类24清华大学出版社模块化和软件成本模块化和软件成本 模块化时,位置需要保持在模块化时,位置需要保持在M附近,来避免过少、过多的模块化。附近
19、,来避免过少、过多的模块化。至于如何知道至于如何知道M的附近位置?如何将软件划分成模块?的附近位置?如何将软件划分成模块?则需要理解后面的设计概念。则需要理解后面的设计概念。25清华大学出版社1.4 软件体系结构软件体系结构p1.4.1什么是软件体系结构什么是软件体系结构p牛津字典中,牛津字典中,“体系结构体系结构”一词定义为:一词定义为:l建筑的艺术或科学,特别是在考虑美感和实用因素的情况下,设计人类使用的大型建筑物所需的技巧和实际。l建筑风格,建筑物,组织机构、结构的一种样式、规矩或风格。p卡内基梅隆大学的软件工程研究所在网站上公开卡内基梅隆大学的软件工程研究所在网站上公开征集软件体系结构
20、的定义,至今已有百余种。其征集软件体系结构的定义,至今已有百余种。其中,较有影响力的定义包括:中,较有影响力的定义包括:l软件系统的结构,包含软件元素、软件元素外部可见的属性以及这些软件元素之间的关系;l软件系统的基本组织,包含构件、构件之间、构件与环境之间的关系,以及相关的设计与演化原则等。26清华大学出版社狗窝、房子和高楼狗窝、房子和高楼 开发一个具有开发一个具有一定规模和复杂一定规模和复杂性的软件系统性的软件系统和编写一个简单和编写一个简单的程序,是不的程序,是不一样的,借用一样的,借用设设计模式计模式的作者的作者G.Booch的比喻,的比喻,其中的区别如其中的区别如同建造一座大同建造一
21、座大厦和搭建一个厦和搭建一个狗窝的差别。狗窝的差别。27清华大学出版社房子的建模房子的建模 p建筑师准备建筑最初建筑师准备建筑最初的草图,展示外观和的草图,展示外观和内部布局,与客户讨内部布局,与客户讨论这些草图,直至所论这些草图,直至所有相关方都达成一致有相关方都达成一致意见,认为展示的就意见,认为展示的就是想要的。是想要的。28清华大学出版社建筑师的角色和沟通依据建筑师的角色和沟通依据 p建筑师也充当建造者和客户之间的协调人建筑师也充当建造者和客户之间的协调人!29清华大学出版社体系结构的需要:温切斯特神秘体系结构的需要:温切斯特神秘屋屋 这个大厦没有制作过建筑蓝图这个大厦没有制作过建筑蓝
22、图!30清华大学出版社软件体系结构的发展史软件体系结构的发展史 p2001年到年到2012年间的重要方法、语言、论文、年间的重要方法、语言、论文、数据和会议数据和会议 31清华大学出版社软件生命周期中软件体系结构的软件生命周期中软件体系结构的研究与应用研究与应用 需求需求面向软件体系结构的需求工程,从需求到软件体系结构的转换设计设计软件体系结构的描述,设计方法,以及设计经验的记录和重用实实践践支持软件体系结构的开发过程,从设计模型到系统实现的转换;基于软件体系结构的测试部署部署基于软件体系结构的应用部署开开发发后后动态软件体系结构,软件体系结构恢复和重建p整个软件生命周期中,各阶段软件体系结构
23、的整个软件生命周期中,各阶段软件体系结构的研究热点研究热点 32清华大学出版社1.4.2软件体系结构的内容软件体系结构的内容p下面将当前软件体系结构分为下面将当前软件体系结构分为4个研究领域:个研究领域:l(1)通过提供一种新的体系结构描述语言体系结构描述语言(Architectural Description Language,ADL)解决体系结构描述问题。这种语言的目标,是给实践者提供设计体系结构更好的方法,以便设计人员相互交流,并可以使用支持体系结构描述语言的工具来分析案例。l(2)体系结构领域知识的总结性研究。这一领域关心的,是工程师通过软件实践,总结各种体系结构原则和模式的分类和阐释
24、。l(3)针对特定领域的框架的研究。这类研究产生了针对一类特殊软件的体系结构框架,比如,航空电子控制系统、移动机器人、用户界面。这类研究一旦成功,这样的框架便可以被毫不费力实例化来生产这一领域新的产品。l(4)软件体系结构形式化支持的研究。随着新的符号的产生,以及人们对体系结构设计实践的理解逐步深入,需要用一种严格的形式化方法刻画软件体系结构及其相关性质。33清华大学出版社创建软件体系结构创建软件体系结构 p典型的利益相关人及其关注点包括:典型的利益相关人及其关注点包括:l投资人:投资人:想知道项目是否能够在给定的资源和进度约束下完成。l架构师、开发人员、测试人员:架构师、开发人员、测试人员:
25、首先考虑的是,最初的构建和以后的维护与演进。l项目经理:项目经理:需要组织团队,制定迭代计划。l市场人员:市场人员:想通过品质特点实现与竞争者的差异化。l用户:用户:包括最终用户、系统管理员,以及安装、部署、准备、配置人员。l技术支持人员:技术支持人员:关注帮助平台电话呼入的数目和复杂性。34清华大学出版社创建软件体系结构创建软件体系结构 p具体系统,会有其它关键的关注点。具体系统,会有其它关键的关注点。l功能性:功能性:产品向用户提供哪些功能?l可变性:可变性:软件可能需要哪些改变?哪些改变不太可能发生,不需要特别容易进行这些改变?l性能:性能:产品达到怎样的性能?l容量:容量:多少用户并发
26、使用该系统?该系统为用户保存多少数据?l生态系统:生态系统:在部署的生态环境中,该系统与其他系统进行哪些交互?l模块化:模块化:如何将编写软件的任务分解为工作指派(模块),特别是这些模块可以独立地开发,并能够准确、容易地满足彼此的需要?l可构建性:可构建性:如何将软件构建为一组组件,并能够独立实现和验证这些组件?哪些组件应该复用其它产品,哪些应该从外部供应商处获得?l产品化:产品化:如果产品以几种变体的形式存在,如何开发一个产品线,并利用这些变体的共性?产品线中的产品以怎样的步骤开发?在创建一条软件产品线时,要进行哪些投资?l安全性:安全性:产品是否需要用户认证,或者必须限制对数据的访问?数据
27、的安全性如何得到保证?如何抵挡“拒绝服务”攻击或其他攻击?35清华大学出版社1.4.3设计阶段的软件体系结构设计阶段的软件体系结构p根据在设计过程中,对根据在设计过程中,对FR和和NFR考虑的阶段不考虑的阶段不同,可以将软件体系结构设计方法分为同,可以将软件体系结构设计方法分为3类:类:lFR驱动的软件体系结构设计,根据FR得到初步的体系结构设计模型,然后,通过一定的手段,精化设计结果以逐步达到NFR的目标,典型的方法,包括评估与转化、自顶向下组装)等。lNFR驱动的软件体系结构设计将NFR作为首要考虑因素,将NFR直接映射成为体系结构的建模元素,典型的,包括属性驱动的设计ADD等。l集成FR
28、和NFR的方法,将FR和NFR视为同等重要的设计输入,在体系结构设计过程中,同时兼顾FR和NFR,并将其转化成相应体系结构的建模元素这类方法,往往与面向Aspect的方法相结合,典型的,包括Use Case和目标驱动、形式化设计分析框架FDAF、Aspect构件等。36清华大学出版社体系结构的复用体系结构的复用 p圣索菲亚大教堂,是拜圣索菲亚大教堂,是拜占庭建筑之美的代表。占庭建筑之美的代表。1100年后,年后,Christopher Wren使用了同样的设计,来使用了同样的设计,来建造圣保罗大教堂的穹建造圣保罗大教堂的穹顶,并成为伦敦的地标顶,并成为伦敦的地标性建筑。性建筑。37清华大学出版
29、社系统的构架结构系统的构架结构 软软件件结结构构关系关系适用于适用于分解是一个子模块;与之共享秘密资源分配、项目结构化和规划;信息隐藏、封装;配置控制使用要求正确出现设计子集;设计扩展分层要求正确的出现、使用服务、提供抽象增量式开发;在“虚拟机”可移植性上实现系统类是一个实例;共享访问方法在面向对象的设计系统中,从一个公共的模版中产生快速的、相近的实现客户机-服务器与之通信;依赖于分布式操作;关注点的分离;性能分析;负载平衡进程与之并发运行、可能会与之并发运行;排除;优先于等调度分析;性能分析并发在相同的逻辑线程上运行确定存在自资源争用,线程可以交叉、连接、被创建或被杀死的位置共享数据产生数据
30、;使用数据性能;数据完整性;可修改性部署分配给;移植到性能、可用性、安全性分析实现存储到配置控制、集成、测试活动工作分配分配到项目管理、最佳利用专业技术、管理通用性38清华大学出版社1.5 小结小结p软件设计、软件体系结构与软件工程密切相关,它们是软软件设计、软件体系结构与软件工程密切相关,它们是软件工程和软件开发过程的重要组成部分。件工程和软件开发过程的重要组成部分。l首先对软件工程进行介绍,包括软件的本质、软件危机的出现、软件神话,然后对层次化的软件工程以及网络环境带来的影响进行了描述。l由此,可以看到软件设计在软件生存周期和各种软件开发过程模型中所处的位置。p然后,对设计过程、设计质量、软件设计原则进行了介绍然后,对设计过程、设计质量、软件设计原则进行了介绍l对软件设计有一个全面的理解。p最后,介绍了软件体系结构的概念、软件体系结构的内容最后,介绍了软件体系结构的概念、软件体系结构的内容和设计阶段的软件体系结构。和设计阶段的软件体系结构。p软件体系结构设计作为软件设计过程中的活动之一软件体系结构设计作为软件设计过程中的活动之一l能在较为抽象的级别上描述整个软件系统的结构,成为大规模、复杂软件系统设计中必不可少的步骤。39清华大学出版社