【文档说明】软件工程:第04章设计工程课件.ppt,共(71)页,630.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-50479.html
以下为本文档部分文字说明:
软件工程第4章设计工程第1页,共71页。复旦大学计算机科学与工程系软件工程课程2/71内容摘要•软件设计工程概述•软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审第2页,共71页。复旦大学计算机科学与工程系软件工程课程3/71内容摘要•软件设计工程概述•软件设计原则•软件体系
结构设计•部件级设计技术•设计规约与设计评审第3页,共71页。复旦大学计算机科学与工程系软件工程课程4/71软件设计工程概述•软件需求分析解决“做什么”的问题,软件设计过程则解决“怎么做”的问题•软件设计是把软件需
求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计第4页,共71页。复旦大学计算机科学与工程系软件工程课程5/71软件设计的任务•使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设
计、体系结构设计、接口设计、部件级设计第5页,共71页。复旦大学计算机科学与工程系软件工程课程6/71•数据/类设计:将分析-类模型变换成类的实现和软件实现所需要的数据结构•体系结构设计:体系结构设计定义了软件的整体结构•接口设计:接口设计描述了
软件内部、软件和协作系统之间以及软件同人之间如何通信•部件级设计:部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述第6页,共71页。复旦大学计算机科学与工程系软件工程课程7/711)数据/类设计•在类和由CRC中定
义的数据对象和关系以及数据字典中描述的详细数据内容提供了数据设计活动的基础•数据设计的过程包括以下两步:–首先,为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的设计方案;–然
后,确定对逻辑数据结构所必需的那些操作的程序模块,以便限制或确定各个数据设计决策的影响范围。第7页,共71页。复旦大学计算机科学与工程系软件工程课程8/712)体系结构设计•体系结构设计定义了软件的整体结构,它
由软件部件、外部可见的属性和它们之间的关系组成。•体系结构设计表示可以从系统规约、分析模型和分析模型中定义的子系统的交互导出。第8页,共71页。复旦大学计算机科学与工程系软件工程课程9/713)接口设计•接口设计主要包括三个方面:–设计软件模块间的接口–设计模块和其他非
人的信息生产者和消费者(比如外部实体)之间的接口–设计人(用户)和计算机间的接口第9页,共71页。复旦大学计算机科学与工程系软件工程课程10/714)部件级设计•部件级设计将软件体系结构的结构性元素变换为对软件部件
的过程性描述。•从类为基础的模型、流模型、行为模型中得到的信息是部件设计的基础。第10页,共71页。复旦大学计算机科学与工程系软件工程课程11/71软件设计的目标•在进行软件设计的过程中,我们要密切关注软件的质量因素。•McGlanghlin软件设计过程的目标:1)设计必
须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。2)设计必须是可读、可理解的,使得将来易于编程、易于测试、易于维护。3)设计应从实现角度出发,给出与数据、功能、行为相关的软件全貌。第11页,共71页。复旦
大学计算机科学与工程系软件工程课程12/71衡量设计的技术标准1)设计出来的结构应是分层结构,从而建立软件成份之间的控制。2)设计应当模块化,从逻辑上将软件划分为完成特定功能或子功能的部件。3)设计应当既
包含数据抽象,也包含过程抽象。4)设计应当建立具有独立功能特征的模块。5)设计应当建立能够降低模块与外部环境之间复杂连接的接口。6)设计应能根据软件需求分析获取的信息,建立可驱动、可重复的方法。第12页,共
71页。复旦大学计算机科学与工程系软件工程课程13/71软件设计的过程1)制定规范2)体系结构和接口设计3)数据/类设计4)部件级(过程)设计5)编写设计文档6)设计评审第13页,共71页。复旦大学计算机科学与工程系软件工程课程14/71内容摘要•软件设计工程概述•软件设计原
则•软件体系结构设计•部件级设计技术•设计规约与设计评审第14页,共71页。复旦大学计算机科学与工程系软件工程课程15/71抽象化与逐步求精•抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。•抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细
化。•软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述第15页,共71页。复旦大学计算机科学与工程系软件工程课程16/71•软件设计中主要抽象手段有:过程抽象和数据抽象•过程抽象(也称功能抽象
)是指任何一个完成明确定义功能的操作都可被使用者当作单个实体看待,尽管这个操作实际上是由一系列更低级的操作来完成的•数据抽象是指定义数据类型和施加于该类型对象的操作,并限定了对象的取值范围,只能通过这些操作修改和观察数据第16页,共71页。复旦大学计算机科学与工程
系软件工程课程17/71逐步求精•逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法•抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精有助于设计者在设计过程中揭示低层的细节第17页,共71页。复旦大学计算机科学与工程系软件工程课程18/
71模块化•模块化,即把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件,实际上是系统分解和抽象的过程。•模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问–
例如,过程。函数、子程序、宏等第18页,共71页。复旦大学计算机科学与工程系软件工程课程19/71•设C(x)是描述问题x复杂性的函数,E(x)是解决问题x所需工作量(按时间计算)的函数。对于两个问题p1和p2,如果•C(p1)
>C(p2)(4.1a)•那么•E(p1)>E(p2)(4.1b)•即问题越复杂,解决问题所需要的花费更多。第19页,共71页。复旦大学计算机科学与工程系软件工程课程20/71•通过对人解决问题的实验,又存在另一个有趣的规律:•C(p
1+p2)>C(p1)+C(p2)(4.2)•方程式(4.2)意味着p1和p2组合后的复杂性比单独考虑每个问题时的复杂性要大。考虑方程式(4.2)和方程式(4.1)隐含的条件,我们可以得出•E(p1+p2)>E(p1)+E(p2)(4.3)•不等式(4.3)表达出了一个对于模块化和软件具有
十分重要意义的结论(即,模块化的论据):将复杂问题分解成可以管理的片断会更使解决问题更加容易。第20页,共71页。复旦大学计算机科学与工程系软件工程课程21/71•如果我们无限制地划分软件,开发它所需的工作量会变得小到可以忽略?!•事实上,影响软件开发的工
作量的因素还有很多,例如模块接口费用等等•上述不等式只能说明,当模块的总数增加时,单独开发各个子模块的工作量之和会有所减少第21页,共71页。复旦大学计算机科学与工程系软件工程课程22/71•如果模块是相互独立的,当模块变得越小,每个模块花费
的工作量越低;•但当模块数增加时,模块间的联系也随之增加,把这些模块联接起来的工作量也随之增加。第22页,共71页。复旦大学计算机科学与工程系软件工程课程23/71信息隐藏•每个模块的实现细节对于其它模块来说应该是隐蔽的•块中所包含的信息(包括数据和过程)不允许其它不需要这
些信息的模块使用•通过信息隐蔽,则可定义和实施对模块的过程细节和局部数据结构的存取限制第23页,共71页。复旦大学计算机科学与工程系软件工程课程24/71模块独立•模块独立:模块完成独立的功能并且与其他模块的接口简单,符合信息隐蔽和信息局部化原则,模块间关联和依赖程度尽可能小•模块独立的重要性–功
能被划分,并且接口被简化,所以具有有效模块化的软件更易于开发–由于因设计和编码修改引起的副作用受到局限,错误传播被减小,并且模块复用成为可能,所以独立的模块更易于维护和测试第24页,共71页。复旦大学计算机科学与工程系软件工程课程25/71模块独立•模块的独立性
可以由两项指标来衡量:内聚度与耦合度•内聚(cohesion)是一个模块内部各个元素彼此结合的紧密程度的度量•耦合(coupling)是模块之间的相对独立性(互相连接的紧密程度)的度量第25页,共71页。复旦大学计算机科学与工程系软件工程课程26/71内聚•一般模
块的内聚性分为七种类型第26页,共71页。复旦大学计算机科学与工程系软件工程课程27/71内聚1)巧合内聚(偶然内聚):将几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块称为巧合内聚模块。2)逻辑内聚:指完成一组逻辑相关任务的模块,
调用该模块时,由传送给模块的控制型参数来确定该模块应执行哪一种功能。3)时间内聚:指一个模块中的所有人物必须在同一时间段内执行。例如初始化模块和终止模块。第27页,共71页。复旦大学计算机科学与工程系
软件工程课程28/71内聚4)过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程(procedural)执行。5)通信内聚:指一个模块内所有处理元素都集中在某个数据结构的一块区域中。6)顺序内聚:指一个模块完成多个功能,
这些功能又必须顺序执行。7)功能内聚:指一个模块中各个部分都是为完成一项具体功能而协同工作,紧密联系,不可分割的。第28页,共71页。复旦大学计算机科学与工程系软件工程课程29/71耦合•一般模块之间可能的耦合方式有七种类型第29页,共71页。复旦大学计算
机科学与工程系软件工程课程30/71耦合1)内容耦合:如果一个模块直接访问另一个模块的内部数据;或者一个模块不通过正常入口转到另一模块内部;或者两个模块有一部分程序代码重迭;或者一个模块有多个入口,则两个模块之间就发生了内容耦合。2)公共耦合:若
一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。3)外部耦合:指模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、
通信协议上)时,称为外部耦合。第30页,共71页。复旦大学计算机科学与工程系软件工程课程31/71耦合4)控制耦合:如果一个模块传送给另一个模块的参数中包含了控制信息,该控制信息用于控制接收模块中的执行逻辑,则称为控制耦合。
5)标记耦合:两个模块之间通过参数表传递一个数据结构的一部分(如某一数据结构的子结构),就是标记耦合。6)数据耦合:两个模块之间仅通过参数表传递简单数据,则称为数据耦合。7)非直接耦合:如果两个模块之间没有直接关系,即它们中的任何一个
都不依赖于另一个而能独立工作,这种耦合称为非直接耦合。第31页,共71页。复旦大学计算机科学与工程系软件工程课程32/71•模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱•一个模块内部各个元素之间的联系越紧密
,则它的内聚性就越高•模块独立性比较强的模块应是高内聚低耦合的模块第32页,共71页。复旦大学计算机科学与工程系软件工程课程33/71内容摘要•软件设计工程概述•软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审第33页,共71页。复旦大学计算机科学与工程系软件工程课程34/71
软件体系结构设计•软件体系结构关注系统的一个或多个结构,包含软件构件、这些构件的对外可见的性质以及它们之间的关系•Bass提出体系结构重要的三个关键理由:–①方便利益相关人员的交流–②有利于系统设计的前期决策–③可传递的系统级抽象第
34页,共71页。复旦大学计算机科学与工程系软件工程课程35/71体系结构发展过程•常见的软件体系结构–单主机结构–C/S(Client/Server)结构–B/S(Browser/Server)结构第35页,共71页。复旦大学计算机科学与工程系软件工程课程36/71软件体系结构的风格
•绝大多数可以被归类为相对小数量的体系结构风格之一•每种风格描述一种系统范畴,范畴包括:–①一些实现系统所需的功能的部件(如数据库、计算模块);–②一组用来连接部件“通信、协调和合作”的“连接子”;–
③定义部件之间怎样整合的系统约束;–④使设计者能够理解整个系统属性并分析已知属性的语义模型。第36页,共71页。复旦大学计算机科学与工程系软件工程课程37/71数据为中心体系结构•一些数据(比如一个文件或者数据库
)保存在整个结构的中心,并且被其他部件频繁地使用、添加、删除、或者修改第37页,共71页。复旦大学计算机科学与工程系软件工程课程38/71数据流风格的体系结构•这种结构适用于输入数据被一系列的计算或者处理部件变换成输出数据。第38页,共71页。复旦大学计算机科学与工程
系软件工程课程39/71调用和返回风格的体系结构•这种风格使一个软件设计者设计出非常容易修改和扩充的体系结构。•包含:主程序/子程序风格体系结构和远程过程调用风格的体系结构第39页,共71页。复旦大学计算机科学与工程系软件工程课程40/71•在这里要了解几个概念:–
程序结构的深度:程序结构的层次数称为结构的深度。结构的深度在一定意义上反映了程序结构的规模和复杂程度。–程序结构的宽度:层次结构中同一层模块的最大模块个数称为结构的宽度。–模块的扇入和扇出:扇出表示一个模块直接调用(或
控制)的其它模块数目。扇入则定义为调用(或控制)一个给定模块的模块个数。多扇出意味着需要控制和协调许多下属模块。而多扇入的模块通常是公用模块。第40页,共71页。复旦大学计算机科学与工程系软件工程课程41/71面向对象风格的体系结构•系统部件封装数据和
操作数据的方法。•部件之间的交互和协调通过消息来传递。第41页,共71页。复旦大学计算机科学与工程系软件工程课程42/71层次式风格的体系结构•在这种结构中,定义不同的层次,每层都完成了相对外层更靠近机器指令的操作第42页,共71页。复旦大学计算机科学与工程系软件工程课程43/71评估可选的体
系结构•对于同一个软件需求,由于各种设计方法的原理不同,会导出不同的软件结构。•同一问题的不同软件结构:s1s4s3s2s1s4s3s2s1s4s3s2第43页,共71页。复旦大学计算机科学与工程系软件工程课程44/71ATA
M(architecturetrade-offanalysismethod)1)定义应用场景(scenarios):通过usecase图来从用户的角度表现系统。2)得出需求、约束和环境描述:这是需求工程的一部分,
用以确定所有客户方关心的问题都被列出。3)描述能处理上述情境和需求的体系结构风格。4)单独地评价系统的各项性能。针对体系结构设计的性能包括:可靠性,性能、安全性,可维护性,灵活性,可测试性,可移植性,可重用性和
互操作性等。第44页,共71页。复旦大学计算机科学与工程系软件工程课程45/71ATAM(architecturetrade-offanalysismethod)5)针对不同的架构形式,评价第4步提到的这些性能的敏感程度。可以通过这样的方法来
评价:在整个架构中做一些小的变更,分析并确定上诉性能有没有很敏感的变化。那些在体系结构改动中受到较大影响的性能被称为敏感点(sensitivepoint)。6)通过第5步的敏感度分析来评价第三步中提出的那些体系结构。SE
I描述的方法如下:当一个架构的敏感点被确定,我们需要找到在系统中最需要权衡利弊的因素(trade-offpoint)。权衡因素就是指改变架构中的这项内容系统的很多性能就会发生敏感的变化。比如说,一个client-server结构的系统的表现性能和系统中server的数量
是息息相关的(比如增加server的数量,一定程度上系统的表现性能就会提高)……这样的话,server的数量就是这个架构中的平衡点。第45页,共71页。复旦大学计算机科学与工程系软件工程课程46/71•在进行软件体系结构设计时,可以参考如下规则:(1)改进软件结构提
高模块独立性(2)模块适当的深度、宽度、扇出和扇入(3)模块判断作用范围应在其控制作用范围内(4)力争降低模块接口的复杂度(5)设计单入口单出口的模块(6)模块功能应该是可以预测的模块大小适中(7)一般一个模块包含的语句在30~50条左右较好。(8)一个设
计好的软件结构,通常顶层扇出比较高,中层扇出比较少,底层有高扇入。第46页,共71页。复旦大学计算机科学与工程系软件工程课程47/71内容摘要•软件设计工程概述•软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审第47页,共71页。复旦大学计算机科学与工程系
软件工程课程48/71部件级设计技术•在结构化分析和设计方法时部件往往被称为模块•在面向对象分析和设计时部件被称为类,在基于构件的开发方法中,部件被称为构件。第48页,共71页。复旦大学计算机科学与工程系软件工程课程49/71部件级设计技术在部件级设计阶段,主要完成如下
工作:(1)为每个部件确定采用的算法,选择某种适当的工具表达算法的过程,编写部件的详细过程性描述;(2)确定每一部件内部使用的数据结构;(3)在部件级设计结束时,应该把上述结果写入部件级设计说明书,并且通过复审形成正式文档,作为下一阶段(编码阶段)的工作依据。第49页,共71页。复旦大
学计算机科学与工程系软件工程课程50/71结构化程序设计方法•一种较为流行的定义是:“如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连结,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化
的”。•随着面向对象和软件复用等新的软件开发方法和技术的发展,更现实、更有效的开发途径可能是自顶向下和自底向上两种方法有机的结合。第50页,共71页。复旦大学计算机科学与工程系软件工程课程51/71图形表示法•程序流程图•N-S图•PAD
第51页,共71页。复旦大学计算机科学与工程系软件工程课程52/71程序流程图•程序流程图独立于任何一种程序设计语言,比较直观、清晰、易于学习掌握•为使用流程图描述结构化程序,必须限制流程图只能使用五种基本控制结构第52页,共7
1页。复旦大学计算机科学与工程系软件工程课程53/71控制结构相互组合和嵌套的实例第53页,共71页。复旦大学计算机科学与工程系软件工程课程54/71N-S图•Nassi和Shneiderman提出了一种符合结构化程序设计原则的图形描述工具
,叫做盒图,也叫做N-S图•五种基本控制结构第54页,共71页。复旦大学计算机科学与工程系软件工程课程55/71控制结构相互组合和嵌套的实例第55页,共71页。复旦大学计算机科学与工程系软件工程课程56/71PAD•P
AD是ProblemAnalysisDiagram的缩写,由程序流程图演化而来•五种基本控制结构第56页,共71页。复旦大学计算机科学与工程系软件工程课程57/71PAD实例第57页,共71页。复旦大学计算
机科学与工程系软件工程课程58/71判定表•当算法中包含多重嵌套的条件选择时,用程序流程图、N-S图或PAD都不易清楚地描述。•然而,判定表却能清晰地表达复杂的条件组合与应做动作之间的对应关系。•图4-11的例子,把多分支判断改为两分支判断
第58页,共71页。复旦大学计算机科学与工程系软件工程课程59/71不包含多分支结构的流程图实例第59页,共71页。复旦大学计算机科学与工程系软件工程课程60/71反映程序逻辑的判定表第60页,共71页。复旦大学计算机科学与工程系软件工程课程61/71•判定表的优点是能够简洁,无二义性地描述
所有的处理规则。•但判定表表示的是静态逻辑,是在某种条件取值组合情况下可能的结果,它不能表达加工的顺序,也不能表达循环结构第61页,共71页。复旦大学计算机科学与工程系软件工程课程62/71设计性语言PDL•PDL(ProgramDesignLangu
age)是一种用于描述功能部件的算法设计和处理细节的语言,称为设计性语言。•它是一种伪码。一般地,伪码的语法规则分为“外语法”和“内语法”–外语法应当符合一般程序设计语言常用语句的语法规则;–内语法可以用英语中一些简单的句子、短语和通用的数学符号,
来描述程序应执行的功能第62页,共71页。复旦大学计算机科学与工程系软件工程课程63/71PDL的使用实例•PROCEDUREspellcheckIS查找错拼的单词BEGINsplitdocumentintosinglewords把整个文档分离成单词loodupwordsin
dictionary在字典中查这些单词displaywordswhicharenotindictionary显示字典中查不到的单词createanewdictionary造一新字典ENDspellcheck第63页,共71页。复旦大学计算机科学与工程系软件
工程课程64/71PDL特点1.有固定的关键字外语法,提供全部结构化控制结构、数据说明和部件特征。属于外语法的关键字是有限的词汇集,它们能对PDL正文进行结构分割,使之变得易于理解。为了区别关键字,规定关键字一律大写,其它单词一律小写。2.内语法使用自然语言来描述处理特性。内语法比较灵活,只要写
清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。3.有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。4.有子程序定义与调用机制,用以表达各种方式的接口说明。第64页,共71页。复旦大学计算机科学
与工程系软件工程课程65/71内容摘要•软件设计工程概述•软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审第65页,共71页。复旦大学计算机科学与工程系软件工程课程66/71设计规约Ⅰ.工作
范围A.系统目标B.运行环境C.主要软件需求D.设计约束∕限制Ⅱ.体系结构设计A.数据流与控制流复审B.导出的程序结构C.功能与程序交叉索引Ⅲ.数据设计A.数据对象与形成的数据结构B.文件和数据库结构ⅰ文件的逻辑结构ⅱ文
件逻辑记录描述ⅲ访问方式C.全局数据D.文件∕数据与程序交叉索引Ⅳ.接口设计A.人机界面规格说明B.人机界面设计规则C.外部接口设计ⅰ外部数据接口ⅱ外部系统或设备接口D.内部接口设计规则第66页,共71页。复旦大学计算机科学与工程系软件工程课程67/71Ⅴ.各部件的过程设计A.处理与
算法描述B.接口描述C.设计语言(或其它)描述D.使用的部件E.内部程序逻辑描述F.注释∕约束∕限制Ⅵ.运行设计A.运行部件组合B.运行控制规则C.运行时间安排Ⅶ.出错处理设计A.出错处理信息B.出错处理
对策ⅰ设置后备ⅱ性能降级ⅲ恢复和再启动Ⅷ.安全保密设计Ⅸ.需求∕设计交叉索引Ⅹ.测试部分A.测试方针B.集成策略C.特殊考虑Ⅺ.特殊注解Ⅻ.附录第67页,共71页。复旦大学计算机科学与工程系软件工程课程68/71设计评审•软件设计的最终目标是
要取得最佳方案•“最佳”是指在所有候选方案中,就节省开发费用,降低资源消耗,缩短开发时间的条件,选择能够赢得较高的生产率、较高的可靠性和可维护性的方案第68页,共71页。复旦大学计算机科学与工程系软件工程课程69/71设计评审
的内容1.可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成分是否可追溯到某一项需求。2.接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。部件是否满足高内聚和低耦合的要求。部件
作用范围是否在其控制范围之内。3.风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。4.实用性:即确认该软件设计对于需求的解决方案是否实用。第69页,共71页。复旦大学计算机科学与工程系软件工程课程70/71设计评审的内容(续)5.技术清晰度:即确认该软件设计是否以一种易
于翻译成代码的形式表达。6.可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维护。7.质量:即确认该软件设计是否表现出良好的质量特征。8.各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。9.限制:评估对该软件的限制是否现实,是否与需求一致。10.其
它具体问题:对于文档、可测试性、设计过程等等进行评估。第70页,共71页。复旦大学计算机科学与工程系软件工程课程71/71设计评审•评审分正式评审和非正式评审两种•正式评审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答
辩形式•非正式评审多少有些同行切磋的性质,不拘泥于时间和形式第71页,共71页。