八、加工说明
在上一小节,我们讨论了利用数据字典来对数据流图中的数据流、文件和数据项加以定义。本小节讨论如何对数据流图中的基本加工进行描述,这是结构化分析的关键部分,我们把对基本加工的描述称为编写“加工说明”。
这里讲的“加工说明”是指对数据流图中功能单元(不能再作分解的加工)的描述,而对数据流图中其它加工则可以没有加工说明。
1.编写加工说明的要求:
(1)对数据流图中的每个功能单元必须有一个加工说明。
(2)加工说明必须描述功能单元把输入数据转换为输出数据流的转换规则。
(3)每个加工说明必须描述转换的策略,而不是转换的实现细节。即主要描述一个加工“做什么”,而不是用程序设计语来描述具体的加工过程。
(4)加工说明应力求完整、严密、易于理解。
2.加工说明的描述工具
由于自然语言不够精确、简练,不适合编写加工说明。目前已由许多适用加工说明的描述工具。下面我们介绍三种最常用的工具:结构化语言、判定表和判定树。
(1)结构化语言
自然语言的优点是容易理解,但是它不精确,可能有多意性。程序设计语言的优点是严格精确,但它的语法规定太死板,使用不方便。结构化语言(Structured Language)则是介于自然语言和程序设计语言之间的一种语言,它是带有一定结构的自然语言。在我国,通常采用较易为用户和开发人员双方接受的结构化汉语。
在用结构化语言描述问题时只允许使用三种基本逻辑结构、顺序结构、选择结构和循环结构。配合这三种结构所使用的词汇主要有三类:陈述句中的动词;在数据字典中定义的名词;某些逻辑表达式中的保留字、运算符、关系符等。后面我们还会具体说明这三种语句的使用方式。
为了减少复杂性,便于人们理解,编写加工说明需要注意以下几点:
l避免结构复杂的长句;
l 所用名词必须在数据字典中有定义;
l不要用意义相同的多种动词,用词名应始终如一。例如,“修正”、“修改”、“更改”含义相同,一旦确定使用其中一个以后,就不要再用其余两个;
l为提高可读性,书写时可采用“阶梯形”格式;
l嵌套使用各种结构时,应避免嵌套层次过多而影响可读性。
表5-4-5,5-4-6为两个加工说明的例子。
表5-4-5 人事档案系统修改说明
加 工 号:修改 加工编号:RS2 输 入:功能代号2 加工逻辑:输入职工号,可对相应职工的各数据项进行修改 输 出:修改后的职工数据 注 释:在人事数据有变化时,随即使用该功能 |
加 工 名:查询 加工编号:RS3 输 入:功能代号3 加工逻辑:
输 出:工资额、工作部门、职称、职工号 注 释: |
(2)判定表
对于具有多个互相联系的条件和可能产生多种结果的问题, 用结构化语言描述则显得不够直观和紧凑,这时可以用以清楚、简明为特征的判定表(Decision Table)来描述。
判定表采用表格形式来表达逻辑判断问题,表格分成四个部分:左上角为条件说明;左下角为行动说明;右上角为各种条件的组合说明;右下角为各条件组合下相应的行动。下面我们用例子来说明如何使用判定表。
例:某商业批发公司本着薄利多销的原则制定了折扣政策,规定在与客户成交时,可根据不同情况对客户应交货款打一定折扣。表5-4-7为使用判定表描述的该公司的折扣政策。其中,C1--C3为条件,A1--A4为行动,1-8为不同条件的组合,Y为条件满足,N为不满足,X为该条件组合下的行动。例如,条件4表示若交易额在50,000元以上、最近3个月中有欠款且与本公司交易在20年以下,则可享受5%的折扣率。
表5-4-7 判定表描述的折扣政策

判定表是根据条件组合进行判断的,上面表格中每个条件只存在“Y(是)”和“N(非)”两种情况,所以3个条件共有23=8种可能性。在实际使用中,有的条件组合可能是矛盾的,需要剔除,有的则可以合并。因此需在原始判定表的基础上进行整理和综合,才能得到简单明了且实用的判定表。同时,在整理过程中还可能对用户的原有业务过程进行改进和提高。 (表5-4-8是由表5-4-7合并得到的,其中“-”表示“Y”或“N”均可。)
判定表的内容十分丰富,除了以上介绍的有限判定表(Limited Entry Table),根据表中条件取值的状态不同,还有扩展判定表(Extended Entry Table)和混合判定表(Mixed Entry Table)。它们都各有特色,若能合理选择和灵活运用,则可描述、处理更为广泛、复杂的判断过程。详细的内容可参阅有关的书籍,这儿就不介绍了。
表5-4-8 合并整理后的判定表

(3)判定树
判定树(Decision Tree)是用来表示逻辑判断问题的一种图形工具。它用“树”来表达不同条件下的不同处理,比语言、表格的方式更为直观。判定树的左侧(称为树根)为加工名,中间是各种条件,所有的行动都列于最右侧。
前面例子给出的某商业批发公司的折扣政策(表5-4-8),可以用图5-4-10所示的判定树来进行描述。

图5-4-10 判定树
3.几种表达工具的比较
以上介绍的三种用于描述加工说明的工具各自具有不同的优点和不足,它们之间的比较如表5-4-9所示。通过比较可以看出它们的适用范围:
表5-4-9 几种表达工具的比较
比较指标 | 结构化语言 | 判定表 | 判定树 |
逻辑检查 表示逻辑结构 使用方便性 用户检查 程序说明 机器可读性 机器可编辑性 可变性 | 好 好(所有方面) 一般 不好 很好 很好 一般(要求句法) 好 | 很好 一般(仅是决策方面) 一般 不好(除非用户受过训练) 很好 很好 很好 不好(除非是简单的组合变化) | 一般 很好(仅是决策方面) 很好 好 一般 不好 不好 一般 |
结论:(1)结构化语言最适用于涉及到具有判断或循环动作组合顺序的问题。
(2)判定表较适用于含有5-6个条件的复杂组合,条件组合过于庞大则将造成不便。
(3)判定树适用于行动在10-15之间的一般复杂程度的决策。必要时可将判定表上的规则转换成判定树,以便于用户使用。
(4)判定表和判定树也可用于系统开发的其它阶段,并被广泛地应用于其它学科。
九、功能/数据分析
功能/数据分析是在实际系统的业务流程、管理功能、数据流程以及数据分析的基础上进行系统化的分析,以便检查出工作中的疏漏、原系统的缺点和不足,确定未来新系统的改革方案。
通过U/C矩阵的建立和分析来实现功能/数据分析。
1.U/C矩阵及其建立
U/C矩阵是对要分析的内容所展开的一个二维表格。
U/C矩阵的建立从实际上来看,不是一件容易的事。从理论上来看,建立U/C矩阵时,首先要进行系统化。自顶向下地划分,然后逐个地确定某一个具体的功能(功能类)和数据(数据类),最后确定功能/数据之间的关系。
U/C矩阵举例:

图5-4-11 U/C矩阵举例
2.U/C矩阵的正确性检验
利用U/C矩阵来检查系统分析的正确性,一般其正确性检验有三个步骤:
(1)完备性检验:
具体的数据项(类)必须有一个产生者(“ C”)和至少一个使用者(“ U”),功能(类)则必须有产生(C)或使用(U)的发生(U或C元素的出现)。
该检验能够使我们及时发现U/C矩阵中的功能或数据项的划分是否合理,U,C元素有无填错、漏填等。若出现上述情况,则U/C矩阵的建立是不完备的。
(2)一致性检验:
对具体的数据项/类必须有且仅有一个产生者。如果有多个产生者(C元素),则产生了不一致的现象。其原因可能是:
<1>没有产生者-漏填了C元素或是功能、数据的划分不当;
<2>多个产生者-错填了C元素或是功能、数据的划分不独立、不一致。
(3)无冗余性检验:
表中不允许有空行空列出现。如果出现空行空列则原因可能是:
<1>漏填了C元素或U元素
<2>功能项或数据项划分是冗余的——即没有必要。
3.U/C矩阵的求解
U/C矩阵的求解过程就是对系统结构划分的优化过程。它是基于子系统划分应相互独立,而且内部凝聚性高的原则之上的一种聚类操作。
具体求解是使表中的“ C”元素尽可能地靠近,然后再以“ C”元素为标准划分子系统。
(1)U/C矩阵的表上作业
其具体做法是:
调换表中的行变量或列变量,使得“ C”元素尽量的朝对角线靠近。
(2)U/C矩阵求解算法
随着矩阵规模的扩大,直接由人工调整的方法将会变得十分繁杂。利用计算机来完成这种聚类操作,成为系统化的一种方法。
求解算法:三个步骤
<1>设有不干涉系数数列,其规律为:
A1=任意正整数
A2=任意正整数且大于A1
A3=A1+A2 +1
Ai=2×Ai-1, i ?
例:若取A1 =1,A2 =3,
A3 = A1 + A2 + 1=5
A4 =10, A5 =20, A5 =40,… …
<2>对U/C矩阵内的C元素按列作相关的不干涉系数求和运算。
S=ΣCij Aj
其中:Aj表示第j个不干涉系数,
求和结果如图5-4-12所示。

图5-4-12 矩阵按行求和运算图
图中 Cij表示矩阵中第i行第j列个C元素,然后,再按所求值由小到大调整列排序,如图5-4-13所示。

图5-4-13 U/C矩阵调整列排序后的结果
<3>对上图重复上述过程,按行作相关的不干涉系数之和运算。
S=ΣCij Aj
然后,按所求值再按所求值由小到大调整行排序,如图5-4-14所示。

图5-4-14 系统划分图
划分子系统:在U/C矩阵中沿着对角线划分小方块,所有的小方块包含所有的“ C”元素。
注:小方块(子系统)的划分不是唯一的。没有划入小方块的“ U”元素,是各子系统之间数据联系,是共享的数据,并用箭头从横纵两个方向与各子系统联系起来。