需求工程是软件工程的一个分支,主要关注软件系统应该实现的现实世界目标、软件系统的功能和软件系统应当遵守的约束,同时也关注以上因素与准确的软件行为规格说明之间的联系,关注以上因素与其随时间或跨产品族而演化之后的相关因素之间的联系。如图3.1所示,需求工程活动包括需求获取(Elicitation)、需求分析(Analysis)、需求规格说明(Specification)、需求管理(Management)和需求验证(Validation)。
图3.1 需求工程关系示意
如图3.2所示,需求工程分为需求开发和需求管理两大部分,这里我们着重关注需求开发。需求开发需要经历需求获取、需求分析、需求规格说明和需求验证这几个阶段,分别产出会议纪要(讨论纪要)、分析模型、需求规格说明书和审核通过的规格说明书。
图3.2 需求开发的流程和产出
需求管理贯穿从需求获取到软件系统下线的全过程。需求管理涉及软件配置管理、需求跟踪、影响分析和版本控制等。其中,需求跟踪是指描述和追踪一条需求的来龙去脉的能力,包括向前追踪到软件制品、向后追踪到需求来源;变更请求管理需要系统化的变更管理;另外需求属性管理是对需求项的细化管理,包括需求优先级、需求状态等。
需求工程通常具有三个方面的特性。
●必要性:软件开发是“利用通用的计算机结构构造一个有用的软件系统”的工程,需要处理新的问题,给出新的解决方案,其中定义问题就是需求工程的任务;
●重要性:开发软件系统最为困难的是准确说明开发什么,如果问题广为人知或者小而简单,都容易被忽略;
●复杂性:范围广泛、诸多参与方、内容多样、活动交织、结果要求苛刻(正确性、完整性、一致性)。