在软件开发过程中需求的重要性无需长篇累牍来描述,可以说在软件开发过程中所有的一切都将围绕需求展开。那么在软件开发过程有效地进行需求管理,将对软件最终的成功与否起到至关重要的作用。问题的关键是:我们如何做好需求管理?
首先,让我们一起来共同认识一下“需求”。“需求”-软件开发时应满足的功能与非功能性要求(维基百科中关于软件需求的定义)。就我个人而言,我所认为的需求就是人们为了满足某种目标而产生的某种欲望或希望,有了目标就产生了需要,有了需要就提出了诸多要求来实现目标,需求就这样不断丰满起来,宛如少女成长一般逐渐丰富起来。那么需求管理则是为了更好地对需求进行规范处理,通过有意识地梳理不同组织、人物与类型的需求,从而形成完整的需求体系结构,基于体系化的管理理念实现对分散、凌乱的需求进行管理,帮助软件开发有序开展工作,最终取得软件产品或项目的成功。需求管理从理论上来讲主要分为三个层次:采集、分析与管理。其中采集阶段希望通过有效地沟通手段,了解到用户内心的想法与要求;而分析阶段则侧重对用户的要求与想法进行深层次的剖析,强调探究要求的动机与背后的故事,希望运用分析手段有效地实现对需求控制与驾奴;那么管理则强调以科学、理论及高效的管理理念,实现对需求全生命周期的控制,形成完整的需求血统分析结构,重点在对需求进行“管”,防止需求在发展过程中迷失自我以控制软件开发风险。
在业界诸多的需求管理理念与方法论层面习惯将需求划分为:业务需求、用户(产品)需求、功能需求等三大维度。业务需求强调对业务生产环境进行全面而细致的分析与理解,简而言之就是分析“做什么”阶段;产品需求则侧重于对业务需求结合实际情况总结与梳理出相应的信息化解决办法,可以理解为"怎么做"阶段;而功能需求则重在将产品需求结合具体信息化技术进行“落地”,通过将需求以形象化、立体化、真实化地功能与手段呈现在系统中,此阶段可以理解为“如何做”阶段。“做什么”侧重于对事情的前因后果分析,“怎么做”考验的是需求分析人员提炼总结能力,而“如何做”则对需求分析人员提出了更高的要求,它全面考查分析人员对信息架构、用户体验与业务流程等一系列素质及素养。所以还是那句谷话“站着说话不腰痛”,事情说说简单,做起来却未必能够如你所愿。
前面我们对需求的不同维度进行了一个简短的分析与了解,那么回到我们的核心问题上来,即“需求分析与管理,我到底该怎么来开展呢!”,其实这个问题本身就是一个伪命题,因为需求分析与管理是一门系统的学科,融合了管理、咨询、统计、数学等多方面的知识,对人员素质要求也相对较高。有人会问“这么说起来,那需求管理我们还能不能搞定它呢!”,其实个人理解事情总有它的复杂性,我们不可能将事情考虑得面面俱到,只要我们遵循2/8原则,再辅助运用好一些相应的方法与技巧,逐步、逐层地推进需求分析与管理工作,一旦事情顺畅通达起来,自然而然就会得心应手。那下面我们就一起来分享个人对需求分析与管理方面的一些浅显的看法与理解,将主要从需求方法论、需求管理理念与需求分析常见问题几个层面来进行简单地描述,与大家一起共同学习成长。具体内容如下所述
(一)需求方法论
管理学中有一种重要的观点便是"方法比什么都重要",同时在我们实际工作中无数次经历证明这一定律确实管用。在我们进行需求分析工作时产生的很多困境往往是由于我们没有通过正确的方法去做事,缺少了明确的方向指引,导致事情到最后越来越复杂,慢慢地失控了!那在需求分析与管理过程中,具体有哪些科学、先进的方法论来帮助我们,个人简单总结大概以下几种类型:
a.面向对象分析方法论(RUP)
b.面向过程分析方法论(数据流等)
c.敏捷需求分析管理
d.Zachman框架
上述方法论看起来名头都很大,让人感觉无法驾驭!不用担心,那就用我们用比较形象的语言来对它进行简单的归纳与总结吧!RUP需求方法论,我们用“五维三级法”来对它表述,此种方法强调的是从人、事、物、因、规等五个维度对需求涉及业务进行深入分析后得出系统“业务需求”,然后采用用例场景描述与细化的技术,将业务场景进行形象化表达、总结与提练,形成系统的“产品需求”,在上述二种需求分析到位后才逐渐推进“功能需求”的分析与设计,整体上分为三个阶段完成系统的需求分析工作。而敏捷需求分析则强调以“用户故事”的方式进行需求分析组织工作,配合以用例形象化、立体化、显性化的手段,以“迭代”方式分层分阶段并配合部分轻量级文档推进需求工作稳步前进。而Zachman框架大家可能比较陌生,个人对它的总结就是通过描述“什么人在什么时间、什么地点通过运用什么样的行为与数据达到什么样的动机”的方式来进行需求分析工作,从“组织、位置、时间、行为、动机、数据”等六个维度进行需求分析,并结合“系统分析师、系统客户、架构师、设计师、开发人员”等角色视图层面去形成一个立体的需求分析网络结构,全面覆盖系统需求内容。
那是不是我们在实际工作中就需要运用到上述所有的方法论来指导工作呢!不然,个人建议结合项目实际情况来选择合适的需求分析方法论来指导工作。对“业务流程贯穿建设过程、传统企业信息化”等类型项目,则建议使用"五维三级法"来指导工作。而对“咨询式、BI类”项目更多建议采用“敏捷需求分析”方法来引导。具体选择哪种方法还需要结合具体实际情况综合而定,决定权在你手中,我们只选对的,不选牛的。
(二)需求管理理念
“磨刀不误砍柴功”,前面我们选择好了合适的需求方法论来指导我们开展需求工作。但刚有方法论似乎还少点什么东西?对,我们少的就是需求管理的“理念”。在个人看来需求管理的核心信念应该是"关注细节",不论是需求前的通过“文档考古”来熟悉了解行业背景与专业术语也好,还是进行用户访谈、调查问卷、数据分析等工作来强化需求分析结果,都离不开一个“细”字,没有大量细致、认真的工作进行积累与铺垫是很难出色地完成好需求分析与管理工作。同时需求管理工作个人认为可以从“需求内容有没有、需求分析质量几何、需求结果传播控制”等三个阶段进行重点关注,我们只有先解决了“有”的问题,才能来重点关注“高质量”内容,最后只有通过强有力的手段来控制需求“不失真”地进行传播,最终才能确保系统建设达到客户的预期。
(三)需求分析常见问题
前面我们讲了一大堆的理论与看法,暂时让我们回归到现实过程中来吧! 在大家的日常需求分析过程中,常常会出现一些问题或疑惹,它们干扰我们高效、优质地完成需求分析工作内容,那我们该怎么办呢!先让我们来看看到底是何方神圣在阻止我们,具体问题如下:
a.在与客户沟通过程中存在盲点,我们该怎么解决呢?
还是那句老话,“细节决定成败”,对于此类问题我们必须从需求源头、过程管控、事后复检几个方面来强化工作内容!解决上述问题我们的建议是:
b.怎么样才能做好一次用户访谈呢? 用户访谈该注意哪些方面工作?
我们可以从以下几点开始着手解决问题
1.进行资料收集与前期研究工作,了解相关业务知识;
2.了解客户组织架构并进行用户访谈样本选择;
3.制定明确的用户访谈计划,确定用户访谈的对象、时间与地点;
4.访谈前与访谈对象进行沟通共同确定访谈问题大纲;
5.确定访谈需要达到的目标,并紧紧围绕目标进行问题设计,并对相关问题有自己的理解;
6.在访谈过程中以听为主,避免引导客户思维;
同样在进行访谈过程中,还需要注意一些事项,具体见下图:
c.在需求采集过程, 客户配合度不高,工作开展不顺利?
那么就让我们从对客户组织架构进行全面了解,对系统用户进行“画象”,对“画象”用户进行分析,获取其中部分用户支持;经过对同类解决方案的分析,提供初步的需求产出物交由客户签字确认与商务合作加大客情关系投入力度,录求客户高层领导的支持;分析客户不配合原因,有针对性地进行需求采集工作等内容上着手解决吧!
d.在需求采集过程, 客户只提意见,其它一概回答不清楚、不明白?
这种客户属于“极品”级,那么我们就以迭代的方式开展需求采集工作;适当采用敏捷方法进行需求获取;结合系统原型 法激发客户需求;以咨询方式式对客户思维与需求进行引导去开展工作,希望能够解决一些问题。
e.在需求采集过程, 客户与用户不一样,该怎么办?
很多系统都存在此类问题,个人建议对于此种情况以客户意见为主,尊重用户诉求,注重用户体验工作;在资源许可的情况下,组织用户大会,听取多方面的声音;在必要的前题条件下,对用户进行电话访谈或发放用户调查问卷。