920 likes | 1.13k Views
第五章 传统的设计方法. 本章介绍了传统的设计模型,以及从分析模型导出设计模型的一般方法。重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的 Jackson 设计方法。 重点掌握: 结构化设计模型,结构化设计方法。. 结构化设计模型 结构化设计方法 过程设计 Jackson 方法. 本章内容 介绍了传统的设计模型,以及从分析模型导出设计模型的一般方法。 重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的 Jackson 设计方法。 重点掌握 结构化设计模型,结构化设计方法。. 5.1 概述.
E N D
第五章 传统的设计方法 • 本章介绍了传统的设计模型,以及从分析模型导出设计模型的一般方法。重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的Jackson设计方法。 • 重点掌握:结构化设计模型,结构化设计方法。
结构化设计模型 • 结构化设计方法 • 过程设计 • Jackson方法
本章内容 • 介绍了传统的设计模型,以及从分析模型导出设计模型的一般方法。 • 重点讲述了面向数据流设计的结构化设计方法(包括结构设计和过程设计)和面向数据结构设计的Jackson设计方法。 • 重点掌握 • 结构化设计模型,结构化设计方法。
5.1 概述 • 面向数据流设计和面向数据设计 • 从分析模型导出设计模型
5.1.1 面向数据流设计和面向数据设计 • 面向数据流设计 • 将信息流映射成软件结构 • 数据流是考虑一切问题的出发点 • 最终目的 • 给出设计软件结构的一个系统化的途径 • 数据流的类型决定映射方法 • 变换流 • 事务流 • 该方法适用于概要设计阶段 • 常称为结构化设计(SD)方法
面向数据设计 • 该方法不明显的使用软件结构的概念,模块是设计过程的副产品。对于模块独立性也没有给予应有的重视。 • 以数据结构作为分析和设计的基础 • 最终目标 • 得出程序的过程性描述 • 该方法适用于过程设计/详细设计阶段 • 主要设计方法 • Jackson方法 • Warnier方法
5.1.2 从分析模型导出设计模型 • 结构化设计与结构化分析的关系 • 软件设计必须依据对软件的需求来进行,结构化分析的结果为结构化设计提供了最基本的输入信息。 • 分析模型的每个元素都提供了创建设计模型时所需要的信息。
数据设计把分析阶段创建的信息域模型转变成实现软件所需要的数据结构。数据设计把分析阶段创建的信息域模型转变成实现软件所需要的数据结构。 体系结构设计确定了程序的主要结构元素(即程序构件)之间的关系。 接口设计的结果描述了软件内部、软件与协作系统之间以及软件与使用者之间的通信方式。 过程设计把程序体系结构中的结构元素,变换成对软件构件的过程性描述。 在软件设计期间我们所做出的决策,将最终决定软件开发能否成功,更重要的是,这些设计决策将决定软件维护的难易程度。
5.2 结构化设计方法(SD方法) • SD方法的中心任务 • 把用DFD图表示的系统分析模型方便地转换为软件结构的设计模型。 • 软件结构的描述工具 • H图(层次图) • SC图(软件结构图)
层次图 通常使用层次图描绘软件的层次结构。在层次图中一个矩形框代表一个模块,框间的连线表示调用关系。
HIPO图 HIPO图是美国IBM公司发明的“层次图+输入/处理/输出图”的英文缩写。为了使HIPO图具有可追踪性,在H图(即层次图)里除了顶层的方框之外,每个方框都加编号。
5.2.1 SC图(Structure Chart) 用于表达软件的组成模块及其调用关系。 • SC图的组成符号 • 矩形框来表示模块 • 带箭头的连线表示模块间的调用关系 • 在调用线的两旁标出传入和传出模块的数据流 • SC图中的模块符号 • 传入 • 传出 • 变换 • 源 • 漏 • 控制 P88实物投影解释
A A B C D Z X,Y Z B C A 简单调用 选择调用 循环调用 B C • SC图中的模块调用 • 简单调用:调用线的箭头指向被调用模块 • 选择调用:图中用菱形符号表示选择 • 循环调用:用叠加在调用线始端的环形箭头表示循环
注意: • 层次图和结构图并不严格表示模块的调用次序。 • 层次图和结构图并不指明什么时候调用下层模块。 通常用层次图作为描绘软件结构的文档。结构图作为文档并不合适。但是,利用IPO图和数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,却可以作为检察设计正确性和评价模块独立性的好方法。
5.2.2 数据流图的类型与SD方法的步骤 • 数据流图的类型 • 变换型结构 • 事务型结构
组成 传入路径 变换中心 传出路径 数据流 传入流 变换流 传出流 变换 中心 信息 传出 传入 传入流 传出流 变换流 时间 变换型结构 基本模型 变换中心:通过计算或处理,将系统的传入流变为传出流。又称加工中心。 传入流:离输入始端最远但仍可被看作系统输入的那些数据流。 传出流:离输出末端最远但仍可被看作系统输出的那些数据流。 数据流
组成 一条接受路径 一个事务中心 若干条动作路径 特征 具有在多种事务中执行某类事务的能力。 事务 中心 接受路径 动作路径 事务型 基本模型
从DFD图到SC图的映射 • 复审DFD图,必要时可再次进行修改或细化 • 鉴别DFD图的结构特征:事务?变换? • 按照规则,把DFD图为初始的SC图 • 改进初始的SC图,获得最终SC图。
两种映射方法 • 变换映射 • 事务映射 变换映射 变换型DFD图 初始SC图 事务映射 事务型DFD图 初始SC图
5.2.3 变换映射 适用于将变换型结构的DFD图转换为初始软件结构图。步骤如下: 1、区分传入、传出和变换中心三个部分,在DFD图上标明它们的分界线 (1)变换中心的任务:通过计算或处理,把系统的逻辑输入变换(或加工)为系统的逻辑输出。 (2)逻辑输入(传入数据项):离物理输入端(输入始端)最远,但仍可以被看作系统输入的那些数据流。
(3)逻辑输出(传出数据项):离物理输出端(输出末端)最远,但仍可以被看作系统输出的那些数据流。(3)逻辑输出(传出数据项):离物理输出端(输出末端)最远,但仍可以被看作系统输出的那些数据流。 (4)数据在系统中流动时,不仅在通过变换中心时要被变换,在传入路径和传出路径上,其内容和形式也可能发生变化。故变换中心又称为“中心加工”,以区别于数据在传入传出过程中的其它加工。 (5)划分的结果可能会受经验的影响,但必须从实际情况出发,对DFD图作认真和细致的分析 (6)几种可能遇到的情况及其处理方法
有些系统没有中心加工,系统的逻辑输入和逻辑输出是完全相同的数据流,应将DFD划分为传入和传出两部分,不要强求一律硬分成三个部分。有些系统没有中心加工,系统的逻辑输入和逻辑输出是完全相同的数据流,应将DFD划分为传入和传出两部分,不要强求一律硬分成三个部分。 • 除传入部分外,在变换中心甚至传出部分也可能从系统外接受某些输入数据流,称为二次传入数据。该数据不应当作传入部分的一部分。 • 有些DFD图可能失之太粗,缺少应有的细节,可考虑对自己用于分析的DFD进行补充。
2、完成“第一级分解”,建立初始SC图的框架。包括顶层控制模块和第一层模块。2、完成“第一级分解”,建立初始SC图的框架。包括顶层控制模块和第一层模块。 两种画法: a.顶层控制模块+传入、传出和中心变换3个一层模块 b.顶层控制模块+按照传入、传出实际数据流数和中心变换模块数确定数量的模块
Mc c,e w,u c,e w,u MA MT ME Mc u c w e p e w,u c,p r r ME2 P R ME1 MA1 MA2 Q
3、完成“第二级分解/分支分解”,分解SC图的各个分支。对初始SC图的框架继续进行由顶向下的分解,直至画出每个分支所需要的全部模块。3、完成“第二级分解/分支分解”,分解SC图的各个分支。对初始SC图的框架继续进行由顶向下的分解,直至画出每个分支所需要的全部模块。 传入路径的处理:由变换中心外移,把传入路径中每个处理映射成软件结构中输入处理的低一层模块 传出路径的处理:由变换中心外移,通路中各处理直接映射成输出处理的低一层模块
为了显式的表示在传入/传出路径上的数据变换,为了显式的表示在传入/传出路径上的数据变换, 在分支分解中可考虑增加变换模块,功能为 Read/Get 和 Write/Put。 传入路径 处理 c,e c,e MA MA e e c c C E GetC GetE b b c d d e b d D GetB BtoC ReadD DtoE B b a a a A ReadA AtoB
传出路径处理 u,w u,w ME ME u u w w W U WriteW PutU v u v v V UtoV WriteV
变换中心的处理 MT p e w,u c,p r r P R Q
合成 Mc u,w c,e c,e w,u MT ME MA u w e c WriteW PutU GetC GetE u b b c d d e v v UtoV WriteV GetB BtoC ReadD DtoE b a a ReadA AtoB
5.2.4 事务映射 虽然在任何情况下都可以使用变换分析方法设计软件结构,但是在数据流具有明显的事务特点时,也就是有一个明显的“发射中心”(事务中心)时,还是以采用事务分析方法为宜。 事务:引发、触发或启动某一动作或一串动作的任何数据、控制、信号、事件或状态变化
事务分析步骤: 1、在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包含全部动作路径) 事务中心通常位于DFD图中多条动作路径的起点;向事务中心提供信息的路径,是系统的接受路径;动作路径通常不止一条,切每条均具有自己的结构特性(变换或事务型)。
2、画出SC图框架,把DFD图的三个部分分别映射为事务控制模块、接受模块和动作发送模块2、画出SC图框架,把DFD图的三个部分分别映射为事务控制模块、接受模块和动作发送模块 事务控制 事务控制 事务 分析发送 接收 发送 … …
P T1 T2 Ti A1 A3 A2 Aj D1 D2 Dk 3、分解和细化接受和发送分支,完成初始的SC图 接受分支一般具有变换特性,可对其进行变换分析; 动作分支典型的可映射为4层:P-处理层、T-事务层、A-操作层、D-细节层。A、D常可被P、T共享。
在大型系统的DFD中,变换型和事务型两类结构往往同时存在。对于一个大系统,常常把变换分析和事务分析应用到同一个数据流图的不同部分,由此得到的子结构形成“构件”,可以利用它们构造完整的软件结构。在大型系统的DFD中,变换型和事务型两类结构往往同时存在。对于一个大系统,常常把变换分析和事务分析应用到同一个数据流图的不同部分,由此得到的子结构形成“构件”,可以利用它们构造完整的软件结构。
G C1 D C2 E J K c1 d e h c2 k c3 g B C3 b1 b2 l F j f L b3 b m A a 混合结构一例 总体为变换型结构 传入路径为事务型结构
5.2.5 结构化设计的优化规则 软件工程师们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发规则。这些启发规则在许多场合能给软件工程师有益的启示,往往能帮助他们找到改进软件设计提高软件质量的途径,因此有助于实现有效的模块化。 下面介绍几条常用的启发规则。
一、改进软件结构提高模块独立性 通过模块分解或合并,力求降低耦合提高内聚。 二、模块规模应该适中 一页纸内(≤60行)。 过大,可考虑继续分解模块功能;过小,可考虑合并到上层模块。
三、深度、宽度、扇出和扇入都应适当 1、概念 深度:软件结构中控制的层数,往往粗略的标志一个系统的大小和复杂程度。越大,意味着模块功能可能过分简单,软件的程序控制复杂。 宽度:软件结构内同一个层次上的模块总数的最大值。宽度越大系统越复杂。(主要受扇出影响) 扇出:模块直接调用的下级模块数目,也称模块的控制宽度。 扇入:直接调用它的上级模块数。
2、高扇出结构 扇出数应保持在:<7。 太高:调用的控制困难; 太低:应考虑向上合并功能。 (1)高扇出结构:称为“煎饼”结构 计算实发工资 取得工资数据 计时制工资额 薪金制工资额 编外人员工资 税收扣款 编外人员税款 常规扣款 编外人员扣款
(2)改进方法:增加中间层,形成塔形结构 计算实发工资 计薪工人实发工资 取得工资数据 计时工人实发工资 编外人员实发工资 编外人员税款 编外人员工资 编外人员扣款 薪金制工资额 常规扣款 计时制工资额 税收扣款
3、高扇入结构 (1)一个模块的扇入越高,则共享这一模块的上级模块数目越多,消除重复代码的效果就越明显。 (2)底层高扇入结构:可共享的底层功能多,形成“瓮形”或“清真寺”结构。 (3)高扇入结构的画法:调用线太多,交叉,乱。考虑用编号代替功能方框,直接画在调用模块下。
四、模块的作用域应该在控制域之内 1、两个范围的含义 控制范围:包括模块本身及其下属模块,不论这些模块系由该模块直接调用,还是间接调用。 作用范围:是一个与条件判定相联系的概念,指模块内的某条件判定涉及的直接调用和间接调用模块。 一般情况,一个判定作用范围内的模块可能会有3种情况: • 整个模块是否执行,依赖于判定的结果; • 上述模块的下属模块; • 模块内有部分功能的执行依赖于这一判定。
2、作用范围/控制范围原则 (1)把一个判定的作用范围限制在判定所在模块的控制范围之内,是改进模块结构的基本原则。 (2)理想情况,是使判定的作用范围和判定所在模块的控制范围尽可能的吻合。 3、把系统中有较大影响的判定放在层次结构中较低的位置,可能是导致违反作用范围/控制范围原则的主要原因。因此,要么把这类重要的判定从低层次上移到足够高的上层模块中,要么把受这些判定影响的模块调整并下移到控制范围之内。