需求分析是软件生命周期的一项重要内容,它是每一次项目迭代的开端,奠定了软件设计的基础。在系统分析与设计的课程项目“挣闲钱”中,我使用了用例建模的方法进行需求分析。在项目中,我第一次接触系统性的需求分析方法,了解到了用例建模的重要性。本文对项目中的用例建模方法进行了总结。
用例建模的制品
相对于传统的软件需求规约,用例建模的优点是能够从用户的角度出发,使用自然语言文本和图表来描述系统业务的功能,清晰表达系统需求。用例建模一般包含以下制品:
- 系统上下文图
- 用例描述
- 用例文本
- 业务流程
- 故事板
在本项目中,系统上下文图采用了面向对象的UML用例图。业务流程使用UML活动图表示。由于我没有参与UI设计,因此故事板部分不展开描述。
UML用例图
用例图使用UMLet绘制。
绘制用例图是一个识别需求的过程,能够帮助组织确定系统的范围、对象、外部系统,也能够方便工作量的评估。
用例图的绘制分为以下几个步骤:
- 确定系统
系统是我们研究问题的边界,应包含涉及到的所有用例。在“挣闲钱”项目中,我们的系统命名为挣闲钱系统。
- 识别Actors
系统参与者,用actor符号表示,放在系统左边。挣闲钱系统的受众是大学生,用户既可以发布任务也可以接受任务,因此我们的用例图只有一类参与者。
外部系统,用NeighbourSystem框表示。一个系统不可能是大而全的,它应该只包含与核心功能直接相关的用例,其余逻辑交由外部系统来完成。在我的建模中,用户管理和交易管理两部分比较复杂,因此抽离出来成为独立的外部系统。
- 识别用例
首先要确定的是用户级别的用例,即最顶层的用例。在我们的迭代会议中,初步确定了问卷填写和有赏问答两大业务。据此我提出了一些与用户直接相关的用例,如完成问答任务、发起提问等,也考虑了一系列的manage用例,例如管理提问、管理余额等等。
接下来需要识别子功能级别的用例,一般是将父用例进行功能分解。识别过程要注意父用例和子用例的关系,一般有<
- 建立Actor与用例之间的关联
使用无方向连线,表示双向交互的协议。
下面是我针对“挣闲钱系统”绘制的系统用例图。
用例描述
用例图只是简单的理清了用例之间的关系。为了详细对用例进行建模,还需要对用例的描述。我主要完成了用例文本和UML活动图两部分。
用例文本
RUP用例规约模板包含以下内容:
简要说明 (Brief Description)
简要介绍该用例的作用和目的。
事件流 (Flow of Event)
包括基本流和备选流,事件流应该表示出所有的场景。
用例场景 (Use-Case Scenario)
包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。
特殊需求 (Special Requirement)
描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等)。
前置条件 (Pre-Condition)
执行用例之前系统必须所处的状态。
后置条件 (Post-Condition)
用例执行完毕后系统可能处于的一组状态。
根据该模板可以用文本详细描述一个用例。以最简单的注册登录为例,用例可以描述为:
用例名称 | 注册登录 |
---|---|
范围 | Web网页 |
级别 | 用户目标 |
主要参与者 | 用户 |
涉众及其关注点 | 用户:希望能注册为挣闲钱平台的用户,登录系统发布任务或接收任务,获得收益 |
前置条件 | 用户了解登录注册的流程和需要填写的信息 |
后置条件 | 用户填写的信息无误,邮箱不与已有邮箱冲突 |
主成功场景 | 用户打开网页,填写昵称、邮箱和密码进行注册,邮箱不重复则注册成功;用户通过注册的邮箱和密码进行登录。 |
扩展 | 两次输入密码不一致,提醒密码错误;邮箱重复,提醒邮箱已注册。 |
特殊需求 | 界面美观,有明显的报错提醒 |
发生频率 | 经常发生 |
未决问题 | 邮箱验证问题 |
活动图
文本往往不能很好地描述用例的事件流,使用活动图可以更清晰地表达复杂的流程。以注册登录为例,用例涉及邮箱重复、密码不一致等判断过程,活动图表示更为直观。
另外,如果用例涉及到多个角色,可以采用多泳道图来更清晰地表示角色之间的交互业务。
总结
用例建模从用户的角度出发,将分析和设计分离,能清晰表达系统的业务和功能需求。用例图清晰地展示了系统的功能组成,客户可以清楚地看到系统与自己的要求是否相符。同时,客户可以简单修改用例图来表达需求变更的想法。用例图明确地表达了用户的需求,因此系统架构的设计可以更加准确,同时系统的工作量评估也变得方便。在测试阶段,测试人员也可以根据用例设计测试用例,对系统进行全面的测试。
不过,用例建模需要的工作量是很大的,特别是当系统需要复杂和严谨的结构时,用例建模会花费大量的时间,在小型项目的开发上可能会降低开发效率。
项目文档
Reference
[4] 用例建模指南