需求管理 需求管理这个词有两个部分:需求和管理。先说需求,需求是什么,需求就是你要买衣服时要对售货员说你要多大的衣服。需求很难说清楚,比你搞不清楚自己的尺码还难,因为售货员会看看你的身材,拿出一件衣服让你试一下,不合适可以不给钱。但是软件不行,你会说我先给你开发个软件给你试一下,不好不用给钱吗,我反正不会。需求会变,如果你胖了或是瘦了,发现原来的衣服不能穿了,你会再买一件,如果再买一件衣服需要花掉你10000块钱,你怎么办?而由于软件不合适更换软件的费用是非常惊人的。 人类的大部分的工程都会有比较严格的计划和质量保证,例如建筑。但是工程一旦落实到软件开发上的时候,大家就会变得“大大咧咧”起来。软件项目中百分之四十至百分之六十的问题都是在需求分析阶段埋下的“祸根”(L effingwell 1997)。如果你对建成的桥不满意,要求设计师把桥转90度,他一定会认为你疯了,但是软件开发中经常都有发生要求开发者更换操作系统的事情,要知道,这二者对项目而言的工程量可没有太大的差别。 所以呢,正是由于需求的难表述性和易变性,所以需求需要有科学的分析方法和管理方法,这里分析方法不是本文的重点。 需求的特点 需求的特点刚才已经提到了,就是难以表述和易变。可是,为什么需求会有这种的特点呢? 在计算机产生的早期,计算机只是少数人的“宠物”,这些人个个学富五车,才高八斗。他们可以用010101之类的语言直接操纵计算机,他们也乐此不疲,那时候计算机对人类的影响还不是很大。随着计算机硬件越来越快,越来越小,软件也发生了翻天覆地的变化。计算机变成了社会不可或缺的一种工具。但是,计算机的文化,计算家的理念一直都没有变化,今天的程序员和几十年前的程序员骨子里还是一样的。他们喜欢操纵计算机,思考都和计算机一样,运用逻辑思维,甚至在他的思想中只有0和1。这对于感性的普通人来说无法接受。可是,普通人使用的软件正是这些拥有逻辑思维的人设计制造的。程序员的思维贯穿了软件设计的全过程,同样也贯穿了需求过程,而普通人没有这方面的思维,他们觉得和程序员打交道极为困难,在程序员的眼里,世间的一切都是有清楚的界限的:0和1。需求过程中,双方往往发现要么双方不能达成共识,要么双方达成共识的内容其实有相当大的出入。所以在需求过程中经常出现用户讲不清楚,讲不完全需求的情况。更要命的是,在需求阶段就又问题的需求,如果在软件后期发现,那么改正的费用是非常可怕的。有时候,甚至会超出项目本身的费用。