1、现代软件工程现代软件工程第五部分第五部分软件体系结构与系统概要设计软件体系结构与系统概要设计 现代软件工程现代软件工程本部分主要参考书本部分主要参考书软件工程软件工程-实践者的研究方法实践者的研究方法现代软件工程概论现代软件工程概论软件体系结构的原理、组成与应用软件体系结构的原理、组成与应用需求分析与系统设计需求分析与系统设计设计模式设计模式-可复用面向对象软件的基础可复用面向对象软件的基础体系结构的基本问题-1软件系统的框架与体系结构-2面向对象的设计模式-3MVC结构与用户界面设计-4基于构件的软件体系结构-5从需求分析到系统设计过程-6第五部分第五部分 软件体系结构与系统概要设计软件体系
2、结构与系统概要设计第五部分第五部分 软件体系结构与系统概要设计软件体系结构与系统概要设计第一章 体系结构的基本问题体系结构的意义-1.1 体系结构的定义-1.2体系结构的基础-1.3抽象与求精-1.4模块化与信息隐蔽-1.55.1.1 体系结构的重要性和意义体系结构的重要性和意义软件设计与建筑设计在软件设计与建筑设计在某些方面是类似的:某些方面是类似的:搭建一个小狗屋,可以由一个人来完成:l 最小的整体结构l 最简单的过程l 最原始的工具 整体结构和精化都在一个人脑子里完成、并由本人亲自实现构造一栋房屋构造一栋房屋需要一张设需要一张设计图纸或模型计图纸或模型需要具有规需要具有规划良好的过程划良
3、好的过程需要具备一定功能的工具需要具备一定功能的工具需要由一个小型团体完成,并且需要由一个小型团体完成,并且需要更明确的目标和计划、更高需要更明确的目标和计划、更高的效率、更精确的时间限制的效率、更精确的时间限制构建一个高层建筑?复杂!构建一个高层建筑?复杂!软件体系结构的复杂性软件体系结构的复杂性=技术的技术的+管理的管理的更高的技术复杂性更高的技术复杂性-嵌入式,实时的,分布式的,不可出错的嵌入式,实时的,分布式的,不可出错的-定制的定制的,空前的,可复用的空前的,可复用的-高性能的高性能的较低的技术复杂度较低的技术复杂度-大部分是大部分是4GL,或基于组件技术的或基于组件技术的-应用反向
4、工程应用反向工程-基于交互式的对性能要求不高基于交互式的对性能要求不高较高管理复杂度较高管理复杂度 -大范围大范围 -合同契约性合同契约性 -受很多人制约的受很多人制约的 -“项目项目”型的型的较低的管理复杂度较低的管理复杂度 -小范围小范围 -非正式的非正式的 -简单的资金运作简单的资金运作 -“产品产品”型的型的防御防御 MIS系统系统防御防御武器系统武器系统信息信息 交换交换CASE工具工具国际空中运输国际空中运输控制系统控制系统企业企业IS(IS应用应用)商业商业编译器编译器商业制表软件商业制表软件IS应用应用分布式对象分布式对象小型科学模拟小型科学模拟大型组织大型组织/实体仿真模拟实
5、体仿真模拟一个中等的项目 -5-10 人人-10-15 个月的开发个月的开发周期周期-3-5 个外部界面个外部界面-一些不可知的事情一些不可知的事情&风险风险嵌入式嵌入式车用软件车用软件IS应用应用GUI/RDB 理解软件系统的复杂性因素理解软件系统的复杂性因素新技术融合软件体系结构的重要性,已经比算法和数据结构更重要软件体系结构的重要性,已经比算法和数据结构更重要灵活性与可扩展性处理能力与吞吐量负载与容量可用性失败安全与稳固性出错容忍程度功能成本兼容与可移植性系统的复杂性现在的挑战已经不是速度、成本和性能,而是复杂度的问题了。Bill Raduchel,Sun微系统公司策略执行总裁体系结构的
6、域体系结构的域体系结构体系结构元素元素/关系关系处理处理体系结构体系结构 集成集成/约束约束 体系结构是体系结构是“什么什么”体系结构体系结构“为什么为什么”体系结构体系结构“如何如何”“谁谁”保证体系结构保证体系结构系统系统功能功能结构结构S/W 需求需求系统系统质量属性质量属性满足满足限制限制组织组织构建构建技巧技巧风险承担人风险承担人定义规则定义规则生产生产跟踪跟踪技术技术定义定义为什么体系结构在软件系统中具有如此的重要性?为什么体系结构在软件系统中具有如此的重要性?一个表现体系结构作用和价值的典型案例一个表现体系结构作用和价值的典型案例软件无线电与体系结构软件无线电与体系结构Softw
7、are Radio Architecture5.1.2 体系结构定义体系结构定义n软件体系结构是:由结构和功能各异、相互作用的部软件体系结构是:由结构和功能各异、相互作用的部件集合,按照层次构成。它包含了系统的基础构成单件集合,按照层次构成。它包含了系统的基础构成单元、它们之间的作用关系、在构成系统时,它们的集元、它们之间的作用关系、在构成系统时,它们的集成方法以及对集成约束的描述。成方法以及对集成约束的描述。n软件的体系结构是关于软件系统组织的配置定义软件的体系结构是关于软件系统组织的配置定义l定义了:组成系统的结构(结构元素)和部件;l定义了:结构与部件间特定的构成和协作关系;l定义了:系
8、统继承集成方法和约束;因此,系统中的子系统定义,是系统体系构建(集成)的结果,而不是开始;l体系结构不但决定了系统的物理构成,也支配了开发的组织行为(需求分配、范围和任务定义、进度计划、测试方案、集成方法、配置项与基线管理),这是现代软件工程更注重的地方。n内容与形式、过程与结果内容与形式、过程与结果理解体系结构定义理解体系结构定义软件体系结构定义了软件计算部件的局部和总体的构成软件体系结构定义了软件计算部件的局部和总体的构成以及这些部件之间的相互作用关系以及这些部件之间的相互作用关系n计算部件:计算部件:l客户、服务器、数据库、中间件、程序包、过程、子程序、进程等切碎、再切碎(粒度)n相互作
9、用关系:相互作用关系:l过程调用、共享变量访问、信号灯、进程通信、消息传递、访问/网络协议等n除了描述系统的构成和结构关系外,体系结构还表达了系统需求和构成之间的对应关系,这为系统的设计,提供了分析和评价的依据n体系结构比需求更进一步要面对或满足系统非功能性的内容,如:容量、数据吞吐量、一致性、兼容性、安全性、可靠性 体系结构元模型体系结构元模型视图展现了体系结构的不同视角一个具体的体系结构构成的例子,当然并不只有窗体,约束来自需求和设计规范模板提供了设计规范和重用表现了风格规范制定和成果积累从具体到抽象的提升体系结构的类型与作用体系结构的类型与作用n体系结构在不同的阶段,依据层次和细节的体系
10、结构在不同的阶段,依据层次和细节的不同,分为概略型、需求型和设计型不同,分为概略型、需求型和设计型l概略型是上层宏观的描述,反映系统最上层的部件和连接关系l需求型是对概略结构的深入表达,以满足用户功能和非功能需求的表达为主l设计型从设计实现的角度,对需求型进行更深入的描述表达,需要从不同的侧面/视图,设计系统的各个层面的各个部件和连接结构。在这个层面上的描述,将直接为系统实现和性能分析服务体系结构的类型与作用体系结构的类型与作用n在项目规划阶段:体系结构是项目可行性、工程复杂度、计划进度、投资规模和风险预测的依据(概略型)n在需求分析阶段:体系结构是开发团队与用户进行需求交互沟通的表达形式和结
11、果(需求型)n在系统设计阶段:体系结构是系统设计分解的基础n在项目实施阶段:体系结构是工作分工、人员安排、组织协调、绩效管理的依据n在项目评估阶段:体系结构是性能测试和评估的依据n在维护升级阶段:体系结构是在保证系统整体合理性、正确性、性能和可控的维护成本的前提下,软件系统修改、扩充、升级的基础模型好的体系结构的特征好的体系结构的特征n设计灵活和可伸缩性的设计灵活和可伸缩性的n考虑全面并可扩展的考虑全面并可扩展的n思路简单明了、直接可以理解的思路简单明了、直接可以理解的n结构划分和关系定义清楚的结构划分和关系定义清楚的n模块职责明确和分布合理的模块职责明确和分布合理的n效益和技术综合平衡的效益
12、和技术综合平衡的不同阶段、不同的人,对体系结构的不同视角不同阶段、不同的人,对体系结构的不同视角n不同的人对体系结构有不同的视角不同的人对体系结构有不同的视角l最终用户l客户l项目经理l系统分析师l编码工程师l架构工程师l维护人员l其他开发人员n体系结构的视图是根据观察者的需要,来进行描述简体系结构的视图是根据观察者的需要,来进行描述简化(抽象)的,它关注观察者的关注点,而忽略与关化(抽象)的,它关注观察者的关注点,而忽略与关注点无关的部分注点无关的部分UML:描绘系统体系结构:描绘系统体系结构逻辑视图面向系统设计 功能实现视图面向编程 软件管理 过程视图性能可伸缩性吞吐能力 面向系统集成分布
13、图系统拓扑结构 分发,安装通信面向系统实施概念模型物理模型用例图用例节点组件 类,接口,协作活动类体系结构的视角体系结构的视角对体系结构的不同认识,反映在看待体系结构的视角上,也有对体系结构的不同认识,反映在看待体系结构的视角上,也有不同,形成了不同的体系结构概念和描述形式:不同,形成了不同的体系结构概念和描述形式:主要的有:结构风格、设计模式、模型和关键部件、主要的有:结构风格、设计模式、模型和关键部件、ADL语言语言体系结构风格(体系结构风格(风格:一种现实存在的抽象风格:一种现实存在的抽象)数据流系统:顺序批处理、管道和过滤器调用-返回系统;主/子程序面向对象系统:层次结构独立部件:通信
14、进程、事件隐式调用虚拟机:解释器、规则系统以数据(库)为中心的系统:数据库、超文本、黑板特殊领域风格:过程控制、模拟器特殊结构风格:分布式处理、状态转移系统体系结构的层次体系结构的层次系统是由许多层次构成的,每个层次处理不同的问题系统是由许多层次构成的,每个层次处理不同的问题每个层次都有二个方面组成:部件和规则每个层次都有二个方面组成:部件和规则构成系统的原始的或集成的部件由部件集成为系统的集成规则(静态)为系统提供语义的行为规则(动态)n软件设计发展过程中,对体系结构认识的三个层次软件设计发展过程中,对体系结构认识的三个层次l执行级包括存储器的映射、数据地址的安排、堆栈和寄存器的分配等,在此
15、,部件是硬件,集成和行为规则是非常明确具体的l代码级包括算法和数据结构的选择。在此,部件是程序设计语言的字符、指针、进程控制等,集成的是记录、数组和过程l结构级包括与部件相关联的系统总体性能。在此,部件是模块、模块的相互关系,它指明从模块到子系统、到系统的集成n在上世纪在上世纪80年代,软件开发者关注的是代码级的,如今,关注的是结构级年代,软件开发者关注的是代码级的,如今,关注的是结构级“结构级结构级”体系结构的认识体系结构的认识n软件体系结构的软件体系结构的“结构结构”元素:部件元素:部件l系统的总体组织架构、全局控制、通信协议、同步、数据存取、设计元素的功能、设计元素的组织、规模、性能、设
16、计方案的选择等l部件不只是有形的、物理的程序片段:还包括“结构件”n软件体系结构的集成规则和行为规则软件体系结构的集成规则和行为规则l体系结构是关于软件的系统级层次上的组成和行为l体系结构是由软件部件和部件之间的联系组成l部件的描述应包括:部件功能、结构特征、非功能特征l部件的概念,根据设计方法的不同,代表不同的对象:类/对象、库/包、构件/组件、制品/配置项/基线等RUP的统一过程结构的统一过程结构预备循环 Iter.#1周期周期处理工作流处理工作流反复反复支持工作流支持工作流 Iter.#2 Iter.#n Iter.#n+1 Iter.#n+2 Iter.#m Iter.#m+1管理环境
17、管理环境配置管理配置管理业务模型业务模型实现实现测试测试分析和设计分析和设计分布分布需求需求详细化详细化提交提交初始化初始化构造构造RUP统一过程统一过程三大要素:三大要素:用例驱动用例驱动源头和全过程驱动源头和全过程驱动迭代迭代开发过程与基本方法开发过程与基本方法以体系结构为中心以体系结构为中心适应适应需求变更需求变更和和迭代开发迭代开发的的 需要,以体系结构为基础的需要,以体系结构为基础的 增量开发增量开发。发现发现创造创造实现实现生命周期与生命周期与重要的里程碑重要的里程碑时间时间想象 体系结构基线 初始能力产品发布最初详细构造提交n最初最初 定义项目的范围和开发商业案例(业务定义项目的
18、范围和开发商业案例(业务/系统模型)系统模型)n详细详细 计划项目,详细说明功能和结构的基线计划项目,详细说明功能和结构的基线n构造构造 创建产品创建产品n提交提交 把产品提交给用户把产品提交给用户以产品线为目标、以框架为基础的迭代过程以产品线为目标、以框架为基础的迭代过程迭代迭代一个循环是一次确定的计划、评估、标准审查活动的阶段,一个循环是一次确定的计划、评估、标准审查活动的阶段,最终结果是产生可执行发布版本(基线发布与中间版本)。最终结果是产生可执行发布版本(基线发布与中间版本)。主要循环.开发循环开发循环.提交循环.发布发布发布发布发布发布发布发布预备循环.以体系结构为中心以体系结构为中
19、心nRUP的视图和模型是使体系结构可视化、可详细的视图和模型是使体系结构可视化、可详细描述和定义、可文档化的构造工具和手段描述和定义、可文档化的构造工具和手段n统一过程指明了可执行体系结构的顺序行为过程统一过程指明了可执行体系结构的顺序行为过程时间体系结构构造提交体系结构和循环体系结构和循环用例模型设计模型分布模型测试模型实现模型内容关系数据库关系数据库C客户端客户端WWW BrowserWeb服务器服务器HTMLCGIASPJava商业对象服务商业对象引擎应用商业对象服务A客户端客户端商业对象引擎廋客户端,胖服务器B客户端客户端Application商业对象服务商业对象引擎商业逻辑服务商业逻
20、辑服务器器DCOMADO/RCORBABeansCOMMTSBeansETS体系结构的四视图观点体系结构的四视图观点四视图:概念、模块、代码、运行四视图:概念、模块、代码、运行体系结构的模型和关键部件观点体系结构的模型和关键部件观点关系数据库图形用户界面关系数据库图形用户界面商业对象模型图形用户界面商业对象模型关系数据库模型的演变和深入:过程抽象关键部件:系统边界、系统服务和客户、系统界面、事务管理模型的演变和深入:对象和数据抽象顺序/条件/循环、分布、并行、激发/响应、应用环境、任务控制复杂的复杂的Internet系统系统客户端客户端WEB服务器服务器应用应用服务器服务器认证认证系统系统财务
21、财务系统系统库存库存系统系统数据库数据库系统系统Dynamic HTML,JavaScript,Javaplug-ins,source code enhancementsJava,C,C+,JavaScript,CGIJava,C,C+,JavaBeans,CORBA,DCOMNative languages复杂的商业系统的体系结构复杂的商业系统的体系结构数据库用户界面层ServiceAgentpurchase(customer,product,items)Customername:StringAddress:Stringsave()Customername:StringAddress:Str
22、ingsave()getName()updateName()CustomerOrder Line*Product*Order Lineitems:ProductgetName()updateName()Observerupdate()Orderdate:DateProductname:Stringprice:CurrencygetName()updateName()Salesproduct:Product中间件体系结构的研究范畴体系结构的研究范畴n体系结构的研究领域体系结构的研究领域l体系结构的实践经验积累l通用的软件体系结构框架和构件l特殊应用领域的体系结构框架和组件l基于体系结构的软件开发
23、环境和工具l体系结构本身的形式化研究l体系结构的形式化语言描述方法软件设计经历了软件设计经历了40年的发展演化过程:年的发展演化过程:1、早期的模块化程序设计和自顶向下逐步求精的结构化方法面向结构的方法2、由数据库技术的发展,带来的将数据流和数据结构,转化为设计定义的方法(E-R模型)面向数据的方法3、面向对象的方法从对象及其关系导出系统的方法4、现在的方法:软件设计的重点,已经移到软件体系结构和实现软件体系结构的设计模式 5.1.3 体系结构基础体系结构基础体系结构的基本问题:结构基础体系结构的基本问题:结构基础 软件结构始终是软件研究的重要课题,而研究的层次软件结构始终是软件研究的重要课题
24、,而研究的层次和侧重点,从最基本和底层,向越来越抽象层次发展和侧重点,从最基本和底层,向越来越抽象层次发展,但结构的基本思想仍然有指导意义。,但结构的基本思想仍然有指导意义。n曾作为软件结构研究发展的基本思想包括:曾作为软件结构研究发展的基本思想包括:(1)结构化控制流(2)部件连接方式(3)结构化控制模式(4)基本数据结构(5)抽象数据结构(6)进程(7)分时与并发(8)资源共享与并行同步n不论何种方法,都具有以下一些共同的特征:不论何种方法,都具有以下一些共同的特征:n(1)一种用于将分析模型变换到设计表示的机制;n(2)用于表示功能性结构及其接口的符号体系;n(3)用于求精和划分的启发信
25、息;n(4)质量评价的指导原则软件的结构基础软件的结构基础1、结构化控制流、结构化控制流n伴随着高级语言的产生,最基本的结构化程序控制规范就产生伴随着高级语言的产生,最基本的结构化程序控制规范就产生了,例如:了,例如:l顺序语句形式:;程序按语句1-n顺序执行。l转向语句形式:goto;程序转到所指示的语句执行。l过程调用形式:(参数1、参数2、参数n)程序转到指定的过程开始执行,执行完过 程后,返回到的下一条语句继续执行。软件的结构基础软件的结构基础l条件语句形式:if(条件表达式)then;条件成立,执行语句形式:if(条件表达式)thenelse;如果条件成立,执行语句1,否则执行语句2
26、。l开关语句形式:switch(计算表达式)case 值1:;case值n:语句n;else 语句N+1;计算表达式的值,根据取值i,分别执行语句I,否则,执行语句n+1。l循环语句形式:for(循环控制变量=初值,循环变量计算)从循环控制变量初值开始,判断条件是否满足,满足则执行循环体,改变控制变 量值,再进行判断形式:while(条件表达式)do;先判断条件,满足则执行语句。形式:repeatuntil(条件表达式);先执行,再判断条件满足再次执行。软件的结构基础软件的结构基础2、部件连接方式(控制模式)、部件连接方式(控制模式)n在控制流之上,存在着比在控制流之上,存在着比语句语句更集中
27、的部件,这些部件可更集中的部件,这些部件可以是数据、外部设备、程序段等。与这些部件的连接方式,是以是数据、外部设备、程序段等。与这些部件的连接方式,是复杂程序设计更高一层的抽象,也称为控制模式。复杂程序设计更高一层的抽象,也称为控制模式。l直接过程调用方式部件与部件之间,通过直接调用对方的过程、函数或方法实现连接的方法,这是最普通、常用的方法。过程调用是通过系统提供的CALL和堆栈机制实现的。过程标识 过程代码 P1 P2Pn P1代码P2代码Pn代码l过程调用表(间接)方式过程调用表(间接)方式l如图:过程调用表是通过维护一张表格的形式,来系统地管理过程调用的方法。l各过程按标识排列在表中,
28、建立起标识与代码的对应。l调用表的可动态维护,是这种方法的优点,所以也称为间接调用。调用方主动/被调用方被动软件的结构基础软件的结构基础l中断/事件触发方式中断事件触发是通过硬件所提供的中断及其控制机制,实现的部件连接方式。部件的调用,依靠中断设置和中断触发实现的。中断设置就是将特定的中断号码的中断指针指向中断处理入口。中断处理根据代码号,转向不同的处理代码段,执行相应的处理操作。中断号 服务代码 1#2#n#1#中断2#中断n#中断发生x号中断进入转入中断处理l过程链接方式l过程链接在原理上与中断方式有些类似,它通过一些标识,在多个事件或过程的处理链中,进行转移。l过程链接方式是动态扩展系统
29、功能的常用设计方法。在中断服务、设备管理、消息传递等服务中,有广泛的应用。l只要增加一个标识,就可以把新的代码段插入到处理链中,达到功能扩充的目的。调用方被动/被调用方主动软件的结构基础软件的结构基础l服务连接方式服务连接方式的服务部件由接口、分析器、执行器构成其他部件与服务部件进行交互,是通过接口进行的分析器分析获得的服务请求信息然后交执行器执行服务部件是被动接收服务请求,解释器和各类服务器就是采用这种连接方式分析器执行器服务部件部件1部件2的代理部件2网络连接l远程过程调用方式l远程过程调用(PRC:Remote Procedural Call)是在网络环境下的过程调用。本地部件无法获得分
30、布在远程的部件的标识,不能直接调用远程的部件,因此,需要在本地,建立一个远程部件的代理。l本地部件把服务请求发送给代理,由代理通过网络实现与远程部件的连接。类似地还有同一计算机内的进程间调用,也有一个专门的机制,来实现。接口互为调用和被调用方,可以无主从,称为发起/响应软件的结构基础软件的结构基础3、结构化连接模式、结构化连接模式n结构化连接模式指部件与部件间连接关系的构成形式结构化连接模式指部件与部件间连接关系的构成形式l条件连接l循环连接l查询模式l中断/事件模式l共享信息模式部件A部件1部件n条件连接部件A部件1部件n循环连接(轮巡)根据已知条件选择根据当时事件选择软件的结构基础软件的结
31、构基础信息处理信息源1信息源n查询模式信息处理信息源1信息源n中断/事件模式信息处理信息源共享信息模式信息共享交换区采样点不多事件多/轮巡方式控制方主动采样点多事件不多/中断方式事件方主动对等软件的结构基础软件的结构基础4、基本数据类型、基本数据类型n数据类型和数据结构,是继控制流和结构化设计之后,在软件数据类型和数据结构,是继控制流和结构化设计之后,在软件研究和设计中,发挥过巨大作用的软件结构概念研究和设计中,发挥过巨大作用的软件结构概念n面向数据的程序设计提出面向数据的程序设计提出“软件软件=数据结构数据结构+算法算法”n目前数据结构的重要性已经让位给体系结构,但数据结构仍然目前数据结构的
32、重要性已经让位给体系结构,但数据结构仍然是系统设计的重要基础是系统设计的重要基础n常用的数据结构概念是常用的数据结构概念是l线性结构:顺序表、向量、堆栈、队列、链表、动态存储、串、排序、检索;l树形结构:二分树、树;l复杂结构:图、多维数组、集合、疏散矩阵、广义表;l文件结构:顺序文件、散列文件、索引文件软件的结构基础软件的结构基础5、抽象数据类型、抽象数据类型n抽象数据类型(抽象数据类型(ADT:Abstract Data Types)是一个关于软件部件的数学模型)是一个关于软件部件的数学模型nADT定义了所描述部件的构成和构成成员之间的关系定义了所描述部件的构成和构成成员之间的关系nADT
33、定义了作用在部件构成之上的合法的操作与操作性质定义了作用在部件构成之上的合法的操作与操作性质nADT表达的是一组逻辑特性,与其在计算机内的具体表示和实现无关,这是表达的是一组逻辑特性,与其在计算机内的具体表示和实现无关,这是抽象的意义所在抽象的意义所在n现代软件工程认为,软件系统架构是建立在系统的数据模型上而不是建立在现代软件工程认为,软件系统架构是建立在系统的数据模型上而不是建立在单纯的操作(传统软件工程方法)之上的单纯的操作(传统软件工程方法)之上的n抽象抓住了软件部件设计的本质,通过集中分类表达的形式,建立部件的完抽象抓住了软件部件设计的本质,通过集中分类表达的形式,建立部件的完整描述,
34、这正是软件系统体系结构分析和设计所要求的。整描述,这正是软件系统体系结构分析和设计所要求的。n一个软件部件类型的抽象定义,可用(一个软件部件类型的抽象定义,可用(D、R、P、S)四元组表示如下:)四元组表示如下:lD:数据对象lR:数据对象D成员之间的约束关系lP:对数据对象D的操作集lS:是S的操作语义 有关ADT的细节,在详细设计中讨论软件的结构基础软件的结构基础6、进程、进程n早期的计算机系统的运行,一个程序独占计算机所有资源,早期的计算机系统的运行,一个程序独占计算机所有资源,CPU顺序执行指令、程序、数据、内存地址直接指定,程序的执行过顺序执行指令、程序、数据、内存地址直接指定,程序
35、的执行过程由程序程由程序“本身本身”进行控制进行控制n为了提高计算机资源的利用率,开始引入多道(并行为了提高计算机资源的利用率,开始引入多道(并行/并发)程序并发)程序设计的技术,在多程序运行环境下,程序执行不再由程序本身控设计的技术,在多程序运行环境下,程序执行不再由程序本身控制,因此,引进了制,因此,引进了“进程进程”的概念的概念l进程是一个程序的一段(独立调度、独立分配/释放资源)动态执行过程l进程是具有独立功能的程序对某个数据集在处理器上的执行过程和资源分配单元的基本单位n程序和进程的区别:程序和进程的区别:l程序是进程运行的“脚本”,进程是程序的动态执行过程l一个进程可以执行一个或多
36、个程序,一个程序可以有多个进程l进程具有并行性,并行可以是独立的、异步的n进程概念的进一步发展:子进程、线程进程概念的进一步发展:子进程、线程n进程实现:进程控制块、进程调度、进程数据环境进程实现:进程控制块、进程调度、进程数据环境进程与体系结构的关系:从静态-动态程序/数据结构到行为结构多道批处理系统多道批处理系统 多道程序的执行情况:在计算机内存中同时存放若干道已开始运行尚未结束的程序,它们交替运行,共享系统中的各种硬、软件资源,从而使处理机得到充分利用。在该系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”;然后,由作业调度程序按一定的算法从后备队列中选择若干个作业
37、调入内存,使它们共享CPU和系统中的各种资源。软件的结构基础软件的结构基础单道和多道程序运行情况单道和多道程序运行情况 软件的结构基础软件的结构基础7、分时与并发、分时与并发n分时的概念分时的概念l采用时间片轮的方法,同时为许多终端用户服务,对每个用户能保证足够快的响应时间,并提供交互会话的功能。l时间片:将CPU的时间划分成若干个片段,称为时间片,操作系统以时间片为单位,轮流为每个终端用户服务l设计目标:对用户的请求及时响应,并在可能条件下尽量提高系统资源的利用率。n实现分时的方法实现分时的方法l固定时间片,滚入/滚出l划分前台和后台,对前台给予较大的时间片,或只在前台“空闲”时,才执行后台
38、任务(多数为批处理任务)l进一步把前台作业分成几个作业流(划小时间片单位),提高响应效率软件的结构基础软件的结构基础8、资源共享与并行同步、资源共享与并行同步n资源共享:防止为竞争公共资源产生的死锁资源共享:防止为竞争公共资源产生的死锁n并行同步:为协同进程间的逻辑和时序关系并行同步:为协同进程间的逻辑和时序关系n制约机制制约机制l传统操作系统:竞争条件、临界区、忙等待互斥、睡眠与唤醒、信号量、事件计数器、管程、消息传递、原语等价等l分布式操作系统:分层协议、客户-服务器模式、远程过程调用软件的结构基础软件的结构基础n这都是软件系统设计所走过的路这都是软件系统设计所走过的路n现在仍在走,特别体
39、现在:现在仍在走,特别体现在:l操作系统l工业控制l实时控制l等等,对系统资源要求非常苛刻的环境下n如果我们前面探讨的是宏观(整体)的体系结构,那如果我们前面探讨的是宏观(整体)的体系结构,那么下面,我们开始再深入考察一下整体结构的建立过么下面,我们开始再深入考察一下整体结构的建立过程和构成要素(模块结构)程和构成要素(模块结构)5.1.4 抽象与求精抽象与求精抽象抽象 抽象是常见的思考问题的方法:专注主要方面,避开细节需求分析的抽象:需求分析的抽象:用问题域的语言描述需求,不用计算机的语言表达,避开因计算机实现细节带来的干扰,抽象级别最高 系统设计的抽象:系统设计的抽象:同时采用用面向问题域
40、和面向实现域的术语,来描述解决方案,抽象级别降低 编码阶段的抽象:编码阶段的抽象:采用高级语言,实现系统设计。高级语言是对机器执行代码的抽象,抽象级别最低软件的结构基础:软件的结构基础:抽象与求精抽象与求精在软件开发过程中,有过程抽象和数据抽象过程抽象过程抽象过程抽象是指具有特定功能的一个被“命名的”指令序列p在高抽象级别中,它可能就是一个过程名,不需要具体实现细节。p在低抽象层次中,它可以是一段抽象的“宏”描述数据抽象数据抽象p描述数据对象的一个命名的数据集合p与过程抽象一样,也有从高级到低级的层次抽象与求精抽象与求精抽象细化的例子:抽象细化的例子:一个计算机辅助设计CAD软件,可以实现二维
41、绘图抽象级别抽象级别1:需求描述:需求描述 该软件应具有以下功能:p提供一个所见既所得的绘图用户界面p提供一个数字化仪界面,用以代替绘图板和丁字尺p能实现各种类型的直线、矩形、圆及曲线的绘制p可进行几何计算、视图或剖面图处理p设计结果以图形文件形式存储 显然,这个抽象是问题域术语的抽象与求精抽象与求精抽象级别抽象级别2:系统任务描述:系统任务描述 CAD软件任务:p系统用户交互p二维图形创建与输入p图形显示与处理p图形文件管理END CAD这个抽象,已经比较接近计算机术语,而不是用户术语,但仍然还不是实现术语抽象级别抽象级别3:过程描述(部分):过程描述(部分)PROCEDURE 二维图形创建
42、二维图形创建REPEAT 下列操作 UNTIL 图形创建完毕DO WHILE 需要与数字化仪交互时 数字化仪接口处理 CASE 绘图请求 OF 直线:直线绘图处理 矩形:矩形绘图处理 圆 :圆绘图处理 END CASEEND DOEND REPEATEND PROCEDUREDO WHILE 需要与键盘交互时 键盘交互处理 CASE 分析/计算 OF 视图 :视图处理 剖面图:剖面图处理 计算 :计算处理 END CASEEND DO抽象与求精抽象与求精求精求精p从宏观开始,进行功能分解,建立过程细节,直到用程序设计语言进行实现为止p抽象的目的是使设计人员避开细节,抓住问题的本质p求精的目的则
43、是帮助设计人员随设计的深入获得更深层次的信息p抽象和求精都是设计人员建立完整系统模型的必要过程p求精的方法就是研究模块本身和模块之间的构成关系有两个函数:C(x)表示问题x的复杂程度;E(x)表示解决问题x所需要的工作量(时间)。对于两个问题P1和P2,如果:C(P1)C(P2)则:E(P1)E(P2)如果问题复杂,则解决问题的工作量也大另一个有趣的特性是:C(P1P2)C(P1)C(P2)问题分解,有利于降低问题的总的复杂度根据前面的结论,我们可以得出下面的不等式:E(P1P2)E(P1)E(P2)所以,问题分解既可以降低问题的复杂程度,也可以减少总的工作量。这种“分而治之分而治之”的思想提
44、供了模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。但是,过分的分细模块,也会带来集成的复杂度,因此,需要选择一个适度平衡适度平衡的方案。5.1.5 软件的结构基础:软件的结构基础:模块化和信息隐蔽模块化和信息隐蔽模块的概念模块的概念1.定义定义 同时具有以下四个要素的一组程序语句称为一个模块同时具有以下四个要素的一组程序语句称为一个模块 四个要素是:四个要素是:输入输入/输出输出 逻辑功能逻辑功能 运行程序运行程序 内部数据。内部数据。前两个称为模块的外部要素,后两个称为内部要素。前两个称为模块的外部要素,后两个称为内部要素。模块化和信息隐蔽模块化和信息隐蔽2
45、.模块的属性模块的属性p模块定义:四个要素模块定义:四个要素p输入/输出、逻辑功能、运行程序、内部数据。p模块具有四种属性:模块具有四种属性:p一个模块的输入/输出都是指向同一个调用者。p模块的逻辑功能是指模块能够做什么事,表达了模块把输入转换成输出的功能,可以是单纯的(无处理)输入/输出功能。p模块的运行程序指模块如何用程序实现其逻辑功能的过程。p模块的数据指属于模块自己的数据。在结构化系统设计中。人们主要关心的是模块的外部要素(输入在结构化系统设计中。人们主要关心的是模块的外部要素(输入/输出、逻辑功能),至于内部要素(运行程序、内部数据),将输出、逻辑功能),至于内部要素(运行程序、内部
46、数据),将在系统实现在系统实现/编码时完成编码时完成模块化和信息隐蔽模块化和信息隐蔽模块数量与软件开发复杂性模块数量与软件开发复杂性但是,并不是把问题细分的越小越好,有一个最小成本区但是,并不是把问题细分的越小越好,有一个最小成本区模块化和信息隐蔽模块化和信息隐蔽如何确保模块数量,落在如何确保模块数量,落在“最小成本区最小成本区”内?内?n信息隐蔽信息隐蔽l模块中所包含的信息(数据、过程)对不需要这些信息的其他模块,是透明的(不可见、不可访问的)l涉及这些信息的改变,都只局限在模块内部,不会影响到其他模块l抽象帮助我们定义组成软件系统的过程实体、而隐蔽机制则通过对模块内部访问的约束,有助于模块
47、的分离和实现l隐蔽是系统设计的重要原则,也是系统实现(并行开发)、测试(问题分离)、后期维护(局部维护变更)的重要方法n模块独立性(理想的模块)模块独立性(理想的模块)l每个理想模块只解决一个问题。l每个理想模块的功能都应该明确,使人(开发者、使用者、维护者)容易理解。l理想模块之间的联结关系简单,具有独立性。l由理想模块构成的系统,使人容易理解、编程、测试、修改和维护。对模块的使用者来说,其感兴趣是模块的功能,而不必去理解模块内部的结构和原理。(卖菜的也可以卖电脑了)n对理想模块独立性设计的最经典描述:既插既用对理想模块独立性设计的最经典描述:既插既用模块化和信息隐蔽模块化和信息隐蔽3.模块
48、的图形及符号(1)模块的图形:用矩形表示。模块的名称写在方框内,由一个动词和一个作为宾语的名词组成。(2)模块间的联接 AB(a)基 本 形 式ACBD(b)顺 序ABC(c)选 择AB(d)重 复(3)模块间的通讯 模块间通讯有两种:数据通讯、控制通讯 数据通讯是一个数据流,它表示了一个经过处理的数据从一个模块传向另一个模块。控制通讯只传送一个标志,该标志只表达了处理工作的某种状态,而不是由被发送模块真正进行过处理的数据。获得配件库存量读库存记录模块间的通讯配件编号库存量无此配件模块化和信息隐蔽模块化和信息隐蔽数据通讯控制通讯4.模块独立性模块设计的基本原则:降低系统中模块之间的联结程度,提
49、高每个模块的独立性、聚合度。度量模块独立性的尺度:偶合性和内聚度模块按不同的需要而偶合在一起,偶合有七种形式,偶合度是度量模块间紧密程度的尺度在模块内部,实现不同功能的部分,也有七种组合形式,其组合的紧密程度,称为模块的内聚度模块化和信息隐蔽模块化和信息隐蔽模块的七种偶合形式两个模块之间的偶合有七种形式,按照偶合紧密程度由低到高排列为:非直接偶合数据偶合标记偶合控制偶合外部偶合公共偶合内容偶合模块化和信息隐蔽模块化和信息隐蔽1.内容偶合如果二个模块中有一个模块直接引用另一个模块的内容(数据、语句、标号等),则称二个模块之间是内容偶合。如果修改一个,另一个也要做相应修改,因此,内容偶合不易复用。
50、例如:模块A中TRC:语句在模块B中GO TO TRC模块A与模块B存在内容偶合,这是一种最不希望的偶合,一般出现在低级语言的程序中。模块化和信息隐蔽模块化和信息隐蔽作为编码规范,绝对不允许出现内容偶合2.公共偶合如果两个模块都和同一个公共数据域有关(访问同一个数据环境),则称为公共偶合。共同的数据环境可能是共享的通信区、内存、存储介质等,如果二个模块一个只是写、另一个只是读,则这种公共偶合称为松散公共偶合,否则是紧密公共偶合。二个模块对同一个数据库进行读写是最常见的公共偶合ABC公用数据公用偶合是一种不良的偶合关系,它给模块的维护和修改带来困难。如公共数据要作修改,很难判定有多少模块应用了该