第05章 结构化分析与设计.ppt
软件工程软件工程第5章 结构化分析与设计结构化方法 一种面向数据流的传统软件开发方法 以数据流为中心构建软件的分析模型和设计模型 分为:结构化分析(Structured Analysis 简称SA)结构化设计(Structuresd Design 简称SD)结构化程序设计(Structured Programmin 简称SP)2复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结3复旦大学计算机科学与工程系 软件工程课程内容摘要结构化分析方法概述结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结4复旦大学计算机科学与工程系 软件工程课程结构化分析方法 发展历史 提出:20世纪60年代末到70年代初 成熟:20世纪70年代末到80年代中期 主要思想:抽象与自顶向下的逐层分解(控制复杂性的两个基本手段)抽象:在每个抽象层次上忽略问题的内部复杂性,只关注整个问题与外界的联系 分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止5复旦大学计算机科学与工程系 软件工程课程结构化分析方法中的抽象与分解 抽象:从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出 分解:将系统不断分解为子系统、模块 随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)2.4 2.32.2 2.12 14 31.3 1.21.1X6复旦大学计算机科学与工程系 软件工程课程结构化分析过程 理解当前的现实环境,获得当前系统的具体模型(物理模型)从当前系统的具体模型抽象出当前系统的逻辑模型 分析目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型 为目标系统的逻辑模型作补充7复旦大学计算机科学与工程系 软件工程课程结构化分析模型的描述 数据字典是模型的核心,它包含了软件使用和产生所有数据的描述 数据流图:用于功能建模,描述系统的输入数据流如何经过一系列的加工变换逐步变换成系统的输出数据流 实体 关系图:用于数据建模,描述数据字典中数据之间的关系实 体-关 系图数据流图状态转换图数据字典 状态转换图:用于行为建模,描述系统接收哪些外部事件,以及在外部事件的作用下的状态迁移情况8复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述数据流图数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结9复旦大学计算机科学与工程系 软件工程课程数据流图 Data Flow Diagram(简称DFD):描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模,基本元素包括:数据流(data flow):由一组固定成分的数据组成,代表数据的流动方向加工(process):描述了输入数据流到输出数据流的变换,即将输入数据流加工成输出数据流文件(file):使用文件、数据库等保存某些数据结果供以后使用源或宿(source or sink):由一组固定成分的数据组成,代表数据的流动方向10复旦大学计算机科学与工程系 软件工程课程源或宿 存在于软件系统之外的人员或组织,表示软件系统输入数据的来源和输出数据的去向,因此也称为源点和终点 例如,对一个考务处理系统而言 考生向系统提供报名单(输入数据流),所以考生是考试系统(软件)的一个源 考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以考试中心是该系统的一个宿 源或宿用相同的图形符号表示 当数据流从该符号流出时表示是源 当数据流流向该符号时表示是宿 当两者皆有时表示既是源又是宿 11复旦大学计算机科学与工程系 软件工程课程加工和文件 加工:描述输入数据流到输出数据流的变换 每个加工用一个定义明确的名字标识 至少有一个输入数据流和一个输出流 可以有多个输入数据流和多个输出数据流 文件:保存数据信息的外部单元 每个文件用一个定义明确的名字标识 由加工进行读写 DFD中称为文件,但在具体实现时可以用文件系统实现也可以用数据库系统等实现12复旦大学计算机科学与工程系 软件工程课程数据流 每个数据流用由一组固定成分的数据组成并拥有一个定义明确的名字标识 如:运动会管理系统中,报名单(数据流)由队名、姓名、性别、参赛项目等数据组成 数据流的流向 从一个加工流向另一个加工 从加工流向文件(写文件)从文件流向加工(读文件)从源流向加工 从加工流向宿13复旦大学计算机科学与工程系 软件工程课程示例:图书订购系统DFD图书库存入库单图书代理商书库管理收费制作财务报表财务报表经理帐务数据库制作发书单图书订购核准的订购单发书单订购单 顾客顾客收费数据帐单14复旦大学计算机科学与工程系 软件工程课程数据流图的扩充符号 描述一个加工的多个数据流之间的关系 星号():表示数据流之间存在“与”关系 所有输入数据流同时存在时,才能进行加工处理 或加工处理的结果是同时产生所有输出数据流 加号():表示数据流之间存在“或”关系 至少存在一个输入数据流时才能进行加工处理 或加工处理的结果是至少产生一个输出数据流 异或():表示数据流之间存在“异或”(互斥)关系 必须存在且仅存在一个输入数据流时,才能进行加工处理 或加工处理的结果是产生且仅产生一个输出数据流15复旦大学计算机科学与工程系 软件工程课程对数据流图进行分层 George Miller 在著名的论文“神奇的数字7 加减2:我们处理信息的能力的某种限制”中指出:人们在一段时间内的短期记忆似乎限制在5 9 件事情之内 根据自顶向下逐层分解的思想将数据流图画成层次结构 每个层次画在独立的数据流图中,加工个数可大致控制在“7 加减2”的范围中16复旦大学计算机科学与工程系 软件工程课程数据流图的各个层次 顶层图只有代表整个软件系统的1 个加工,描述了软件系统与外界(源或宿)之间的数据流 顶层图中的加工经分解后的图称为0 层图(只有1 张)中间层图中至少有一个加工(也可以有多个)在下层图中分解成一张子图 处于最底层的图称为底层图,其中所有的加工不再分解成新的子图17复旦大学计算机科学与工程系 软件工程课程图和加工的编号 顶层图只有一个代表整个软件系统的加工,该加工不必编号。0 层图中的加工编号分别为1,2,3,子图号:若父图中的加工号x 分解成某一子图,则该子图号记为“图x”子图中加工的编号:若父图中的加工号为x 的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、x.318复旦大学计算机科学与工程系 软件工程课程分层数据流图示例分层数据流图示例资格和水平考试的考务处理系统资格和水平考试的考务处理系统 简化的资格和水平考试的考务处理系统 分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试 考试的合格标准将根据每年的考试成绩由考试中心确定 考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中19复旦大学计算机科学与工程系 软件工程课程资格和水平考试的考务处理系统资格和水平考试的考务处理系统功能需求功能需求 1 对考生送来的报名单进行检查 2 对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站 3 对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者 4 制作考生通知单送给考生 5 进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表20复旦大学计算机科学与工程系 软件工程课程资格和水平考试的考务处理系统资格和水平考试的考务处理系统部分数据流的组成部分数据流的组成 报名单地区序号姓名文化程度职业考试级别通信地址 正式报名单准考证号报名单 准考证地区序号姓名准考证号考试级别考场 考生名单准考证号考试级别其中w 表示w 重复多次 考生名册正式报名单 统计分析表分类统计表难度分析表 考生通知单准考证号姓名通信地址考试级别考试成绩合格标志21复旦大学计算机科学与工程系 软件工程课程系统的输入输出(顶层图)确定源或宿:考生、阅卷站和考试中心 它们都既是源又是宿 顶层图唯一的加工:软件系统(考务处理系统)确定数据流:系统的输入/输出信息 输入数据流:报名单(来自考生)、成绩清单(来自阅卷站)、合格标准(来自考试中心)输出数据流:准考证(送往考生)、考生名单(送往阅卷站)、考生通知书(送往考生)、统计分析表(送往考试中心)额外的输出流(考虑系统的健壮性):不合格报名单(返回给考生),错误成绩清单(返回给阅卷站)顶层图通常没有文件22复旦大学计算机科学与工程系 软件工程课程考务处理系统顶层图考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表23复旦大学计算机科学与工程系 软件工程课程系统内部(0 层图)-1 以下确定加工、数据流、文件、源或宿的一般方法适用于0 层图及其各层子图 确定加工:将父图中某加工分解而成的子加工 根据功能分解来确定加工:将一个复杂的功能分解成若干个较小的功能,较多应用于高层DFD中的分解 根据业务处理流程确定加工:分析父图中待分解加工的业务处理流程,业务流程中的每一步都可能是一个子加工 特别要注意在业务流程中数据流发生变化或数据流的值发生变化的地方,应该存在一个加工,例如:编制准考证号正式报名单 合格报名单24复旦大学计算机科学与工程系 软件工程课程系统内部(0 层图)-2 确定数据流 在父图中某加工分解而成的子图中,父图中相应加工的输入/输出数据流都是且仅是子图边界上的输入/输出数据流 分解后的子加工之间应增添相应的新数据流表示加工过程中的中间数据 如果某些中间数据需要保存以备后用,那么可以成为流向文件的数据流 同一个源或加工可以有多个数据流流向一个加工,如果它们不是一起到达和一起加工的,那么可以将它们分成若干个数据流,例如:读取银行卡信息客户银行卡数据密码25复旦大学计算机科学与工程系 软件工程课程系统内部(0 层图)-3 确定文件 如果父图中该加工存在读写文件的数据流,则相应的文件和数据流都应画在子图中 在分解子图中,如果需要保存某些中间数据以备后用,则可以将这些数据组成一个新的文件 新文件(首次出现的文件)至少应有一个加工为其写入记录,同时至少存在另一个加工来读该文件的记录 注意:从父图中继承下来的文件在子图中可能只对其进行读,或只进行写26复旦大学计算机科学与工程系 软件工程课程系统内部(0 层图)-4 确定源和宿 0层图和其它子图中通常不必画出源和宿 有时为了提高可读性,可以将顶层图中的源和宿画在0层图中 最终得到考务处理系统0 层图 根据功能分解方法识别出两个加工:考试报名、统计成绩 数据流 继承顶层图中的输入数据流和输出数据流 定义二个加工之间的数据流:由于这二个加工分别在考试前后进行,因此登记报名单所产生的结果“考生名册”应作为文件保存以便考试后由统计成绩加工引用27复旦大学计算机科学与工程系 软件工程课程考务处理系统0 层图考生名册1考试报名报名单考生名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单28复旦大学计算机科学与工程系 软件工程课程加工内部(1n 层图)复杂的加工可以继续分解成1 张DFD 子图 分解方法 将该加工看作一个小系统,该加工的输入/输出数据流就是这个假设的小系统的输入/输出数据流 然后采用画0层图的方法,画出该加工的子图 以0 层图中加工1(考试报名)为例 根据业务处理流程来确定由加工1的分解 与加工1相关的业务流程:首先检查考生送来的报名单,然后编准考证号,并产生准考证,最后产生考生名单和考生名册(文件)29复旦大学计算机科学与工程系 软件工程课程考务处理系统加工1 子图 3 个子加工:检查报名单、编准考证号、登记考生“合格报名单”和“正式报名单”是新增加的数据流,其它数据流都是加工1 原有的 在加工1 的分解中没有新的文件产生1.3登记考生考生名单1.2编准考证号准考证 正式报名单1.1检查报名单合格报名单报名单不合格报名单考生名册30复旦大学计算机科学与工程系 软件工程课程考务处理系统加工2 子图2.5分析试题难度难度分析表2.4分类统计成绩分类统计表考生名册2.3制作通知单考生通知单 2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正 确 成 绩 清 单错误成绩清单31复旦大学计算机科学与工程系 软件工程课程总结:画分层数据流图的步骤 1 画系统的输入和输出 2 画系统内部 3 画加工内部 4 重复第3 步,直至每个尚未分解的加工都足够简单(即不必再分解)32复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述 数据流图分层数据流图的审查分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结33复旦大学计算机科学与工程系 软件工程课程分层数据流图的审查 检查图中是否存在错误或不合理(不理想)的部分 一致性:分层DFD中不存在矛盾和冲突 完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素 本节将从分层DFD 的一致性和完整性、构造分层DFD 时需注意的问题以及分解程度等几个方面来说明如何审查分层DFD 的合理性34复旦大学计算机科学与工程系 软件工程课程分层数据流图的一致性 父图与子图平衡 任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致 数据守恒 一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生 多余的数据流:加工未使用其输入数据流中的某些数据项 局部文件 一个加工的输出数据流不能与该加工的输入数据流同名35复旦大学计算机科学与工程系 软件工程课程父图与子图不平衡的实例 加工2 的输入数据流有M 和N,输出数据流是T 而子图(右图)边界上的输入数据流是N,输出数据流是S 和T123ABCMNT2.12.22.3NPSTQ36复旦大学计算机科学与工程系 软件工程课程父图与子图平衡的实例 注意:如果父图某加工的一个数据流,对应于子图中几个数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这个数据流,那么它们仍算是平衡的e2.52.42.32.22.1b2b1acdb21acde(a)父图(b)子图a:考生通知单;b:统计分析表;b1:分类统计表;b2:难度分析表;c:错误成绩清单;d成绩清单;e合格标准。37复旦大学计算机科学与工程系 软件工程课程数据不守恒的实例由于“正式成绩清单”中缺少“考生通知单”中的姓名、通信地址等数据,这些数据也无法由加工2.3 自己产生,因此,加工2.3 不满足数据守恒的条件考生名册2.5分析试题难度难度分析表2.4分类统计成绩分类统计表2.3制作通知单考生通知单 2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单由此可见:1.数据流的组成对DFD是有影响的2.构建DFD与建立数据字典应交替进行,以便于对分层DFD的校验38复旦大学计算机科学与工程系 软件工程课程局部文件 考虑分层数据流中一个文件应画在哪些DFD 中,而不该画在哪些DFD 中 任何一个文件都应同时包含读和写该文件的数据流,除非该文件是当前系统与另一个软件系统所共享(应在需求说明中指明)在一张DFD中当一个文件作为若干个加工之间的交界面(一个写另一个读)时该文件应画出 在一张DFD中当一个文件仅与一个加工进行读写操作,并且在该DFD的父(祖先)图中未出现过该文件则该文件是相应加工的内部文件,在当前DFD中不应画出 一个文件一旦在某张DFD中画出,那么在它的子孙图中应根据父图与子图平衡的原则画出该文件 在子孙图中,这个文件可能只有读或写文件中的一种数据流39复旦大学计算机科学与工程系 软件工程课程局部文件示例“试题得分清单”文件是加工2 的局部文件,根据抽象原则不应该将这类表示加工细节的局部文件画在其父图(如图c)中,正确的画法是图a 和b21(a)父图考生名册(b)子图2.52.42.32.22.1试题得分清单考生名册(c)含局部文件的父图21试题得分清单考生名册40复旦大学计算机科学与工程系 软件工程课程加工的输出数据流不能与该加工的输入数据流同名加工的输出数据流不能与该加工的输入数据流同名 同一个加工的输出数据流和输入数据流即使组成成份相同,仍应对它们取不同的名字,以表示它们是不同数据流 例如,“报名单”和“合格报名单”允许一个加工有二个相同的数据流分别流向二个不同的加工41复旦大学计算机科学与工程系 软件工程课程分层数据流图的完整性 每个加工至少有一个输入数据流和一个输出数据流 在整套分层数据流中,每个文件应至少有一个加工读该文件,有另一个加工写该文件 分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致 分层DFD 中的每个基本加工(即不再分解子图的加工)都应有一个加工规约42复旦大学计算机科学与工程系 软件工程课程其它需注意的问题-1 适当命名:每个数据流、加工、文件、源和宿都应被适应地命名,名字应符合被命名对象的实际含义 名字应反映整个对象(如数据流、加工),而不是仅反映它的某一部分 避免使用空洞的、含义不清的名字,如数据、信息、处理、统计等 如果发现某个数据流或加工难以命名时,往往是DFD分解不当的征兆,此时应考虑重新分解 画数据流而不是画控制流 判断准则:这条线上是否有数据流过43复旦大学计算机科学与工程系 软件工程课程其它需注意的问题-2 避免一个加工有过多的数据流 当一个加工存在许多数据流时往往意味着分解不合理 解决办法:重新分解 1)把需要重新分解的某张图(含有该复杂加工的图)的所有子图连接成一张图 2)把连接后的图重新划分成几个部分,使各部分之间的联系最小 3)重新定义父图,即第2)步中的每个部分作为父图中的一个加工 4)重新建立各子图,即第2)步中的每个部分都是一张子图 5)为所有的加工重新命名和编号44复旦大学计算机科学与工程系 软件工程课程数据流图重新分解示例(b)原加工2子图222.12.32.42.5HJICKL EMN(d)重新分解后的父图452321ABHGJICKLDEMFPN(a)原父图34512HABJICK LDEMFPNG(c)合并4532.42.52.22.12.31FABHJICKLDEMPNG45复旦大学计算机科学与工程系 软件工程课程其它需注意的问题-3 分解尽可能均匀 理想目标:任何两个加工的分解层数之差不超过1 应尽可能使分解均匀,对于分解不均匀的情况应重新分解 先考虑稳定状态,忽略琐碎的枝节 先考虑稳定状态下的各种问题,暂时不考虑系统如何启动、如何结束、出错处理以及性能等问题 随时准备重画 对于一个复杂的软件系统,往往要经过反复多次的重画和修改才能构造出完整、合理、满足用户需求的分层DFD 分析阶段遗漏下来的一个错误,到开发后期要化费几百倍代价来纠正这个错误46复旦大学计算机科学与工程系 软件工程课程分解的程度 可参照以下几条与分解有关的原则:7加减2 分解应自然,概念上合理、清晰 只要不影响DFD的易理解性,可适当多分解几个加工,以减少层数 一般说来,上层分解得快些(即多分解几个加工),下层分解得慢些(即少分解几个加工)分解要均匀47复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查数据字典数据字典 描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结48复旦大学计算机科学与工程系 软件工程课程数据字典 数据流图与数据字典是密不可分的,两者结合起来构成软件的逻辑模型(分析模型)数据字典由字典条目组成,每个条目描述DFD 中的一个元素 数据字典条目包括:数据流、文件、数据项(组成数据流和文件的数据)、加工、源或宿 加工逻辑的详细说明可以用“小说明”来描述(5.5节)49复旦大学计算机科学与工程系 软件工程课程数据字典的描述符号符 号 名 称 举 例 定义为 x 表示x由组成 与 ab 表示a和b,或 a,b 表示a或b 或 ab 表示a或b 重复 a 表示a重复0或多次 重复 a 表示a重复3到8次()可选(a)表示a重复0或1次 基本数据元素 a 表a是基本数据50复旦大学计算机科学与工程系 软件工程课程字典条目 不同的开发组织或团队可以根据项目的需要定义字典条目的描述内容 字典条目中的描述内容主要包括 DFD元素的基本信息(名称、别名、简述、注解)定义(数据类型、数据组成)使用特点(取值范围、使用频率、激发条件)控制信息(来源、去向、访问权限)等51复旦大学计算机科学与工程系 软件工程课程数据流条目的描述内容 名称:数据流名(可以是中文名或英文名)别名:名称的另一个名字 简述:对数据流的简单说明 数据流组成:描述数据流由哪些数据项组成 数据流来源:描述数据流从哪个加工或源流出 数据流去向:描述数据流流入哪个加工或宿 数据量:系统中该数据流的总量 如考务处理系统中“报名单”的总量是100000张 或者单位时间处理的数据流数量,如80000张/天 峰值:某时段处理的最大数量 如每天上午9:00至11:00处理60000张表单 注解:对该数据流的其它补充说明52复旦大学计算机科学与工程系 软件工程课程数据流组成 数据流组成是数据流条目的核心,它列出组成该数据流的各数据项,例如:培训报名单姓名单位课程 运动员报名单队名姓名性别参赛项目 当一个数据流的组成比较复杂时,可以将其分解成几个数据流,例如:课程课程名任课教师教材时间地点 时间地点星期几第几节教室3153复旦大学计算机科学与工程系 软件工程课程数据流组成示例(发票)发票单位名称商品名数量单价金额 总金额日期(营业员)单位名称商品名 数量 单价 金额总金额日期营业员 5154复旦大学计算机科学与工程系 软件工程课程文件条目的描述内容 名称:文件名 别名:同数据流条目 简述:对文件的简单说明 文件组成:描述文件的记录由哪些数据项组成(与数据流条目中的文件组成描述方法相同)写文件的加工:描述哪些加工写文件 读文件的加工:描述哪些加工读文件 文件组织:描述文件的存储方式(顺序、索引),排序的关键字 使用权限:描述各类用户对文件读、写、修改的使用权限 数据量:文件的最大记录个数 存取频率:描述对该文件的读写频率 注解:对该文件的其它补充说明55复旦大学计算机科学与工程系 软件工程课程数据项条目的描述内容 名称:数据项名 别名:同数据流条目 简述:对数据项的简单描述 数据类型:描述数据项的类型,如整型、实型、字符串等 计量单位:指明数据项值的计量单位,如公斤、吨等 取值范围:描述数据项允许的值域,如1100 编辑方式:描述该数据项外部表示的编辑方式,如23,345.67 与其它数据项的关系:描述该数据项与数据字典中其它数据项的关系 注解:对数据项的其它补充说明56复旦大学计算机科学与工程系 软件工程课程加工条目的描述内容 名称:加工名 别名:同数据流条目 加工号:加工在DFD 中的编号 简述:对加工的功能的简要说明 输入数据流:描述加工的输入数据流,包括读哪些文件名 输出数据流:描述加工的输出数据流,包括写哪些文件名 加工逻辑:简要描述加工逻辑,或者对加工规约的索引 基本加工的加工逻辑用小说明描述,在加工条目中可填写对加工规约的索引 非基本加工分解而成的DFD子图已反映了它的加工逻辑,不必书写小说明 异常处理:描述加工处理过程中可能出现的异常情况,及其处理方式 加工激发条件:描述执行加工的条件,如,“身份认证正确”,“收到报名单”执行频率:描述加工的执行频率,如,每月执行一次,每天0 点执行 注解:对加工的其它补充说明57复旦大学计算机科学与工程系 软件工程课程源或宿条目的描述内容 名称:源或宿的名(外部实体名)别名:同数据流条目 简要描述:对源或宿的简要描述(包括指明该外部实体在DFD 中是用作“源”,还是“宿”,还是“既是源又是宿”)输入数据流:描述源向系统提供哪些输入数据流 输出数据流:描述系统向宿提供哪些输出数据流 注解:对源或宿的其它补充说明58复旦大学计算机科学与工程系 软件工程课程别名条目的描述内容只有那些有必要补充说明的别名才给出相应的别名条目 别名:别名的名字 类型:指出别名属于那个种类(数据流、文件、数据、加工、源或宿)基本名:别名的正式名称(原名)简述:同正式名称的简述 说明:对别名的补充说明示例原始的数据项条目如下:数据项名称:开户日期别名:开设日期简述:客户建立帐户的日期类型:日期注解:年1949其别名条目如下:别名:开设日期类型:数据项基本名:开户日期简述:客户建立帐户的日期说明:1986 年以后不再使用此别名59复旦大学计算机科学与工程系 软件工程课程数据字典的实现 提倡采用专用的软件工具或者常用的实用程序(如,正文编辑程序、电子表格)来建立数据字典的电子文档,其好处是便于字典条目的检索,字典的管理和维护 如果数据字典由辅助绘制DFD 的工具自动产生的话,那么可以利用数据字典来检查DFD 的一致性和完整性,并保持数据字典与DFD 的一致 如果数据字典是由人工制作的,我们可以为每个字典条目制作一张卡片,所有卡片按字典条目的种类(数据流、文件、加工等)分类成册,每类卡片按某种约定排序60复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典描述基本加工的小说明描述基本加工的小说明 结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结61复旦大学计算机科学与工程系 软件工程课程基本加工的小说明 小说明是基本加工的规约说明,应精确地描述用户要求一个加工“做什么”包括加工的激发条件、加工逻辑、优先级、执行频率、出错处理等 最基本的部分是加工逻辑,即该加工的输出数据流与输入数据流之间的逻辑关系 加工逻辑不是对加工的设计,不涉及数据结构、算法实现、编程语言等与设计和实现有关的细节62复旦大学计算机科学与工程系 软件工程课程加工逻辑的描述方法 结构化语言:介于自然语言和形式语言之间的一种半形式语言 判定表:适用于加工逻辑包含多个条件,而不同的条件组合需做不同的动作 判定树:判定表的变种,它本质上与判定表是相同的,只是表示形式不同63复旦大学计算机科学与工程系 软件工程课程结构化语言 没有严格的语法 加工规约分为若干个段落,每个段落可分为内外两层:外层有严格的语法来描述它的控制结构 如结构化英语中可使用if_then_else、while_do、repeat_until、for_do、case 等结构 内层可以用自然语言来描述 允许使用嵌套结构64复旦大学计算机科学与工程系 软件工程课程“计算信用度”的结构化英语描述Case 1(No BouncedChecks in Customer Record):Write ExemplaryCustomerCitation to AnnualSummary.Case 2(One Bouncedcheck):If YearlyAverageBalance exceeds$1000.Remove BouncedCheck from CustomerRecord.Otherwise.Recuce CreditLimit by 10%.Case 3(Multiple BouncedChecks):For each BouncedCheck.Recuce CreditLimit by 15%.Set CreditRating to Deadbeat.Write ScathingComment to AnnualSummary.Write CustomerNameandAddress to IRSEnemiesList.65复旦大学计算机科学与工程系 软件工程课程结构化语言书写加工规约注意事项 语句力求精炼 语句必须易读、易理解、无二义 主要使用祈使句,祈使句中的动词要明确表达要执行的动作 所有名字必须是数据字典中有定义的名字 不使用形容词、副词等修饰语 不使用含义相同的动词,如“修改”、“修正”等 可以使用常用的算术和关系运算符 总之要尽可能精确、无二义、简明扼要、易理解66复旦大学计算机科学与工程系 软件工程课程判定表 判定表的组成元素 条件桩(Condition Stub):列出各种条件的对象,如发货单金额,赊欠天数等,每行写一个条件对象 条件条目(Conditien entry):列出各条件对象的取值,条件条目的每一列表示了一个可能的条件组合 动作桩(action stub):列出所有可能采取的动作,如发出发货单等,每行写一个动作 动作条目(action eutry):列出各种条件组合下应采取的动作“审批发货单”加工的判定表发货单金额500 500 500 500赊欠天数 60 60 60 60发不批准通知 发出批准书 发出发货单 发出赊欠报告 67复旦大学计算机科学与工程系 软件工程课程判定表的其它形式发货单金额500 500赊欠天数60 60 60发不批准通知 发出批准书 发出发货单 发出赊欠报告 发货单金额500 0 0 1 1发货单金额500 1 1 0 0赊欠天数60 0 1 0 1赊欠天数60 1 0 1 0发不批准通知 发出批准单 发出发货单 发出赊欠报告“审批发货单”加工的简化判定表“审批发货单”加工的另一种判定表 68复旦大学计算机科学与工程系 软件工程课程判定树 本质上与判定表是相同的,只是表示形式不同 例如“审批发货单”加工逻辑的判定树描述入下:69复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明结构化设计概述结构化设计概述 数据流图到软件体系结构的映射 初始结构图的改进 小结70复旦大学计算机科学与工程系 软件工程课程结构化设计 结构化设计(Structured Design,简称SD)是将结构化分析得到的数据流图映射成软件体系结构的一种设计方法 强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则 分为概要设计和详细设计两大步骤 概要设计是对软件系统的总体设计,采用结构化设计方法,其任务是:将系统分解成模块,确定每个模块的功能、接口(模块间传递的数据)及其调用关系,并用模块及其对模块的调用来构建软件的体系结构 详细设计是对模块实现细节的设计,采用结构化程序设计(Structured Programming,简称SP)方法 SA、SD 和SP 构成完整的结构化方法体系71复旦大学计算机科学与工程系 软件工程课程结构图 用结构图(Structure Chert)来描述软件系统的体系结构 描述一个软件系统由哪些模块组成,以及模块之间的调用关系 结构图的基本成分有:模块、调用和数据OQNRU Vaa,cbccda,da,d MSffjPT SWghi72复旦大学计算机科学与工程系 软件工程课程模块(module)模块是指具有一定功能的可以用模块名调用的一组程序语句,如函数、子程序等 它们是组成程序的基本单元 一个模块具有其外部特征和内部特征 外部特征包括:模块的接口(模块名、输入/输出参数、返回值等)和模块的功能 内部特征包括:模块的内部数据和完成其功能的程序代码 在SD 中,我们只关注模块的外部特征,而忽略其内部特征 73复旦大学计算机科学与工程系 软件工程课程调用和数据 调用(call):用从一个模块指向另一个模块的箭头来表示,其含义是前者调用了后者 为了方便,有时常用直线替代箭头,此时,表示位于上方的模块调用位于下方的模块 数据(data):模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示74复旦大学计算机科学与工程系 软件工程课程结构图中的辅助符号D BCA图5.20 条件调用D BCA图5.21 循环调用图5.22 递归调用75复旦大学计算机科学与工程系 软件工程课程结构图的几个概念 深度:程序结构图中控制的层数,例如图中所示的结构图的深度是5 宽度:程序结构图中同一层次上模块总数的最大值,例如图中所示的结构图的宽度为7 扇出(fan out):该模块直接调用的模块数目。例如,例如图中模块M 的扇出是3,模块A 的是2,模块B 的扇出是1 扇入(fan in):能直接调用该模块的模块数目。例如图中模块G 的扇入是1,模块I 的扇入是2,模块R 的扇入是4WBKAEHJDG FILCMN O P QR深度宽度扇入扇出76复旦大学计算机科学与工程系 软件工程课程相关指标的含义 深度和宽度在一定程序上反映了程序的规模和复杂程度 相对而言,如果程序结构图的深度和宽度较大,则说明程序的规模和复杂程度都较大。模块的扇入扇出会影响结构图的深度和宽度,例如减少模块的扇出,可能导致宽度变小而深度增加 一个模块的扇出过大通常意味着该模块比较复杂,然而扇出太少,可能导致深度的增加 一般情况,一个模块的扇出以39为宜 一个模块的扇入表示有多少模块可直接调用它,它反映了该模块的复用(reuse)程度,因此模块的扇入越大越好77复旦大学计算机科学与工程系 软件工程课程启发式设计策略-1按照模块化设计原则,相应的启发式设计策略如下:改造程序结构图,降低耦合度,提高内聚度 避免高扇出,并随着深度的增加,力求高扇入 避免如图a那样的“平铺”形态,较好的结构图形态是如图b那样的“椭圆”型(a)平铺形态(b)椭圆形态78复旦大学计算机科学与工程系 软件工程课程启发式设计策略-2 模块的影响范围应限制在该模块的控制范围内,例如下图中 图a中,模块B2的影响范围(模块A)不在其控制范围(模块B2)内 决策控制是在顶层模块,其影响范围(A、B2)在控制范围内,但是从决策控制模块到被控模块之间相差多个层次 c和d较合适,d为最好(c)TopXBB1AYB2TopX YABB2 B1(d)XBB1YTopXBB1YAB2(a)(b)ATopB279复旦大学计算机科学与工程系 软件工程课程启发式设计策略-3 降低模块接口的复杂程度和冗余程度,提高一致性 模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块的功能相一致,即不传递与模块功能无关的数据 模块的功能应是可预测的,避免对模块施加过多的限制 模块功能可预测是指该模块对相同的输入能产生相同的输出 限制一个模块只处理单一的功能,那么,这个模块体现出高内聚 尽可能设计单入口和单出口的模块 单入口和单出口的模块能有效地避免内容耦合 80复旦大学计算机科学与工程系 软件工程课程结构化设计的步骤 建立初始结构图 将整个软件看作一个大的功能模块,通过功能分解不断将其分解成若干个较小的功能模块,直至得到一组不必再分解的模块(结构图中的底层模块)对结构图进行改进 可根据设计准则和启发式设计策略对初始结构图进行改进 书写设计文档 书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等 设计评审81复旦大学计算机科学与工程系 软件工程课程内容摘要 结构化分析方法概述 数据流图 分层数据流图的审查 数据字典 描述基本加工的小说明 结构化设计概述数据流图到软件体系结构的映射数据流图到软件体系结构的映射 初始结构图的改进 小结82复旦大学计算机科学与工程系 软件工程课程数据流图到软件体系结构的映射 结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)信息流:变换流和事务流 将数据流图分为变换型数据流图和事务型数据流图,对应的映射分别称为变换分析和事务分析83复旦大学计算机科学与工程系 软件工程课程变换流 特征:数据流图可明显地分成输入、变换、输出三部分 信息沿着输入路径进入系统,并将输入信息的外部形式经过编辑、格式转换、合法性检查、预处理等辅助性加工