为什么非功能性需求变更会频繁发生?
为什么非功能性需求不能固定下来呢?或定下来后就不许变了呢?通常有许多人会问这样的问题。实际上,当他变成了客户时,他可能就不会问这个问题了。
(1)非功能性需求容易产生理解分歧
在软件需求分析阶段,客户和开发人员对非功能性需求的理解呈现"大体上共识多,细节上差异多"的特点。一般跟分析员的知识、背景,还有客户表述的标准程度、双方的交流情况有关。即使通过反复沟通,但是以实践经验来看非功能性需求的描述还是永远不够清晰、不够明确的,主要是因为在这个阶段所谓的产品还只存在于大家的大脑构思中。
作为一个客户,大多数情况下是不懂技术的,但他所需要的软件在他的心里还是有一个印象的。他会想象出软件的样子和功能,然后通过口头或者笔头的方式告诉需求分析人员。简单的说,就是在这个阶段用户往往不能确切地定义自己需要什么。用户常常以为自己清楚,但实际上他们提出的需求只是依据当前的工作所需,或者是他们想象出来的东西。结果是当客户向需求分析人员提出需求的时候,往往是通过自己的想法用自然语言来表达的,这样的表达结果对于真实的需求来说只是一种描述,甚至只是某个角度的描述,但远远不能保证这样的描述可以得到百分之百的正确理解。
当客户提出要求之后,在双方认为理解大概没有分歧的时候,开发人员就开始工作了。但随着开发工作的不断进展,系统开始展现雏形,客户对系统的了解也逐步深入。这个时候,客户就会对系统的界面、操作、功能、性能等有一些了解,就有可能提出需求变更要求,而且这些要求很多是基于主观的、人为的因素。总之,他们了解得越多,新的要求也就会越多。
(2)没有明确的需求变更管理流程
在软件开发中的常识是,一旦发生需求变更不要一味的抱怨,也不要一味地去迎合客户的新需求,而是要管理和控制需求变更。但令人不解的是我们常常看到变更的提出、讨论和执行常常只停留在口头上。这样做有两个弊端:首先是时间一长,无论是当事人还是开发团队都说不清楚变更是因何发生以及结果怎么样了。显然,这对于提高项目质量、改进开发过程是很不利的。其次是由于缺乏形式上的约束和对变更代价的定量分析,变更会被非常随意地提出、或被草率地执行,也会大大影响项目的进展和开发质量。
因此,没有明确的需求变更管理流程,就会使需求变更变得泛滥。因为并不是所有的变更都要修改,也不是所有变更都要立刻修改,需求变更管理的目的是为了决定什么类型的变更需要修改和什么时候修改。比如界面风格问题,就可以先不修改,或者规划一下修改的时间待到以后进行优化。
(3)没有让客户知道需求变更的代价
对变更的影响没有评估是需求变更泛滥的根本原因。变更都是有代价的,应该要评估变更的代价和要让客户了解需求变更的后果。如果客户不知道需求变更付出的代价,对开发人员的辛苦就会难以体会。
相比于需求开发人员而言,客户可能对需求变更认识不足,认为他们出钱,软件开发团队就要为它服务。因此,客户对需求变更往往会肆无忌弹,将需求变更视为儿戏,随个人喜好随意变更需求。所以,在和客户接触时应该挑明态度,特别是要让他们清楚需求随意变更所带来的代价和风险。如果客户认为代价太大,那么开发人员就没有必要及时修改,按原来的进度走,但仍要记录变更,待下一版本在修改。