如何进行有效的需求调研
如何进行有效的需求调研
一、需求调研概述
软件需求工程是软件工程中重要的环节,是整个软件开发过程中最基础最重要的部分,同时也是一个复杂的庞大的工程体系,本文无意对整个软件需求工程进行说明,而仅就最开始的需求调研这部分来简单说明如何进行有效的需求调研工作。
需求调研,简而言之就是和客户进行谈话沟通,把客户的想法和要求记录下来,最后整理成为《用户需求说明》,以便进行下一步的需求分析、系统设计等,正因为后面的需求分析、系统设计,乃至开发等等都以需求调研的内容为依据,那么需求调研质量的好坏直接就决定了软件系统的好坏,也即项目的成败。
通常我们一提到某个系统,感觉上应该始终就是一个东西,但其实在不同人眼里,可能是不一样的,比如按照一般软件开发过程来说,就有如下几种:
1 客户实际需要的软件
2 客户脑子里想的软件
3 调研人员调研后的软件
4 设计人员设计出来的软件
5 开发完成的软件
(这里面要注意客户实际要的软件和客户脑子里想的软件可能并不是一个东西)
如果上述中间各个过程都有理解偏差,那么很可能就出现最终开发完成的软件和客户实际需要的软件差异较大,一个失败的或者做的不好的项目,往往原因就在这里。而且还有一点,上述过程中,越往后,修改这些偏差要付出的代价就越大,直到你无法承受。那么,保证你调研出来的需求和客户实际的需求以及客户脑子里想的三者保持一致,并且这个需求在开发上是能够实现并且容易实现,就是每一个需求调研人员努力要做到的。
二、如何开展软件需求调研
1. 需求调研前的准备
1) 充分了解客户的要求,客户的业务,客户的关注重点
了解客户、项目的背景,如果事先客户给过类似的《软件初步思路》之类原始需求文档,那么首先弄懂这个文档,了解客户的目的,为什么要做这个软件,主要想解决什么问题,涉及的业务有哪些等等,这些调研准备的基础。
2) 和客户负责人沟通,确定客户需求小组成员
可能的话,了解客户的组织机构,涉及软件使用的部门,参与调研的部门和人员,客户关键人是谁等等,尽可能获得客户上层的支持,自上而下的开展需求调研会使调研工作更容易推动。客户需求小组成员要尽可能多的代表客户不同的用户层次。
3) 根据事先了解的初步用户需求,分析可能的难点在什么地方,列出这些难点。做到心中有数,并且记录前面了解需求的过程中不明白的地方,便于到现场后及时和客户沟通。
4) 编制调研计划和调研提纲
可能的话发给客户,让客户知道调研大概多长时间,需要哪些人参与,具体如何安排等等。
5) 准备调研现场用到的软硬件
2. 需求调研的进行
1) 按照计划有步骤的调研
按照事先和客户商量好的调研计划稳步进行,如果现场临时出现变化,比如参与调研的客户临时有事,或者调研的内容出现变化,那么及时和客户确定新的调研安排,列出总的调研顺序。切忌想到哪说到哪,调研内容杂乱无序,很有可能就会出现遗漏而不能及时发现。
2) 掌控调研进程,推动调研工作顺利进行
因为调研工作实际就是和客户聊天谈话,很可能就会经常跑题,越扯越远,另外客户的精力一般也容易不集中,跑神,这时候,调研人员要能够掌控整个进程,什么时候及时把客户的思路拉回到正题上,什么时候适当的聊聊其他的话题调节气氛,都需要调研人员灵活掌握,总之一个目的,尽快的推动调研工作朝前进行。
3) 认真仔细的倾听,及时的记录
仔细的倾听就是要明白客户的完整的表达,不要觉得有些你已经懂了,经常打断客户来急切表达自己的看法,每次在客户完整的把话说完再表达自己的想法。及时记录涉及客户业务、实际工作、客户想法的内容,不能以为当时听明白了就不去记录。
4) 先了解宏观需求,再了解细节需求
遵从由总到分、由粗到细、由简单到复杂的调研过程,无论是让客户介绍他们的业务还是谈他们的想法,都要先从总的大的方面说起,然后再是细节。如果直接进入细节,往往并不能很好的抓住他的要点,不能把握总体的要求。
5) 挖掘客户最原始的需求,而不是仅仅只是记录
这点非常重要!
客户跟你说的内容只是他的一个理解,他的理解可能也有偏差,而且现在有的客户因为对软件比较了解,往往告诉你的不是需求,而是他的设计思路,比如直接跟你说“你做个这样的功能,我一点就能出来什么什么”,对我们来说,就需要多问几个问什么,“你为什么会这样做呢?”“你想看的结果是什么呢?目的是什么呢”等等,一定要想办法了解到客户没有经过转化的最原始的需求,因为往往很多时候客户告诉你的他的想法并不能实现他原本的目的,而他以为能实现,所以就直接告诉你想法。需求调研人员如果没有了解到最原始的需求而只是把客户的想法记录下来,那么就会出现做出来的东西解决不了客户实际的问题。
这个过程往往同时也能够帮助我们缩小需求范围,比如客户开始想的好好的一些功能,但是在我们深入分析思考后发现因为存在某些问题这些功能无法实现,或者即使实现也会大幅增加工作量比开始想象的复杂的多,那么在这样一个基础上说服客户放弃这个想法。这也是在合同额确定的情况下砍功能的一种方式。
6) 引导客户的潜在需求
和上一点一样,这一点也同样最为重要!
大部分客户对自己要做成一个什么样的软件并没有一个完整的规划或者想法,很多时候都是在谈的过程中逐步的清晰。调研的过程也不会是客户滔滔不绝的谈他的想法,而是靠你一点点的去问客户,那么到底问什么,就需要你掌握,除了不懂的业务以外,重要的是在已经了解的客户需求的基础上分析、扩展,带出其他潜在的客户没有说出来的需求。比如说客户想做一个领用办公用品的功能,开始想的很简单,填一个领用申请,一审批就行了,但是经过仔细分析后,就会衍生出“物品管理”“类别管理”“库存管理”等潜在需求。如果不考虑这些,那么无论是你还是客户都会认为这个功能很简单,那么对完成时间和工作量的估计都会出现问题。防止出现在做系统设计甚至是开发时才发现“当时没想到这个地方没那么简单,还需要再跟客户沟通一下”这种情况。
这里面,潜在需求如果细化的话还分为两个部分:1)系统必须的;2)系统不必须的。“必须的”就是像上面例子一样,如果不挖掘潜在需求,客户已经提出的需求就无法实现,就是把看上去简单的复杂问题,实际上他还是个复杂问题。“不必须的”,就是对已经提出的客户需求影响不大,相对独立,相当于再和客户沟通的过程中又了解到的新的需求。对这部分,就需要根据调研时项目的合同额是否确定,工作量大小,和客户的关系如何等等有需求调研人员灵活掌握,可以提也可以不提。但是提出就肯定会增加工作量和系统的复杂度。
7) 规避客户不合理的要求和较难实现的要求
调研的过程中,不可避免的会出现客户提出一些我们现有条件下根本无法实现或者即使实现也非常困难的要求。这种情况就需要需求调研人员的聪明的头脑和快速反应能力,同时也需要调研人员的良好的沟通技巧,要能巧妙地说服客户放弃这种方式并且还要客户能够理解,而不致认为你在逃避问题不想解决。一般可以采取这些方式:1)客户提出这些要求后能马上了解客户提出这个要求的真实目的,然后快速思考出另外的简单的方式同样能实现客户的这个目的。这是最好的方式;2)必要时直接告诉客户无法实现并且给出合理的理由,特别是在客户说某某系统已经实现了这个方式时,比如他们用的是什么什么平台支持,这个平台支持需要另外付费等等;3)直接告诉客户虽然能实现,但是需要很大的精力和成本,而这个可能是客户无法承受的,当然你一定要能说出客户听起来合理的理由。
这些都不是绝对的,需要调研人员丰富的软件开发经验和灵活的头脑较好的表达能力临场发挥。
8) 注意需求调研的覆盖面,防止需求不具代表性
主要指防止提供需求的客户方面只有一个人,使实际软件需求变成个人需求。受制于这个人的所处层次,以及掌握的业务知识,与领导意图的符合度等等限制,给我们带来较大的需求风险,稍有不慎就会给后面软件需求变更埋下伏笔。避免这种风险,一方面调研人员依据以往的经验和业务知识自己判断客户提出的需求是否合适,有没有过于强烈的个人特征等等,另一方面,在调研开展的最初想办法和客户的上层明确类似风险的存在,让客户领导在人员安排上避免这种情况,同时也是让他明白会存在这种情况,以后一旦真的出现,客户也不会说是我们的责任。
9) 及时总结整理已经完成的调研内容
每次调研回去后,及时把白天调研的内容及时整理出来,当时没来的急记的内容及时补记,同时再深入的分析、过一遍,确保有没有遗漏的问题,列出所有的疑问待到第二天调研时询问客户。
三、需求调研人员需要什么样的能力和条件?
1. 熟悉客户业务
对于客户主要想让软件来解决他哪一部分的业务,事先最好能通过一些手段尽可能多的了解。即使事先并不能非常深入,那么也要利用调研的机会尽可能多的了解,调研完成后,没有理由你不是个半个业务专家。
2. 熟悉软件开发
调研的过程中一方面你要随时对客户提出的要求的合理性、难易性作出判断,同时你还要在客户想法不成熟时提供给客户好的实现方式,这一切都需求你对软件开发非常熟悉,很多时候,需求调研人员至少曾经是一个优秀的软件开发人员。因为随着用户使用电脑的增多,对各种软件有一定的了解,往往会直接提出一些功能要求,比如在任务发起时提出需要给多人发送,那么对这样的一个功能会对我们的设计和开发有什么样的影响,那就需要现场需求调研人员根据自己的经验作出判断,然后思考出有利于自己的方式并巧妙的说服客户接受。
3. 头脑聪明,反应敏捷
对客户表达的内容要能很快的、充分的理解,并且能迅速的思考及时应对。同时因为客户的水平也有高低,特别是对那些不善表达的客户,更需要你从不清楚的表达中分析出实质。
比如对于税务系统预警的调研,客户本身事先并没有完善的预警规则,很多都是调研现场临时思考出来的,那么这样的一个规则敲定后,你敢拿这样的内容去设计开发吗?那么就需要调研人员根据掌握的业务知识,在现场时及时根据客户提出规则迅速的在脑子里发散、扩展、分析、思考,找出规则是否还有漏洞,和客户继续深入探讨下去。
4. 善于表达,思路清晰
能够把你的想法清晰的传达给客户,特别在一些难以理解的地方,能够灵活的用各种可能的方式让客户明白你的意图。当你在解释半天客户都没有明白的时候,一定要想想你在什么地方没有解释清楚了。
5. 善于观察,精于总结
和客户打交道的过程中,善于观察每个细节,分析这些细节是否对你的工作有影响,每次阶段性调研完成后及时总结,来帮助更好的进行下一次的调研。比如在调研间隙观察客户的实际工作内容和工作流程,攀谈了解相关情况,观察客户是否还在使用其他系统,了解其他系统的情况;观察客户群体中的关键人物;观察客户各有什么爱好、特点等等。当天调研完成后,及时回顾整理一天的调研内容,筛选出疑问,便于第二天调研时向客户了解清楚。
6. 善于记录,文笔流畅
我一直强调,在客户现场,把你听到的看到的能记多少就记多少,尽可能的多记,,特别是客户在讲述自己实际的工作业务工作内容和方法等时,不要管他回去以后有没有用,千万不能因为当时听明白了就不记了,即使一时没有时间,那么事后也要及时补记下来。这些一手材料里有很多都是能够帮助你和没有参加调研的人理解业务需求的内容。防止出现,1)当时听明白了但没记录的内容,回来后某些细节又忘了;2)当时虽然记了,但写的内容太简单,回来后看当时记得内容已经想不起来是怎么回事了。
最后,
个人对需求调研的一点感受:
需求调研,特别是合同额已经确定的项目的需求调研,就像外交一样,实际上是一种策略艺术,它是在和客户相互尊重、平等互利的基础上,不卑不亢的去交流沟通,守住自己的底线,尽可能的争取有利于自己的条件,在完成任务的同时,还能赢得客户的理解和尊重。