Skip to content
难度基础(★)
建议时长45分钟

10.4.5 用例图

用例图从外部使用者的角度描述系统功能。它不是程序流程图,也不是界面原型图,而是在说明:“谁使用系统,系统给这些角色提供什么服务。”

用例图的组成

元素图形含义识别提醒
系统边界大矩形标出当前系统范围边界内是系统功能,边界外是外部角色
参与者小人与系统交互的外部角色可以是人、组织、第三方系统、外部设备
用例椭圆系统提供的一项服务常用“动词 + 名词”命名,如“新增书籍信息”
关系连线/箭头参与者与用例、用例与用例之间的联系包含、扩展、泛化最常考
mermaid
flowchart LR
  Librarian["图书管理员"]
  Reader["读者"]
  subgraph System["图书管理系统"]
    Add["新增书籍信息"]
    Borrow["借阅图书"]
    Check["检查权限"]
    Recharge["缴纳押金"]
  end
  Librarian --- Add
  Reader --- Borrow
  Add -. "<<include>>" .-> Check
  Borrow -. "<<include>>" .-> Check
  Recharge -. "<<extend>>\n押金不足" .-> Borrow

矩形边界外的是参与者,椭圆内部的是用例。参与者不一定是“具体的人”,而是外部角色,例如支付平台、短信网关、第三方认证系统都可以是参与者。

参与者怎么识别

参与者是系统外部与系统交互的实体。它强调“角色”,不是具体自然人。

需求描述可能的参与者原因
管理员维护图书信息管理员外部使用系统的人
用户通过支付宝付款用户、支付宝系统支付宝是与本系统交互的外部系统
传感器上传温度数据传感器外部设备也可以触发系统功能
银行系统核验账户银行系统第三方机构或系统是参与者

课程里把用例图参与者与 DFD 外部实体作了类比:两者都在系统边界之外,都会与系统发生交互。不同的是,DFD 是结构化分析工具,用例图是面向对象分析常用工具。

用例怎么命名

用例是系统功能的归纳。命名通常是动作,不是静态名词。

不推荐推荐原因
书籍信息新增书籍信息用例应表达系统提供的动作
订单查询订单、创建订单“订单”只是对象,不是功能
支付完成支付、发起退款更清楚参与者要达成的目标

用例只有名字还不够。真正做需求分析时,还要继续细化用例描述,例如基本事件流、备选事件流、前置条件、后置条件。课程这里只要求先掌握图上元素和关系。

用例图建模步骤

  1. 确定系统边界:先判断哪些功能属于本系统,哪些角色在系统外。
  2. 识别参与者:找人、组织机构、第三方系统、外部设备。
  3. 识别用例:从需求动词中归纳系统提供的功能。
  4. 建立参与关系:哪些参与者使用哪些用例。
  5. 调整用例模型:必要时用 include、extend、泛化关系整理公共行为、条件行为和抽象行为。

三种用例关系再辨析

关系何时使用是否必选箭头方向
<<include>> 包含多个用例都必须执行同一公共步骤必选指向被包含的公共用例
<<extend>> 扩展某个条件满足时才追加行为可选指向被扩展的基本用例
泛化多个具体用例是同一个抽象用例的不同实现必须选择具体子用例子用例指向父用例

看到“都要先检查权限”通常是包含;看到“余额不足时才充值”通常是扩展;看到“注册可分为电话注册和网上注册”通常是泛化。

考试识图提示

  • 看到小人 + 椭圆 + 系统边界,优先判断用例图。
  • 小人表示参与者,椭圆表示用例。
  • 系统边界不是参与者,也不是类。
  • 参与者可以是人、组织机构、第三方系统或硬件设备,不能被限制成“物理用户”。

例题

单选
用例图中,系统外部与系统交互的角色称为:
单选
关于用例图,下列说法正确的是:

自查要点

  1. 用例图为什么要先确定系统边界?
  2. 参与者为什么不等于具体用户?
  3. 用例命名为什么通常用“动词 + 名词”?
  4. include、extend、泛化分别解决什么建模问题?