🧩 第九章 建模:填补现实世界和软件之间的沟壑
📄 一句话概括

用例图先找【谁站在系统外面】——实测 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. 数一数哪个参与者的用例最多,它是不是你真正的主要用户。

常见误区

  1. 以为参与者只能是人。外部系统也算。
  2. 把系统内部的步骤画进用例。用例图只写到做什么为止。
自测三问(点开对答案) 1. 参与者怎么找? —— 问谁站在软件外面跟它打交道——人、外部系统都算。 2. 实测分布如何? —— 3 个参与者、8 个用例:读者 4、馆员 3、外部系统 1。 3. 用例最多的参与者意味着什么? —— 它是系统的主要服务对象,决定开发与测试优先级,也决定改动的影响面。

相关笔记