在 AUP 中, 需求也不是一次性分析完的, 会是一个不断迭代精化的过程.

先来个总结:

迭代过程

  1. 先进行高阶需求分析, 仅仅确定用例的名称, 以及关键的非功能性需求
  2. 从高阶需求列表中选取 10% 的列表项进行详细的分析
    1. 核心架构
    2. 高业务价值
    3. 高风险
  3. 结合早期时间定量的迭代开发, 进行迭代和进化式需求分析, 并且引入频繁的涉众参与、评估和对局部结果的反馈
  4. 根据第 3 步的反馈, 返回第 1 步进行下一轮迭代

需求分类 (FURPS+)

如何管理?

需求分析会通常会有两个产出:

用例模型

用例模型并不是特指 UML 用例图, 用例图只是用例模型的一种方式.

用例是 OOA 阶段非常重要的产出 (另外一个是领域), 也是 OOD 阶段非常重要的输入, OOD 阶段的关键目标之一是用例实现, 即通过 UML 交互图来描述用例基于软件对象如何在设计模型中实现.

什么是用例?

用例元素

如何发现用例 (寻找参与者与目标)?

首先应识别出系统边界, 然后在系统边界内找出主要参与者, 然后分析其目标. 用例强调参与者的目标和观点, 所以提问总是围绕参与者目标而不是系统本身.

  1. 谁来使用系统?
  2. 谁来启动和停止系统?
  3. 谁来完成用户管理和安全管理?
  4. 谁来完全系统管理?
  5. 时间是参与者吗? 即需要定时任务吗?
  6. 当系统失败时, 是否存在监控进程将系统重新启动?
  7. 软件升级是如何处理的? 是推模式, 还是拉模式?
  8. 除了人作为主要参与者外, 还有其他外部的软件或系统调用该系统的服务吗?
  9. 谁来考察系统活动或性能?
  10. 谁来考察日志? 是否可以远程检索?
  11. 系统发生错误或故障时应通知谁?

如何记录参与者与目标?

发现用例后, 有两种记录方式:

  1. UML 用例图 (推荐)
  2. 参与者 - 目标 列表, 如果使用这种方式, 该表可做为设想制品的一部分

用例的本质虽然是文本形式的情节描述, 但并不是每一次迭代都需要详述所有的用例, 可以用 UML 用例图快速收集需求 (代替摘要用例), 从而产出用例语境图. 迭代时, 从语境图中选取一部分进行详述.

UML 用例图中允许使用包含扩展两种关系, 虽然也可以绘制出用户在系统上实现目标的情节 (流程), 但 AUP 不建议使用用例图去描述流程控制, 因为 UML 比较专业, 为了让用户早期参与项目, 所以建议用文本形式进行详述. 当场景工作流复杂到文本无法描述时, UML 活动图是很好的选择.

UML 制图准则

总结: 用例应产生对特定参与者具有价值的可观察结果.

详述用例

模板参考

alistair.cockburn.us 上提供的模板, 由 Alistair Cockburn 创建, 它是用例建模方法和畅销书的作者.

用例元素 注释
用例编号 (*) 用例的编号
用例名 (*) 以动词开始, 描述一个用户的具体动作
范围 (*) 要设计的是什么系统
级别 用户目标或者子功能
涉众及其关注点 (*) 关注该用例的人, 及其关注的地方
前置条件 值得告知读者的, 开始前必须为真的条件
成功保证(后置条件) (*) 值得告知读者的, 成功完成必须满足的条件
主成功场景 (*) 典型的、理想方式的成功场景
扩展 (*) 成功或失败的替代场景
特殊需求 相关的非功能性需求 (通常最终会整理到补充规格说明中)
技术和数据变元表 不同的 I/O 方法和数据格式
发生频率 影响对实现的调查、测试和时间安排
杂项 例如未决问题

带 (*) 的是相对重要的选项, 通常是必填项

编写指南

实例参考 《UML 和模式应用》 P50