模棱 两可的需求会使不同的风险承担者产生不同的期望,它会使开发人员为错误问题而浪费时间,并且使测试者与开发者所期望的不一致。一位系统测试人员曾告诉我,她所在的测试组经常对需求理解有误,以致不得不重写许多测试用例并重做许多测试。

  两可的需求带来不可避免的后果便是返工—重做一些你认为已做好的事情。返工会耗费开发总费用的40%,而70%~85%的重做是由于需求方面的错误所导致的(leffingwell 1997)。想像一下如果你能减少一半的返工会是怎样的情况?你能更快地开发出产品,在同样的时间内开发更多、更好的产品,甚至能偶尔回家休息休息。

  模棱两可需求的一种方法是组织好负责从不同角度审查需求的队伍。仅仅简单浏览一下需求文档是不能解决模棱两可问题的。如果不同的评审者从不同的角度对需求说明给予解释,但每个评审人员都真正了解需求文档,这样二义性不会直到项目后期才被发现,那时再发现的话会使得更正代价很大。其它检测模棱两可需求的技术由Gause 和Weinberg(1989)给予介绍,本章的后面也有所涉及。

  4. 不必要的特性

  “画蛇添足”是指开发人员力图增加一些“用户欣赏”但需求规格说明中并未涉及的新功能。经常发生的情况是用户并不认为这些功能性很有用,以致在其上耗费的努力“白搭”了。

  开发人员应当为客户构思方案并为他们提供一些具有创新意识的思路,具体提供哪些功能要在客户所需与开发人员在允许时限内的技术可行性之间求得平衡,开发人员应努力使功能简单易用,而不要未经客户同意,擅自脱离客户要求,自作主张。

  同样,客户有时也可能要求一些看上去很“酷”,但缺乏实用价值的功能,而实现这些功能只能徒耗时间和成本。为了将“画蛇添足”的危害尽量减小,应确信:你明白为什么要包括这些功能,以及这些功能的“来龙去脉”,这样使得需求分析过程始终是注重那些能使用户完成他们业务任务的核心功能。

  5. 过于精简的规格说明

  有时,客户并不明白需求分析有如此重要,于是只作一份简略之至的规格说明,仅涉及了产品概念上的内容,然后让开发人员在项目进展中去完善,结果很可能出现的是开发人员先建立产品的结构之后再完成需求说明。这种方法可能适合于研究性的产品或需求本身十分灵活的情况(McConnell 1996)。但在大多数情况下,这会给开发人员带来挫折(使他们在不正确的假设前提和极其有限的指导下工作),也会给客户带来烦恼(他们无法得到他们所设想的产品)。

  6. 忽略了用户分类

  大多数产品是由不同的人使用其不同的特性,使用频繁程度也有所差异,使用者受教育程度和经验水平也不尽相同。如果你不能在项目早期针对所有这些主要用户进行分类的话,必然导致有的用户对产品感到失望。例如,菜单驱动操作对高级用户太低效了,但含义不清的命令和快捷键又会使不熟练的用户感到困难。

  7. 不准确的计划

  “上述是我对新产品的看法,好,现在你能告诉我你什么时候能完成吗?”许多开发人员都遇到这种难题。对需求分析缺乏理解会导致过分乐观的估计,而当不可避免的超支发生时,会带来颇多麻烦。据报道,导致需求过程中软件成本估计极不准确的原因主要有以下五点:频繁的需求变更、遗漏的需求、与用户交流不够、质量低下的需求规格说明和不完善的需求分析(Davis 1995)。

  对不准确的要求所提问题的正确响应是“等我真正明白你的需求时,我会来告诉你”。基于不充分信息和未经深思的对需求不成熟的估计很容易为一些因素左右。要作出估计时,好还是给出一个范围(如好的情况下,很可能的,坏情况下)或一个可信赖的程度(我有90%的把握,我能在8周内完成)。未经准备的估计通常是作为一种猜测给出的,听者却
认为是一种承诺。因此我们要尽力给出可达到的目标并坚持完成它。

  1.4 高质量的需求过程带来的好处

  实行有效的需求工程管理的组织能获得多方面的好处。大的好处是在开发后期和整个维护阶段的重做的工作大大减少了。Boehm(1981)发现要改正在产品付诸应用后所发现的一个需求方面的缺陷比在需求阶段改正这个错误要多付出6 8倍的成本。近来很多研究表明这种错误导致成本放大因子可以高达200倍。强调需求质量并不能引起某些人的重视,他们错误地认为在需求上消耗多少时间会导致产品开发推迟多少时间。传统的质量成本角度分析揭示了需求及其它早期质量工作的重要性(Wiegers 1996a)。

  正确的需求过程强调产品开发中的通力合作,包括在整个项目过程中多方风险承担者的积极努力。收集需求能使开发小组更好地了解市场,而市场因素是任何项目成功的一个关键因素。在产品开发前了解这些比在遭到客户批评后才意识到要节约很多成本。让用户积极参与需求收集过程能使产品更富有吸引力,而且能拥有忠实的客户关系。通过了解用户的任务
需求而不仅仅局限于一些“华丽”的特性,你能避免在无用功能上白耗精力,并且用户的参与能弥补用户期望和开发者实际开发之间的“鸿沟(期望差异)”。

  将选定系统的需求明确地分配到各软件子系统,强调采用产品工程的系统方法。这样能简化硬软件的集成,也能确保软硬件系统功能匹配适当。有效的变更控制和影响分析过程也能降低需求变更带来的负面影响。后,将需求编写成清晰、无二义性的文档将会极大地有利于系统测试,确保产品质量,以使所有风险承担者感到满意。

  1.5 需求具有的特性

  怎样才能把好的需求规格说明和有问题的需求规格说明区别开来?下面讨论单个需求陈述说明的几个特点(Davis 1993;IEEE 1998)。让风险承担者从不同角度对SRS需求说明进行认真评审,能很好地确定哪些需求确实是需要的。只要你在编写、评审需求时把这些特点记在心中,会写出更好的(尽管并不十分完美)需求文档,同时也会开发出更好的产品。在第9章中,我们将使用这些特点找到一些需求陈述中的问题并改进之。