3.4 系统的结构化描述技术
在数据流程图中,每个处理框只是简单地标上了处理的名字,不能表达处理逻辑的全部内容。在数据字典里,包括了对各个处理功能的一般描述,但这种描述是高度概括的,也不可能描述各个处理逻辑的全部细节。因此需要其他工具来详细描述处理逻辑。
数据流程图是分层的。将一个大型复杂的系统逐层分解成许多个足够简单的基本加工,顶层的数据流程图表达系统的主要逻辑功能,随着自顶而下、逐层细化的过程,表达的功能也越来越具体,处理逻辑也越来越精细,直到底层的数据流程图、系统的全部处理逻辑被详细地表达出来。系统底层的处理逻辑详细到了可以实现的程度,是系统的最小功能单元,因此被称为“基本处理”。如果对所有基本处理的逻辑功能都描述清楚了,再自底而上进行综合,整个系统的所有逻辑功能也就清楚了。
加工处理逻辑指的是业务人员处理业务的算法和逻辑关系,即用户要求这个加工“做什么”。加工处理逻辑的分析就是对业务流程分析和数据流程分析的补充,也是系统处理模块的设计依据。每个加工处理必然有处理的原始数据和输出设计,以及处理的逻辑关系和算法。例如,用文字表达这种多元的逻辑关系,不仅十分烦琐,而且难以看清,采用了结构化描述技术可以清晰地表达条件、决策规则和应采用行动之间的逻辑关系,容易为管理人员和系统分析人员所接受。结构化描述技术主要有结构化英语、决策树和决策表等。
3.4.1 结构化英语
结构化英语又称为程序设计语言(PDL,Program Design Language),是一种模仿计算机语言的处理逻辑描述方法,介于自然语言和形式化语言之间的半形式化语言。它是在自然语言的基础上增加了一些限制而得到的语言,使用有限的词汇和有限的语句来描述处理逻辑。
结构化英语的词汇包括英语命令动词、数据字典中定义的名字、有限的自定义词和逻辑关系词如IF THEN ELSE、WHILE DO、REPEAT UNTIL和CASE OF等。其动词的含义要具体,不使用抽象的动词,尽可能少用或者根本不用形容词或副词。
结构化英语只允许使用3种基本结构控制,处理逻辑的操作使用自然语言短语来表示。这3种基本控制结构如下。
1)简单陈述句
力求精练,不应太长,避免使用复合语句。
2)判定结构
IF THEN ELSE或CASE OF结构。
3)循环结构
WHILE DO或REPEAT UNTIL结构。
结构化英语的处理原则如下。
(1)尽可能精确,避免二义性。
(2)尽可能简单,使用户易于理解。
(3)也可用带有一定结构的汉语来描写加工逻辑。
1.主要结构
结构化英语通常分为外层和最内层两大层,其中外层可以有多层,相互嵌套。外层语法比较具体,最内层语法则比较灵活。外层语法用来描述控制结构,通常采用人们已熟知的几种标准结构,如顺序、选择和循环,这些控制结构将加工中的各个操作连接起来,使用了由IF、THEN、ELSE等词组成的规范化语言。
内部语法具有以下特点。
(1)只有简单陈述句一种,它能明确地表达“做什么”。
(2)名词都是字典中定义过的词或自定义的词。
(3)动词避免用空洞的词。
(4)没有形容词和副词等修饰语。
(5)可以用一些常用的运算法和关系符等。
总体来说,结构化英语只允许使用3种基本结构控制,处理逻辑的操作使用自然语言短语来表示。这3种基本控制结构如下。
1)简单陈述句
力求精练,不应太长,避免使用复合语句。在描述处理中决策方案的部分通常用简单陈述句,例如“先付款再发货”、“先按库存发货”或“不发货”等。
2)判定结构
采用的是计算机语言的类似结构:
IF<条件> THEN决策1 ELSE<非条件>/OTHERWISE<非条件> SO决策2
IF与ELSE对应的是同一条件的是与非,因此一个结构只能对一种条件进行判断。当要描述多个条件的处理逻辑时,就要通过嵌套结构实现,而且要求各个结构的引导词要配对出现。
3)循环结构
也采用了计算机语言的类似结构,并有两种描述方式:
WHILE<条件> DO决策
或
REPEATE决策 UNTIL<条件>
其中,WHILE-DO型结构,满足条件才进入循环,执行决策动作这一“循环体”;而REPEATE-UNTIL型是先进入循环,执行一次后再判断条件是否满足,若满足条件,则退出循环。
2.应用举例
假设某商店业务“检查发货单”有这样的处理:对于超过10000元以上的大额发货单,若客户信誉良好,欠款不超过3个月,则发批准书或发货单;否则,在欠款未还清之前不予批准。对于10000元以下的小额发货单,如果客户信誉良好,欠款不超过3个月,直接发批准书及发货单;否则,则向客户发出赊欠报告,并发批准书及发货单。该处理逻辑用结构化英语描述如下:
IF发货单笔金额超过10000元 THEN IF欠款超过3个月THEN 在欠款未还清之前不发批准书 ELSE 发批准书、发货单 ENDIF ELSE IF欠款超过3个月THEN 发批准书、发货单、赊欠报告 ELSE 发批准书、发货单 ENDIF ENDIF
3.4.2 决策树
在某些处理逻辑中,处理动作需要依赖于多个逻辑条件的取值,这时,处理逻辑的描述就比较复杂。如果用结构化英语来表达,就需要多重嵌套,可读性下降。为了简洁地表达数据流程图中处理逻辑的逻辑判断功能,用树形结构图来描述对各种情况的处理,这即为决策树。
1.决策树概述
决策树一般是自上而下生成的,每个决策或事件都可能引起两个或多个事件,导致不同的结果。选择分割的方法有好几种,但是目的都是一致的,即对目标类尝试进行最佳的分割。从根到叶子节点都有一条路径,这条路径就是一条“规则”。决策树可以是二叉树,也可以是多叉树。
决策树主要由3个部分组成。定义要决策的问题,就是决策节点;以条件为例,从决策节点连接形成的分支结构就是方案分支,它往往是根据条件值的多少来决定分支的数量的;在最后一个条件列后加入的就是决策结果,不同方案分支通过不同的路径得出决策结果,从而形成树形分叉图。
用决策树描述处理逻辑的优点如下。
(1)可以生成容易理解的规则。
(2)计算量相对来说不是很大。
(3)可以处理连续和分类条件。
(4)决策树可以清晰地显示哪些条件比较重要。
用决策树描述处理逻辑的缺点如下。
(1)对连续值的条件比较难预测。
(2)对有时间顺序的条件,需要很多预处理的工作。
(3)当类别太多时,错误可能就会增加得比较快。
(4)一般的算法分类时,只是根据一个条件来分类。
2.应用举例
“检查发货单”的例子用决策树来表述,如图3.17所示。
图3.17 “检查发货单”的决策树
3.4.3 决策表
对一些条件较多、在每种条件下取值也比较多的情况,可采用决策表的形式。这时,需要描述的处理是由一组动作组成的,而这些动作是否执行又取决于一组条件的取值,这时用决策表写加工逻辑比较合适。
1.决策表概述
决策表是一种表格状的决策分析工具,它可以在条件复杂的情况下,很直观地表达出具体条件、决策规则和应该采取的行动之间的逻辑关系。决策表的优点在于清晰易懂,但是只适合描述条件,描述循环比较困难。
决策表由4 个部分组成,左上方是条件说明,列出了所有可能的条件;左下方是动作说明,列出了所有可能采取的动作;右上方是条件组合,是针对各种条件给出的多种条件取值的组合;右下方是动作组合,指出了在某种条件取值的组合情况下所采取的动作。
决策表的划分如图3.18所示。
图3.18 决策表的划分
决策表的绘制较为复杂,原因在于条件值的组合状态较多,要考虑周全。要获得最终的决策表,通常需要绘制3表。首先要定义条件的取值及含义,然后按照所有组合状态绘制出初始决策表,最后将相关列合并成为最终的决策表。在合并时,按照操作中选择用一决策方案的不同条件进行判断,首先要找到条件条目的共同点,再分析其不同条件值的组合是否被相关列遍历了,如果已经遍历,则相关列合并,否则不合并。
由此,可以归纳出合并的原则:对于采取相同动作的N条规则,如果有某个条件在第N列中的取值正好是该条件取值的全部情况,而其他条件的取值都相同,那么这N条规则可以合并,说明该条件的取值与所采取的动作无关。
运用决策表来描述决策逻辑,通常包括以下6个步骤。
(1)首先分析、确定决策逻辑涉及的条件,列在决策表的左上方。
(2)分析、确定每个条件的取值情况。
(3)列出条件的所有组合情况,标在决策表的右上方。
(4)分析、确定决策逻辑涉及的动作,列在决策表的左下方。
(5)决定各种条件组合下所采取的行动,画在决策表的右下方。
(6)应用合并规则,化简决策表。
用决策表来表达一个复杂的问题,其优越之处在于不会遗漏某种可能的情况。决策表能够把在什么条件下、系统应该采取什么动作,表达得十分清楚、准确和一目了然。这是用语言难以准确、清楚地表达的。决策表的另一个优越之处在于这些条件的地位是平等的,不用考虑条件的先后顺序。但是,用决策表描述循环情况就比较困难。
2.应用举例
“检查发货单”用决策表(见表3-1)来表示,绘制如下。
表3-1 “检查发货单”决策表
“检查发货单”决策表中列名为2的列表示在发货单金额大于10000元、欠款未超期的条件组合下所采取的动作即发出批准书、发出发货单。
“检查发货单”决策表列出了两个条件所有可能的4种组合,就是一张完整的决策表,不会有遗漏,但是这张表可以化简。表中列名为2和4的列,所采取的动作是一样的,再查看条件取值组合情况,通过分析,可以看到,无论是大额发货单还是小额发货单,只要客户信誉良好,欠款不超期,都可以采取相同的操作,即发出批准书和发货单。这两条规则就可以合并。化简以后的决策表如表3-2所示。
表3-2 简化后的“检查发货单”决策表
3.4.4 结构化描述技术的选择
在描述一个基本加工的处理逻辑时,结构化英语、决策树和决策表通常被交叉使用,互相补充。这3种描述方式各有优缺点。对于不太复杂的判定情况,或者是使用决策表有困难时,可以使用决策树。而如果在一个处理逻辑中,同时存在顺序、判断和循环时,比较适用于结构化英语。对于组合条件较多的、复杂的判断,使用决策表比较好。
哪一种方法是最好的方法,这取决于一系列的因素:问题的特性和复杂程度、由决策导出的行动个数,以及使用的难易。从评价各个方法的优点和局限性来说,可以给出下列结论。
(1)数据流程图的基本作用是描述数据流程,它可以用于高低各种层次的系统分析,并且有利于提供高质量的系统文档。然而这种方法对于输出/输入的细节描述较差,用户经常在初期发现它非常容易混淆。
(2)数据字典是能够在满足系统的数据需求基础上简化结构,它也可以用于高低各种层次的系统分析,但是它不能提供有关功能方面的细节,并且一些不懂技术的用户常常不愿意接受这种方法。
(3)当问题要求给出行动顺序和具体决策时最好使用结构化英语。
(4)决策树常用于验证逻辑关系和在只涉及少量行动方案的决策问题中。
(5)决策树和决策表最适用于处理那些具有复杂分支路线的决策,例如,计算优惠价或者销售回扣及库存控制过程等。