需求开发可进一步分为:问题获取( e l i c i t a t i o n)、分析( a n a l y s i s )、编写规格说明(s p e c i f i c a t i o n)和验证(v e r i f i c a t i o n)四个阶段(Thayer and Dorfman 1997)。这些子项包括软件类产品中需求收集、评价、编写文档等所有活动。需求开发活动包括以下几个方面:

  确定产品所期望的用户类。

  获取每个用户类的需求。

  了解实际用户任务和目标以及这些任务所支持的业务需求。

  分析源于用户的信息以区别用户任务需求、功能需求、业务规则、质量属性、建议解决方法和附加信息。

  将系统级的需求分为几个子系统,并将需求中的一部份分配给软件组件。

  了解相关质量属性的重要性。

  商讨实施优先级的划分。

  将所收集的用户需求编写成规格说明和模型。

  评审需求规格说明,确保对用户需求达到共同的理解与认识,并在整个开发小组接受说明之前将问题都弄清楚。

  需求管理需要“建立并维护在软件工程中同客户达成的契约”(CMU/SEI 1995)。这种契约都包含在编写的需求规格说明与模型中。客户的接受仅是需求成功的一半,开发人员也必须能够接受他们,并真正把需求应用到产品中。通常的需求管理活动包括:

  定义需求基线(迅速制定需求文档的主体)。

  评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它。

  以一种可控制的方式将需求变更融入到项目中。

  使当前的项目计划与需求一致。

  估计变更需求所产生影响并在此基础上协商新的承诺(约定)。

  让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪。

  在整个项目过程中跟踪需求状态及其变更情况。

  由图1-3中可以从另一个角度来看需求开发和需求管理之间的区别:

图1-3 需求开发与需求管理之间的界限

  下一步:

  记录你在当前项目或以前项目中所遇到的与需求相关的问题。指明每一个问题是需求开发问题还是需求管理问题,以及这些问题带来的影响及其产生的根本原因。

  与你的组员和其他风险承担者(客户,市场调查人员,项目管理者)一起讨论当前或以前项目中的需求问题,及其产生的根源和带来的影响。向所有参与者指明,如果想解决这些困难,必须正视它,大家是否为此做好准备了呢?

  整理出对整个项目人员训练用的软件需求课程,人员要包括重要的客户,市场人员和管理人员。训练是一种有效的团队学习与合作的方法。大家将会在训练中达成术语与技术上的共识,有利于相互交流沟通与协作。