用例图包含与扩展关系用错怎么检查

用例图评审时,包含与扩展关系画混是常见问题:可选行为被画成包含,公共步骤被画成扩展,业务分支被塞进扩展点。本文给出一套可在评审现场执行的检查路径——先把症状归类,再用三个判定问题逐条确认或排除,最后按风险顺序修正并验证。检查范围限定在用例图的关系表达,不涉及架构设计与界面绘制。



要点总览(TL;DR)


  • 评审现场先按症状归类:可选行为画成包含、公共步骤画成扩展、业务分支误当扩展点,再逐条判定。
  • 判断一条关系是包含还是扩展,依次回答三个问题:是否每次执行都发生、由主用例主动调用还是外部条件触发、触发条件是否单一可命名。
  • 修正按风险排序:先改包含与扩展颠倒的方向性错误,再补扩展点名称,最后处理重复用例与命名规范。
  • 无法判定的关系回到需求原文或找提出人确认,标记待澄清项并明确责任人,不凭图面猜测。
  • 修正后用场景走查和测试用例反推验证,并把关系方向、扩展点、用例粒度固化为评审检查项。


评审中关系混乱的典型症状与影响范围


关系用错在图上通常有迹可循。评审开始前,先花几分钟把“感觉乱”转成具体症状,后续讨论才有共同对象。


可观察的图上症状


  • 箭头方向与语义对不上:包含关系应指向被复用的步骤用例,扩展关系应指向被扩展的主用例。现场常见两种画法混淆:把包含箭头画向主用例,或把扩展箭头画向扩展用例,读图人需要反推才能理解。
  • 同一用例既被包含又被扩展:一个用例同时出现在包含和扩展两端,说明它的定位没有想清楚——它到底是每次都要走的公共步骤,还是特定条件下才插入的行为。
  • 扩展点缺失或指向不明:扩展关系没有标注在哪个扩展点插入,或扩展点名称写成“异常处理”“其他情况”这类无法对应具体触发条件的表述。
  • 包含用例数量异常膨胀:主用例下挂了一长串包含用例,其中不少只在个别场景出现,这是把可选行为误画成包含的典型痕迹。

对下游工作的影响


关系错误不只是图面美观问题。包含关系意味着每次执行都会发生,开发会按必做逻辑估算工作量;扩展关系意味着条件触发,测试需要为每个扩展点设计分支用例。关系画反,估算口径和测试覆盖都会跟着偏。评审时若只改图不改判定依据,同类错误在下一版还会出现。


本次检查的范围


检查对象是本次评审涉及的用例图及其关系标注,包括包含、扩展的箭头方向、扩展点定义和用例粒度。需求内容本身是否正确、系统架构如何划分、界面如何呈现,不在本次检查范围内,发现相关问题记录后转交对应环节处理。



包含与扩展用错的常见原因假设


症状只是线索,原因需要逐条验证。以下假设可在评审时对照图面观察点逐项排查,确认成立的再进入判定环节,不成立的直接排除。


原因假设 对应观察点
把“每次都会执行的公共步骤”与“特定条件下才发生的行为”混为一谈 被包含的用例里是否混入了只在部分场景出现的行为;扩展用例里是否有每次必做的步骤
把业务规则分支当成扩展,导致扩展点过多且无法穷举 扩展点数量是否明显偏多;扩展点名称是否写成规则条款而非触发条件
参与者与用例边界划分不清,间接造成关系方向错误 同一功能是否被拆到多个用例又互相包含;参与者触发的是主用例还是被拆出的片段
绘图工具默认箭头方向或团队命名习惯带来的误用 箭头方向是否与团队约定一致;用例命名是否用动词短语清楚表达行为

这些假设之间会相互叠加。例如边界不清导致用例拆分过细,拆出的片段又被画成包含,最终图上出现大量方向可疑的关系。排查时先记录每条假设的观察结果,再进入逐条判定,避免在假设阶段就下结论。



用三个判定问题逐条排除错误关系


对图上每一条包含或扩展关系,按顺序回答三个问题。三个问题的答案组合基本能确定关系类型,答案矛盾或无法回答的,标记为待澄清项。


判定问题与结论对照


判定问题 回答 倾向结论
该行为是否在主用例每次执行时都发生 是,且是主用例流程中固定的一步 倾向包含关系
该行为是否在主用例每次执行时都发生 否,只在特定条件下出现 倾向扩展关系,继续问第二、三题
该行为由主用例主动调用,还是由外部条件触发 主用例流程主动调用、作为固定步骤执行 倾向包含关系
该行为由主用例主动调用,还是由外部条件触发 由条件、异常或可选需求触发,主用例不主动调用 倾向扩展关系
触发条件是否单一、可命名,能否写成明确的扩展点 能写出一个具体条件,如“支付超时”“用户选择加急” 可作为扩展关系保留
触发条件是否单一、可命名,能否写成明确的扩展点 条件笼统、多个规则混在一起、无法穷举 不是合格的扩展点,回到需求澄清

判定记录的要求


每条关系记录四项内容:关系编号与两端用例、三个问题的答案、判定结论(包含/扩展/待澄清)、依据来源(需求原文条款或提出人确认)。记录的作用是让修正有据可查,也方便后续变更时追溯当初为什么这样画。


无法判定时的处理


三个问题答案互相矛盾,或图上信息不足以回答时,不要凭图面猜测。回到需求原文找对应描述,找不到就找需求提出人确认该行为的发生频率和触发方式。确认结果补进判定记录后再改图。评审现场无法当场确认的,标记为待澄清项,明确责任人和确认时间,不带着未决关系进入下一环节。


评审记录和判定结论需要随需求条目一起留存。在ONES中,可以把用例图所在的需求条目与评审记录关联,将待澄清项作为工作项跟踪到关闭,修正后的版本和判定依据留在同一条目下,后续变更时能直接查到当时的关系判定理由。



按排查顺序修正关系并控制改动风险


修正顺序影响返工量。先处理方向性错误,再处理命名和粒度,避免在细节上反复调整后又要因方向变化重做。


修正顺序清单


  1. 先修方向性错误:把包含与扩展颠倒的关系改正,箭头指向按语义调整——包含指向被复用步骤,扩展指向被扩展的主用例。
  2. 再修扩展点:为每条扩展关系补上明确的扩展点名称,名称写成可观察的触发条件;无法命名的扩展关系退回判定环节重新确认。
  3. 处理重复与过载用例:合并语义重复的用例;对职责过载、包含关系过多的主用例,按参与者目标拆分,拆分后重新检查关系方向是否仍然成立。
  4. 最后统一命名与图面规范:用例命名统一为动词短语,箭头样式与团队约定一致。

取舍原则


合并用例时,以“参与者的一次完整目标”为单位,目标相同就合并,目标不同就保留。拆分过载用例时,拆出的部分若每次都会执行,考虑作为包含用例;若只在特定条件下执行,考虑作为扩展用例;两者都不成立,说明拆分依据不是行为频率,应回到需求澄清。


改动前的风险控制


  • 修改前保留原图版本或评审记录,确保可以回退和对比。
  • 涉及跨团队引用的用例图,先同步修改范围和影响,再动图,避免其他团队按旧版继续工作。
  • 批量调整关系前,先在一两个用例上试改并请提出人确认,确认判定口径一致后再推广到全图。

应暂停修改的情况


需求本身存在歧义、提出人无法确认行为频率、或关系争议涉及业务规则变更时,暂停调图,转为需求澄清。继续在图上调整只会把未决问题固化成一个看似确定的画法,后续更难发现。



修正后的验证与复发预防


改完图不等于改对。用两种方式交叉验证,再把检查动作固化到评审流程里。


场景走查


选取典型业务场景,从参与者触发开始沿主用例走一遍,每遇到一个扩展点,确认它能对应一个具体的触发条件,并说明该条件下会发生什么。走查中若某个扩展点找不到对应场景,或某个必做步骤被画成了扩展,说明修正不完整,回到判定环节。走查记录保留场景名称、经过的扩展点和结论。


测试用例反推


按修正后的图尝试写出测试用例:主流程一条,每个扩展点至少一条分支用例。写不出来的扩展点说明触发条件不明确;分支用例数量与扩展点数量对不上,说明关系仍有遗漏或多余。这一步同时验证了图的可测试性,产出的用例清单可以直接交给测试环节。


评审检查项固化


把本次排查中反复出现的问题整理成固定检查条目,纳入后续用例图评审:


  • 每条包含关系的被包含用例,是否在主用例每次执行时都发生;
  • 每条扩展关系是否标注了扩展点,扩展点名称是否为单一、可命名的触发条件;
  • 是否存在同一用例既被包含又被扩展的情况;
  • 用例粒度是否以参与者的一次完整目标为单位;
  • 关系判定依据是否随图留存。

检查项随评审记录一起归档,下次评审直接对照执行。判定依据和图放在同一处管理,人员变动或需求变更时,后来者能看懂每条关系为什么这样画,同类错误的发生空间会明显收窄。



常见问题


评审时间有限,只能先查一部分关系,应该优先查哪些?


优先查三类高影响关系:一是同一用例既出现在包含端又出现在扩展端的情况,这类关系说明用例定位本身没想清楚;二是扩展点缺失或名称笼统的扩展关系,它们直接影响测试分支设计;三是主用例下包含用例数量异常多的部分,其中往往混入了只在个别场景出现的行为。方向性错误修正后可能连带影响其他关系,先处理能减少后续返工。


一个行为既像公共步骤又像条件触发,怎么定?


回到需求原文确认该行为的发生频率:如果主用例每次执行都会经过它,按包含处理;如果只在特定条件下出现,按扩展处理,并把条件写成扩展点。若需求原文本身没有说清发生频率,这属于需求歧义,应先找提出人确认,确认结果补进判定记录后再改图。不要为了图面完整先画一个关系,把未决问题固化成看似确定的表达。


扩展点数量很多,是不是说明关系画错了?


扩展点偏多是一个值得排查的信号,但不必然等于画错。先看扩展点名称:如果写成“异常处理”“其他情况”这类笼统表述,或把多条业务规则塞进一个扩展点,说明业务分支被误当成了扩展。若每个扩展点都能对应一个具体、单一的触发条件,数量多可能反映业务本身分支丰富,此时应检查用例粒度是否过细,而不是简单删减关系。


修正关系时改动了其他团队引用的用例图,需要做什么?


动图前先同步修改范围和影响,说明哪些关系会变、变化后对他们的工作有什么影响,确认后再改。修改前保留原图版本或评审记录,确保可以回退和对比。批量调整前先在一两个用例上试改并请提出人确认判定口径,口径一致后再推广到全图,避免改到一半发现方向又反了。


修正后的用例图怎么确认已经改对了?


用两种方式交叉验证。场景走查:从参与者触发开始沿主用例走一遍,每个扩展点都要能对应一个具体触发条件和该条件下的行为。测试用例反推:按修正后的图写主流程用例和每个扩展点的分支用例,写不出来的扩展点说明触发条件不明确,分支用例数量与扩展点对不上说明关系仍有遗漏或多余。两种验证的记录随图留存,后续变更时可追溯。