软件项目最大的风险一般都是来自于需求,需求经常变化不但会造成经常性的返工、代码质量下降,而且沉重打击目组成员和客户的信心及士气,这种情况越到后期越严重。虽然说在必要的时候我们完全有理由拒绝用户再进行需求变更,但是这样做的唯一结果就是项目失败:乙方投资打了水漂、甲方回款非常困难、项目组成员沮丧及毫无成就感。
那么需求为什么会变更?当初《需求说明书》、《系统规格说明书》都是与客户讨论并确认过的。其实我们在这样想的时候就掉进了一个巨大误区,认为客户是知道自己要什么的,至少客户中的关键人物是什么都清楚。但现实情况是很多用户对他们要什么并不清楚,有的只是像一小孩看别人有好玩的玩具自己也想要一个,最后发现做出来的东西与他们像像差距太大的时候就大哭大闹,再加上项目交付期限快到的压力大家一厢情愿认为根据客户不成熟想法随便修改几个需求应付一下就可以了,最后的结果就是没完没了的修改。
再说即使客户知道他要什么,但他们又有几个对软件开发非常了解呢,即使了解他们是否愿意花很大尽量去分析将要开发的系统?说到底我们不能把项目的核心部分(需求)寄托在客户身上,我们必须要有一套方法来保证我们开发的系统需求与客户期望的一样,包括客户的隐性期望。
学习客户行业知识
只有掌握了客户行业的知识才能听懂客户在说什么, 才能知道客户提出的需求是否合理,才能够以客户的语言阐述将要开发的系统,才能够知道哪些问题是我们正真关心的。
对同类产品进行分析
任何一个产品的开发都不是凭空想象出来的,一定是根据已经存在同类产品并结合本组织需要演变而来,对这些已经存在产品的功能、使用情况、存在问题进行总结和分析将会对挖掘客户隐形需求、风险预估、成本评估及对需求细节的掌握都是有非常大帮助的。
了解客户的组织架构,找出关键人物
我们的客户不是一个具体的人,它是一个由很多人组成的组织。我们要开发的产品不是满足一个人的要求,而是这个组织中很多人的要求,只有这些人的期望都满足了我们的项目才是成功的项目。当然我们有时不必要也不可能对没一个人进行访谈,但关键人物的想法一定要了解,关键人物不但是有权力的人,还包括在组织中有重大影响力的人、对组织需求非常了解的人。
了解客户的战略计划
因为任何一个产品的开发都是该组织战略计划下的一个子项,它整个战略是息息相关的。比如对于一个将来要大力推动网络销售的书店,必然会对网络付款、网络购书等功能非常感兴趣。客户未来的战略计划是什么?是准备扩大经营还是缩小规模,是加强网络销售的份额还是多开实体店,是要对人员素质进行优化还是保持不变等等。加强对客户未来战略计划的了解可以更好的理解需求、将来开发出来的产品也能更好符合客户要求。
了解客户对该产品的计划
客户对该产品的计划是什么?他们的计划分为几个阶段?每个阶段要达到什么目标?注意我这里说的不是开发产品的项目计划而是使用该产品产生效益的商业计划。我们要理清将来要开发的产品需要提供哪些功能、按什么样的开发进度可以与其商业计划相对应,对于无法达到其商业计划目标要及时提醒客户。
对最终使用该系统的人员进行分析与沟通
在很多客户组织中与我们项目组对接的人员并不是最终使用该系统的人员,典型比如物流、超市等行业I的T部门,特别一些转包项目。所以往往与我们对接人的想法并不是非常正确的,并且他们在转述那些系统使用人员想法的时候有意无意的加入了一些自己个人想法、有些重要信息又忘了等等,所以我们一定要想办法与系统最终使用人员进行沟通。还有一个比较重要的就是要对系统最终使用人员进行分析,这些人员计算机技能、对新系统是欢迎还是排斥、学习新技术能力等等都对将来的系统设计、系统实施产生重要影响。
知道每一条需求的目的
客户有时所说的不一定是他们想要的,只有多问为什么,了解客户的动机才能发现正真的需求。对于客户提出的需求与目的不相符的要及时提醒客户,如果自己有方案可以提供给客户参考,对于哪些目的不是非常明确的需求要尽量拒掉。
对于不可实现的需求要及时反馈给客户
如果客户提出的需求在当前技术、成本或时间内无法完成要即使提示客户,不能因为客户的强势就假装答应,那样会把项目放到了非常大的风险上。
通过使用模型、假设应用场景等方法让客户正真理解将要开发的系统
很多需求变更是因为我们与客户沟通产生了问题, 这个主要是软件的特性造成的, 再加上大部分客户对软件并不是非常了解, 如果想当然认为客户在签字确认的时候已经充分理解我们的《需求分析说明书》那是打错特错的。我们要想尽一切办法让客户正真理解我们的想法,最好能够让客户把他们理解的需求再复说一遍,对于非常难以用自然语言说清楚的需求要通过建立模型等方式让用户理解。
需要与用户保持不间断的沟通
在项目开发过程中尽量能够把我们开发成果展示给客户,对于复杂系统应该尽量划分几个阶段,每个阶段发布一个版本让客户试运行。不要等到测试完成,交付时候才让客户看到,因为那样风险是非常巨大的。
要充分了解将来系统运行的软硬件环境
将来的系统要运行在win xp上、win 2007还是linux上?硬件成本是否有限制,是用当前已经存在的硬件环境,还是要重新购买?不同的软硬件环境对软件开发影响是巨大的,包括架构体系、数据库设计、甚至编码所使用的API接口。如果软硬件环境没有弄清楚则在项目实施的时候会有很大障碍。
客户中的个人期望不能代表组织的需求
在客户组织中有的人员从自身利益出发提出一些个人期望,比如在开发公路收费系统时候可能就有人提出留个后门之类的期望,但这个并不是整个组织的需求。对于这些期望即不能答应,也要想办法化解,处理不好会给将来系统实施带来很大麻烦。