资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
软件工程软件工程 第七讲第七讲 结构化概要设计结构化概要设计 本次课程需要掌握的内容本次课程需要掌握的内容什么是软件设计?软件设计要达到的目标(重要)什么是软件设计?软件设计要达到的目标(重要)总体设计阶段的任务(了解)总体设计阶段的任务(了解)数据流图的分类(重要)数据流图的分类(重要)内聚和耦合的种类(非常重要)内聚和耦合的种类(非常重要)基于数据流图的程序设计方法(了解)基于数据流图的程序设计方法(了解)结构化设计方法结构化设计方法1)何谓设计何谓设计设计目标设计目标:依据需求规约依据需求规约,在一个抽象层上建立系统软件在一个抽象层上建立系统软件模型模型,包括软件体系结构(数据和程序结构),以及详细的处包括软件体系结构(数据和程序结构),以及详细的处理算法理算法,产生设计规格说明书产生设计规格说明书.一种软件开发活动一种软件开发活动,定义实现需求规约所需结构定义实现需求规约所需结构.总体设计阶段的任务:总体设计阶段的任务:1、划分出组成系统的物理元素、划分出组成系统的物理元素程序、文件、程序、文件、数据库、人工过程和文档等等,但是每个物理元素数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。以后仔细设计。2、设计软件的结构,也就是要确定系统中每个程、设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关序是由哪些模块组成的,以及这些模块相互间的关系。系。总体设计过程通常由两个主要阶段组成:总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。结构设计阶段,确定软件结构。1.设想供选择的方案设想供选择的方案在总体设计阶段分析员应该考虑各种可能的实现方在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。案,并且力求从中选出最佳方案。设计过程设计过程2.选取合理的方案选取合理的方案应该从前一步得到的一系列供选择的方案中选取若应该从前一步得到的一系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等成本干个合理的方案,通常至少选取低成本、中等成本和高成本的三种方案。和高成本的三种方案。对每个合理的方案分析员都应该准备下列对每个合理的方案分析员都应该准备下列4份资料:份资料:(1)系统流程图;系统流程图;(2)组成系统的物理元素清单;组成系统的物理元素清单;(3)成本成本/效益分析;效益分析;(4)实现这个系统的进度计划。实现这个系统的进度计划。3.推荐最佳方案推荐最佳方案分析员应该综合分析对比各种合理方案的利弊,推分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。实现计划。通过内部评审,且使用部门的负责人也接受了分析通过内部评审,且使用部门的负责人也接受了分析员所推荐的方案之后,进入总体设计过程的下一个员所推荐的方案之后,进入总体设计过程的下一个重要阶段重要阶段结构设计。结构设计。4.功能分解功能分解结合算法描述仔细分析数据流图中的每个处理,如结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。地分解成一系列比较简单的功能。5.设计软件结构设计软件结构通常程序中的一个模块完成一个适当的子功能。把通常程序中的一个模块完成一个适当的子功能。把模块组织成良好的层次系统,顶层模块调用它的下模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能。下层的模块完成最具体的功能。6.设计数据库设计数据库对于需要使用数据库的那些应用系统,软件工程师对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。上,进一步设计数据库。7.制定测试计划制定测试计划在软件开发的早期阶段考虑测试问题,能促使软件在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。设计人员在设计时注意提高软件的可测试性。8.书写文档书写文档应该用正式的文档记录总体设计的结果,在这个阶应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种:段应该完成的文档通常有下述几种:(1)系统说明主要内容包括用系统流程图描绘的系系统说明主要内容包括用系统流程图描绘的系统构成方案,组成系统的物理元素清单,成本统构成方案,组成系统的物理元素清单,成本/效效益分析;对最佳方案的概括描述,精化的数据流图,益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用用层次图或结构图描绘的软件结构,用IPO图或其图或其他工具他工具(例如,例如,PDL语言语言)简要描述的各个模块的算简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等等。者之间的交叉参照关系等等。(2)用户手册根据总体设计阶段的结果,修改更正用户手册根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。在需求分析阶段产生的初步的用户手册。(3)测试计划包括测试策略,测试方案,预期的测测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等等。试结果,测试进度计划等等。(4)详细的实现计划详细的实现计划(5)数据库设计结果数据库设计结果9.审查和复审审查和复审最后应该对总体设计的结果进行严格的技术审查,最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理在技术审查通过之后再由使用部门的负责人从管理角度进行复审。角度进行复审。2)结构化设计方法结构化设计方法( ()在总体设计层)在总体设计层 -引入了两个术语引入了两个术语/ /符号符号 模块模块: :一种可独立标识的软件成分一种可独立标识的软件成分. . 调用调用: :模块间的一种关系模块间的一种关系, ,模块模块A A为了完成其任务必须为了完成其任务必须 依赖其他模块依赖其他模块. .-引入了模块结构图引入了模块结构图用于表达软件系统的静态结构用于表达软件系统的静态结构.-过程指导过程指导为了实现设计目标为了实现设计目标,总体设计的具体任务是:总体设计的具体任务是: 将将DFDDFD转化为转化为MSDMSD 分二步实现:分二步实现: 第一步:如何将第一步:如何将DFDDFD转化为初始的转化为初始的MSDMSD 分类:变换型数据流图分类:变换型数据流图 事务型数据流图事务型数据流图 变换设计变换设计 事务设计事务设计 数据流图分类数据流图分类变换型变换型: :事务型事务型12345678abcdefhgyxz123546abcdefgy变换设计变换设计XXXX系统系统变换模块变换模块geteput hput hput gput g get c get c get d get d c,d-ec,d-ee-fe-ff-g,hf-g,hh-yh-yput yput yg-xg-xput xput xx-zx-zput zput zget aget aget bget bb-db-da-ca-ceeg,hhgzzxxgyyhdbcacdeefg,hfxab事务设计事务设计事务中心事务中心输入模块输入模块路径路径1路径路径2输出模块输出模块aycgbfc-ecee-gegb-dbdd-fdf最后生成最后生成HIPO图图和和H图中每个方框相对应,应该有一张图中每个方框相对应,应该有一张IPO图图描绘这个方框代表的模块的处理过程。描绘这个方框代表的模块的处理过程。HIPO图中图中的每张的每张IPO图内都应该明显地标出它所描绘的模块图内都应该明显地标出它所描绘的模块在在H图中的编号,以便追踪了解这个模块在软件结图中的编号,以便追踪了解这个模块在软件结构中的位置。构中的位置。带编号的层次图带编号的层次图(H图图) 第二步:如何将初始的第二步:如何将初始的MSDMSD转化为最终可供详转化为最终可供详 细设计使用的细设计使用的MSD MSD 基于模块化原理基于模块化原理- -高内聚高内聚 低耦合低耦合, , 给出一些设计规则经验规则给出一些设计规则经验规则, , 用于精化初始的用于精化初始的MSDMSD 体现设计人员的创造体现设计人员的创造 模块独立的概念是模块化、抽象、信息隐藏和局部模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。化概念的直接结果。开发具有独立功能而且和其他模块之间没有过多的开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。换句话说,相互作用的模块,就可以做到模块独立。换句话说,希望这样设计软件结构,使得每个模块完成一个相希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系对独立的特定子功能,并且和其他模块之间的关系很简单。很简单。3)模块独立)模块独立模块独立性重要性:模块独立性重要性:第一,有效的模块化第一,有效的模块化(即具有独立的模块即具有独立的模块)的软件比的软件比较容易开发出来。这是由于能够分割功能而且接口较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要。这个优点尤其重要。第二,独立的模块比较容易测试和维护。这是因为第二,独立的模块比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够错误传播范围小,需要扩充功能时能够“插入插入”模块。模块。耦合:不同模块之间相互依赖程度的度量。耦合:不同模块之间相互依赖程度的度量。 耦合类型:耦合类型: 内容耦合:内容耦合: 一个模块访问另一个模块的内部数据;一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠;两个模块有一部分程序代码重叠;一个模块有多个入口。一个模块有多个入口。 公共耦合:两个以上的模块共同引用一个全局数据项。公共耦合:两个以上的模块共同引用一个全局数据项。 控制耦合:一个模块向另一模块传递一个控制信号,控制耦合:一个模块向另一模块传递一个控制信号, 接受信号的模块将依据该信号值进行必要的活动。接受信号的模块将依据该信号值进行必要的活动。 标记耦合:两个模块至少有一个通过界面传递的公共标记耦合:两个模块至少有一个通过界面传递的公共 有结构的参数。有结构的参数。 数据耦合:模块间通过参数传递基本类型的数据。数据耦合:模块间通过参数传递基本类型的数据。内聚:一个模块之内各成分之间相互依赖程度的度量。内聚:一个模块之内各成分之间相互依赖程度的度量。 内聚类型:内聚类型: 偶然内聚:一个模块之内各成分之间没有任何关系。偶然内聚:一个模块之内各成分之间没有任何关系。 逻辑内聚:几个逻辑上相关的功能放在同一模块中。逻辑内聚:几个逻辑上相关的功能放在同一模块中。 时间内聚:一个模块完成的功能必须在同一时间内完成,而时间内聚:一个模块完成的功能必须在同一时间内完成,而 这些功能只是因为时间因素关联在一起。这些功能只是因为时间因素关联在一起。 过程内聚:处理成分必须以特定的次序执行。过程内聚:处理成分必须以特定的次序执行。 通信内聚:各成分都操作在同一数据集或生成同一数据集。通信内聚:各成分都操作在同一数据集或生成同一数据集。 顺序内聚:各成分与一个功能相关,且一个成分的输出作为顺序内聚:各成分与一个功能相关,且一个成分的输出作为 另一成分的输入。另一成分的输入。 功能内聚:模块的所有成分对完成单一功能是最基本的,且功能内聚:模块的所有成分对完成单一功能是最基本的,且 该模块对完成这一功能而言是充分必要的。该模块对完成这一功能而言是充分必要的。启发性规则启发性规则- -经验的总结经验的总结(1 1)改进软件结构,提高模块独立性;)改进软件结构,提高模块独立性;(2 2)模块规模适中)模块规模适中- -每页每页6060行语句;行语句;(3 3)深度、宽度、扇入和扇出适中;)深度、宽度、扇入和扇出适中;(4 4)模块的作用域力争在控制域之内;)模块的作用域力争在控制域之内;(5 5)降低模块接口的复杂性;)降低模块接口的复杂性;(6 6)模块功能应该可以预测。)模块功能应该可以预测。模块的作用域和控制域模块的作用域和控制域应用示例:数字仪表板系统应用示例:数字仪表板系统的精化的精化读旋转信号读旋转信号收集并收集并求平均求平均转换成转换成转转/分分计算计算gph读并读并校核校核确定确定加速加速/减速减速计算里程计算里程计算计算mph和超速值和超速值计算计算燃料消耗燃料消耗产生产生加速加速/减速显示减速显示产生产生里程显示里程显示发出发出铃声铃声产生产生mph显示显示产生产生mpg显示显示旋转信号旋转信号信号信号/秒秒(sps)sps燃烧流燃烧流传感器信号传感器信号燃烧流燃烧流gphspsrpmrpm箭头指示箭头指示上箭头上箭头下箭头下箭头水平线水平线英里英里超速值超速值mphmpgmpg显示显示mph显示显示铃声铃声里程显示里程显示输入部分输入部分GetgphGetrpmGetspsGet燃料流燃料流变换燃料变换燃料流为流为ghpGet燃转信号燃转信号变换燃转信变换燃转信号为燃料流号为燃料流变换变换sps为为rpmGetspsGetsps转换为转换为spsGet转速信号转速信号变换为变换为sps变换为变换为sps、数字仪表板系统输入部分的精化数字仪表板系统输入部分的精化输入部分的初始模块结构图输入部分的初始模块结构图转速信号转速信号转速信号转速信号燃料流燃料流燃料流燃料流燃料流燃料流gphspsspsrpmspsrpm gphspsspsspsspsspsspssps转速信号转速信号转速信号转速信号输入部分输入部分计算计算gph计算计算rpm计算计算sps读燃转信号读燃转信号采集采集sps读转速信号读转速信号使用启发式规则使用启发式规则1 1,并考虑其它规则,并考虑其它规则, 可以将输入部分的模块结构图精化为:可以将输入部分的模块结构图精化为:其中:其中:sps为转速的每秒信号量;为转速的每秒信号量;sps为为sps的平均值;的平均值;sps为为sps的瞬时的瞬时变化值;变化值;rpm为每分钟转速;为每分钟转速;mph为每小时英里数;为每小时英里数;gph为每小时燃烧为每小时燃烧的燃料加仑数;的燃料加仑数;rpm为行进里程。为行进里程。输出部分输出部分PUTmpgPUTmphPUT里程里程PUT加加/减速减速PUT超速量超速量显示显示显示显示显示显示、数字仪表板系统输出部分的精化数字仪表板系统输出部分的精化输出部分的初始模块结构图输出部分的初始模块结构图显示显示对于这一初始的模块结构图,一般情况下应:对于这一初始的模块结构图,一般情况下应: 把把相相同同或或类类似似的的物物理理输输出出合合并并为为一一个个模模块块,以以减减少少模模块块之间的关联。就本例而言:之间的关联。就本例而言:左左边边前前三三个个“显显示示”,基基本本上上属属于于相相似似的的物物理理输输出出,因因此此可可以以把把它它们们合合并并为为一一个个显显示示模模块块。而而将将“PUT PUT mpgmpg”模模块块和和相相关关的的“生生成成显显示示的的模模块块合合并并为为一一个个模模块块;同同样样地地,应应把把“PUT PUT mphmph”模模块块、“PUTPUT里里程程”各各自自与与相相关关的的生生成成显显示示的的模模块合并为一个模块,参见下图。块合并为一个模块,参见下图。 其其它它求求精精的的规规则则,与与输输入入部部分分类类同同。例例如如,可可以以将将“PUT PUT 加加/ /减减速速”模模块块与与其其下下属属的的两两个个模模块块合合并并为为一一个个模模块块,将将“PUT PUT 超超速速量量”模模块块与与其其下下属属的的两两个个模模块块合合并并为为一一个个模模块块 。 输出模块输出模块生成生成mpg显示显示生成生成mph显示显示生成里程生成里程显示显示生成加生成加/减速显示减速显示生成蜂鸣生成蜂鸣显示显示通过以上求精之后通过以上求精之后, ,可得如下可得如下的模块结构图的模块结构图变换模块变换模块计算计算mpg计算计算mph计算里程计算里程计算加计算加/减速减速 、变换部分的精化、变换部分的精化首先,应该了解:对于变换部分的求精,是一首先,应该了解:对于变换部分的求精,是一项具有挑战性的工作。其中主要是根据设计准则,并要通过项具有挑战性的工作。其中主要是根据设计准则,并要通过实践,不断地总结经验,才能设计出合理的模块结构。实践,不断地总结经验,才能设计出合理的模块结构。就给定的数字仪表板系统而言,如果把就给定的数字仪表板系统而言,如果把“确定加确定加/ /减速减速”的模块放在的模块放在“计算速度计算速度mphmph”模块下面,则可以减少模块下面,则可以减少模块之间的关联,提高模块的独立性。模块之间的关联,提高模块的独立性。通过这一求精,可以得到如下的模块结构图:通过这一求精,可以得到如下的模块结构图:通过以上讨论,可以看出:在总体设计中通过以上讨论,可以看出:在总体设计中将一个给定的将一个给定的DFDDFD转换为初始的模块结构图基本转换为初始的模块结构图基本上是一个上是一个 “机械机械”的过程,一般体现不了设计人员的创的过程,一般体现不了设计人员的创造力;造力;优化设计优化设计- -将一个初始的模块结构图转换为最终将一个初始的模块结构图转换为最终的模块结构图,对设计人员将是一种挑战,其结果将的模块结构图,对设计人员将是一种挑战,其结果将直接影响软件系统开发的质量。直接影响软件系统开发的质量。阅读与思考阅读与思考张海藩软件工程,第张海藩软件工程,第5章章信息隐藏的意义?信息隐藏的意义?模块化的粒度为什么不是越大或者越小越好?模块化的粒度为什么不是越大或者越小越好?
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号