📄 一句话概括
用例图先找【谁站在系统外面】——实测 3 个参与者、8 个用例,读者占 4 个;参与者定完,软件边界就定了。
📝 本节和前面几节的关系
9.7 摊出了 6 个动作,这一节把它们分给站在系统外面的人。
一、参与者怎么找
问一句:谁(或哪个系统)站在软件外面、跟它打交道? 实测 3 个:读者(4 个用例)、馆员(3 个用例)、外部系统(1 个用例)。 【外部系统】也算参与者——它跟人一样在框外面。
二、用例怎么分
读者的 4 个:借书、还书、续借、查书——都是自助的。 馆员的 3 个:办证、催缴、盘点——都是需要权限的。 外部系统的 1 个:同步书目——没人参与,机器对机器。
三、用例数最多的参与者是关键
读者占 4 个,是系统的主要服务对象;它一变,改动最大。 这条信息决定了开发优先级:先保证读者的 4 个用例走通,再谈馆员的。 也是测试的排序依据:主服务对象的用例先测。
四、这一步定完,边界就定了
框里是软件要做的,框外是别人做的——这是软件范围的定义。 边界画错的典型症状:图里出现【系统内部怎么做】的步骤,那已经是用例图的外面了。 所以用例图只写到【做什么】就停,怎么做交给 9.9 的概念模型与后面的设计。
五、动手 Demo:使用用例图来表示图书馆业务
列出参与者,把 8 个用例分给它们。 数一数每个参与者各有几个用例。
actors = ["读者", "馆员", "外部系统"]
cases = [("借书", "读者"), ("还书", "读者"), ("续借", "读者"),
("查书", "读者"), ("办证", "馆员"), ("催缴", "馆员"),
("盘点", "馆员"), ("同步书目", "外部系统")]
for a in actors:
print(a, len([c for c, x in cases if x == a]))
# 读者 4 / 馆员 3 / 外部系统 1
实跑输出:
--------------------------------------------------------------------
使用用例图来表示图书馆业务
--------------------------------------------------------------------
图书馆业务的用例图,**参与者先从【谁站在系统外面】找**:
参与者 用例数 用例
-----------------------------------------------
读者 4 借书/还书/续借/查书
馆员 3 办证/催缴/盘点
外部系统 1 同步书目
参与者 3 个
用例合计 8 个
参与者最多的 读者(4 个用例)
**【外部系统】也算参与者**——它跟人一样,站在系统外面跟系统打交道。
**用例数最多的参与者,就是系统的主要服务对象**;它一变,改动最大。
**这一步定完,软件边界就定了**:框里是软件要做的,框外是别人做的。
实测:3 个参与者、8 个用例;读者 4、馆员 3、外部系统 1。 用例最多的参与者就是主要服务对象,决定开发与测试的优先级。 参与者定完,软件边界就定了——框里软件做,框外别人做。
30 秒实验
- 给你的系统找参与者,检查有没有漏掉【外部系统】。
- 数一数哪个参与者的用例最多,它是不是你真正的主要用户。
常见误区
- 以为参与者只能是人。外部系统也算。
- 把系统内部的步骤画进用例。用例图只写到做什么为止。
自测三问(点开对答案)
1. 参与者怎么找? —— 问谁站在软件外面跟它打交道——人、外部系统都算。 2. 实测分布如何? —— 3 个参与者、8 个用例:读者 4、馆员 3、外部系统 1。 3. 用例最多的参与者意味着什么? —— 它是系统的主要服务对象,决定开发与测试优先级,也决定改动的影响面。- ☐ 9.9 用概念模型表示图书馆系统的信息
相关笔记
- 对图书馆的借阅业务进行建模 — 动作从哪来
- 使用用例图表示交给计算机的工作 — 用例图的通用画法
- 用概念模型表示图书馆系统的信息 — 下一个阶段的产物
- 🧩 面向对象是怎样工作的 · 索引