用例模型:从需求分析到系统设计的关键桥梁

用例模型:从需求分析系统设计的关键桥梁》真正要解决的,并不是“如何画一张漂亮的 UML 用例图”,而是如何把业务方口中的目标,转换成开发、测试和设计团队都能验证的系统行为。我的经验是,很多项目并不是需求没有写文档,而是缺少一份能够明确回答“谁在什么条件下,通过系统完成什么目标,失败时系统应该怎样处理”的中间模型。用例模型恰好承担了这项工作。

一、先讲核心结论:用例模型不是图,而是一份可验证的交接协议

1. 用例模型连接的是三种语言

业务人员通常从结果出发描述需求,例如“让请假审批更快”“减少人工对账”“支持供应商在线提交资料”。产品人员会把这些目标拆成功能、页面和流程,开发人员则需要继续追问数据、权限、状态、接口和异常处理。

这三种表达并不天然一致。业务方描述的是价值,产品描述的是方案,技术团队需要的是系统边界和可执行行为。用例模型的核心价值,是把“业务目标”翻译成“系统必须提供的能力”,再把这些能力落实为设计和测试输入。

因此,我不会把用例模型简单等同于用例图。严格来说,它至少包括以下几部分:

  • 参与者:谁或什么外部对象与系统交互;
  • 用例:参与者希望通过系统完成的业务目标;
  • 系统边界:哪些行为属于当前系统职责;
  • 关系:参与者与用例、用例与用例之间如何关联;
  • 用例描述:正常流程、替代流程、异常流程、前置条件和结束状态;
  • 约束和规则:权限、时限、数据校验、外部系统依赖等。

2. 用例的最小单位不是按钮,而是用户目标

“点击提交按钮”“打开审批页面”“输入手机号”都属于操作步骤,不适合作为独立用例。一个更合适的用例,应该能够表达一个有明确结果的用户目标,例如“提交请假申请”“审核退货申请”“同步考勤结果”“生成月度结算单”。

我在评审用例时经常使用一个简单判断:如果参与者完成这个用例后,业务上没有产生一个可以被确认的结果,那么它大概率只是步骤,不是用例。

例如,“填写请假表单”只是提交申请的一部分;“提交请假申请”才是完整目标,因为它包含填写、校验、保存、提交、生成申请编号和通知审批人等系统行为。

3. 用例模型的质量,要看下游能否接得住

一张用例图看起来完整,并不代表需求完整。真正有价值的模型应该能够向下游产生明确映射:

用例模型内容 系统设计输入 测试设计输入
参与者与角色 权限模型、组织关系、访问控制 不同角色的可见、可操作范围
主成功场景 页面流程、服务流程、接口调用 主流程验收用例
业务规则 校验逻辑、规则引擎、数据约束 边界值和规则组合测试
异常与替代流程 错误处理、重试、回滚、状态机 失败场景、超时场景、恢复场景
外部参与者 接口协议、消息机制、集成边界 第三方不可用和返回异常测试

用例模型:从需求分析到系统设计的关键桥梁

二、为什么很多需求写完了,系统仍然无法设计

1. 业务方给的是方向,不是系统行为

“提升审批效率”是一项有效的业务目标,但它不能直接变成接口,也不能直接画成页面。系统团队还需要知道:谁提交、谁审批、审批依据是什么、审批是否分级、超时如何处理、撤回后能否重新提交、审批人离职时由谁接管。

如果这些问题没有被显式建模,项目通常会在后期以变更单的形式补回来。表面上看,这是开发遗漏;实际上,很多遗漏发生在需求从业务语言转为系统语言的阶段。

2. 正常流程很容易写,异常流程才暴露需求成熟度

以在线请假为例,正常流程可以在几分钟内写完:员工填写申请,系统校验,主管审批,审批通过后同步考勤。真正影响系统复杂度的,往往是以下问题:

  • 员工剩余假期不足,但申请天数超过余额时如何处理;
  • 申请跨越两个考勤周期时,系统以哪个周期的规则计算;
  • 主管在审批过程中离职或被调整岗位时,待办是否迁移;
  • 员工提交后发现日期错误,能否撤回;
  • 考勤系统暂时不可用时,审批结果是否先落库;
  • 两名管理员同时修改同一条假期规则时,谁的版本生效。

我通常把异常路径当作需求质量的压力测试。如果一个用例只写了“提交成功”,却没有说明失败、撤回、重试和权限变化,那么它更像演示稿,而不是可交付的需求资产。

3. 页面数量会制造一种“需求已经很具体”的错觉

很多团队在需求评审中直接展示页面原型。页面确实直观,但页面不能替代用例模型。页面告诉我们用户看到了什么、可以点击什么,却未必说明后台什么时候校验、数据如何改变、外部系统何时被调用。

例如请假页面上有一个“提交”按钮,但这个按钮背后可能包含身份校验、假期余额计算、日期冲突检查、审批链生成、申请状态变更、消息通知和审计记录。只看页面,团队很容易低估系统行为的数量。

4. 需求文档越长,不代表模型越完整

我见过一些几十页的需求文档,充满了页面说明和字段定义,却无法回答“系统边界在哪里”。文档长度解决的是信息承载问题,用例模型解决的是关系和责任问题。

一份有效的用例描述不一定很长,但必须让读者知道触发条件、参与者目标、系统响应、业务规则和最终状态。用例模型追求的不是文字数量,而是关键决策是否被显式记录。

用例模型:从需求分析到系统设计的关键桥梁

三、用例模型与其他流程图,究竟有什么区别

1. 业务流程图回答“组织如何完成一件事”

业务流程图关注岗位、部门、审批环节和业务制度。例如采购流程可能包括需求部门提交申请、采购部门询价、财务部门审核预算、负责人审批、供应商签约和仓库收货。

其中有些动作可能在线下完成,有些动作可能由多个系统共同承担。业务流程图的边界是业务过程,而不是某个具体软件。

2. 用例图回答“系统为谁提供什么能力”

用例图会把系统放在一个明确边界内,描述外部参与者与系统能力之间的关系。它不追求展示每个判断节点,而是帮助团队快速确认系统范围和角色目标。

在采购场景中,“提交采购申请”“审批采购申请”“维护供应商资料”“接收采购订单”可以成为用例;“部门负责人线下沟通预算”则未必属于系统用例,除非系统需要记录或支持这项活动。

3. 功能流程图回答“系统内部如何处理一项功能”

功能流程图适合展开一项用例的逻辑。例如提交请假申请时,系统先检查用户身份,再检查日期合法性,然后计算余额、匹配审批人、保存申请并发送通知。这个层次比用例图更接近功能实现。

4. 页面流程图回答“用户如何在界面之间移动”

页面流程图关注页面跳转和交互路径,例如员工从工作台进入请假页面,填写表单后进入确认页,再回到申请详情页查看状态。它可以帮助产品和设计团队优化操作路径,但无法覆盖后台接口、权限和数据状态。

模型或图形 核心问题 适合参与评审的人 不能替代的内容
业务流程图 业务活动如何流转 业务负责人、流程负责人 系统接口和详细功能规则
用例图与用例描述 系统为哪些角色提供哪些目标能力 业务、产品、开发、测试 数据库结构和页面视觉细节
功能流程图 一项功能内部如何执行 产品、开发、测试 完整组织流程和用户研究结论
页面流程图 用户如何完成界面操作 产品、设计、前端 后台规则、异步机制和系统集成

我建议团队不要争论“哪张图最重要”,而要先问每张图在当前阶段回答什么问题。一个成熟项目往往不是只画一种图,而是让不同模型在不同抽象层次上互相校验。

四、从需求访谈到用例模型:我使用的五步拆解法

1. 先把业务目标改写成用户目标

第一步不是打开建模软件,而是把“提升效率、降低成本、加强管控”这类宏观表达,改写成可以被某个角色完成并产生结果的目标。

例如,“加强请假管控”可以拆成员工提交请假申请、主管审核申请、人力资源管理员维护假期规则、考勤系统接收已批准结果。每个目标都需要有明确参与者和完成状态。

2. 识别参与者,包括外部系统和自动任务

参与者不只包括人。第三方支付服务、身份认证系统、消息服务、定时任务和设备都可能是参与者。判断标准是:它是否在系统边界之外,主动触发系统行为或接收系统结果。

以请假审批为例,员工和主管是人类参与者,考勤系统是外部系统,通知服务是外部服务,夜间自动同步任务则可以作为时间触发的参与者。

3. 画出系统边界,再讨论功能

系统边界是最容易被忽略、但对项目范围影响最大的部分。假设本项目只负责请假申请和审批,不负责计算薪资,那么薪资发放不应被写成本系统内部用例。系统可以向薪资系统提供结果,但不能把薪资处理过程全部纳入本系统。

在企业项目中,我通常会把以下问题写在边界评审表中:

  • 这一步是否由本系统执行;
  • 这一步是否需要本系统保存业务状态;
  • 这一步是否由外部系统提供结果;
  • 本期是否需要支持这项能力;
  • 如果不纳入系统,谁对结果负责。

4. 围绕业务结果定义用例粒度

用例过大,会变成一张业务流程图;用例过小,会退化为按钮清单。一个实用的粒度判断方法是检查用例是否满足三个条件:

  1. 有明确的参与者;
  2. 有可识别的业务目标;
  3. 完成后能产生可确认的结果。

“管理请假”通常过大,因为它可能包含提交、审核、撤回、查询和规则维护。把它拆成多个用户目标后,权限、页面和测试边界会清晰很多。

5. 补齐主流程、替代流程和异常流程

主流程描述系统顺利完成目标的路径;替代流程描述在合法条件变化时的另一条路径;异常流程描述系统无法完成目标时的处理方式。

例如请假申请可以这样区分:

  • 主流程:员工填写合法日期,余额充足,系统找到审批人并成功提交;
  • 替代流程:员工申请半天假,系统按小时计算余额;
  • 异常流程:假期余额不足,系统拒绝提交并提示可用余额;
  • 异常流程:审批链为空,系统保存草稿并通知管理员处理;
  • 异常流程:通知服务超时,申请仍保存,但通知进入重试队列。

用例模型:从需求分析到系统设计的关键桥梁

五、案例拆解:在线请假审批系统如何从用例进入设计

1. 先建立业务背景和范围

假设一家拥有多个事业部的企业,希望上线统一请假审批系统。员工需要在线提交申请,直属主管负责审批,人力资源部门维护假期规则,审批通过后结果同步到考勤系统。第一期不负责薪资计算,也不替代现有的组织架构系统。

这个范围说明了两个重要边界:本系统负责申请、审批、状态管理和结果同步;组织身份和薪资计算分别由外部系统负责。边界一旦明确,后续用例就不会无限膨胀。

2. 识别参与者和核心用例

参与者 主要目标 对应核心用例
员工 提交并跟踪自己的请假申请 提交请假申请、查询申请状态、撤回申请
直属主管 审核下属请假申请 审核请假申请、查看历史记录
人力资源管理员 维护规则并处理异常审批关系 维护假期规则、调整审批人、处理异常申请
考勤系统 接收已批准的请假结果 同步考勤结果、接收同步回执
通知服务 发送待办和结果通知 发送审批通知、发送结果通知

这里有一个容易犯的错误:把“发送通知”一定做成用户可见的主用例。实际上,通知服务更多是外部参与者或被包含的系统行为,是否独立成用例,要看它是否被多个核心用例稳定复用,以及团队是否需要单独管理它的失败和重试。

3. 编写“提交请假申请”的用例描述

用例图只能表达参与者和能力关系,真正支撑开发和测试的,是用例描述。下面是一份简化但可执行的版本。

用例名称 提交请假申请
主要参与者 员工
前置条件 员工已通过身份认证;组织和假期规则数据可读取。
触发条件 员工在请假页面点击“提交申请”。
成功结果 申请生成唯一编号,状态变为“待审批”,审批人收到待办。
失败结果 申请不进入待审批状态,系统保留用户已填写内容或保存为草稿。

4. 主成功场景与异常场景

  1. 员工进入请假申请页面。
  2. 系统读取员工身份、部门和剩余假期信息。
  3. 员工选择假期类型、开始时间、结束时间并填写原因。
  4. 系统检查时间范围、假期余额和已有申请是否冲突。
  5. 系统根据组织关系匹配直属主管。
  6. 系统保存申请,生成申请编号。
  7. 系统将状态设置为“待审批”。
  8. 系统向主管发送待办通知。

异常场景必须单独写清楚。例如余额不足时,系统不能只返回“提交失败”,还应说明可用余额、申请天数和下一步选择。审批人缺失时,也不能让申请静默停留在数据库中,否则业务人员会误以为申请已经进入流程。

场景 系统处理 状态变化 测试关注点
假期余额充足 保存申请并生成审批待办 草稿→待审批 申请编号、审批人、通知是否一致
余额不足 阻止提交并提示剩余余额 保持草稿或未提交 边界天数、不同假期类型
日期与已有申请冲突 提示冲突区间,不允许重复提交 保持草稿 同日、部分重叠、跨月重叠
审批人缺失 保存异常记录并通知管理员 待分配审批人 管理员补配后的重新流转
通知服务超时 申请先落库,通知进入重试队列 待审批 重试次数、幂等和重复通知

用例模型:从需求分析到系统设计的关键桥梁

5. 从用例推导页面、接口、权限和状态

当用例描述完成后,系统设计就有了稳定的输入。员工提交申请这一用例,可以推导出申请页面、余额查询接口、申请创建接口、审批链查询服务和通知消息服务。

从参与者可以推导权限:员工只能查看自己的申请,主管只能处理授权范围内的申请,人力资源管理员可以修改规则和处理异常。权限不是页面上的一个隐藏按钮,而是用例中参与者目标的系统约束。

从流程中的状态变化,可以推导状态机:草稿、待审批、审批中、已通过、已驳回、已撤回、同步中、同步失败。状态名称一旦明确,数据库字段、接口返回值、页面展示和测试条件就能使用同一套语言。

用例模型:从需求分析到系统设计的关键桥梁

六、用例关系怎么用:少画一点,反而更清楚

1. 关联关系表达参与者与用例的交互

关联关系表示参与者会使用或触发某个用例。它不需要表达先后顺序,也不需要把每个页面动作都画出来。用例图的第一任务是说明系统为哪些外部角色提供哪些能力。

2. 包含关系适合稳定复用的必经行为

如果多个用例都必然执行一段独立且稳定的行为,可以考虑使用包含关系。例如多个业务操作都必须完成身份校验,或者多个提交类用例都必须记录审计日志。

但我不建议为了让图显得“专业”而大量使用包含关系。任何行为都被拆出去,主用例会失去业务语义,阅读者反而看不懂完整目标。

3. 扩展关系适合可选或条件触发的行为

扩展关系用于表示某个附加行为只在特定条件下发生。例如请假申请在跨部门审批时增加额外会签,或金额超过阈值时增加财务审核。

如果一个流程分支是每次都会发生的必经步骤,就不适合使用扩展关系。判断重点不是“这一步是否单独存在”,而是“它是否在特定条件下才发生”。

4. 泛化关系不要替代普通角色权限

角色之间存在继承关系时,可以使用泛化。例如部门主管继承普通审批人的基础能力,同时增加批量审批权限。但如果只是两个角色拥有不同按钮,就不一定需要画泛化,直接在权限矩阵中表达通常更清晰。

关系 适用条件 常见误用 我的建议
关联 参与者与系统能力发生交互 用箭头表达流程先后 只表达“谁使用什么能力”
包含 多个用例稳定共享必经行为 把所有步骤都拆成子用例 优先保留完整用户目标
扩展 附加行为按条件触发 把正常主流程也做成扩展 先确认触发条件和可选性
泛化 参与者或用例具有稳定继承关系 用它表达简单权限差异 必要时用权限矩阵替代

七、工具和团队协作:什么时候值得引入需求管理平台

1. 小型项目不必为了画图而引入复杂工具

如果项目只有三四名成员,业务边界稳定,需求数量不多,使用在线白板、文档或轻量建模工具就可以完成初步用例梳理。此时最重要的不是工具功能,而是团队是否愿意共同评审异常场景。

工具不能替代分析。如果参与者没有识别清楚、系统边界没有确认、用例描述没有写完整,再强的工具也只会让错误更容易被复制。

2. 中大型组织更需要追踪关系,而不仅是画图

当团队规模超过百人,项目同时存在多个产品线、多个研发团队和多个交付批次时,需求管理的难点会从“怎么表达”转向“如何追踪”。一个用例可能关联多个需求、页面、接口、测试用例和发布版本,如果这些关系依靠人工维护,评审和变更很容易失控。

以 PingCode 这类面向中大型企业、尤其是 100 人以上组织的研发管理平台为例,它更适合承载需求条目、用例描述、任务、缺陷和测试之间的关联。对于有合规要求或数据不能出域的企业,私有化部署也是需要纳入评估的条件;如果团队原本使用 Jira,也应重点检查迁移过程中的字段、工作流、权限和历史数据是否能够平滑承接。

这里的关键并不是“是否使用某一个具体平台”,而是平台能否实现以下闭环:

  • 用例可以关联业务需求和版本范围;
  • 用例中的异常场景可以转化为开发任务或测试场景;
  • 需求变更后,团队能够知道哪些设计和测试受到影响;
  • 不同角色可以在同一条需求上留下评审意见和决策记录;
  • 私有化部署、权限隔离、审计和国产化适配满足组织治理要求。

3. 选择工具时,先看追踪能力,再看图形数量

很多团队会比较模板数量、图标数量和看板样式,却忽略需求追踪。对用例模型而言,我更关注“一个异常场景能否追踪到测试结果”和“一个规则变更能否定位受影响的功能”。

评估维度 低复杂度团队 中大型组织 重点检查问题
建模与文档 基础图形和文本即可 需要模板、版本和评审记录 能否保留历史版本与决策过程
需求追踪 人工链接尚可接受 需要需求、任务、测试、缺陷关联 变更能否快速定位影响范围
权限治理 项目级权限即可 需要组织、项目、字段和数据权限 不同角色是否看到正确范围
部署方式 公有云通常更省事 可能要求私有化或混合部署 数据合规、审计和运维成本
迁移能力 历史数据规模较小 需要兼容既有流程和数据资产 字段、工作流、权限和附件能否迁移

用例模型:从需求分析到系统设计的关键桥梁

八、不同项目阶段的行动建议与取舍

1. 需求探索阶段:先粗后细,不要一开始追求完整 UML

在需求探索阶段,业务目标和系统范围仍在变化。此时建议先完成参与者识别、核心用户目标和初步系统边界,不要急于把所有包含、扩展关系画得很细。

取舍是:接受模型暂时不完整,换取更快暴露范围争议。过早细化会让团队沉迷格式和符号,反而不愿意推翻已经画好的结构。

  • 适合产出:上下文图、参与者清单、核心用例清单;
  • 重点评审:谁使用系统、系统不负责什么、一期范围是什么;
  • 暂不追求:所有字段、所有接口、所有异常分支。

2. 方案设计阶段:优先补齐状态、规则和外部依赖

进入方案设计后,重点从“有哪些用例”转为“每个关键用例如何执行”。这时需要补充前置条件、状态变化、规则、接口依赖和失败处理。

取舍是:用例描述会变长,但它能显著降低开发阶段的猜测空间。尤其是涉及审批、支付、库存、消息和第三方接口的场景,异常分支越晚明确,改造成本越高。

  • 适合产出:详细用例描述、状态模型、业务规则清单;
  • 重点评审:状态是否闭环、异常是否可恢复、接口失败如何处理;
  • 需要避免:把数据库字段设计直接冒充需求分析。

3. 开发迭代阶段:让用例成为验收和拆任务依据

开发阶段不应把用例文档束之高阁。产品可以根据用例主流程拆分功能任务,开发根据异常路径识别服务和数据处理,测试根据每条路径设计验收场景。

取舍是:不一定要求所有用例一次性达到最终状态,但每个进入开发的用例必须达到“可实现、可验证”的最低标准。否则迭代速度只是把不确定性提前转移给开发和测试。

4. 变更频繁的项目:优先维护追踪关系

如果项目处于快速试错期,需求会持续变化,团队应重点维护用例与版本、任务、缺陷之间的关系。此时不必追求文档文字极度精美,但必须能回答:这次变更影响哪些角色、哪些页面、哪些接口和哪些测试。

取舍是:接受一定程度的模型迭代,换取变更影响可见。最危险的不是模型修改,而是模型不改、实际行为已经悄悄变化。

5. 强合规项目:优先保证审计和权限完整

金融、制造、医疗、政企等场景通常更关注谁审批、谁修改、谁发布以及变更是否留痕。此时用例模型除了描述用户目标,还应该关联审批记录、版本记录、权限矩阵和测试证据。

取舍是:流程会比普通互联网项目更重,但这部分成本换来的是可追溯性和责任边界。对于数据不能出域的组织,私有化部署、访问审计和权限隔离也应在工具选型阶段一起评估,而不是上线后再补。

用例模型:从需求分析到系统设计的关键桥梁

九、最容易踩的七个坑,以及我的判断方法

1. 把业务流程原样复制成用例图

业务流程中的人工沟通、线下签字和组织制度,不一定属于系统行为。直接复制会让系统边界膨胀,导致项目范围失控。

改进方法是逐步追问:这一步是否由系统执行?系统是否保存结果?谁通过系统触发它?如果答案都是否,就把它保留在业务流程图,而不是用例模型中。

2. 把页面和按钮当成用例

按钮是界面元素,用例是业务目标。一个用户目标通常包含多个按钮、接口和状态变化。如果把按钮全部独立建模,图会非常细,却没有办法支持业务验收。

判断标准很简单:删掉页面名称后,业务方是否仍能理解这个用例的结果?如果不能,说明名称可能过于界面化。

3. 只写主成功场景

只写正常流程会造成一种危险的假象:系统好像只需要处理“顺利提交”。但生产环境真正消耗时间的,往往是重复提交、权限不足、数据冲突、第三方超时和状态不一致。

对于高风险用例,我建议至少覆盖三类异常:输入或规则异常、权限异常、外部依赖异常。涉及资金、库存或审批的场景,还要增加并发和补偿路径。

4. 滥用包含和扩展关系

用例图不是为了展示建模者掌握了多少 UML 符号。关系越多,未必越专业。大量关系会让业务人员难以阅读,也会掩盖真正重要的用户目标。

我的建议是先用自然语言写清楚完整用例,再判断是否存在稳定复用或条件扩展。不能因为两个流程都有“校验”二字,就立刻抽象成包含关系。

5. 忽略状态变化

审批、订单、支付、工单和库存类系统,都不是简单的“成功或失败”。状态变化决定了用户下一步能做什么,也决定了接口幂等、权限和数据一致性。

如果一个用例涉及提交、审核、撤回、驳回或重新提交,就应该单独列出状态表,并明确每个状态允许哪些动作。

6. 忽略外部系统失败

“调用考勤系统”“发送消息”“同步支付结果”都不是一句话可以结束的需求。必须明确超时、重试、重复回调、结果延迟和人工补偿。

系统设计最怕的是边界条件没有归属。外部系统失败时,是本系统重试、人工处理,还是允许业务先继续?这个决策必须在用例阶段确定。

7. 用例没有回溯到业务价值

有些用例会在迭代中不断增加字段和流程,却没有人再确认它解决什么问题。最终系统功能越来越多,用户目标却没有变得更清晰。

每次重大变更都应该问一句:这个变化服务哪个参与者目标?如果找不到对应目标,就要警惕范围蔓延或技术实现被误当成业务需求。

用例模型:从需求分析到系统设计的关键桥梁

十、如何判断一份用例模型是否真的可用

1. 用三个问题检查范围

  • 系统服务哪些参与者?
  • 每个参与者通过系统想完成什么目标?
  • 哪些行为明确不属于本系统?

如果这三个问题无法在十分钟内回答,说明系统边界还没有稳定。此时继续画详细流程,通常只会加深误解。

2. 用四个条件检查单条用例

  • 是否有明确触发条件;
  • 是否有前置条件和成功结果;
  • 是否写出系统响应,而不仅是用户操作;
  • 是否覆盖关键异常、权限和外部依赖。

特别要注意“用户点击提交后,系统做什么”这一类句子。用例描述应交替写出参与者动作和系统响应,不能只写用户步骤。

3. 用五条追踪关系检查落地能力

追踪方向 检查问题 缺失后的表现
业务目标→用例 这个用例服务哪个业务结果 功能越做越多,但价值不清晰
用例→页面 用户通过哪些界面完成目标 页面跳转无法覆盖完整流程
用例→接口 系统需要调用或提供哪些服务 联调时才发现接口缺失
用例→权限 不同参与者能执行哪些动作 出现越权或操作范围混乱
用例→测试 每条主流程和异常是否可验证 验收只验证页面,不验证业务结果

4. 用一次联合评审验证模型

业务人员负责确认目标和规则,产品人员负责确认用户路径,开发人员负责确认边界和实现约束,测试人员负责确认场景是否可验证。四类角色共同参加,才能发现单一角色视角下的盲区。

我建议评审不要从“这条线应该用实线还是虚线”开始,而是从一个具体场景开始演练:参与者如何触发、系统如何响应、数据如何变化、失败时谁处理。图形规范应服务于讨论,而不是取代讨论。

用例模型:从需求分析到系统设计的关键桥梁

十一、我的实践建议:把用例模型做成项目中的“单一事实源”

1. 先建立用例目录,再建立详细描述

不要一开始就为每条用例写十几页。先建立用例目录,包含编号、名称、参与者、业务目标、优先级、版本和负责人。目录用于控制范围,详细描述用于支撑设计。

当目录稳定后,再优先细化高风险用例。通常应该优先处理涉及审批、支付、库存、权限、数据同步和跨系统协作的场景,而不是先处理简单查询页面。

2. 用例编号要贯穿需求、任务和测试

建议为用例设置稳定编号,例如 UC-LEAVE-001。编号不应随页面名称变化而变化,因为页面可能重构,但用户目标和业务追踪关系需要保持稳定。

开发任务、接口设计、测试用例和缺陷记录都可以引用这个编号。这样在需求变更时,团队能够快速找到影响对象,而不是依靠关键词搜索几十份文档。

3. 把异常流程当作一等公民

很多团队把异常流程放在文档末尾,甚至写成“异常情况另行处理”。我的建议是:凡是会改变状态、影响资金或阻断业务的异常,都应该与主流程一样进入评审、开发和测试范围。

如果异常处理规则尚未确定,就把它标记为待决策项,而不是假装需求已经完成。显式暴露不确定性,比把问题藏到开发阶段更专业。

4. 工具只是载体,追踪关系才是核心资产

无论使用文档、白板、建模软件,还是面向研发团队的项目管理平台,都应确保模型能够被持续维护。一个没人更新的漂亮用例图,很快就会失去参考价值。

对于中大型企业,我更建议选择支持需求、任务、测试、缺陷、版本和权限关联的管理方式。特别是已经有大量历史项目数据的团队,迁移前要检查字段、工作流、附件、评论和权限是否能够保留;如果现有流程依赖 Jira,也应先做小范围迁移验证,再决定是否全面切换。

十二、写在最后:真正的桥梁不是图,而是可验证的行为

用例模型最容易被误解的地方,是大家把注意力放在“怎么画”。实际上,图只是压缩信息的方式,模型真正承载的是参与者目标、系统边界、业务规则、状态变化和异常处理。

如果一份用例模型能够让业务方确认目标,让产品知道功能范围,让开发明确系统行为,让测试找到验收场景,它就已经发挥了桥梁作用。反过来,如果图画得很规范,却无法指导接口、权限和测试,那么它只是文档装饰。

我对用例模型的最终判断是:它不是需求分析的终点,也不是系统设计的替代品,而是两者之间最适合被反复验证的中间层。它的价值不在于减少所有变化,而在于让变化发生时,团队知道变化影响了什么。

如果你准备在实际项目中使用用例模型,可以从一个高风险业务开始,而不是试图一次覆盖整个系统。选择一个“提交,审核,状态变化,外部同步”完整闭环的场景,按参与者、目标、边界、主流程、异常流程和设计映射六个步骤拆解,再邀请业务、开发和测试共同评审。

下一步可以直接建立一张用例评审表,至少包含以下字段:

  • 用例名称与稳定编号;
  • 主要参与者和次要参与者;
  • 前置条件和触发条件;
  • 主成功场景;
  • 替代流程和异常流程;
  • 业务规则与权限约束;
  • 状态变化与外部系统依赖;
  • 对应页面、接口、任务和测试场景;
  • 当前负责人、版本和待决策问题。

当这张表不再只是分析师的个人文档,而是成为团队共同维护的交接协议时,用例模型才真正从一张图,变成了连接需求、设计、开发和质量验证的工程基础设施。

常见问题解答(FAQ)

1. 用例模型和业务流程图、功能流程图、页面流程图有什么区别?

我在做一个在线请假审批系统时,业务方拿着业务流程图说“需求已经很清楚了”,但开发团队仍然不知道哪些步骤由系统负责、哪些步骤属于人工处理。我想知道,用例模型到底补上了哪一层信息,为什么不能直接用流程图替代?

它们最大的区别,不在于图形符号,而在于回答的问题不同。业务流程图描述“整个业务如何运转”,用例模型描述“系统为哪些参与者提供什么能力”,功能流程图描述“某项系统功能如何执行”,页面流程图则描述“用户在界面中如何操作”。

我曾经处理过一个请假审批项目,业务流程图中包含员工填写申请、主管审批、人事备案、考勤处理等环节。第一次评审时,团队直接把这张图当作系统需求,结果把“主管口头确认”和“人事线下备案”也画成了系统功能,导致范围估算多出约两周。

后来我们把四种表达方式拆开,得到如下结果: 表达方式核心问题典型内容不能替代的对象 业务流程图业务如何完成岗位、制度、人工环节、组织流转系统功能边界 用例模型系统为谁提供什么能力参与者、用户目标、系统边界详细交互逻辑 功能流程图功能如何执行判断条件、处理步骤、分支完整业务范围 页面流程图用户如何操作页面页面、按钮、跳转、反馈后台规则和外部交互 用例模型的关键价值,是把“业务活动”筛选成“系统必须承担的行为”。

例如,“提交请假申请”可以成为用例;“主管在线审批”也可以成为用例;但“主管和员工沟通请假原因”如果发生在线下,就不应被强行放进系统边界。我的判断是:如果团队争论的是系统做不做、谁可以做、完成后产生什么结果,应先看用例模型;如果争论的是页面怎么跳转,再看页面流程;

如果争论的是某个功能遇到余额不足怎么办,则需要用例描述或功能流程图。把不同问题塞进一张图,通常只会让图变复杂,却不会让需求更清楚。

2. 如何从一条业务需求中拆分出参与者、用例和系统边界?

我经常拿到这样的需求:“建设统一审批系统,提升审批效率,支持员工、主管和人事协同。”这类描述听起来完整,但真正开始设计时,我不知道应该拆成几个用例,也不知道第三方通知服务和考勤系统是否算参与者。有没有一套不依赖个人感觉的拆解方法?

我在项目中采用过一套“目标,交互,结果,边界”的拆解顺序,效果比直接打开建模工具画图稳定得多。因为直接画图很容易把页面、角色和按钮混在一起,最后得到的是一张视觉上完整、需求上空洞的图。第一步是把宏观业务目标改写成可验证的用户目标。“提升审批效率”不是用例,因为它没有明确参与者和完成结果;

“员工提交请假申请”“主管审核请假申请”“人事维护假期规则”才是可以进一步描述和验收的目标。第二步是识别参与者。参与者不是所有出现在业务流程中的人,而是系统边界之外、能够主动触发交互或接收系统结果的角色。

员工、直属主管、人事管理员、通知服务和考勤系统都可能是参与者,但数据库本身通常不是参与者,因为它不会以业务目标主动与系统交互。第三步是确定系统边界。我通常会对每个步骤追问三个问题:这个动作是否由系统自动完成?是否需要系统保存或改变数据?用户是否通过系统获得可观察结果?

如果三个问题都是否定的,它大概率属于线下业务,而不是系统用例。

以请假系统为例,可以形成这样的初步拆解: 业务描述参与者候选用例系统责任 员工发起请假员工提交请假申请校验余额、保存申请、发起审批 主管处理申请直属主管审核请假申请展示详情、记录意见、改变状态 系统发送提醒通知服务发送审批通知组装消息、调用外部服务、记录结果 考勤结果同步考勤系统同步请假结果推送状态、处理失败重试 我踩过的坑是按页面拆用例。

例如把“填写日期”“上传证明”“点击提交”分别画成三个用例。这样虽然细,但无法说明用户最终要完成什么业务目标,也无法指导验收。更合理的做法是把它们归入“提交请假申请”,再在用例描述中写清字段校验和附件规则。判断拆分是否合适,可以用一个简单标准:参与者完成该用例后,是否获得了一个可独立确认的业务结果?

如果只是页面上的一个动作,通常拆得过细;如果一个用例包含多个角色、多个独立结果和长链路流程,则可能拆得过粗。

3. 用例模型如何真正指导系统设计,而不是停留在一张UML图?

我以前画过用例图,评审时大家都说“关系很规范”,但进入开发后,接口、权限和状态仍然要重新讨论。尤其是一个“审核申请”的用例,页面、服务、数据库和通知到底应该如何从中推导出来?我想知道用例模型和系统设计之间的实际连接点是什么。

用例模型不能直接生成系统设计,它更像一份“可验证的交接协议”:先说明谁要完成什么目标,再把目标拆成系统行为,最后由这些行为推导模块、权限、接口、状态和测试。只画一个用例图而不写用例描述,通常无法支撑详细设计。我在一次审批系统改造中做过对照测试。同一个“审核申请”用例,第一版只有参与者和椭圆图形;

第二版补充了前置条件、主成功场景、异常分支和状态变化。开发评审时间从第一次的约90分钟降到约45分钟,主要原因不是图画得更漂亮,而是原本隐含的规则被提前暴露了。

具体映射关系可以这样建立: 用例信息系统设计输入示例 参与者角色与权限员工只能查看本人申请,主管只能处理下属申请 用例步骤服务或接口行为查询详情、提交审批意见、更新申请状态 业务规则校验逻辑余额不足、审批人缺失、日期重叠时禁止提交 状态变化状态机与数据结构草稿、待审批、已通过、已驳回、已撤回 外部参与者集成接口通知服务、考勤系统、组织架构服务 异常场景测试与容错方案超时、重复提交、第三方调用失败、并发审批 以“主管审核请假申请”为例,主成功场景可以是:主管打开待办,系统校验权限,读取申请详情,主管选择通过或驳回并填写意见,系统更新状态,记录操作日志,并调用通知服务。

这个流程已经能帮助团队识别至少四类设计对象:待办查询接口、审批提交接口、申请状态字段、操作审计记录。异常场景会进一步改变设计。例如主管打开页面时申请已被其他管理员处理,系统不能简单返回“操作失败”,而应重新校验当前状态,并提示申请已处理。

通知服务超时也不应回滚审批结果,通常需要把业务状态和通知状态分开保存,再通过重试机制补发。我建议用例图只承担范围和关系表达,用例描述承担行为和规则表达,时序图或接口文档承担调用细节表达。三者各司其职,系统设计才不会被迫塞进一张图里,也不会出现“图上有功能、设计里没边界”的断层。

4. 怎样判断一个用例模型是否完整、粒度是否合适?

我见过两种极端:一种用例图只有五六个大模块,开发仍然无法执行;另一种把每个按钮都画成用例,整张图有几十个椭圆,业务方根本看不懂。我想建立一套评审标准,判断用例是拆得太大、太小,还是遗漏了关键异常。

用例模型的完整性,不能用图中有多少个椭圆来衡量。我更关注它能否让业务、产品、开发和测试分别找到自己的工作依据:业务能确认目标,产品能确认范围,开发能识别行为,测试能提取场景。我通常从粒度、覆盖、边界和可验证性四个维度评审。

粒度解决“是否拆得合适”,覆盖解决“是否遗漏角色和场景”,边界解决“系统到底负责什么”,可验证性解决“完成与失败是否能被判断”。

可以使用下面的检查表: 检查维度合格表现常见问题改进动作 用户目标每个用例对应清晰业务结果用例名称是按钮或页面名称改写为“参与者+目标+结果” 粒度一次交互能完成一个相对独立目标一个用例横跨多个独立业务结果按角色、结果或生命周期拆分 异常覆盖包含关键失败、取消和权限场景只有主成功流程补充替代流程和异常流程 边界系统内外职责清晰人工活动和系统行为混在一起标注线下步骤及外部系统 可验证性有前置条件和结束状态无法判断何时完成增加状态、结果和验收条件 判断用例是否过细,可以问:“如果去掉这个步骤,参与者是否仍然完成同一个业务目标?

”例如“填写开始日期”和“上传证明材料”通常不能独立产生业务结果,适合放在“提交请假申请”的步骤中,而不是各自成为用例。判断用例是否过粗,则可以看它是否同时包含多个独立参与者和结果。比如“管理员处理所有请假业务”就过于宽泛,因为维护规则、审批申请、导出统计和修正考勤分别对应不同目标、权限和验收标准。

异常场景优先级也不必平均分配。我会优先补充会改变数据状态、造成权限越界、产生资金或考勤影响的异常。例如重复提交、审批人离职、申请被撤回、第三方同步失败,这些场景比单纯的表单格式错误更值得进入首轮评审。最终可以用“用例,设计,测试”追踪表做闭环。

一个重要用例如果找不到对应的权限规则、接口或测试场景,说明模型还没有成熟;反过来,设计中出现无法追溯到任何用例的核心功能,也可能意味着需求范围被悄悄扩大了。

核心关键词

读者评论

夏书瑶

文章把用例模型从“画图工具”提升为需求、设计和测试之间的交接协议,这个定位很准确。尤其对参与者、系统边界和异常流程的拆解,能帮助团队减少后期返工。

武云舟

从测试角度看,文中强调主流程、替代流程和异常流程很有价值。很多需求只描述成功路径,直到联调时才发现权限、超时、撤回等场景没有定义。

贾子涵

文章对用例图、业务流程图、功能流程图和页面流程图的区别梳理得比较清楚。不过实际项目中还需要结合团队规模控制建模成本,避免模型维护本身成为负担。

原创文章,作者:飞飞,如若转载,请注明出处:https://worktile.com/solution-1/archives/44210

(0)
飞飞飞飞
选对工具事半功倍:2026年项目运维管理表选型指南TOP8
上一篇 2026年8月27日 下午10:05
掌握测试用例命名规范:5个技巧让你的代码更易读、更高效
下一篇 2026年8月27日 下午10:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部