第1页:第6讲面向数据流的软件设计方法封面
第6讲面向数据流的软件设计方法封面:第6讲面向数据流的软件设计方法软件工程导论之用工程化的方法来开发软件
第2页:前言
前言
- 软件设计基础知识
- 软件的需求分析及其需求规格说明书(SRS)
- 软件的SRS->软件设计信息
- 面向数据流的设计方法:提供了方法和策略
第3页:本讲内容:基本概念和软件设计过程
本讲内容:基本概念和软件设计过程
- 基本概念和软件设计过程
- 变换分析方法
- 事务分析方法
- 启发式设计策略
- 设计优化原则
第4页:面向数据流设计基本概念和过程
面向数据流设计基本概念和过程:前提–经过评审后的需求模型--数据流图
第5页:数据流的类型
数据流的类型:变换流–信息通常以“外部世界”所具有的形式进入系统,经过处理后,又以这种形式离开系统
第6页:事务型的数据流图
事务型的数据流图:数据沿输入通道到达一个转换,该转换根据输入流类型和特征在若干动作序列中选择一条来执行–输入数据(事务)–具有一个转换(事务中心)–一组动作执行路径
第7页:数据流图类型的特点
数据流图类型的特点
- 实际上所有的数据流图都是变换流,事务流是变换流的一种特殊形式
- 为什么要将事务型的数据流图独立出来考虑?
- 大多数系统的数据流途中,事务流和变换流往往交织在一起
第8页:混合型数据流图
混合型数据流图
第9页:面向数据流的软件设计过程
面向数据流的软件设计过程:面向数据流的设计方法的主要过程–确定数据流的类型:变换流还是事务流–划定流界–将数据流图转换为软件结构–通过设计复审和启发式策略精化所得到软件结构
第10页:10
10
第11页:本讲内容:基本概念和软件设计过程
本讲内容:基本概念和软件设计过程
- 基本概念和软件设计过程
- 变换分析方法
- 事务分析方法
- 启发式设计策略
- 设计优化原则
第12页:变换分析方法
变换分析方法:基本思想–通过一系列的设计步骤,将变换型的数据流图映射为软件结构–输入:SRS(数据流图、数据字典、小说明)–输出:软件总体结构
第13页:步骤1.复审基本系统模型
步骤1.复审基本系统模型
- 什么是基本系统模型
- 基本系统模型即SRS中的顶级数据流图
- 为什么需要对基本系统模型进行复审
- 对系统规格说明书和SRS进行评估,以确保系统的输入和输出数据符合实际
第14页:步骤2.复审和精化数据流图
步骤2.复审和精化数据流图:为什么需要复审和精化数据流图–确保DFD给出目标系统正确的逻辑模型–以获得足够详细的DFD–确保DFD中每个转换代表一个规模适中、相对独立的子功能
第15页:步骤3.确定数据流图的类型
步骤3.确定数据流图的类型
- 信息流都可用变换流表示,但是如果有明显的事务流特征,则还应采用事务流的映射方法
- 设计人员负责判定在数据流图中占主导地位的信息流是变换流还是事务流
第16页:划分因人而异,在一般情况下有点出入对整个
划分因人而异,在一般情况下有点出入对整个
- 划分因人而异,在一般情况下有点出入对整个目标软件系统的影响不是很大步骤4.划分输入流、输出流边界
- 输入流处理部分
- 变换中心
- 输出流处理部分
第17页:划分流界例子
划分流界例子
第18页:步骤5.执行一级分解
步骤5.执行一级分解
- 任务
- 导出三个层次结构的软件结构–底层模块:用于输入、输出和计算等基本功能–中间层模块:协调、控制底层模块的工作–高层模块:用于协调和控制所有的从属模块
- 原则
- 在确保完成系统功能并保持低耦合度、高内聚度的情况下尽可能的减少模块数目
- 一级分解的结果可以用层次图、结构图等来表
- 一级分解的结果可以用层次图、结构图等来表示
第19页:一级分解例子
一级分解例子
第20页:步骤6.执行二级分解
步骤6.执行二级分解
- 任务
- 把DFD中每个转换映射为软件结构中的模块
- 方法
- 从变换中心边界开始沿输入、输出通道向外移动,把输入、输出通道中的每个转换映射为软件结构中的一个模块–沿着输入流到输出流的方向移动,将每个转换映射为相应的模块
- 有必要为每一模块写简要的处理说明,包括:
- 有必要为每一模块写简要的处理说明,包括:进出模块的信息,模块处理功能的陈述,有关的限制和约束
第21页:
第22页:步骤7.精化软件结构改良软件质量
步骤7.精化软件结构改良软件质量:以“模块化”的思想,对软件结构中的模块进行拆并,以追求高内聚、低耦合、易实现、易测试、易维护的软件结构
第23页:
第24页:
第25页:本讲内容:基本概念和软件设计过程
本讲内容:基本概念和软件设计过程
- 基本概念和软件设计过程
- 变换分析方法
- 事务分析方法
- 启发式设计策略
- 设计优化原则
第26页:事务分析方法
事务分析方法
- 当数据流具有明显的事务特征时,应该采用事务流的分析方法
- 基本步骤
- 步骤1.复审基本系统模型
- 步骤2.复审和精化数据流图
- 步骤3.确定数据流图的类型:变换流还是事务流
第27页:步骤4.识别事务流各个组成部分
步骤4.识别事务流各个组成部分
- 把整个事务型DFD划分为以下三个部分
- 接受路径部分:接受事务的输入–事务处理中心–动作路径部分
- 判定在每一条动作路径上数据流的特征
- 变换流或者事务流
第28页:事务型DFD划分例子
事务型DFD划分例子
第29页:步骤5.把事务型DFD映射为软件结构
步骤5.把事务型DFD映射为软件结构
第30页:步骤6.分解精化事务结构以及每个动作路径
步骤6.分解精化事务结构以及每个动作路径
第31页:步骤7.精化初步软件结构
步骤7.精化初步软件结构
第32页:32
32
第33页:本讲内容:基本概念和软件设计过程
本讲内容:基本概念和软件设计过程
- 基本概念和软件设计过程
- 变换分析方法
- 事务分析方法
- 启发式设计策略
- 设计优化原则
第34页:启发式设计策略
启发式设计策略:改造软件结构,降低耦合度,提高内聚度–如果在几个模块中发现共有的子功能,一般应该将该子功能独立出来作为一个模块,以提高模块的独立性–合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度
第35页:减少扇出,追求高扇入
减少扇出,追求高扇入:一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去
第36页:使任一模块的作用域在其控制域内
使任一模块的作用域在其控制域内
- 作用域是指受模块内部判定影响的所有模块
- 控制域是指其所有的下属模块
第37页:其他启发式设计策略
其他启发式设计策略
- 降低模块接口复杂度和冗余度,提高协调性
- 模块接口应尽可能简单并与模块功能相一致如:
- Sort(Data; Number)----
- Sort(Data)
- 模块功能可预测,避免对模块施加过多限制–模块的功能可预测是指输入恒定,则输出恒定
- 追求单入口、单出口的模块
- 为满足设计和可移植性要求,把某些软件用包封装起来
第38页:本讲内容:基本概念和软件设计过程
本讲内容:基本概念和软件设计过程
- 基本概念和软件设计过程
- 变换分析方法
- 事务分析方法
- 启发式设计策略
- 设计优化原则
第39页:设计优化原则
设计优化原则
- 在先不考虑时间复杂度的情况下设计并精化软件结构
- 借用CASE工具模拟分析运行性能,定位低效率的部分
- 详细设计时对耗时的模块进行仔细的推敲,以减少模块的运行开销
- 用高级语言编写
- 对大量占用CPU资源的模块必要时用低级语言重新进行编码,以提高效率
第40页:本讲小结1.基本概念和软件设计过程
本讲小结1.基本概念和软件设计过程
- 事务分析方法
- 启发式设计策略
- 设计优化原则
第41页:思考题
思考题:你觉得在进行软件设计时,除了上述启发式设计策略和优化原则之外,还应考虑那些问题?
第42页:问答与交流
本讲内容讲解完毕,进入提问与交流环节,可围绕本讲要点进行提问与讨论。