[理解需求变更之一]说说需求变更的必然

歌德曾说:“哪个少男不钟情,哪个少女不怀春”。 对于需求,我们一开始的时候就是这样的。那时,我们总是希望完全理解它,我们总认为能够完全掌握它,可实际的情况是——需求变更往往在所难免。以前出现这种情况时,总觉得很沮丧,觉得自己的工作做的还不细,有些内容要让用户签字确认就好了。可在读了设计模式精解(Design Patterns Explained)中的一段话后,我忽然恍然大悟,这不是你的错,世界原来是这样子的啊。

需求变更的原因很简单:

  1. 当和开发者讨论后,用户看到了软件的可能实现的新的功能,故用户对需求的理解改变了。
  2. 当开发者编程来实现需求的时候,他们对需求更加熟悉了,所以他们对需求理解也改变了。

Requirements change for a very simple set of reasons:

  1. The users'view of their needs changes as a result of their discussions with developers and from seeing new possibilities for the software.
  2. the developers' view of the users' problem domain changes as they develop software to automate it and thus become more familiar with it.

三极世界和需求变更的必然

我的理解,上面那段话告诉我们——需求、客户(开发者能接触的客户)、开发者是一个三极世界。这三极的沟通是很不容易的,让我们看看一般的需求调研的场景,客户向我们滔滔不绝的描述需求,开发者听得头晕脑胀,但又不得不根据这些来理解需求,有的时候我们也会派好几拨人轮番折腾客户,这样客户也晕头转向,有时巴不得赶快调研结束。

这样的需求调研像透过布满小水珠的玻璃看世界一样,即使能够看清轮廓,但细节的丢失在所难免,有的时候因为丢失这些,你把女的看成男的,活的看成死的。之所以这样,有下列这些原因:

  1. 客户对需求进行了过滤。有的时候是因为他对需求的理解不准确,因为和我们沟通的常常是信息中心的人,他们对需求的理解一般比不上业务人员;有的时候是因为他是某一个部门的人员,他仅仅会以他的视角来描述需求,财务人员的视角和销售人员一定有所不同,一个高管的视角和一个普通人员也一定不同。

  2. 开发者对需求的理解偏差。偏差分为两种:一是开发者团队的偏差,由于缺乏知识,我们对有的需求理解错了。二是开发团队中内部的偏差。比如有的公司,有专门的需求调研人员负责需求,他们水平较高,比较专业,可是他们往往同时做好几个项目,所以在调研完成后,他们便不在团队中,这样偏差便难免。还有些时候内部的沟通、人员的更替都是造成偏差的原因。

  3. 需求本身的矛盾性和混沌性。矛盾性表现在,有的时候需求本身是矛盾的,一些业务流程是冲突的,如果我们及时不能发现它们,取舍它们,在项目后期,这种大的需求变更将如期而至;混沌表现在,很多的时候,用户希望通过软件来提高他们的管理水平,这种情况下他们的需求往往是不够清楚的,虽然可以从业务流程出发,可是用户通过使用软件,总能发现许多可以改进的地方,这样源源不断的需求变更就来了。

由此可见,在这样的三极世界,需求变更是必然的。

posted on 2005-12-29 11:10 microsheen 阅读(373) 评论(10) 编辑 收藏 收藏至365Key 所属分类: 其他



2005-12-29 12:16 | 听棠.NET

支持!!很有道理。需求无止

2005-12-29 12:36 | 小陆

需求变化还需要这么多原因吗,需求本身就在变——与任何人的思想无关。
看看我们身边习以为常的东西,5年前有很多是根本想不到的。

2005-12-29 12:46 | microsheen

你说的对,的确需求本身就是变化的。只是我觉得,除此以外还有很多因素。比如:对于一个需求,客户今天叫你做成a,明天叫你坐成b,后天说还是a吧,这样的情况,你烦不烦呢,我想有时真正的需求其实一直没变,就像我们一直认识的这个世界一样,一些规律一直没变,只是有时我们看的不够深入,有时我们只看到了一个方面。

2005-12-29 13:29 | kid_li

我个人认为,需求的变动主要来源于两方面,一个是用户,一个是设计人员和开发人员
现在在国内,系统的概念并不深入人心。记得我原来的一个老板说的一段话。系统就像一只枪管,是用来规范子弹的行进路线。系统是用来规范使用者的行为。
首先用户在确定要作系统前他也许根本就不知道他应该用系统完成什么工作,他们的想法大部分是由希望系统在有限的界面下什么都能做,有想界面操作不是很复杂。这时问题就出现了。开始做的时候,他们什么都要,但是系统成型了,又觉得是用不简便。又把很多东西去掉了。
其次问题可能出现在设计人员和开发人员身上,有时设计人员对用户的需求了解的不深入和开发人员对设计人员描述的误解。记得有位同事说过这样一句话。要深入了解用户的需求,就要把自己当作他们的一员,和他们工作,向他们所想。当然这样需要很多时间很多精力,有时候工期又卡的很紧。
不过我的一个老师曾跟我说过:“从客观上讲,需求是不变的,变化的只是人们对需求的理解”。想想也不无道理。
现在有时觉得需求的变动使开发过程变成一种恶性循环。明明需求未定,但是工期所迫,就要开始开发,致使开发第一版的时间大大加长,第一版迟迟不能定版。然后又开始占用测试的时间,以至于软件质量的下降。
我想,随着软件系统概念在人们心中的深入,这种现状会慢慢改变的。也许我们不能改变客户,但是我们可以加强我们对需求的理解能力。
以上仅是个人观点

2005-12-29 14:04 | microsheen

to kid_li:
赞同,非常有道理!

2005-12-29 15:16 | 锡山飞狐

怎么说还是比不上《探索需求》这本大作中的说明。

2005-12-29 19:04 | zero

这个变更在于人的理解程度,随着人的理解越来越深入,所以它是变更的。因为人的思想在变。

2005-12-29 22:01 | 小陆

不过我的一个老师曾跟我说过:“从客观上讲,需求是不变的,变化的只是人们对需求的理解”。
--------------
这个老师的话不合适。从客观上讲,需求是变化的,当然人对需求的理解也是变化的。需求就是变化的温度,人对需求的理解是一支劣质温度计。温度在变,温度计又不准确,忽上忽下,这两点加在一起才是全部的变化。我们需要提高温度计的准确度,但是不能制止温度的变化。
需求是随着客户而变的,这一点不可阻挡。软件的生命周期就是这个软件能够适应需求变化的时间,当一个软件无法再升级,适应需求的变化,就是他的生命结束的时候。
开发者有时候需要让客户确定他们的需求,这是需要的。但是这并不是要阻挡需求的变化,而是要结合实际情况,确定一个实际的目标,这是管理的需要。
客户不懂电脑,这很正常。开发者要引导客户,根据客户的预算制定范围和步骤,不能有求必应,也不应当一概拒绝。学会站在客户的角度考虑问题。

2005-12-29 22:13 | jiniboy

需求变更肯定是必然了,可现在的关键是,谁能提出成功的解决方案才是啊

2005-12-29 23:18 | microsheen

to jiniboy:
以我之见,答案就在需求变更的原因里。如果能够明晰变更的根本原因,那么我们就可能可以根据这些原则,在实际项目中,找出变更的风险,然后有针对性的制定方法来避免。当然说起来容易,做起来难,但不管如何,我们能够把这诸多变化了然于胸,我们能预料变化,而不是被变化所控制,我想这就足够了!

Contributors: FHL