一、场景
目标开发一套库存管理系统,该系统的部分需求如下:
(1)库存管理系统主要包括货物入库管理、货物出库管理、仓库管理、统计报表和系统管理等功能。
(2)库存管理系统的用户包括仓库管理员、仓库经理和系统管理员,用户必须在注册后才能使用系统功能;用户可以选择使用邮件注册或电话注册。
(3)仓库管理员在进行出入库操作前必须先登录;仓库经理可以通过系统查看统计报表,如果前一个月的报表未生成,则系统自动生成统计报表,否则直接显示。
(4)系统管理员可以在系统中设置仓库温度范围,当仓库内温度超过最高值或者低于最低值时,系统自动调用温控管理操作,连接温度调节系统进行制冷或加热。
(5)仓库管理功能要求每个月1日零点对前一个月货物入库和出库记录进行数据汇总操作。项目组决定构造用例模型以描述系统需求。
二、问题
2.1、问题1
用例建模的首要任务是识别系统中的参与者。请根据题目中所描述的需求,识别出系统中有哪些参与者?
2.2、问题2
用例建模的主要工作是书写用例规约。用例规约通常包括哪几部分内容?
2.3、问题3
建立了用例模型后,可以利用用例之间的关系调整用例模型,用例之间的关系包括哪几种?对于每种关系,请根据题目中所描述的需求分别给出一组用例。
三、解析
3.1、问题1
核心解题思路:谁(什么东西)在通过系统接口与系统交互?
不应该只找"人",不能漏掉"物"和"环境"。
① 具体的人:谁使用这一套系统?
根据需求找到【仓库管理员、仓库经理和系统管理员】
② 外部系统/硬件设备:系统是否需要控制机器,或者从外部机器获取数据?
根据需求找到【连接温度调节系统】
③ 时间或环境状态:有没有功能是"自动触发"的?
根据需求找到【温度超过最高值或者低于最低值时,系统自动调用温控管理操作】代表温度环境,还有【每个月1日零点对前一个月货物入库和出库记录进行数据汇总操作】代表时间环境。
3.2、问题2
通俗理解用例规约:当收到命令炒一盘菜,我们需要明确以下几点。
① 这是啥菜?
对应就是用例名称。
② 谁吃菜或者谁做菜?
对应就是参与者。
③ 做这道菜是为什么?
对应就是目标/简要说明。
④ 开火前要准备什么?
对应就是前置条件,比如需求中说的用户必须先登录,那么用户登录就是前置条件。
⑤ 具体怎么炒菜?
对应就是事件流/基本流程,比如用户第一步先点击按钮,第二步系统弹出什么界面。
⑥ 菜炒糊了怎么办?
对应扩展事件流/异常事件流,比如按钮的校验事件失败了,系统应该提出什么错误提示。
⑦ 菜炒完之后厨房变成什么样了?
对应后置条件,比如按钮点击完成,库存数据库更新。
3.3、问题3
核心解题思路:识别用例之间的关系(包含、扩展、泛化)
① 包含关系 (Include) ------ "必须做的公共步骤"
诀窍:不做A就没办法做B,就说A被B包含。
特征:复用。如果多个用例都有一段完全一样的步骤,就把这段步骤提出来做一个新用例。
根据需求找到【出入库操作前必须先登录】,所以出入库操作包含登录。
② 扩展关系 (Extend) ------ "特殊情况下的加餐"
诀窍:通常做A就可以了,特殊情况需要做B,就是A扩展出了B。
特征:可以理解为"插件"或者"分支剧情"。主流程可以独立运行,扩展流程不是必须发生的。
根据需求找到【仓库经理可以通过系统查看统计报表,如果前一个月的报表未生成,则系统自动生成统计报表,否则直接显示】,查看统计报表主流程通常可以独立完成,只有当统计报表没有的时候才需要生成统计报表。所以查看统计报表扩展出了生成统计报表。
③ 泛化关系 (Generalization) ------ "父子分类"
诀窍:A是B的其中一种。
特征:就像生物学分类,具体和抽象的区别。
根据需求找到【用户可以选择使用邮件注册或电话注册】,邮箱注册和电话注册都是注册的一种。所以注册泛化出了邮箱注册和电话注册。
四、答案
【问题1】 用例模型的参与者:仓库管理员、仓库经理、系统管理员、时间、温度、温度调节系统。
【问题2】 用例建模的主要工作是书写用例规约(use case specification),而不是画图。用例模板为一个给定项目的所有人员定义了用例规约的结果,其内容至少包括用例名、参与者、目标、前置条件、事件流(基本事件流和扩展事件流)和后置条件等,其他的还可以包括非功能需求和用例优先级等。
【问题3】 (1) 用例之间的关系包括:包含关系、扩展关系、泛化关系。 (2) "出入库操作"与"登录"属于包含关系; "查看统计报表"与"生成统计报表"属于扩展关系; "用户注册"与"电话注册"、"邮件注册"属于典型的泛化关系。