本文介绍了需求管理的必要性,并介绍了控制需求渐变的一些方法。
软件需求是整个软件项目的最关键的一个输入,和传统的生产企业相比较,软件的需求具有模糊性、不确定性、变化性和主观性的特点,他不像生产汽车、电脑等硬件的需求,是有形的、客观的、可描述的、可检测的,软件需求是软件项目最难把握的问题,他的复杂性体现在以下方面:
需求的描述问题
一个已经进入了编码后期阶段的项目,该项目已经换过2次项目经理了,这是第3次更换项目经理,用户方的IT部经理找抱怨:“我已经是第3次来给你们讲补货申请的处理规则了!”。我只能表示抱歉,因为我无法找到原来的需求描述,这是一个变更的需求,前任的项目经理讲他只是将当时与用户交流的需求记到2页草稿纸上,不幸的是,那2页珍贵的手稿现在已经找不到了!更不幸的是,该IT部经理是在转述业务部门的需求,当软件开发完毕后,业务部门讲“这不是我们最初给IT部反映的需求,我们说的不是这样的!”。缺少正式的完整的需求文档浪费了大量的人力物力,但是有了需求文档又出现了新的问题。曾经有多个项目经理抱怨,在用户方进行的需求评审会完全是走形式,因为用户根本不去听他读那上百页的需求文档。不同层次的客户(用户)关心的问题是不一样的,想要每个客户都成为需求专家是不现实的。
需求的完备程度问题
需求如何做到没有遗漏?如何准确划定系统的范围?这确实是一个两难问题,稍微大一点的系统要想穷举需求几乎是不可能的,每次开需求评审会时,总会冒出新的需求,以至于系统没有一个准确的范围界定。即使是这样,系统还是要开发,没办法,系统的范围还要硬性的划定一个,从而建立一个基线。
需求开发的工期问题
在需求上花费了大量的时间(而不是人*工时,因为需求阶段人多了也没有作用),客户、软件公司是否能够忍受?为了确保需求的正确性,完备性,项目经理往往坚持要在需求阶段花费大量的时间,但是客户与公司的高层领导却会为项目迟迟看不到实际可运行的软件担心不已!他们往往会逼迫项目组尽快往前推进,而项目组的成员往往也会为系统复杂的善变的需求折腾的筋疲力尽,他们也希望尽快结束此阶段。
需求的细致程度问题
需求到底描述到多细,才算可以结束了?仁者见仁,智者见智,并没有定论,如果时间允许,要想细总可以细下去的。但是,需求的周期越长,可能的变化越多,对设计的限制越严格,对需求的共性提取要求越高,所以只要大家(客户、用户、需求分析人员、设计人员、测试人员)认为描述清楚了,就可以进入设计阶段了。
需求的变化问题
在软件开发过程中如果只有一条真理的话,那一定是:需求的变化是永恒的,需求不可能是完备的。软件开发的过程实际上是同变化做斗争的过程,需求的变更不一定是坏事,也有可能是好事,是商业机会,对市场敏感的人可以从需求的变化中发现市场机会。
需求变化的原因很多,如:
·一开始没有识别全,需要增加需求;
·业务发生了变化,需求必须变化;
·需求错误;
·需求不清楚;
需求的变化问题是每个开发人员、每个项目经理都遇到的问题,也是最头痛的问题,一旦发生了需求变化,你不得不来修改你的设计、重写你的代码、修改你的测试用例、调整你的项目计划等等,需求的变化好比是万恶之源,为项目的正常的进展带来不尽的麻烦,怎么办?管理它!使需求在受控的状态下发生变化,而不是随意变化,需求管理就是要按照标准的流程来控制需求的变化。
难题随之而来,需求中的变化一般不是突发的革命性的变化,最常见的是“项目需求的渐变”(ProjectScopeCreep)问题,这种渐变很可能是客户与开发方都没有意识到的,当达到一定层度时,双方才蓦然回首,发现已经物是人非,换了一番天地。