🧩 第八章 UML:查看无形软件的工具
📄 一句话概括

活动图=节点+箭头+判定——实测一个报销流程 7 个节点、8 条箭头、2 个判定点,走到终点共 3 条路径;判定点每多一个,要测的条数就涨。

📝 本节和前面几节的关系

8.11 的用例只说了【做什么】,这一节说做的时候按什么顺序走。

一、三个要素

节点:一个动作(填单、审核、打款),画成圆角矩形。 箭头:先后关系,一个节点出多条箭头就是判定或并行。 起点与终点:实心圆和带圈的实心圆。

二、实测:7 节点 8 箭头 3 条路径

节点:开始、填单、主管审、财务审、退回、打款、结束——7 个。 箭头 8 条,判定点 2 个(主管审、财务审各出两条)。 从开始到结束的路径 3 条:正常过两级、主管退回、财务退回。

三、判定点与测试条数

每多一个判定点,路径就可能翻倍——2 个判定点已经 3 条路径,这是测试用例的下限。 活动图的最大用处就在这里:画出来才看得见【要测多少条】。 没画图的时候,人往往只测一条【一切顺利】的路径。

四、环怎么处理

退回直接连回填单,就成了回环——路径数变无穷,图的表达力也变差。 常见处理:把退回画成终点(本次流程结束,重填算下一轮),或加一条【最多退几次】的约束。 有环的流程一定要标清出口,否则这张图读不出【怎么结束】。

五、动手 Demo:使用活动图表示工作流程

用一张邻接表描述报销流程:节点 → 出边。 数节点、箭头、判定点,并递归数出从开始到结束的路径条数。

edges = {"开始": ["填单"], "填单": ["主管审"],
         "主管审": ["财务审", "退回"], "财务审": ["打款", "退回"],
         "退回": ["结束"], "打款": ["结束"], "结束": []}

def paths(n, memo=None):
    memo = {} if memo is None else memo
    if not edges[n]:
        return 1
    if n not in memo:
        memo[n] = sum(paths(m, memo) for m in edges[n])
    return memo[n]

print(len(edges), sum(len(v) for v in edges.values()), paths("开始"))
# 7 8 3

实跑输出:

--------------------------------------------------------------------
使用活动图表示工作流程
--------------------------------------------------------------------

  活动图=节点+箭头+判定。实测一个报销流程,顺便把**路径条数**数出来:

  节点       出边
  ------------------------
  开始       填单
  填单       主管审
  主管审     财务审/退回
  财务审     打款/退回
  退回       结束
  打款       结束
  结束       —(终点)

      节点                        7 个
      箭头                        8 条
      判定点                      2 个(主管审/财务审)
      从开始到结束的路径          3 条

  **判定点每多一个,路径就可能翻倍**——2 个判定点已经是 3 条路径。
  **这就是活动图的价值**:画出来才看得见【要测多少条】。
  **注意【退回】这条支路**:本次流程到此结束,重新填单算下一轮——
  **真要画成回环(退回直接连回填单),路径就成了无限条,得另加【最多退几次】的约束。**

实测:7 个节点、8 条箭头、2 个判定点、3 条路径。 路径数就是测试用例的下限——这条数是活动图最实用的产出。 退回如果画成回环,路径就无穷了,必须另加约束或改成终点。

30 秒实验

  1. 把你公司的一个审批流程画成活动图,数出判定点与路径条数。
  2. 对照你们的测试用例,看看有没有漏掉的路径。

常见误区

  1. 以为活动图就是流程图,不必细想。数出路径条数才叫画完。
  2. 把回环画上却不标出口。这张图就读不出怎么结束。
自测三问(点开对答案) 1. 活动图三要素是什么? —— 节点(动作)、箭头(先后)、起点与终点;一个节点出多条箭头就是判定或并行。 2. 实测数字是多少? —— 7 个节点、8 条箭头、2 个判定点、3 条路径。 3. 路径条数有什么用? —— 它是测试用例的下限;不画图时人往往只测一切顺利的那条。

相关笔记