1软件工程第5章总体设计25.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具5.5面向数据流的设计5.6小结3掌握设计过程中应遵循的基本原理描绘软件结构的图形工具利用结构化设计原理设计系统结构重点:设计过程中应遵循的基本原理面向数据流的设计方法难点:变换分析、事务分析的过程和应用学习要求4前言软件设计的目的和任务软件设计的两个阶段概要设计详细设计将需求分析模型转换为软件结构SA与SD的关系5678将需求分析模型转换为软件结构数据词典数据流图实体关系图状态转换图加工控制规规格格说说明明数据对象描述过程设计接口设计体系结构设计数据设计910111、模块化2、抽象3、逐步求精4、信息隐蔽和局部化5、模块独立5.2设计原理125.2.1模块化(Modularity)1314图5.1模块化和软件成本模块化和成本的关系155.2.2抽象什么是抽象?认识复杂事物的思维工具抽取事物的本质特性,暂时不考虑它们的细节软件开发中的抽象:数据抽象过程抽象16在软件工程过程中,从系统定义到实现,每进展一步都可以看做是对软件解决方案的抽象化过程的一次细化。对软件进行模块设计的时候,可以有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言描述问题的解法。而在较低的抽象层次上,则采用过程化的方法。5.2.2抽象17在软件计划阶段,软件被当做整个计算机系统中的一个元素来看待。在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。而在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低的抽象层次。5.2.2抽象(II)18Miller法则:一个人在任何时候都只能把注意力集中在(7±2)个知识块上。逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”求精是细化过程。从在高抽象级别定义的功能陈述(或信息描述)开始,求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。5.2.3逐步求精19信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息,对于不需要这些信息的模块来说,是不能访问的。应该隐藏的一般是模块的实现细节,故又称“细节隐藏”。局部化是指把一些关系密切的软件元素,物理地放得彼此靠近。这些独立的模块,彼此间仅仅交换那些为了完成系统功能而必须交换的信息。5.2.4信息隐藏和局部化201、什么是模块的独立性:模块只完成系统要求的相对独立的功能符合信息隐藏原则模块间关联和依赖程度尽量小2、模块独立的优点容易开发、测试、维护5.2.5模块独立21两个标准分别称为耦合Coupling内聚Cohesion5.2.6模块独立性度量标准(I)2223影响耦合强弱因素:2425控制耦合一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。消除控制耦合调用模块必须知道被调用模块的内部逻辑,增加了依赖判定上移、功能分解262728导致的问题293031内聚标志一个模块内,各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。设计目标:高内聚理想的内聚模块只做一件事。2.内聚Cohesion32偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的逻辑内聚:如果一个模块完成的任务,在逻辑上属于相同或相似的一类时间内聚:如果一个模块包含的任务,必须在同一段时间内执行低内聚有如下几类33343536373839405.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具5.5面向数据流的设计5.6小结41改进软件设计、提高软件质量424344•扇出过大则模块过分复杂,可增加中间层次控制模块•扇入大则该模块共享程度高,但不能违背模块独立性•顶层扇出较高,中间层扇出较少,底层模块扇入较高454647485.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具5.5面向数据流的设计5.6小结491层次图和HIPO图2结构图5.4描绘软件结构的图形工具50层次图用来描绘软件的层次结构。矩形框代表一个模块,方框间的连线,表示调用关系,而表示组成关系。层次图和HIPO图(I)51层次图很适于在自顶向下设计软件的过程中使用。HIPO图=层次图+IPO图为了能使HIPO图具有可追踪性,在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号。和H图中每个方框相对应,应该有一张IPO图描绘这个方框代表的模块的处理过程。HIPO图中的每张IPO图内,都应该明显地标出它所描绘的模块在H图中的编号,以便追踪了解这个模块在软件结构中的位置。HIPO图52方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头表示模块的调用关系。上方的方框,代表的模块调用下方的模块。通常还用带注释的箭头,表示模块调用过程中来回传递的信息。尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。2结构图53结构图还有附加符号,表示模块的选择调用或循环调用2结构图545.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具5.5面向数据流的设计5.6小结55面向数据流的设计方法,理论上可以设计任何软件的结构。通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。5.5.1概念变换流事务流5.5面向数据流的设计方法56信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。1.变换流57这种数据流是“以事务为中心的”,即数据沿输入通路到达一个处理T,这个处理T根据输入数据的类型,在若干个动作序列中选出一个来执行。处理T称为事务中心,完成下述任务:(1)接收输入数据(输入数据又称为事务);(2)分析每个事务以确定它的类型;(3)根据事务类型选取一条活动通路。2事务流5859变换分析是一系列设计步骤的总称,经过这些步骤,把具有变换流特点的数据流图,按预先确定的模式,映射成软件结构。下面通过一个例子说明变换分析的方法。1.例子:汽车数字仪表板的设计。假设的仪表板将完成下述功能:(1)通过模数转换实现传感器和微处理机接口;(2)在发光二极管面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里/小时,则发出超速警告铃声。5.5.2变换分析60假设的仪表板将完成下述功能:(1)通过模数转换实现传感器和微处理机接口;(2)在发光二极管面板上显示数据;(3)指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;(4)指示加速或减速;(5)超速警告:如果车速超过55英里/小时,则发出超速警告铃声。616263设计步骤64第二级分解65使用设计度量和启发式规则,进一步精化◆输入结构中的模块“转换成rpm”和“收集sps”可以合并;◆模块“确定加速/减速”可以放在模块“计算mph”下面,以减少耦合;◆模块“加速/减速显示”可以相应地放在模块“显示mph”的下面。66体会设计与写程序的区别:软件的整体结构全局的高度评价和精化软件675.5.3事务分析68图5.20事务分析的映射方法6970(1)在不考虑时间因素的前提下,开发并精化软件结构;(2)在详细设计阶段,选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率;(3)使用高级程序设计语言编写程序;(4)在软件中,孤立出那些大量占用处理机资源的模块;(5)必要时重新设计或用依赖于机器的语言,重写上述大量占用资源的模块的代码,以求提高效率。5.5.4设计优化71小结设计过程、原理模块化、抽象、逐步求精、信息隐藏和局部化模块独立(高内聚、低耦合)图形工具层次图和HIPO图、结构图面向数据流的设计变换分析、事务分析的过程7273将需求分析模型转换为软件结构数据词典数据流图实体关系图状态转换图加工控制规规格格说说明明数据对象描述过程设计接口设计体系结构设计数据设计