您好,欢迎访问三七文档
对数据流图进行分层•根据自顶向下逐层分解的思想将数据流图画成层次结构。•数据流图的层次大致分为顶层图、0层图、中间层和底层图。•每个层次画在独立的数据流图中,加工个数可大致控制在“7加减2”的范围中。数据流图的各个层次•顶层图只有代表整个软件系统的1个加工,描述了软件系统与外界(源或宿)之间的数据流•顶层图中的加工经分解后的图称为0层图(只有1张)•中间层图中至少有一个加工(也可以有多个)在下层图中分解成一张子图•处于最底层的图称为底层图,其中所有的加工不再分解成新的子图图和加工的编号•顶层图只有一个代表整个软件系统的加工,该加工不必编号。•0层图中的加工编号分别为1,2,3,…•子图号:若父图中的加工号x分解成某一子图,则该子图号记为“图x”•子图中加工的编号:若父图中的加工号为x的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、x.3…画分层数据流图的步骤1.画系统的输入和输出2.画系统内部3.画加工内部4.重复第3步,直至每个尚未分解的加工都足够简单(即不必再分解)分层数据流图示例——资格和水平考试的考务处理系统•简化的资格和水平考试的考务处理系统•分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试•考试的合格标准将根据每年的考试成绩由考试中心确定•考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中资格和水平考试的考务处理系统—功能需求1.对考生送来的报名单进行检查2.对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者4.制作考生通知单送给考生5.进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表资格和水平考试的考务处理系统—部分数据流的组成•报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址•正式报名单=准考证号+报名单•准考证=地区+序号+姓名+准考证号+考试级别+考场•考生名单={准考证号+考试级别}其中{w}表示w重复多次•考生名册=正式报名单•统计分析表=分类统计表+难度分析表•考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志系统的输入输出(顶层图)•确定源或宿:考生、阅卷站和考试中心•顶层图唯一的加工:软件系统(考务处理系统)•确定数据流:系统的输入/输出信息–输入数据流:报名单(来自考生)、成绩清单(来自阅卷站)、合格标准(来自考试中心)–输出数据流:准考证(送往考生)、考生名单(送往阅卷站)、考生通知书(送往考生)、统计分析表(送往考试中心)–额外的输出流(考虑系统的健壮性):不合格报名单(返回给考生),错误成绩清单(返回给阅卷站)•顶层图通常没有文件考务处理系统顶层图考务处理系统考试中心考生不合格报名单阅卷站错误成绩清单成绩清单考生名单合格标准报名单准考证考生通知单统计分析表系统内部(0层图)-1•以下确定加工、数据流、文件、源或宿的一般方法适用于0层图及其各层子图•确定加工:将父图中某加工分解而成的子加工–根据功能分解来确定加工:将一个复杂的功能分解成若干个较小的功能,较多应用于高层DFD中的分解–根据业务处理流程确定加工:分析父图中待分解加工的业务处理流程,业务流程中的每一步都可能是一个子加工–特别要注意在业务流程中数据流发生变化或数据流的值发生变化的地方,应该存在一个加工,例如:编制准考证号正式报名单合格报名单系统内部(0层图)-2•确定数据流–在父图中某加工分解而成的子图中,父图中相应加工的输入/输出数据流都是且仅是子图边界上的输入/输出数据流–分解后的子加工之间应增添相应的新数据流表示加工过程中的中间数据–如果某些中间数据需要保存以备后用,那么可以成为流向文件的数据流–同一个源或加工可以有多个数据流流向一个加工,如果它们不是一起到达和一起加工的,那么可以将它们分成若干个数据流,例如:读取银行卡信息客户银行卡数据密码系统内部(0层图)-3•确定文件–如果父图中该加工存在读写文件的数据流,则相应的文件和数据流都应画在子图中–在分解子图中,如果需要保存某些中间数据以备后用,则可以将这些数据组成一个新的文件–新文件(首次出现的文件)至少应有一个加工为其写入记录,同时至少存在另一个加工来读该文件的记录–注意:从父图中继承下来的文件在子图中可能只对其进行读,或只进行写系统内部(0层图)-4•确定源和宿–0层图和其它子图中通常不必画出源和宿–有时为提高可读性,可将顶层图中的源和宿画在0层图中•最终得到考务处理系统0层图–根据功能分解方法识别出两个加工:考试报名、统计成绩–数据流•继承顶层图中的输入数据流和输出数据流•定义二个加工之间的数据流:由于这二个加工分别在考试前后进行,因此登记报名单所产生的结果“考生名册”应作为文件保存以便考试后由统计成绩加工引用考务处理系统0层图考生名册1考试报名报名单考生名单不合格报名单准考证2统计成绩统计分析表合格标准考生通知单错误成绩清单成绩清单加工内部(1…n层图)•复杂的加工可以继续分解成1张DFD子图•分解方法–将该加工看作一个小系统,该加工的输入/输出数据流就是这个假设的小系统的输入/输出数据流–然后采用画0层图的方法,画出该加工的子图•以0层图中加工1(考试报名)为例–根据业务处理流程来确定由加工1的分解–与加工1相关的业务流程:首先检查考生送来的报名单,然后编准考证号,并产生准考证,最后产生考生名单和考生名册(文件)考务处理系统加工1子图•3个子加工:检查报名单、编准考证号、登记考生•“合格报名单”和“正式报名单”是新增加的数据流,其它数据流都是加工1原有的•在加工1的分解中没有新的文件产生1.3登记考生考生名单1.2编准考证号准考证正式报名单1.1检查报名单合格报名单报名单不合格报名单考生名册考务处理系统加工2子图2.5分析试题难度难度分析表2.4分类统计成绩分类统计表考生名册2.3制作通知单考生通知单2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单5.3分层数据流图的审查•检查图中是否存在错误或不合理(不理想)的部分–一致性:分层DFD中不存在矛盾和冲突–完整性:分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素•可从分层DFD的一致性和完整性、构造分层DFD时需注意的问题以及分解程度等几个方面来说明如何审查分层DFD的合理性分层数据流图的一致性•父图与子图平衡–任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应的加工的输入/输出数据流保持一致•数据守恒–一个加工所有输出数据流中的数据,必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生–多余的数据流:加工未使用其输入数据流中的某些数据项•局部文件•一个加工的输出数据流不能与该加工的输入数据流同名父图与子图不平衡的实例•加工2的输入数据流有M和N,输出数据流是T•而子图(右图)边界上的输入数据流是N,输出数据流是S和T123ABCMNT2.12.22.3NPSTQ父图与子图平衡的实例•注意:如果父图某加工的一个数据流,对应于子图中几个数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这个数据流,那么它们仍算是平衡的e2.52.42.32.22.1b2b1acdb21acde(a)父图(b)子图a:考生通知单;b:统计分析表;b1:分类统计表;b2:难度分析表;c:错误成绩清单;d成绩清单;e合格标准。数据不守恒的实例由于“正式成绩清单”中缺少“考生通知单”中的姓名、通信地址等数据,这些数据也无法由加工2.3自己产生,因此,加工2.3不满足数据守恒的条件考生名册2.5分析试题难度难度分析表2.4分类统计成绩分类统计表2.3制作通知单考生通知单2.2审定合格者正式成绩清单合格标准试题得分清单2.1检查成绩清单成绩清单正确成绩清单错误成绩清单由此可见:1.数据流的组成对DFD是有影响的2.构建DFD与建立数据字典应交替进行,以便于对分层DFD的校验局部文件•考虑分层数据流中一个文件应画在哪些DFD中,而不该画在哪些DFD中–任何一个文件都应同时包含读和写该文件的数据流,除非该文件是当前系统与另一个软件系统所共享–在一张DFD中当一个文件作为若干个加工之间的交界面(一个写另一个读)时该文件应画出–在一张DFD中当一个文件仅与一个加工进行读写操作,并且在该DFD的父(祖先)图中未出现过该文件则该文件是相应加工的内部文件,在当前DFD中不应画出–一个文件一旦在某张DFD中画出,那么在它的子孙图中应根据父图与子图平衡的原则画出该文件局部文件示例“试题得分清单”文件是加工2的局部文件,根据抽象原则不应该将这类表示加工细节的局部文件画在其父图(如图c)中,正确的画法是图a和b21(a)父图考生名册(b)子图2.52.42.32.22.1试题得分清单考生名册(c)含局部文件的父图21试题得分清单考生名册加工的输出数据流不能与该加工的输入数据流同名•同一个加工的输出数据流和输入数据流即使组成成份相同,仍应对它们取不同的名字,以表示它们是不同数据流–例如,“报名单”和“合格报名单”•允许一个加工有二个相同的数据流分别流向二个不同的加工分层数据流图的完整性•每个加工至少有一个输入数据流和一个输出数据流•在整套分层数据流中,每个文件应至少有一个加工读该文件,有另一个加工写该文件•分层数据流图中的每个数据流和文件都必须命名(除了流入或流出文件的数据流),并保持与数据字典的一致•分层DFD中的每个基本加工(即不再分解子图的加工)都应有一个加工规约其它需注意的问题-1•适当命名:每个数据流、加工、文件、源和宿都应被适应地命名,名字应符合被命名对象的实际含义–名字应反映整个对象(如数据流、加工),而不是仅反映它的某一部分–避免使用空洞的、含义不清的名字,如数据、信息、处理、统计等–如果发现某个数据流或加工难以命名时,往往是DFD分解不当的征兆,此时应考虑重新分解•画数据流而不是画控制流–判断准则:这条线上是否有数据流过其它需注意的问题-2•避免一个加工有过多的数据流–当一个加工存在许多数据流时往往意味着分解不合理–解决办法:重新分解1)把需要重新分解的某张图(含有该复杂加工的图)的所有子图连接成一张图2)把连接后的图重新划分成几个部分,使各部分之间的联系最小3)重新定义父图,即第2)步中的每个部分作为父图中的一个加工4)重新建立各子图,即第2)步中的每个部分都是一张子图5)为所有的加工重新命名和编号数据流图重新分解示例(b)原加工2子图2.22.12.32.42.5HJICKLEMN(d)重新分解后的父图452′32″1ABHGJICKLDEMFPN(a)原父图34512HABJICKLDEMFPNG(c)合并4532.42.52.22.12.31FABHJICKLDEMPNG其它需注意的问题-3•分解尽可能均匀–理想目标:任何两个加工的分解层数之差不超过1–应尽可能使分解均匀,对于分解不均匀的情况应重新分解•先考虑稳定状态,忽略琐碎的枝节–先考虑稳定状态下的各种问题,暂时不考虑系统如何启动、如何结束、出错处理以及性能等问题•随时准备重画–对于一个复杂的软件系统,往往要经过反复多次的重画和修改才能构造出完整、合理、满足用户需求的分层DFD–分析阶段遗漏下来的一个错误,到开发后期要化费几百倍代价来纠正这个错误分解的程度•可参照以下几条与分解有关的原则:–7加减2–分解应自然,概念上合理、清晰–只要不影响DFD的易理解性,可适当多分解几个加工,以减少层数–一般说来,上层分解得快些(即多分解几个加工),下层分解得慢些(即少分解几个加工)–分解要均匀
本文标题:数据流图
链接地址:https://www.777doc.com/doc-3382357 .html