需求工程是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统及其行为特征和相关约束。需求工程覆盖了体系结构设计之前的各项开发活动,主要包括分析客户要求、对未来系统的各项功能性及非功能性需求进行规格说明。需求工程的目标简单明了:确定客户需求,定义设想中系统的所有外部特征。

软件需求包括3个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求)。

  • (1)业务需求(businessrequirement)反映了组织机构或客户对系统、产品高层次的目标要求。

  • (2)用户需求(userrequirement)描述了用户使用产品必须要完成的任务,是用户对该软件产品的期望。这两种构成了用户原始需求文档的内容。

  • (3)功能需求(functionalrequirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足业务需求。所谓特性(feature)是指逻辑上相关的功能需求的集合,给用户提供处理能力并满足业务需求。作为补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等。它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性。所谓约束是指对开发人员在软件产品设计和构造上的限制,常见的有设计约束和过程约束。质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能。多角度描述产品对用户和开发人员都极为重要。

需求工程的活动主要被划分为以下几个阶段。

  • (1)需求获取:通过与用户的交流,对现有系统的观察及对任务进行分析,从而开发、捕获和修订用户的需求。

    • 1.需求获取的基本步骤
      • 1)开发高层的业务模型
      • 2)定义项目范围和高层需求
      • 3)识别用户角色和用户代表
      • 4)获取具体的需求
      • 5)确定目标系统的业务工作流
      • 6)需求整理与总结
    • 2.需求获取方法
      • 1)用户面谈
      • 2)需求专题讨论会
      • 3)问卷调查
      • 4)现场观察
      • 5)原型化方法
      • 6)头脑风暴法
  • (2)需求分析:为系统建立一个概念模型,作为对需求的抽象描述,并尽可能多的捕获现实世界的语义。

  • (3)形成需求规格(或称之为需求文档化):按照相关标准,生成需求模型的文档描述,用户原始需求书作为用户和开发者之间的一个协约,往往被作为合同的附件;软件需求描述规约作为后续软件系统开发的指南。

  • (4)需求确认与验证:以需求规格说明为输入,通过用户确认、复审会议、符号执行、模拟仿真或快速原型等途径与方法,确认和验证需求规格的完整性、正确性、一致性、可测试性和可行性,包含有效性检查、一致性检查、可行性检查和确认可验证性。

  • (5)需求管理:包括需求文档的追踪管理、变更控制、版本控制等管理性活动。