在分层数据流图画好后,应该认真检查图中是否存在错误或不合理(不理想)的部分。
1)分层数据流图的一致性和完整性
分层数据流图的一致性是指分层DFD中不存在矛盾和冲突。这里讲的完整性是指分层DFD本身的完整性,即是否有遗漏的数据流、加工等元素。所以,分层 DFD 的一致性和完整性实际上反映了图本身的正确性。但是图本身的正确性并不意味着分析模型的正确性,分析模型的正确性要根据模型是否满足用户的需求来判断。
(1)分层数据流图的一致性。
① 父图与子图的平衡。父图与子图平衡是指任何一张 DFD子图边界上的输入/输出数据流必须与其父图中对应加工的输入/输出数据流保持一致。
由于一张子图是被分解的加工的一种细化,所以,这张子图应该保证可以画到父图中替代被分解的加工,因此保持父图与子图平衡是理所当然的。
例如,下图所示的父图与子图是不平衡的。下图(b)是父图中加工 2 的子图,加工 2 的输入数据流有 M 和 N,输出数据流是 T,而子图边界上的输入数据流是 N,输出数据流是 S 和 T,很显然它们是不一致的。
如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么它们仍然是平衡的。
保持父图与子图平衡是画数据流的重要原则。自顶向下逐层分解是降低问题复杂性的有效途径。然而,如果只分别关注单张图的合理性,忽略父图与子图之间的关系,则很容易造成父图与子图不平衡的错误。
② 数据守恒。数据守恒包括两种情况:第一种情况是指一个加工的所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生。
第二种情况是加工未使用其输入数据流中的某些数据项。这表明这些未用到的数据项是多余的,可以从输入数据流中删去。当然,这不一定就是错误,只表示存在一些无用数据。然而这些无用的数据常常隐含着一些潜在的错误,如加工的功能描述不完整、遗漏或不完整的输出数据流等。因此,在检查数据守恒时,不应该忽视对这种情况的检查。
③ 局部数据存储。这里讨论分层数据流图中的一个数据存储应该画在哪些DFD中,不应该画在哪些DFD 中。
在一套完整的分层DFD中,任何一个数据存储都应有写和读的数据流,否则这个文件就没有存在的必要。除非这个数据存储的建立是为另一个软件系统使用或者这个数据存储是由另一个软件系统产生和维护的。
在自顶向下分解加工的过程中,如果某个加工需要保存一些数据,同时在将加工的同一张DFD上至少存在另一个加工需要读这些数据,那么该数据存储应该在这张DFD上画出。也就是在一张 DFD中,当一个数据存储作为多个加工之间的交界面时,该数据存储应该画出。如果在一张DFD中,一个数据存储仅与一个加工进行读/写操作,并且在该DFD 的父(祖先)图中未出现过该数据存储,那么该数据存储只是相应加工的内部文件,在这张DFD 中不应该画出。
④ 一个加工的输出数据流不能与该加工的输入数据流同名。同一个加工的输出数据流和输入数据流,即使它们的组成成分相同,仍应该给它们取不同的名字,以表示它们是不同的数据流。但是允许一个加工有两个相同的数据流分别流向两个不同的加工。
(2)分层数据流图的完整性。
① 每个加工至少有一个输入数据流和一个输出数据流。一个没有输入数据流或者没有输出数据流的加工通常是没有意义的。当出现这种情况时,常常意味着可能遗漏了某些输入数据流或输出数据流。
② 在整套分层数据流图中,每个数据存储应至少有一个加工对其进行读操作,另一个加工对其进行写操作。对于某一张 DFD来说,可以只写不读或只读不写。
③ 分层数据流图中的每个数据流和文件都必须命名(除了流入或流出数据存储的数据流),并保持与数据字典一致。
④ 分层数据流图中的每个基本加工都应有一个加工规约。
2)构造分层 DFD时需要注意的问题
(1)适当命名。DFD中的每个数据流、加工、数据存储、外部实体都应被适当地命名,名字应符合被命名对象的实际含义。通常,数据流名可用名词或形容词加名词来描述;加工名可以用动词或及物动词加宾语来描述;数据存储名可以用名词来描述;外部实体可以用实际的人员身份或组织的名称来命名。
用户在命名时应注意以下问题。
① 名字应反映整个对象(如数据流、加工),而不是只反映它的某一部分。
② 避免使用空洞的、含义不清的名字,如“数据”“信息”“处理”“统计”等。
③ 如果发现某个数据流或加工难以命名,往往是DFD分解不当的征兆,此时应考虑重新分解。
(2)画数据流而不是控制流。数据流图强调的是数据流,而不是控制流。在 DFD中一般不能明显地看出其执行的次序。为了区分数据流和控制流,可以简单地回答下列问题:“这条线上是否有数据流过?”,如果有表示是数据流,否则是控制流。
(3)避免一个加工有过多的数据流。当一个加工有过多的数据流时,意味着这个加工特别复杂,这往往是分解不合理的表现。解决的办法是重新分解,步骤如下。
① 把需要重新分解的某张图的所有子图连接成一张图。
② 把连接后的图重新划分成几个部分,使各部分之间的联系最小。③重新定义父图,即 第②步中的每个部分作为父图中的一个加工。④重新建立各子图,即第②步中的每个部分都是一张子图。
为所有的加工重新命名并编号。
(4)分解尽可能均匀。理想的分解是将一个问题(加工)分解成大小均匀的若干个子问题(子加工),也就是说,对于任何一张DFD,其中的任何两个加工的分解层数之差不超过1。如果在同一张图中,某些加工已是基本加工,而另一些加工仍需分解若干层,那么,这张图就是分解不均匀的。
(5)先考虑确定状态,忽略琐碎的细节。在构造 DFD 时,应集中精力先考虑稳定状态下的各种问题,暂时不考虑系统如何自动、如何结束、出错处理以及性能等问题,这些问题可以在分析阶段的后期,在需求规约中加以说明。
(6)随时准备重画。对于一个复杂的软件系统,其分层 DFD 很难一次开发成功,往往要经历反复多次的重画和修改,才能构造出完整、合理、满足用户需求的分层 DFD。
3)分解的程度
在自顶向下画数据流图时,为了便于对分解层数进行把握,可以参照以下几条与分解有关的原则。
(1)7 加减 2。
(2)分解应自然,概念上应合理、清晰。
(3)只要不影响 DFD 的易理解性,可适当增加子加工数量,以减少层数。
(4)一般来说,上层分解得快一些(即多分解几个加工),下层分解得慢一些(即少分解几个加工)。
(5)分解要均匀。
————————————————
版权声明:本文为CSDN博主「qw&jy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43448856/article/details/124801069
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!