Download presentation
Presentation is loading. Please wait.
1
软件工程 第5章 结构化分析与设计
2
复旦大学计算机科学技术学院 软件工程(第二版)
结构化方法 一种面向数据流的传统软件开发方法 以数据流为中心构建软件的分析模型和设计模型 分为: 结构化分析(Structured Analysis 简称SA) 结构化设计(Structuresd Design 简称SD) 结构化程序设计(Structured Programmin 简称SP) 复旦大学计算机科学技术学院 软件工程(第二版)
3
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
4
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
5
复旦大学计算机科学技术学院 软件工程(第二版)
结构化分析方法 发展历史 提出:20世纪60年代末到70年代初 成熟:20世纪70年代末到80年代中期 主要思想:抽象与自顶向下的逐层分解 (控制复杂性的两个基本手段) 复旦大学计算机科学技术学院 软件工程(第二版)
6
复旦大学计算机科学技术学院 软件工程(第二版)
抽象与分解 抽象:忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面 分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止 随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构) X 2 1 4 3 1.3 1.2 1.1 2.4 2.3 2.2 2.1 复旦大学计算机科学技术学院 软件工程(第二版)
7
复旦大学计算机科学技术学院 软件工程(第二版)
结构化分析过程 理解当前的现实环境,获得当前系统的具体模型(物理模型) 从当前系统的具体模型抽象出当前系统的逻辑模型 分析目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型 为目标系统的逻辑模型作补充 复旦大学计算机科学技术学院 软件工程(第二版)
8
复旦大学计算机科学技术学院 软件工程(第二版)
结构化分析模型的描述 数据字典是模型的核心,它包含了软件使用和产生的所有数据的描述 数据流图:用于功能建模,描述系统的输入数据流如何经过一系列的加工变换逐步变换成系统的输出数据流,数据流图中的数据流、文件、数据项、加工在数据字典中描述,反映加工逻辑的加工规约用“小说明”描述 实体-关系图 数据流图 状态转换图 控 制 规 约 数据字典 加 工 规 约 数 据 对 象 描 述 复旦大学计算机科学技术学院 软件工程(第二版)
9
复旦大学计算机科学技术学院 软件工程(第二版)
结构化分析模型的描述 实体—关系图:用于数据建模,描述数据字典中数据之间的关系,数据对象的属性用“数据对象描述”描述 状态转换图:用于行为建模,描述系统接收哪些外部事件,以及在外部事件的作用下系统的状态迁移,控制规约用来描述软件控制方面的附加信息 实体-关系图 数据流图 状态转换图 控 制 规 约 数据字典 加 工 规 约 数 据 对 象 描 述 复旦大学计算机科学技术学院 软件工程(第二版)
10
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 数据流图定义 数据流图的画法 复旦大学计算机科学技术学院 软件工程(第二版)
11
复旦大学计算机科学技术学院 软件工程(第二版)
数据流图 Data Flow Diagram(简称DFD):描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模,基本元素包括: 数据流(data flow):由一组固定成分的数据组成,代表数据的流动方向 加工(process):描述了输入数据流到输出数据流的变换,即将输入数据流加工成输出数据流 文件(file):用于保存某些数据,供以后使用 源或宿(source or sink):表示存在于软件系统之外的人员或组织 复旦大学计算机科学技术学院 软件工程(第二版)
12
复旦大学计算机科学技术学院 软件工程(第二版)
源或宿 存在于软件系统之外的人员或组织,表示软件系统输入数据的来源和输出数据的去向,因此也称为源点和终点 例如,对一个考务处理系统而言 考生向系统提供报名单(输入数据流),所以考生是考试系统(软件)的一个源 考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以考试中心是该系统的一个宿 源或宿用相同的图形符号表示 当数据流从该符号流出时表示是源 当数据流流向该符号时表示是宿 当两者皆有时表示既是源又是宿 复旦大学计算机科学技术学院 软件工程(第二版)
13
复旦大学计算机科学技术学院 软件工程(第二版)
加工和文件 加工:描述输入数据流到输出数据流的变换 每个加工用一个定义明确的名字标识 至少有一个输入数据流和一个输出流 可以有多个输入数据流和多个输出数据流 文件:保存数据信息的外部单元 每个文件用一个定义明确的名字标识 由加工进行读写 DFD中称为文件,但在具体实现时可以用文件系统实现,也可以用数据库系统实现 复旦大学计算机科学技术学院 软件工程(第二版)
14
复旦大学计算机科学技术学院 软件工程(第二版)
数据流 每个数据流用由一组固定成分的数据组成并拥有一个定义明确的名字标识 如:运动会管理系统中,报名单(数据流)由队名、姓名、性别、参赛项目等数据组成 数据流的流向 从一个加工流向另一个加工 从加工流向文件(写文件) 从文件流向加工(读文件) 从源流向加工 从加工流向宿 复旦大学计算机科学技术学院 软件工程(第二版)
15
复旦大学计算机科学技术学院 软件工程(第二版)
示例:图书订购系统DFD 制作 发书单 图书 订购 核准的订购单 订购单 顾客 收费数据 账单 出库单 制作 财务报表 收费 财务报表 经理 图书库存 书库 管理 入库单 图书代理商 帐务数据库 复旦大学计算机科学技术学院 软件工程(第二版)
16
复旦大学计算机科学技术学院 软件工程(第二版)
数据流图的扩充符号 描述一个加工的多个数据流之间的关系 星号(*):表示数据流之间存在“与”关系 所有输入数据流同时存在时,才能进行加工处理 或者加工处理的结果是同时产生所有输出数据流 加号(+):表示数据流之间存在“或”关系 至少存在一个输入数据流时,才能进行加工处理 或者加工处理的结果至少产生一个输出数据流 异或(⊕):表示数据流之间存在“异或”(互斥)关系 必须存在且仅存在一个输入数据流时,才能进行加工处理 或者加工处理的结果产生且仅产生一个输出数据流 复旦大学计算机科学技术学院 软件工程(第二版)
17
复旦大学计算机科学技术学院 软件工程(第二版)
对数据流图进行分层 George Miller在著名的论文“神奇的数字7加减2:我们处理信息的能力的某种限制”中指出:人们在一段时间内的短期记忆似乎限制在5~9件事情之内 根据自顶向下逐层分解的思想将数据流图画成层次结构 每个层次画在独立的数据流图中,加工个数可大致控制在“7加减2”的范围中 复旦大学计算机科学技术学院 软件工程(第二版)
18
复旦大学计算机科学技术学院 软件工程(第二版)
数据流图的各个层次 顶层图只有代表整个软件系统的1个加工,描述了软件系统与外界(源或宿)之间的数据流 顶层图中的加工经分解后的图称为0层图(只有1张) 中间层图中至少有一个加工(也可以有多个)在下层图中分解成一张子图 处于最底层的图称为底层图,其中所有的加工不再分解成新的子图 复旦大学计算机科学技术学院 软件工程(第二版)
19
复旦大学计算机科学技术学院 软件工程(第二版)
图和加工的编号 顶层图只有一个代表整个软件系统的加工,该加工不必编号。 0层图中的加工编号分别为1,2,3,… 子图号:若父图中的加工号x分解成某一子图,则该子图号记为“图x” 子图中加工的编号:若父图中的加工号为x的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、x.3… 复旦大学计算机科学技术学院 软件工程(第二版)
20
分层数据流图示例—— 资格和水平考试的考务处理系统
简化的资格和水平考试的考务处理系统 分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试 考试的合格标准将根据每年的考试成绩由考试中心确定 考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中 复旦大学计算机科学技术学院 软件工程(第二版)
21
复旦大学计算机科学技术学院 软件工程(第二版)
资格和水平考试的考务处理系统 —功能需求 1.对考生送来的报名单进行检查 2.对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站 3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者 4.制作考生通知单送给考生 5.进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表 复旦大学计算机科学技术学院 软件工程(第二版)
22
资格和水平考试的考务处理系统 —部分数据流的组成
报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址 正式报名单=准考证号+报名单 准考证=地区+序号+姓名+准考证号+考试级别+考场 考生名单={准考证号+考试级别} 考生名册=正式报名单 统计分析表=分类统计表+难度分析表 考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志 复旦大学计算机科学技术学院 软件工程(第二版)
23
复旦大学计算机科学技术学院 软件工程(第二版)
画系统的输入输出(顶层图) 确定源或宿:考生、阅卷站和考试中心 它们都既是源又是宿 顶层图唯一的加工:软件系统(考务处理系统) 确定数据流:系统的输入/输出信息 输入数据流:报名单(来自考生)、成绩清单(来自阅卷站)、合格标准(来自考试中心) 输出数据流:准考证(送往考生)、考生名单(送往阅卷站)、考生通知书(送往考生)、统计分析表(送往考试中心) 额外的输出流(考虑系统的健壮性):不合格报名单(返回给考生),错误成绩清单(返回给阅卷站) 顶层图通常没有文件 复旦大学计算机科学技术学院 软件工程(第二版)
24
复旦大学计算机科学技术学院 软件工程(第二版)
考务处理系统顶层图 不合格报名单 统计分析表 合格标准 报名单 考务 处理系统 准考证 考生 考试中心 考生通知单 成绩清单 考生名单 错误成绩清单 阅卷站 复旦大学计算机科学技术学院 软件工程(第二版)
25
复旦大学计算机科学技术学院 软件工程(第二版)
画系统内部(0层图)-1 以下确定加工、数据流、文件、源或宿的一般方法适用于0层图及其各层子图 确定加工:确定父图中某加工分解而成的子加工 根据功能分解来确定加工:将一个复杂的功能分解成若干个较小的功能,较多应用于高层DFD中的分解 根据业务处理流程确定加工:分析父图中待分解加工的业务处理流程,业务流程中的每一步都可能是一个子加工 特别要注意在业务流程中数据流发生变化或数据流的值发生变化的地方,应该存在一个加工,例如: 编制 准考证号 合格报名单 正式报名单 复旦大学计算机科学技术学院 软件工程(第二版)
26
复旦大学计算机科学技术学院 软件工程(第二版)
画系统内部(0层图)-2 确定数据流 在父图中某加工分解而成的子图中,父图中相应加工的输入/输出数据流都是且仅是子图边界上的输入/输出数据流 分解后的子加工之间应增添相应的新数据流表示加工过程中的中间数据 如果某些中间数据需要保存以备后用,那么可以成为流向文件的数据流 同一个源或加工可以有多个数据流流向一个加工,如果它们不是一起到达和一起加工的,那么可以将它们分成若干个数据流,例如: 读取 银行卡 信息 客户 银行卡数据 密码 复旦大学计算机科学技术学院 软件工程(第二版)
27
复旦大学计算机科学技术学院 软件工程(第二版)
画系统内部(0层图)-3 确定文件 如果父图中该加工存在读写文件的数据流,则相应的文件和数据流都应画在子图中 在分解子图中,如果需要保存某些中间数据以备后用,则可以将这些数据组成一个新的文件 新文件(首次出现的文件)至少应有一个加工为其写入记录,同时至少存在另一个加工来读该文件的记录 注意:从父图中继承下来的文件在子图中可能只对其进行读,或只进行写 复旦大学计算机科学技术学院 软件工程(第二版)
28
复旦大学计算机科学技术学院 软件工程(第二版)
画系统内部(0层图)-4 确定源和宿 0层图和其它子图中通常不必画出源和宿 有时为了提高可读性,可以将顶层图中的源和宿画在0层图中 最终得到考务处理系统0层图 根据功能分解方法识别出两个加工:考试报名、统计成绩 数据流 继承顶层图中的输入数据流和输出数据流 定义二个加工之间的数据流:由于这二个加工分别在考试前后进行,因此登记报名单所产生的结果“考生名册”应作为文件保存以便考试后由统计成绩加工引用 复旦大学计算机科学技术学院 软件工程(第二版)
29
复旦大学计算机科学技术学院 软件工程(第二版)
考务处理系统0层图 不合格报名单 考生通知单 1 考试 报名 2 统计 成绩 报名单 统计分析表 错误成绩清单 准考证 考生名单 合格标准 成绩清单 考生名册 复旦大学计算机科学技术学院 软件工程(第二版)
30
复旦大学计算机科学技术学院 软件工程(第二版)
画加工内部(1…n层图) 复杂的加工可以继续分解成1张DFD子图 分解方法 将该加工看作一个小系统,该加工的输入/输出数据流就是这个假设的小系统的输入/输出数据流 然后采用画0层图的方法,画出该加工的子图 以0层图中加工1(考试报名)为例 根据业务处理流程来确定由加工1的分解 与加工1相关的业务流程:首先检查考生送来的报名单,然后编准考证号,并产生准考证,最后产生考生名单和考生名册(文件) 复旦大学计算机科学技术学院 软件工程(第二版)
31
复旦大学计算机科学技术学院 软件工程(第二版)
考务处理系统加工1子图 3个子加工:检查报名单、编准考证号、登记考生 “合格报名单”和“正式报名单”是新增加的数据流,其它数据流都是加工1原有的 在加工1的分解中没有新的文件产生 1.3 登记 考生 考生名单 1.2 编准考证号 准考证 正式报名单 1.1 检查 报名单 合格报名单 不合格报名单 考生名册 复旦大学计算机科学技术学院 软件工程(第二版)
32
复旦大学计算机科学技术学院 软件工程(第二版)
考务处理系统加工2子图 2.5 分析 试题难度 难度分析表 2.4 分类 统计成绩 分类统计表 考生名册 2.3 制作 通知单 考生通知单 2.2 审定 合格者 正式成绩清单 合格标准 试题得分清单 正确成绩清单 2.1 检查 成绩清单 错误成绩清单 复旦大学计算机科学技术学院 软件工程(第二版)
33
复旦大学计算机科学技术学院 软件工程(第二版)
总结:画分层数据流图的步骤 1.画系统的输入和输出 2.画系统内部 3.画加工内部 4.重复第3步,直至每个尚未分解的加工都足够简单(即不必再分解) 复旦大学计算机科学技术学院 软件工程(第二版)
34
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
35
复旦大学计算机科学技术学院 软件工程(第二版)
分层数据流图的审查 检查图中是否存在错误或不合理(不理想)的部分 一致性:分层DFD中不存在矛盾和冲突 完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素 本节将从分层DFD的一致性和完整性、构造分层DFD时需注意的问题以及分解程度等几个方面来说明如何审查分层DFD的合理性 复旦大学计算机科学技术学院 软件工程(第二版)
36
复旦大学计算机科学技术学院 软件工程(第二版)
分层数据流图的一致性 父图与子图平衡 任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致 数据守恒 一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生 多余的数据流:加工未使用其输入数据流中的某些数据项 (不一定是错误,但可能隐含潜在的错误) 局部文件 一个加工的输出数据流不能与该加工的输入数据流同名 复旦大学计算机科学技术学院 软件工程(第二版)
37
复旦大学计算机科学技术学院 软件工程(第二版)
父图与子图不平衡的实例 左图输入数据流有M和N,输出数据流是T 而加工2的子图(右图)边界上的输入数据流是N,输出数据流是S和T 父图与子图不平衡 1 2 3 A B C M N T 2.1 2.2 2.3 P S Q 复旦大学计算机科学技术学院 软件工程(第二版)
38
复旦大学计算机科学技术学院 软件工程(第二版)
父图与子图平衡的实例 注意:如果父图某加工的一个数据流,对应于子图中几个数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这个数据流,那么它们仍算是平衡的 e 2.5 2.4 2.3 2.2 2.1 b2 b1 a c d b 2 1 (a) 父图 (b) 子图 由于b=b1+b2, 所以父图与子图是平衡的 a:考生通知单;b:统计分析表;b1:分类统计表;b2:难度分析表;c:错误成绩清单;d:成绩清单;e:合格标准。 复旦大学计算机科学技术学院 软件工程(第二版)
39
复旦大学计算机科学技术学院 软件工程(第二版)
数据不守恒的实例 由于“正式成绩清单”中缺少“考生通知单”中的姓名、通信地址等数据,这些数据也无法由加工2.3自己产生,因此,加工2.3不满足数据守恒的条件 错误成绩清单 考生名册 2.5 分析 试题难度 难度分析表 2.4 分类 统计成绩 分类统计表 2.3 制作 通知单 考生通知单 2.2 审定 合格者 正式成绩清单 合格标准 试题得分清单 2.1 检查 成绩清单 正确成绩清单 由此可见: 1.数据流的组成对DFD是有影响的 2.构建DFD与建立数据字典应交替进行,以便于对分层DFD的校验 复旦大学计算机科学技术学院 软件工程(第二版)
40
复旦大学计算机科学技术学院 软件工程(第二版)
局部文件 考虑分层数据流中一个文件应画在哪些DFD中,而不该画在哪些DFD中 任何一个文件都应同时包含读和写该文件的数据流,除非该文件是当前系统与另一个软件系统所共享(应在需求说明中指明) 在一张DFD中当一个文件作为若干个加工之间的交界面(一个写另一个读)时该文件应画出 在一张DFD中当一个文件仅与一个加工进行读写操作,并且在该DFD的父(祖先)图中未出现过该文件,则该文件是相应加工的内部文件,在当前DFD中不应画出 一个文件一旦在某张DFD中画出,那么在它的子孙图中应根据父图与子图平衡的原则画出该文件 在子孙图中,这个文件可能只有读文件的数据流或者写文件的数据流 复旦大学计算机科学技术学院 软件工程(第二版)
41
复旦大学计算机科学技术学院 软件工程(第二版)
局部文件示例 “试题得分清单”文件是加工2的局部文件,根据抽象原则不应该将这类表示加工细节的局部文件画在其父图(如图c)中,正确的画法是图a和b (a) 父图 1 考生名册 2 2.5 2.4 2.3 2.2 2.1 试题得分清单 考生名册 (b) 子图 (c) 含局部文件的父图 试题得分清单 1 考生名册 2 复旦大学计算机科学技术学院 软件工程(第二版)
42
复旦大学计算机科学技术学院 软件工程(第二版)
同一加工的输入、输出数据流不能同名 同一个加工的输出数据流和输入数据流即使组成成份相同,仍应对它们取不同的名字,以表示它们是不同数据流 例如,“报名单”和“合格报名单” 允许一个加工有二个相同的数据流分别流向二个不同的加工 复旦大学计算机科学技术学院 软件工程(第二版)
43
复旦大学计算机科学技术学院 软件工程(第二版)
分层数据流图的完整性 每个加工至少有一个输入数据流和一个输出数据流 在整套分层数据流图中,每个文件应至少有一个加工读该文件,有另一个加工写该文件 分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致 分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约 复旦大学计算机科学技术学院 软件工程(第二版)
44
复旦大学计算机科学技术学院 软件工程(第二版)
其它需注意的问题-1 适当命名:每个数据流、加工、文件、源和宿都应被适应地命名,名字应符合被命名对象的实际含义 名字应反映整个对象(如数据流、加工),而不是仅反映它的某一部分 避免使用空洞的、含义不清的名字,如数据、信息、处理、统计等 如果发现某个数据流或加工难以命名时,往往是DFD分解不当的征兆,此时应考虑重新分解 画数据流而不是画控制流 判断准则:这条线上是否有数据流过 复旦大学计算机科学技术学院 软件工程(第二版)
45
复旦大学计算机科学技术学院 软件工程(第二版)
其它需注意的问题-2 避免一个加工有过多的数据流 当一个加工存在许多数据流时往往意味着分解不合理 解决办法:重新分解 1)把需要重新分解的某张图(含有该复杂加工的图)的所有子图连接成一张图 2)把连接后的图重新划分成几个部分,使各部分之间的联系最小 3)重新定义父图,即第2)步中的每个部分作为父图中的一个加工 4)重新建立各子图,即第2)步中的每个部分都是一张子图 5)为所有的加工重新命名和编号 复旦大学计算机科学技术学院 软件工程(第二版)
46
复旦大学计算机科学技术学院 软件工程(第二版)
数据流图重新分解示例 ( b ) 原加工2子图 2.2 2.1 2.3 2.4 2.5 H J I C K L E M N ( d ) 重新分解后的父图 4 5 2′ 3 2″ 1 A B G D F P ( a ) 原父图 2 ( c ) 合并 2.2 复旦大学计算机科学技术学院 软件工程(第二版)
47
复旦大学计算机科学技术学院 软件工程(第二版)
其它需注意的问题-3 分解尽可能均匀 理想目标:任何两个加工的分解层数之差不超过1 应尽可能使分解均匀,对于分解不均匀的情况应重新分解 先考虑稳定状态,忽略琐碎的枝节 先考虑稳定状态下的各种问题,暂时不考虑系统如何启动、如何结束、出错处理以及性能等问题 随时准备重画 对于一个复杂的软件系统,往往要经过反复多次的重画和修改才能构造出完整、合理、满足用户需求的分层DFD 分析阶段遗漏下来的一个错误,到开发后期要化费几百倍代价来纠正这个错误 复旦大学计算机科学技术学院 软件工程(第二版)
48
复旦大学计算机科学技术学院 软件工程(第二版)
分解的程度 可参照以下几条与分解有关的原则: 7加减2 分解应自然,概念上合理、清晰 只要不影响DFD的易理解性,可适当多分解几个加工,以减少层数 一般说来,上层分解得快些(即多分解几个加工),下层分解得慢些(即少分解几个加工) 分解要均匀 复旦大学计算机科学技术学院 软件工程(第二版)
49
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
50
复旦大学计算机科学技术学院 软件工程(第二版)
数据字典 数据流图与数据字典是密不可分的,两者结合起来构成软件的逻辑模型(分析模型) 数据字典由字典条目组成,每个条目描述DFD中的一个元素 数据字典条目包括:数据流、文件、数据项(组成数据流和文件的数据)、加工、源或宿 加工逻辑的详细说明可以用“小说明”来描述 复旦大学计算机科学技术学院 软件工程(第二版)
51
复旦大学计算机科学技术学院 软件工程(第二版)
数据字典的描述符号 符 号 名 称 举 例 = 定义为 x=… 表示x由…组成 + 与 a+b 表示a和b […,…] 或 [a,b] 表示a或b […│…] [a│b] 表示a或b {…} 重复 {a} 表示a重复0或多次 {a} 表示a重复3到8次 (…) 可选 (a) 表示a重复0或1次 ″…″ 基本数据元素 ″a″ 表a是基本数据 复旦大学计算机科学技术学院 软件工程(第二版)
52
复旦大学计算机科学技术学院 软件工程(第二版)
字典条目 不同的开发组织或团队可以根据项目的需要定义字典条目的描述内容 字典条目中的描述内容主要包括 DFD元素的基本信息(名称、别名、简述、注解) 定义(数据类型、数据组成) 使用特点(取值范围、使用频率、激发条件) 控制信息(来源、去向、访问权限)等 复旦大学计算机科学技术学院 软件工程(第二版)
53
复旦大学计算机科学技术学院 软件工程(第二版)
数据流条目的描述内容 名称:数据流名(可以是中文名或英文名) 别名:名称的另一个名字 简述:对数据流的简单说明 数据流组成:描述数据流由哪些数据项组成 数据流来源:描述数据流从哪个加工或源流出 数据流去向:描述数据流流入哪个加工或宿 数据量:系统中该数据流的总量 如考务处理系统中“报名单”的总量是100000张 或者单位时间处理的数据流数量,如80000张/天 峰值:某时段处理的最大数量 如每天上午9:00至11:00处理60000张表单 注解:对该数据流的其它补充说明 复旦大学计算机科学技术学院 软件工程(第二版)
54
复旦大学计算机科学技术学院 软件工程(第二版)
数据流组成 数据流组成是数据流条目的核心,它列出组成该数据流的各数据项,例如: 培训报名单=姓名+单位+课程 运动员报名单=队名+姓名+性别+{参赛项目} 当一个数据流的组成比较复杂时,可以将其分解成几个数据流,例如: 课程=课程名+任课教师+教材+时间地点 时间地点={星期几+第几节+教室} 31 复旦大学计算机科学技术学院 软件工程(第二版)
55
复旦大学计算机科学技术学院 软件工程(第二版)
数据流组成示例(发票) 51 发票=单位名称+{商品名+数量+单价+金额} +总金额+日期+(营业员) 单位名称 商品名 数量 单价 金额 总金额 日期 营业员 复旦大学计算机科学技术学院 软件工程(第二版)
56
复旦大学计算机科学技术学院 软件工程(第二版)
文件条目的描述内容 名称:文件名 别名:同数据流条目 简述:对文件的简单说明 文件组成:描述文件的记录由哪些数据项组成(与数据流条目中的文件组成描述方法相同) 写文件的加工:描述哪些加工写文件 读文件的加工:描述哪些加工读文件 文件组织:描述文件的存储方式(顺序、索引),排序的关键字 使用权限:描述各类用户对文件读、写、修改的使用权限 数据量:文件的最大记录个数 存取频率:描述对该文件的读写频率 注解:对该文件的其它补充说明 复旦大学计算机科学技术学院 软件工程(第二版)
57
复旦大学计算机科学技术学院 软件工程(第二版)
数据项条目的描述内容 名称:数据项名 别名:同数据流条目 简述:对数据项的简单描述 数据类型:描述数据项的类型,如整型、实型、字符串等 计量单位:指明数据项值的计量单位,如公斤、吨等 取值范围:描述数据项允许的值域,如1..100 编辑方式:描述该数据项外部表示的编辑方式,如23,345.67 与其它数据项的关系:描述该数据项与数据字典中其它数据项的关系 注解:对数据项的其它补充说明 复旦大学计算机科学技术学院 软件工程(第二版)
58
复旦大学计算机科学技术学院 软件工程(第二版)
加工条目的描述内容 名称:加工名 别名:同数据流条目 加工号: 加工在DFD中的编号 简述:对加工的功能的简要说明 输入数据流:描述加工的输入数据流,包括读哪些文件 输出数据流:描述加工的输出数据流,包括写哪些文件 加工逻辑:简要描述加工逻辑,或者对加工规约的索引 基本加工的加工逻辑用小说明描述,在加工条目中可填写对加工规约的索引 非基本加工分解而成的DFD子图已反映了它的加工逻辑,不必书写小说明 异常处理:描述加工处理过程中可能出现的异常情况,及其处理方式 加工激发条件:描述执行加工的条件,如,“身份认证正确”,“收到报名单” 执行频率:描述加工的执行频率,如,每月执行一次,每天0点执行 注解:对加工的其它补充说明 复旦大学计算机科学技术学院 软件工程(第二版)
59
复旦大学计算机科学技术学院 软件工程(第二版)
源或宿条目的描述内容 名称:源或宿的名称(外部实体名) 别名:同数据流条目 简要描述:对源或宿的简要描述(包括指明该外部实体在DFD中是用作“源”,还是“宿”,还是“既是源又是宿”) 输入数据流:描述源向系统提供哪些输入数据流 输出数据流:描述系统向宿提供哪些输出数据流 注解:对源或宿的其它补充说明 复旦大学计算机科学技术学院 软件工程(第二版)
60
复旦大学计算机科学技术学院 软件工程(第二版)
别名条目的描述内容 只有那些有必要补充说明的别名才给出相应的别名条目 别名:别名的名字 类型:指出别名属于那个种类(数据流、文件、数据、加工、源或宿) 基本名:别名的正式名称(原名) 简述:同正式名称的简述 说明:对别名的补充说明 示例 原始的数据项条目如下: 数据项名称:开户日期 别名:开设日期 简述:客户建立帐户的日期 类型:日期 注解:年≥1949 其别名条目如下: 类型:数据项 基本名:开户日期 说明:1986年以后不再使用此别名 复旦大学计算机科学技术学院 软件工程(第二版)
61
复旦大学计算机科学技术学院 软件工程(第二版)
数据字典的实现 提倡采用专用的软件工具或者常用的实用程序(如,正文编辑程序、电子表格)来建立数据字典的电子文档,其好处是便于字典条目的检索,字典的管理和维护 如果数据字典由辅助绘制DFD的工具自动产生的话,那么可以利用数据字典来检查DFD的一致性和完整性,并保持数据字典与DFD的一致 如果数据字典是由人工制作的,我们可以为每个字典条目制作一张卡片,所有卡片按字典条目的种类(数据流、文件、加工等)分类成册,每类卡片按某种约定排序 复旦大学计算机科学技术学院 软件工程(第二版)
62
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
63
复旦大学计算机科学技术学院 软件工程(第二版)
描述基本加工的小说明 小说明是基本加工的规约说明,应精确地描述用户要求一个加工“做什么” 包括加工的激发条件、加工逻辑、优先级、执行频率、出错处理等 最基本的部分是加工逻辑,即该加工的输出数据流与输入数据流之间的逻辑关系 加工逻辑不是对加工的设计,不涉及数据结构、算法实现、编程语言等与设计和实现有关的细节 复旦大学计算机科学技术学院 软件工程(第二版)
64
复旦大学计算机科学技术学院 软件工程(第二版)
加工逻辑的描述方法 结构化语言:介于自然语言和形式语言之间的一种半形式语言 判定表:适用于加工逻辑包含多个条件,而不同的条件组合需做不同的动作 判定树:判定表的变种,它本质上与判定表是相同的,只是表示形式不同 复旦大学计算机科学技术学院 软件工程(第二版)
65
复旦大学计算机科学技术学院 软件工程(第二版)
结构化语言 没有严格的语法 加工规约分为若干个段落,每个段落可分为内外两层: 外层有严格的语法来描述它的控制结构 如结构化英语中可使用if_then_else、while_do、repeat_until、for_do、case等结构 内层可以用自然语言来描述 允许使用嵌套结构 复旦大学计算机科学技术学院 软件工程(第二版)
66
复旦大学计算机科学技术学院 软件工程(第二版)
“计算信用度”的结构化英语描述 Select the case which applies: Case 1 (No EBounced-Checks in Customer Record): Write xemplary-Customer―Citation to Annual―Summary. Case 2 (One Bounced-check): If Yearly―Average―Balance exceeds $ 1000. Remove Bounced―Check from Customer―Record. Otherwise. Recuce Credit―Limit by 10%. Case 3 (Multiple Bounced-Checks): For each Bounced―Check. Recuce Credit―Limit by 15%. Set Credit―Rating to Deadbeat. Write Scathing―Comment to Annual―Summary. Write Customer―Name―and―Address to IRS―Enemies―List. 复旦大学计算机科学技术学院 软件工程(第二版)
67
复旦大学计算机科学技术学院 软件工程(第二版)
结构化语言书写加工规约注意事项 语句力求精炼 语句必须易读、易理解、无歧义 主要使用祈使句,祈使句中的动词要明确表达要执行的动作 所有名字必须是数据字典中有定义的名字 不使用形容词、副词等修饰语 不使用含义相同的动词,如“修改”、“修正”等 可以使用常用的算术和关系运算符 总之要尽可能精确、无歧义、简明扼要、易理解 复旦大学计算机科学技术学院 软件工程(第二版)
68
复旦大学计算机科学技术学院 软件工程(第二版)
判定表 判定表的组成元素 条件桩(Condition Stub):列出各种条件的对象,如发货单金额,赊欠天数等,每行写一个条件对象 条件条目(Conditien entry):列出各条件对象的取值,条件条目的每一列表示了一个可能的条件组合 动作桩(action stub):列出所有可能采取的动作,如发出发货单等,每行写一个动作 动作条目(action eutry):列出各种条件组合下应采取的动作 发货单金额 >500 ≤500 赊欠天数 >60 ≤60 发不批准通知 √ 发出批准书 发出发货单 发出赊欠报告 “审批发货单”加工的判定表 复旦大学计算机科学技术学院 软件工程(第二版)
69
复旦大学计算机科学技术学院 软件工程(第二版)
判定表的其它形式 发货单金额≤500 1 发货单金额>500 赊欠天数≤60 赊欠天数>60 发不批准通知 √ 发出批准单 发出发货单 发出赊欠报告 发货单金额 >500 ≤500 - 赊欠天数 >60 ≤60 发不批准通知 √ 发出批准书 发出发货单 发出赊欠报告 “审批发货单”加工的简化判定表 “审批发货单”加工的另一种判定表 复旦大学计算机科学技术学院 软件工程(第二版)
70
复旦大学计算机科学技术学院 软件工程(第二版)
判定树 本质上与判定表是相同的,只是表示形式不同 例如“审批发货单”加工逻辑的判定树描述入下: 复旦大学计算机科学技术学院 软件工程(第二版)
71
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
72
复旦大学计算机科学技术学院 软件工程(第二版)
结构化设计 结构化设计(Structured Design,简称SD)是一种将结构化分析得到的数据流图映射成软件体系结构的设计方法 强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则 分为概要设计和详细设计两大步骤 概要设计是对软件系统的总体设计,采用结构化设计方法,其任务是:将系统分解成模块,确定每个模块的功能、接口(模块间传递的数据)及其调用关系,并用模块及其对模块的调用来构建软件的体系结构 详细设计是对模块实现细节的设计,采用结构化程序设计(Structured Programming,简称SP)方法 SA、SD和SP构成完整的结构化方法体系 复旦大学计算机科学技术学院 软件工程(第二版)
73
复旦大学计算机科学技术学院 软件工程(第二版)
结构图 用结构图(Structure Chert)来描述软件系统的体系结构 描述一个软件系统由哪些模块组成,以及模块之间的调用关系 结构图的基本成分有:模块、调用和数据 复旦大学计算机科学技术学院 软件工程(第二版)
74
复旦大学计算机科学技术学院 软件工程(第二版)
模块 模块(module):指具有一定功能的可以用模块名调用的一组程序语句,如函数、子程序等 它们是组成程序的基本单元 一个模块具有其外部特征和内部特征 外部特征包括:模块的接口(模块名、输入/输出参数、返回值等)和模块的功能 内部特征包括:模块的内部数据和完成其功能的程序代码 在SD中,我们只关注模块的外部特征,而忽略其内部特征 复旦大学计算机科学技术学院 软件工程(第二版)
75
复旦大学计算机科学技术学院 软件工程(第二版)
调用和数据 调用(call):用从一个模块指向另一个模块的箭头来表示,其含义是前者调用了后者 为了方便,有时常用直线替代箭头,此时,表示位于上方的模块调用位于下方的模块 数据(data):模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示 复旦大学计算机科学技术学院 软件工程(第二版)
76
复旦大学计算机科学技术学院 软件工程(第二版)
结构图中的辅助符号 D B C A 模块A有条件地调用模块B或C D B C A 模块A循环调用模块B和C 递归调用 复旦大学计算机科学技术学院 软件工程(第二版)
77
复旦大学计算机科学技术学院 软件工程(第二版)
结构图的几个概念 深度:程序结构图中控制的层数,例如图中所示的结构图的深度是5 宽度:程序结构图中同一层次上模块总数的最大值,例如图中所示的结构图的宽度为7 扇出(fan out):该模块直接调用的模块数目。例如,例如图中模块M的扇出是4,模块A的是2,模块B的扇出是1 扇入(fan in):能直接调用该模块的模块数目。例如图中模块G的扇入是1,模块I的扇入是2,模块R的扇入是4 W B K A E H J D G F I L C M N O P Q R 深度 宽度 扇入 扇出 复旦大学计算机科学技术学院 软件工程(第二版)
78
复旦大学计算机科学技术学院 软件工程(第二版)
相关指标的含义 深度和宽度在一定程序上反映了程序的规模和复杂程度 相对而言,如果程序结构图的深度和宽度较大,则说明程序的规模和复杂程度都较大。 模块的扇入扇出会影响结构图的深度和宽度,例如减少模块的扇出,可能导致宽度变小而深度增加 一个模块的扇出过大通常意味着该模块比较复杂,然而扇出太少,可能导致深度的增加 一般情况,一个模块的扇出以3~9为宜 一个模块的扇入表示有多少模块可直接调用它,它反映了该模块的复用(reuse)程度,因此模块的扇入越大越好 复旦大学计算机科学技术学院 软件工程(第二版)
79
复旦大学计算机科学技术学院 软件工程(第二版)
启发式设计策略-1 按照模块化设计原则,相应的启发式设计策略如下: 改造程序结构图,降低耦合度,提高内聚度 避免高扇出,并随着深度的增加,力求高扇入 避免如图a那样的“平铺”形态,较好的结构图形态是如图b那样的“椭圆”型 (a)平铺形态 (b)椭圆形态 复旦大学计算机科学技术学院 软件工程(第二版)
80
复旦大学计算机科学技术学院 软件工程(第二版)
启发式设计策略-2 模块的影响范围应限制在该模块的控制范围内,例如下图中 图a中,模块B2的影响范围(模块A)不在其控制范围(模块B2)内 图b中,决策控制是在顶层模块,其影响范围(A、B2)在控制范围内,但是从决策控制模块到被控模块之间相差多个层次 图c和d较合适,图d为最好 X B B1 Y Top A B2 (a) (b) (c) Top X B B1 A Y B2 (d) 复旦大学计算机科学技术学院 软件工程(第二版)
81
复旦大学计算机科学技术学院 软件工程(第二版)
启发式设计策略-3 降低模块接口的复杂程度和冗余程度,提高一致性 模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块的功能相一致,即不传递与模块功能无关的数据 模块的功能应是可预测的,避免对模块施加过多的限制 模块功能可预测是指该模块对相同的输入能产生相同的输出 限制一个模块只处理单一的功能,那么,这个模块体现出高内聚 尽可能设计单入口和单出口的模块 单入口和单出口的模块能有效地避免内容耦合 复旦大学计算机科学技术学院 软件工程(第二版)
82
复旦大学计算机科学技术学院 软件工程(第二版)
结构化设计的步骤 建立初始结构图 将整个软件看作一个大的功能模块,通过功能分解不断将其分解成若干个较小的功能模块,直至得到一组不必再分解的模块(结构图中的底层模块) 对结构图进行改进 可根据设计准则和启发式设计策略对初始结构图进行改进 书写设计文档 书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等 设计评审 复旦大学计算机科学技术学院 软件工程(第二版)
83
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
84
复旦大学计算机科学技术学院 软件工程(第二版)
数据流图到软件体系结构的映射 结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图) 根据信息流的特点,可将数据流图分为变换型数据流图和事务型数据流图,其对应的映射分别称为变换分析和事务分析 信息流可分为两类: 变换流(transform) 事务流(transaction) 复旦大学计算机科学技术学院 软件工程(第二版)
85
复旦大学计算机科学技术学院 软件工程(第二版)
变换流 变换流型的DFD图可明显地分成输入、变换、输出三部分 信息沿着输入通路进入系统,并将外部形式转换成内部形式,进入系统的信息通过变换中心的处理,再沿着输出通路转换成外部形式后离开系统,具有这种特征的信息流称为变换流 复旦大学计算机科学技术学院 软件工程(第二版)
86
复旦大学计算机科学技术学院 软件工程(第二版)
复旦大学计算机科学技术学院 软件工程(第二版)
87
复旦大学计算机科学技术学院 软件工程(第二版)
事务流 数据流沿着输入通路到达一个事务中心,事务中心根据输入数据的类型在若干条动作通路(action path)中选出一条来执行,具有这种特征的信息流称为事务流 事务中心的任务是: 接收事务(输入数据) 分析每个事务以确定它的类型 根据事务类型选取一条动作通路 复旦大学计算机科学技术学院 软件工程(第二版)
88
复旦大学计算机科学技术学院 软件工程(第二版)
复旦大学计算机科学技术学院 软件工程(第二版)
89
复旦大学计算机科学技术学院 软件工程(第二版)
数据流图映射到结构图的步骤 1. 复审和精化数据流图 复审DFD的顶层图,确保系统的输入、输出数据流符合系统规格说明的要求 复审分层DFD,以确保它符合软件的功能需求 必要时对DFD进行精化。 2. 确定数据流图的类型 根据DFD的信息流特征,确定DFD是变换型的还是事务型的 3. 将DFD映射成初始结构图 采用变换分析或事务分析技术,将DFD映射成初始结构图 4. 改进初始结构图 根据软件设计准则,采用启发式设计策略,对初始结构图进行改进,以改善软件质量 复旦大学计算机科学技术学院 软件工程(第二版)
90
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
变换分析 1. 划定输入流和输出流的边界,确定变换中心 概念 物理输入:系统输入端的数据流 物理输出:系统输出端的数据流 逻辑输入:变换中心的输入数据流 逻辑输出:变换中心的输出数据流 物理输入要经过编辑、格式转换、合法性检查等辅助性加工后变成纯粹的逻辑输入再传给变换中心;变换中心产生的逻辑输出要经过格式转换、组成物理块、缓冲处理等辅助性加工后变成物理输出,再送到系统外 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
91
复旦大学计算机科学技术学院 软件工程(第二版)
确定逻辑输入: 从物理输入端开始,一步步向系统的中间移动,可找到离物理输入端最远的,但仍可被看作系统输入的那个数据流,就是逻辑输入 确定逻辑输出: 从物理输出端开始,一步步向系统的中间移动,可找到离物理输出端最远的,但仍可被看作系统输出的那个数据流,就是逻辑输出 确定变换中心: 确定了所有的逻辑输入/输出后,位于逻辑输入和逻辑输出之间的部分就是变换中心 复旦大学计算机科学技术学院 软件工程(第二版)
92
复旦大学计算机科学技术学院 软件工程(第二版)
这种划分可能因人而异,并不唯一,但差别不会很大,对最后的程序结构影响也不大 例如,下图是考务处理系统中“统计成绩”子图经精化后的DFD,其中的虚线指出了输入流和输出流的边界。其中,“合格标准”既是物理输入,又是逻辑输入 复旦大学计算机科学技术学院 软件工程(第二版)
93
复旦大学计算机科学技术学院 软件工程(第二版)
复旦大学计算机科学技术学院 软件工程(第二版)
94
复旦大学计算机科学技术学院 软件工程(第二版)
2. 进行第一级分解 第一级分解是将DFD映射成变换型的程序结构 主控模块:完成整个系统的功能 输入流控制模块:接收所有输入数据 变换流控制模块:对内部形式的数据进行加工处理,实现输入到输出的变换 输出流控制模块:产生所有输出数据 复旦大学计算机科学技术学院 软件工程(第二版)
95
复旦大学计算机科学技术学院 软件工程(第二版)
考务处理系统中“统计成绩” DFD子图分解后的结构图 对大型系统可以将上述的一个模块画成多个模块(如每个输入/输出通路画一个模块) 分解的原则是在完成控制功能,并保持低耦合高内聚的前提下,尽量减少模块数 复旦大学计算机科学技术学院 软件工程(第二版)
96
复旦大学计算机科学技术学院 软件工程(第二版)
3. 进行第二级分解 输入流控制模块的分解: 从变换中心的边界开始,沿着输入通路向外移动,把输入通路上的每个加工映射成程序结构中输入流控制模块的一个低层模快 输出流控制模块的分解: 从变换中心的边界开始,沿着输出通路向外移动,把输出通路上的每个加工映射成程序结构中输出流控制模块的一个低层模快 变换流控制模块的分解: 把变换中心的每个加工映射成受变换控制模块控制的一个低层模块 复旦大学计算机科学技术学院 软件工程(第二版)
97
复旦大学计算机科学技术学院 软件工程(第二版)
考务处理系统中“统计成绩” DFD子图第二级分解后所得到的初始结构图 复旦大学计算机科学技术学院 软件工程(第二版)
98
复旦大学计算机科学技术学院 软件工程(第二版)
说明每个模块,内容包括: 模块的接口描述 模块的局部信息(局部数据结构) 处理过程陈述 约束和限制条件 4.标注输入输出信息 第二级分解后得到软件的初始结构图。然后,根据DFD,在初始结构图上标注模块之间传递的输入信息和输出信息 复旦大学计算机科学技术学院 软件工程(第二版)
99
复旦大学计算机科学技术学院 软件工程(第二版)
事务分析 1. 确定事务中心 事务中心位于数条动作路径的起点,这些动作路径呈幅射状从该点流出 2. 将DFD图映射成事务型的程序结构 事务型的结构图如下图,其中: 1)主控模块:完成整个系统的功能 2)接收模块:接收输入数据(事务) 3)发送模块:根据输入事务的类型,选择一个动作路径控制模块 4)动作路径控制模块:完成相应的动作路径所执行的子功能 复旦大学计算机科学技术学院 软件工程(第二版)
100
复旦大学计算机科学技术学院 软件工程(第二版)
DFD图映射成事务型的程序结构 复旦大学计算机科学技术学院 软件工程(第二版)
101
复旦大学计算机科学技术学院 软件工程(第二版)
3.分解每条动作路径所对应的结构图 1)接收模块的分解 从事务中心开始,沿着输入路径向外移动,把输入路径上的每个加工映射成结构图中受接收模块控制的一个低层模块 2)动作路径控制模块的分解 首先确定每条动作路径的流类型(变换流或事务流),然后,运用变换分析或事务分析,将每条动作路径映射成与其流特性相对应的以动作路径控制模块为根模块的结构图 复旦大学计算机科学技术学院 软件工程(第二版)
102
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
分层DFD的映射 对于分层数据流图,0层图常常反映了系统由哪些子系统组成,此时可先将0层图映射成下图形式的结构图 0层图每个加工的DFD子图可映射成以相应模块为根模块的结构子图 如果DFD子图中的加工还可分解成一张子图,则再将其映射成以相应模块为根模块的结构子图 依次一层一层分解下去,可得到最终的初始结构图 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
103
考务处理系统分层 DFD所得到的初始结构图 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
104
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版) 104
105
复旦大学计算机科学技术学院 软件工程(第二版)
初始结构图的改进 对结构图改进的依据就是观察这种改进是否符合软件设计的准则和启发式设计策略 结构图的改进没有明显的步骤,也很难说改进到什么程度可以终止了 凡是设计者认为不合理的地方都可以改进,但改进后的结果应该比改进前好 一次改进常常使某些设计质量变好了,而使另一些设计质量变坏了,因此在改进时要进行折中 改进往往不是一次完成的,需要进行多次的反复,有时可提出多个改进方案,然后,从中选取一个较优的方案。 复旦大学计算机科学技术学院 软件工程(第二版)
106
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
“考试报名”部分的改进 “考试报名”部分的结构图中,“输入报名单”模块比较简单,它可以和“检查报名单”合并。另外,“检查报名单”模块在发现报名单有错时,其错误信息要经过一连串的参数传递送到“打印报名单出错信息”模块,其耦合度比较大。如果将“打印报名单出错信息”模块也合并到“检查报名单”模块,那么,在发现报名单有错时,立即输出错误信息,这样图中相关参数的传递都可省去,从而降低了模块间的耦合度。“输入报名单”、“检查报名单”和“打印报名单出错信息”三个模块合并后取名为“输入并检查报名单”,如图所示。 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
107
复旦大学计算机科学技术学院 软件工程(第二版)
复旦大学计算机科学技术学院 软件工程(第二版)
108
复旦大学计算机科学技术学院 软件工程(第二版)
同样道理,准考证在“编准考证号”模块产生,一直要到“打印准考证”模块才使用,而其它模块都不使用此信息。因此可以将这二个模块合并成“编制并打印准考证”。另外,“登记考生”和“输出考生名单”也可合并成“登记并输出考生名单”,如图所示。 复旦大学计算机科学技术学院 软件工程(第二版)
109
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
在变换分析的过程中,“输出控制”模块的作用是调用下面的三个输出模块,现在这三个输出模块都合并到其它模块中去了,因此,“输出控制”也可以删去了。 对于“输入控制模块”和“报名处理”模块,它们除了调用低层模块并传递参数外,没有其它实质性的工作,这种模块称为管道模块,可以将其删除,其低层模块改由其上层模块调用。 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
110
复旦大学计算机科学技术学院 软件工程(第二版)
“统计成绩”部分的改进 先将一些比较简单的模块合并到与其功能相一致的模块中,以减少耦合度 将“输入成绩清单”、“检查成绩清单”、“打印成绩单出错信息”合并成“输入并检查成绩清单” 将“输入合格标准”与“审定合格者”合并,仍取名“审定合格者”,但它包含读入合格标准功能 将“产生考生通知单”与“打印考生通知单”合并成“产生并打印考生通知单” 复旦大学计算机科学技术学院 软件工程(第二版)
111
复旦大学计算机科学技术学院 软件工程(第二版)
复旦大学计算机科学技术学院 软件工程(第二版)
112
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
“分析试题难度”和“打印分类统计表”模块产生的“难度分析结果”和“分类统计结果”只在“打印难度分析表”和“打印分类统计表”模块中使用,因此,将“打印难度分析表”模块和“打印分类统计表”模块分别作为“分析试题难度”模块和“分类统计成绩”模块的下属模块,可降低模块间的耦合程度。 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
113
“统计成绩输出控制”可删去,“统计成绩输入控制”模块和“统计成绩处理模块”均为“管道”模块,也可删去
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
114
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
改进后整个结构图 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
115
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
整个结构图的改进 考虑到分析试题难度和分类统计成绩是属于后处理的一些工作,它们对这一次考试的总结,为下一次考试命题作准备的。同时,它们是相对独立的功能,由考试中心发布启动命令,因此,可以将它们移到主控模块“考务处理系统”之下 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
116
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
结构图改进技巧 1.减少模块间的耦合度 可以通过将功能简单的模块合并到与其关系密切的模块中,或调整模块的位置,来减少模块间的参数传递,或避免参数长距离传输,以降低耦合度。 2.消除重复功能 如果二个模块中存在某一相同的功能,应将这个功能从二个模块中分离出来,作为一个独立的模块被二者调用。 3.消除“管道”模块 “管道”模块通常是应该删除的,除非删除后上层模块的扇出太大。 4.模块的大小适中 如果一个模块太大,要考虑将它分成二个模块;如果一个模块太小,可考虑将它合并在与它功能密切相关的模块中。通常一个模块的大小,以其实现代码可书写在1~2页纸(约50~100行)为宜。 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
117
复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
结构图改进技巧 5.避免高扇出 一个模块的扇出不宜过大,一般希望控制在7±2范围内。当一个模块的扇出较大时,应考虑重新分解 6.应尽可能研究整张结构图,而不是只考虑其中的一部分 (a)高扇出 (b)重新分解 复旦大学计算机科学技术学院 软件工程(第二版) 复旦大学计算机科学技术学院 软件工程(第二版)
118
复旦大学计算机科学技术学院 软件工程(第二版)
内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结 复旦大学计算机科学技术学院 软件工程(第二版)
119
复旦大学计算机科学技术学院 软件工程(第二版)
小结 结构化方法是一种传统的面向数据流开发方法 以数据流为中心构建软件的分析模型和设计模型 在结构化分析方面,本章介绍结构化分析的基本思想和分析过程,详细介绍了分层数据流图的画法,分层数据流图的审查,数据字典各条目的描述内容以及基本加工小说明的描述方法 在结构化设计方面,本章介绍如何将分析的结果(DFD)映射成初始的程序结构图,包括变换分析和事务分析,并介绍对初始结构图的优化 复旦大学计算机科学技术学院 软件工程(第二版)
Similar presentations