软件工程模型与方法07、结构化软件设计

上传人:j****9 文档编号:55047475 上传时间:2018-09-23 格式:PPT 页数:68 大小:1.45MB
返回 下载 相关 举报
软件工程模型与方法07、结构化软件设计_第1页
第1页 / 共68页
软件工程模型与方法07、结构化软件设计_第2页
第2页 / 共68页
软件工程模型与方法07、结构化软件设计_第3页
第3页 / 共68页
软件工程模型与方法07、结构化软件设计_第4页
第4页 / 共68页
软件工程模型与方法07、结构化软件设计_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《软件工程模型与方法07、结构化软件设计》由会员分享,可在线阅读,更多相关《软件工程模型与方法07、结构化软件设计(68页珍藏版)》请在金锄头文库上搜索。

1、软件工程模型与方法 Models & Methods of SE,第七章 结构化软件设计 肖丁,本章内容,7.1 系统功能结构图 7.2 变换映射 7.3 事务映射 7.4 优化系统功能结构图 7.5 设计后处理 7.6 详细设计 7.7 界面设计 7.8 HIPO简介 7.9 Jackson简介,引言,结构化设计方法依据需求分析的结果“数据流图”推导出软件的系统功能结构图。其要点是: 建立数据流的类型。 指明数据流的边界。 将数据流图映射到程序结构。 用“因子化”方法定义控制的层次结构。 用设计测量和一些启发式规则对结构进行细化。,7.1 结构图的基本概念,四种基本类型的模块 传入模块 :从

2、下属模块取得数据,经过某些处理,再将其传送给上级模块。 传出模块 :从上级模块获得数据,进行某些处理,再将其传送给下属模块。 变换模块 :即加工模块。它从上级模块取得数据,进行处理,转换成其它形式,再传送回上级模块。 协调模块 :对所有下属模块进行协调和管理的模块。,7.1.1 结构图的分解和类型,原子模块:结构图中不能再分解的底层模块; 因子分解系统: 所有系统的加工处理都由原子模块完成; 其它非原子模块仅仅进行控制和协调的功能。 通常,系统功能结构图根据数据流图中加工特性分为以下两种结构: 变换处理型 事务处理型,7.1.2 变换型结构,变换型数据处理问题的工作过程大致分为三步, 取得数据

3、 变换数据 给出数据,7.1.3 事务型结构,存在某一个作业数据流,它可以引发一个或多个处理,这种数据流就叫做事务。 事务处理中心 事务处理加工 事务是最小的工作单元,不论成功与否都作为一个整体进行工作。 原子性 一致性 隔离性 持久性,7.2 变换映射,变换映射是一组设计步骤,将具有变换流特征的数据流图映射为一个预定义的程序结构模版。 运用变换映射方法建立初始的系统结构图,然后进行多次改进,得到系统的最终结构图。 复审并评估分析模型; 复审并重画数据流图; 确定数据流图中的变换和事务特征; 区分输入流、输出流和中心变换部分,即标明数据流的边界; 进行一级“因子化”分解,设计顶层和第一层模块;

4、 进行二级“因子化”分解,设计中、下层模块; 利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。,7.2.1 重画数据流图,其出发点是描述系统中的数据是如何流动的;并根据需要将局部层次的数据流图合并为一层,便于理解和设计; 以需求分析阶段的数据流图为基础,可以从物理输入到物理输出,或者相反;也可以从顶层加工开始,逐层向下; 一般情况下,在图上不要出现控制逻辑(例如判定和循环等),箭头只表示数据流而非控制流; 不用考虑系统的开始和结束; 省略每一个加工的异常处理,只考虑主要加工处理逻辑; 当数据流进入和离开一个加工时,要仔细地标记它们,不要重名。 如有必要,可以使用逻辑运算

5、符“与”和“或”。,7.2.2 确定系统边界,中心变换:多股数据流汇集的地方往往是系统的中心变换部分。 逻辑输入:可以从数据流图上的物理输入开始,一步一步向系统中间移动,一直到数据流不再被看作是系统的输入为止,则其前一个数据流就是系统的逻辑输入。 可以认为逻辑输入就是离物理输入端最远的,且仍被看作是系统输入的数据流。 逻辑输出:从物理输出端开始,一步一步地向系统中间移动,就可以找到离物理输出端最远,且仍被看作是系统输出的数据流。,7.2.3 一级因子化分解,其主要任务就是设计顶层和第一层模块。 顶层模块: 主要起到控制和协调的作用; 用程序名字命名,将它画在与中心变换相对应的位置上; 它调用下

6、层模块,完成系统所要做的各项工作 。 中层模块(第一层): 既完成一部分控制,又完成适当的变换工作; 为每一个逻辑输入设计一个输入模块,为主模块提供数据; 为每一个逻辑输出设计一个输出模块,它将主模块提供的数据输出; 为中心变换设计一个变换模块,它将逻辑输入转换成逻辑输出; 第一层模块与主模块之间传送的数据应与数据流图相对应。,7.2.4 二级因子化分解,其主要任务是设计中下层模块 将数据流图中的每一个变换型加工映射为程序结构中的模块 输入模块 输出模块 变换模块 从变换中心的边界开始,沿输入路径和输出路径向外,将变换依次映射到低层的软件结构中去。 最终给出初步的系统功能结构图,7.2.4.1

7、 输入输出模块,输入模块:要向调用它的上级模块提供数据,由以下模块组成: 接收数据模块; 变换模块:把这些数据变换成它的上级模块所需的数据。 输出模块:从调用它的上级模块接收数据,用以输出,由以下模块组成: 一个是将上级模块提供的数据变换成输出的形式; 另一个是将它们输出。,7.2.4.2数据流图推导出的 系统初始结构图,7.2.4.3 模块的处理说明,模块输入和输出的信息,即接口描述。 模块需要处理的信息,局部数据结构中存储的数据。 过程描述,指明该功能模块主要的逻辑规则和任务。 功能模块的有关限制条件和特殊性的要求 I/O、与硬件相关的特征、时间要求等,7.3 事务映射,事务映射也从分析数

8、据流图开始,自顶向下,逐步分解,建立事务型系统结构图。,复审系统分析模型 重画数据流图 确定是否具有事务流特征 确定事务中心及流特征 进行事务映射 因子化分解和细化 优化系统结构,7.3.1 识别事务中心,事务中心通常位于几条操作路径的起始点上,可以从数据流图上直接找出来。 事务源:一个带有请求性质的数据流; 事务中心:处理事务源的加工,且后继的多个加工必须是并列的并在事务中心的控制下完成不同功能处理。,7.3.2 事务映射,事务流应映射到包含一个输入分支和一个分类事务处理分支的程序结构上。 输入分支结构的开发与变换流的方法类似 分类事务处理分支结构包含一个调度模块,它调度和控制下属的事务处理

9、模块。 建立一个主模块用以代表整个加工,P层 然后考虑被称为事务层的第二层模块,T层 第二层模块只能是三类:取得事务、处理事务和给出结果。 处理事务模块的下层为操作模块,A层 操作模块之下为细节模块,D层,变换-事务混和型结构,一般来讲,一个大型的软件系统不可能是单一的数据变换型,也不可能是单一的事务型,通常是变换型结构和事务型结构的混合体。 在具体的应用中一般以变换型为主,事务型为辅的方式进行软件结构设计。,变换-事务混和型结构,7.4 软件模块的优化原则,模块功能的完善化 消除重复功能,改善软件结构 模块的作用范围应在控制范围之内 尽可能减少高扇出结构 避免或减少使用病态联接 模块的大小要

10、适中 设计功能可预测的模块,避免过分受限制的模块 软件包应满足设计约束和可移植性,7.4.1 模块功能的完善化,一个完整的功能模块,不仅应能完成指定的功能,而且还应当能够告诉使用者完成任务的状态,以及不能完成的原因。 规定的功能部分; 出错处理部分。当模块不能完成规定的功能时,必须返回出错信息和标志,向它的调用者报告出现这种例外情况的原因 如果需要返回一系列数据给它的调用者,当完成数据加工时应给它的调用者返回一个该模块执行是否正确结束的“标志”。,7.4.2 消除重复功能,改善软件结构,在得到初始的功能结构图之后,如果发现有几个模块有相似之处,可加以改进 完全相似:在结构上完全相似,可能只是在

11、数据类型上不一致。 局部相似:需要考虑功能之间的耦合及内聚性,7.4.3 模块的作用范围应在控制范围之内,模块的控制范围包括它本身及其所有的从属模块; 模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。 如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是复杂的。,模块A的控制范围为:ABCDEFG。 模块C的控制范围为:CFG。,模块的作用范围与控制范围,模块的作用范围与控制范围,建议,所有受一个判定影响的模块应该都从属于该判定所在的模块,最好局限于做出判定的那个模块及其直接下属模块。 在设计过程中,

12、当遇到作用范围不在控制范围之内,可应用如下办法把作用范围移到控制范围之内: 将判定所在模块合并到父模块中,使判定处于较高的层次; 将受到判定影响的模块下移到控制范围内; 将判定上移到层次中较高的位置,7.4.4 尽可能减少高扇出结构,经验证明,一个设计得很好的软件模块结构,通常上层扇出比较高,中层扇出较少,底层扇入到有高扇入的公用模块中。 模块的扇出过大,将使得系统的模块结构图的宽度变大,宽度越大结构图越复杂。比较适当的模块扇出数目为25,最多不要超过9。 模块的扇出过小也不好,这样将使得系统的功能结构图的深度大大增加,不但增加了模块接口的复杂度,而且增加了调用和返回的时间开销,降低系统的工作

13、效率。,扇入扇出结构的调整,模块的扇出指模块调用子模块的个数。如果模块的扇出过大,就表明模块过分复杂,需要协调和控制过多的下属模块。 一个模块的扇入数目很大,说明共享该模块的上级模块数目增多。 但如果一个模块的扇入太大,比如超过7或8,而且它又不是公用模块,说明该模块可能具有多个功能。为此应当对其进一步分析并将其功能分解。,7.4.5 避免或减少使用病态联接,直接病态联接:即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部 公共数据域病态联接:模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。 通信模块联接:即模块A和模块B通过通信模块TABLEI

14、T传送数据。,7.4.6 模块的大小要适中,模块的大小是指模块内部结构的多少。 限制模块的大小是减少复杂性的手段之一,因而要求把模块的大小限制在一定的范围之内。 通常规定其语句行数在50100左右,最多不超过500行。 体积过大的模块往往是由于分解不充分,且具有多个功能,因此需要对功能进一步分解,生成一些下级模块或同层模块。 反之,模块体积较小时也可以考虑是否可能与调用它的上级模块合并。,7.4.7 设计功能可预测的模块,一个功能可预测的模块不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。 如果模块内部有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。,避免过分受限制的模

15、块,一个仅处理单一功能的模块,由于具有高度的内聚性,而受到了设计人员的重视。 如果限制死了模块的局部数据结构的大小、控制流的选择或者接口模式,则很难适应用户新的要求或环境的变更,给将来的软件维护造成了很大的困难,7.4.8 应满足设计约束和可移植性,运用变换分析方法建立系统的结构图时应当注意以下几点: 在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后能转向另一个模块的下层模块的设计。 在设计下层模块时,应考虑模块的低耦合和高内聚问题,提高初始结构图的质量。 注意黑盒技术的使用。 如果出现了以下情况,就停止模块的功能分解 当模块不能再细分为明显的子任务时; 当分解成用户提供

16、的模块或程序库的子程序时; 当模块的界面是输入输出设备传送的信息时; 当模块不宜再分解得过小时。,7.5 设计后处理,在经过变换映射和事务映射之后,还需要为所获得的系统功能结构图进行说明,形成概要设计说明书,包括以下内容: 必须为每一个模块写一份处理说明; 为每一个模块提供一份接口说明; 确定全局数据结构和局部数据结构;,7.5.1 处理说明,处理说明是一个关于模块内部处理的清晰且无歧义的正确描述,包含了模块的主要处理任务、条件抉择和输入输出。,“给出结果2”模块调用“格式化2”模块,将内部编码形式的计算结果2转换成以ASCII码表示的文本形式的预格式化数据,再调用“给出结果”模块,进一步转换

17、成按预定的图表安排的形式输出。,7.5.2 接口说明,接口说明要给出一张表格,列出所有进入模块和从模块输出的数据。应包括 通过参数表传递的信息 对外界的输入输出信息 访问全局数据区的信息 指出其下属的模块和上级模块。,PROCEDURE format-2; /过程format-2(格式化2)INTERFACE ACCEPTS; /入口TYPE calc-value-2 IS BINARY CODE; /类型 calc-value-2是二进制码INTERFACE RETURNS; /出口TYPE preformatted-data IS NUMERIC /类型preformatted-data是数值型* no external IO or global data Used /无外部IO或全局数据* called by put-result-2 /所调用:模块put-result-2* calls no subordinate modules /调用:无下属模块,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号