说在前面:
本系列文章专注于软考备考复习内容梳理,文章内容是对教材中知识点和考点的提炼,备考过程中可以有针对的进行复习,减少阅读量,有的放矢。
导航目录:
结构化分析与设计方法是一种面向数据流的传统软件开发方法,它以数据流为中心构建软件的分析模型和设计模型。结构化分析(Structured Analysis,SA)、结构化设计(Structured Design,SD)和结构化程序设计(Structured Programming Design,SPD)构成了完整的结构化方法。
一、结构化分析方法概述
抽象和分解是处理任何复杂问题的两个基本手段。
抽象是指忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面。对于一个复杂的问题,人们很难一下子考虑问题的所有方面和全部细节,通常可以把一个大问题分解成若干个小问题,将每个小问题再分解成若干个更小的问题,经过多次逐层分解,每个最底层的问题都是足够简单、容易解决的,于是复杂的问题也就迎刃而解了。这个过程就是分解的过程。
结构化方法就是采用这种自顶向下逐层分解的思想进行分析建模的。自顶向下逐层分解充分体现了分解和抽象的原则。随着分解层次的增加,抽象的级别也越来越低,即越来越接近问题的解。自顶向下的过程是分解的过程,自底向上的过程是抽象的过程。
结构化方法的分析结果由以下几部分组成∶一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料。
二、数据流图
数据流图也称数据流程图(Data Flow Diagram,DFD),它是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。
1)数据流图的基本图形
元素
数据流图中的基本图形元素包括数据流(Data Flow)、加工(Process)、数据存储(Data Store)和外部实体(Extemal Agent)。其中,数据流、加工和数据存储用于构建软件系统内部的数据处理模型;外部实体表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向。
- 数据流。
数据流由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向可以有以下几种∶从一个加工流向另一个加工;从加工流向数据存储(写)∶从数据存储流向加工(读)从外部实体流向加工(输入)从加工流向外部实体(输出)。
DFD中的每个数据流用一个定义明确的名字表示。除了流向数据存储或从数据存储流出的数据流不必命名外,每个数据流都必须有一个合适的名字,以反映该数据流的含义。
值得注意的是,DFD中描述的是数据流,而不是控制流。
数据流或者由具体的数据属性(也称为数据结构)构成,或者由其他数据流构成。组合数据流是由其他数据流构成的数据流,它们用于在高层的数据流图中组合相似的数据流,以使数据流图更便于阅读。
- 加工。
加工描述了输入数据流到输出数据流之间的变换,也就是输入数据流经过什么处理后变成了输出数据流。每个加工都有一个名字和编号。编号能反映出该加工位于分层DFD中的哪个层次和哪张图中,也能够看出它是哪个加工分解出来的子加工。
一个加工可以有多个输入数据流和多个输出数据流,但至少有一个输入数据流和一个输出数据流。
- 数据存储。
数据存储用来存储数据。通常,一个流入加工的数据流经过加工处理后就消失了,而它的某些数据(或全部数据)可能被加工成输出数据流,流向其他加工或外部实体。除此之外,在软件系统中还常常要把某些信息保存下来以供以后使用,这时可以使用数据存储。
每个数据存储都有一个定义明确的名字标识。可以有数据流流入数据存储,表示数据的写入操作;也可以有数据流从数据向数据存储,表示对数据的修改。
这里要说明的是,DFD中的数据存储在具体实现时可以用文件系统实现,也可以用数据库系统实现。数据存储的存储介质可以是磁盘、磁带或其他存储介质。
- 外部实体(外部主体)。
外部实体是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地(源)和系统所产生的数据的归宿地(宿)。例如,对于一个考务处理系统而言,考生向系统提供报名单(输入数据流),所以考生是考务处理系统的一个源;而考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以考试中心是该系统的一个宿。
在许多系统中,某个源和某个宿可以是同一个人员或组织,此时,在DFD中可以用同一个符号表示。考生向系统提供报名单,而系统向考生送出准考证,所以在考务处理系统中,考生既是源又是宿。源和宿采用相同的图形符号表示,当数据流从该符号流出时,表示它是源;当数据流流向该符号时,表示它是宿;当两者皆有时,表示它既是源又是宿。
2)数据流图的扩充符号
在DFD中,一个加工可以有多个输入数据流和多个输出数据流,此时可以加上一些扩充符号来描述多个数据流之间的关系。
(1)星号(*)。
星号表示数据流之间存在“与”关系。如果是输入流则表示所有输入数据流全部到达后才能进行加工处理;如果是输出流则表示加工结束将同时产生所有的输出数据流。
(2)加号(+)。
加号表示数据流之间存在“或”关系。如果是输入流则表示其中任何一个输入数据流到达后就能进行加工处理;如果是输入流则表示加工处理的结果是至少产生其中一个输出数据流。
(3)异或(θ)。
异或表示数据流之间存在“互斥”关系。如果是输入流则表示当且仅当其中一个输入流到达后才能进行加工处理;如果是输出流则表示加工处理的结果是仅产生这些输出数据流中的一个。
3)数据流图的层次结构
从原理上讲,只要纸足够大,一个软件系统的分析模型就可以画在一张纸上。然而,一个复杂的软件系统可能涉及上百个加工和上百个数据流,甚至更多。如果将它们画在一张图上,则会十分复杂,不易阅读,也不易理解。
根据自顶向下逐层分解的思想,可以将数据流图按照层次结构来绘制,每张图中的加工个数可大致控制在"7加减2"的范围内,从而构成一套分层数据流图。
- 层次结构
分层数据流图的顶层只有一张图,其中只有一个加工,代表整个软件系统,该加工描述了软件系统与外界之间的数据流,称为顶层图。
顶层图中的加工(即系统)经分解后的图称为0层图,也只有一张。处于分层数据流图最底层的图称为底层图,在底层图中,所有的加工不再进行分解。分层数据流图中的其他图称为中间层,其中至少有一个加工(也可以是所有加工)被分解成一张子图。在整套分层数据流图中,凡是不再分解成子图的加工称为基本加工。
- 图和加工的编号。
首先介绍父图和子图的概念。
如果某图(记为A)中的某一个加工分解成一张子图(记为B),则称A是B的父图,B是A的子图。若父图中有n个加工,则它可以有0一刀张子图,但每张子图只对应一张父图。
为了方便对图进行管理和查找,可以采用下列方式对DFD中的图和加工编号。
① 顶层图中只有一个加工(代表整个软件系统),该加工不必编号。
② 0层图中的加工编号分别为1、2、3–。
③ 子图号就是父图中被分解的加工号。
④ 对于子图中加工的编号,若父图中的加工号为X的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、X.3…。
4)分层数据流图的审查
在分层数据流图画好后,应该认真检查图中是否存在错误或不合理(不理想)的部分。
- 分层数据流图的一致性和完整性。
① 分层数据流图的一致性。
a.父图与子图的平衡。
b. 数据守恒。
c.局部数据存储。
d.一个加工的输出数据流不能与该加工的输入数据流同名。
② 分层数据流图的完整性。
a.每个加工至少有一个输入数据流和一个输出数据流。
b.在整套分层数据流图中,每个数据存储应至少有一个加工对其进行读操作,另一个加工对其进行写操作。
c. 分层数据流图中的每个数据流和文件都必须命名(除了流入或流出数据存储的数据流),并保持与数据字典一致。
d. 分层数据流图中的每个基本加工都应有一个加工规约。
- 构造分层DFD时需要注意的问题。
① 适当命名。
a. 名字应反映整个对象(如数据流、加工),而不是只反映它的某一部分。
b. 避免使用空洞的、含义不清的名字,如“数据”“信息”“处理”“统计”等。
c.如果发现某个数据流或加工难以命名,往往是DFD分解不当的征兆,此时应考虑重新分解。
② 画数据流而不是控制流。
③ 避免一个加工有过多的数据流。
a.把需要重新分解的某张图的所有子图连接成一张图。
b.把连接后的图重新划分成几个部分,使各部分之间的联系最小。
c.重新定义父图,即第b步中的每个部分作为父图中的一个加工。
d. 重新建立各子图,即第b步中的每个部分都是一张子图。
e. 为所有的加工重新命名并编号。
④ 分解尽可能均匀。
⑤ 先考虑确定状态,忽略琐碎的细节。
⑥ 随时准备重画。
- 分解的程度。
在自顶向下画数据流图时,为了便于对分解层数进行把握,可以参照以下几条与分解有关的原则。
① 7加减2。
② 分解应自然,概念上应合理、清晰。
③ 只要不影响DFD的易理解性,可适当增加子加工数量,以减少层数。
④ 一般来说,上层分解得快一些(即多分解几个加工),下层分解得慢一些(即少分解几个加工)。
⑤ 分解要均匀。
三、 数据字典(DD)
数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。其中,对加工的描述称为“小说明”,也可以称为“加工逻辑说明”。
1)数据字典的内容
数据字典有以下4类条目∶数据流、数据项、数据存储和基本加工。数据项是组成数据流和数据存储的最小元素。源点、终点不在系统之内,故一般不在字典中说明。
(1) 数据流条目。数据流条目给出了DFD中数据流的定义,通常列出该数据流的各组成数据项。
(2)数据存储条目。数据存储条目是对数据存储的定义。
(3)数据项条目。数据项条目是不可再分解的数据单位。
(4)基本加工条目。加工条目是用来说明 DFD中基本加工的处理逻辑的,由于下层的基本加工是由上层的加工分解而来,只要有了基本加工的说明,就可理解其他加工。
2)数据词典管理
词典管理主要是把词典条目按照某种格式组织后存储在词典中,并提供排序、查找和统计等功能。如果数据流条目包含了来源和去向,文件条目包含了读文件和写文件,还可以检查数据词典与数据流图的一致性。
3)加工逻辑的描述
加工逻辑也称为“小说明”。常用的加工逻辑描述方法有结构化语言、判定表和判定树3种。
- 结构化语言
结构化语言(如结构化英语)是一种介于自然语言和形式化语言之间的半形式化语言,是自然语言的一个受限子集。
结构化语言没有严格的语法,它的结构通常可分为内层和外层。外层有严格的语法,内层的语法比较灵活,可以接近于自然语言的描述。
① 外层。用来描述控制结构,采用顺序、选择和重复3种基本结构。
a.顺序结构。一组祈使语句、选择语句、重复语句的顺序排列。祈使语句是指至少包含一个动词及一个名词,指出要执行的动作及接受动作的对象。
b. 选择结构。一般用IF-THEN-ELSE-ENDIF、CASE-OF-ENDCASE等关键词。
c.重复结构。一般用DO-WHILE-ENDDO、REPEAT-UNTIL等关键词。
② 内层。一般采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不用形容词和副词来修饰,还可使用一些简单的算法运算和逻辑运算符号。
- 判定表。
在有些情况下,数据流图中某个加工的一组动作依赖于多个逻辑条件的取值。这时,用自然语言或结构化语言都不易于清楚地描述出来,而用判定表能够清楚地表示复杂的条件组合与应做的动作之间的对应关系。判定表由4个部分组成,用双线分割成4个区域,如下图所示:
- 判定树。
判定树是判定表的变形,一般情况下它比判定表更直观,且易于理解和使用。
未完待续。。。
更多知识传送:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。