一、需求工程的重要性

1.软件项目成败因素分析

软件项目成功因素:

  • 用户的参与
  • 执行层的支持
  • 清晰的需求描述
  • 合适的规划
  • 现实的客户期望
  • 较小的里程碑
  • 有才能的员工
  • 主权
  • 清晰的愿景和目标
  • 努力的工作和稳定的员工

软件项目失败因素:

  • 不完整的需求
  • 缺乏用户的参与
  • 资源不足
  • 不实际的客户期望
  • 缺乏执行层的支持
  • 需求变更频繁
  • 规划不足
  • 提供许多不必要的功能
  • 缺乏IT管理
  • 技术能力缺乏

2.因需求导致的软件项目失败的案例

  • 伦敦股票交易项目TAURUS(原因:未能协调不一致需求);
  • Swanick空中交通抗旨系统(原因:缺乏健壮的需求规格说明而继续进行系统实现)

3.需求与成本案例

  • A. Davis研究发现,在需求阶段检查和修复一个错误所需的费用只有编码阶段的1/5到1/10,而在维护阶段做同样的工作所需付出的代价却是编码阶段的20倍。

4.分析结论
  在软件开发过程中,必须极早、有效地发现和解决与需求相关的问题。

二、什么是软件需求

1.软件需求的各种定义

  • A. Davis:软件需求是从软件外部能发现的,软件所具有的,满足于用户的特点、功能及属性等的集合;
  • I. Sommerville:需求是问题信息和系统行为、特性、设计和实现约束的描述的集合;
  • M. Jackson:需求是客户希望在问题域内产生的效果;

IEEE关于软件需求的定义:

  • 用户角度:用户解决问题或达到目标所需的条件或能力;
  • 软件系统角度:系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力;
  • 规约:反映上面所描述的条件或能力的文档说明。

2.总结

  需求是指明必须实现什么的规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。

三、软件需求的分类

1.分类

  • 目标需求:反映组织机构或客户对系统和产品提出的高层次的目标要求,其限定了项目的范围和项目应达到的目标;
  • 业务需求:主要描述软件系统必须完成的任务、实际业务或工作流程等。软件开发人员通常可从业务需求进一步细化出具体的功能需求和非功能需求;
  • 功能需求:指开发人员必须实现的软件功能或软件系统应具有的外部行为;
  • 性能需求:指实现的软件系统功能应达到的技术指标,如计算效率和精度、可靠性、可维护性和可扩展性等;
  • 约束与限制:指软件开发人员在设计和实现软件系统时的限制,如开发语言、使用的数据库等。

2.软件需求间的层次关系

四、需求规格说明

  SRS(Software Requirements Specification):需求规格说明是软件所应满足的全部需求,并可以文档的方式完整和精确陈述这些需求。
  需求规格说明是项目相关人员对将要开发的软件系统所达成的共识,是进行系统设计、实现、测试和验收的基本依据,也是整个软件开发过程中最重要的文档。