编辑导读:产品经理每天都在与需求打交道,《软件需求工程》是产品经理的必修课(www.waom.cn)。本文是针对新人产品经理的简介性文章,目的是让产品经理在开始需求分析工作之前,对软件需求的相关常识有所理解。希望文章对你有帮助。
一、需求工程
需求分析的重要性毋庸置疑。在20世纪80年代,逐步形成了软件工程的子学科——软件需求工程。90年代后,需求工程成为软件界研究的重点之一。从1993年起,每两年举办一次需求工程国际研讨会(ISRE);1994年起,每两年举办一次需求工程国际会议(ICRE)。一些关于需求工程的工作小组相继成立,使需求工程的研究得到了迅速进展。
1.1 需求的定义
IEEE软件工程标准词汇对需求的定义:
业界对需求的通俗解释 :
需要说明的是:并没有一个清晰的、无二义的“需求”术语定义存在。真实的“需求”实际上在人们的脑海中,甚至在脑海深处自己都不知道。
“任何文档形式的需求(比如:需求规格说明书)都只是一个模型/一种叙述。”
——Lawrence 1998
我们需要确保的是所有项目风险承担者(stakeholders,干系人)在描述需求的文字的理解上务必达成共识。
1.2 需求的三个层次
业务需求和用户需求都是用通俗语言描述的,即用户能看懂的语言;产品需求是用技术语言描述的,是开发人员能看懂的语言。用户和开发人员是在用不同的视角观察需求的,他们看到的内容是不一样的。就软件而言,这里的产品需求就是软件需求。
这样的解释可能还不容易理解,我来举个“咖啡店新老板要更换定制咖啡杯”的例子。
业务需求:
咖啡店老板要订做一种咖啡杯。
找高层用户调查和确认需求是一件痛苦的事,因为他们不关注需求具体内容,甚至常常不知道具体需求,他们关注的是“高屋建瓴”的比较务虚的内容,例如:咖啡杯要好用、要漂亮之类的。
真正去调研需求,需要先识别出产品的最终用户群,选出用户代表,对用户代表进行调研。这里的用户代表为:消费者,喝咖啡;服务员,端咖啡;洗碗工,洗杯子。针对消费者调研可以采用问卷调查的方式来获取用户需求;针对服务员和洗碗工可以采用用户访谈的方式来获取用户需求。
用户需求:
这样的用户需求似乎很清楚了,但是你得明白这只是针对用户侧,对开发人员来说还是不清楚,因为这是自然语言描述的内容,不是技术语言描述的内容,开发人员无法针对此开展工作。
你还需要把以上内容翻译成为技术语言描述的产品需求:
拿到这样的产品需求,开发人员就可以开展工作了:
这就是需求的三个层次:高层用户关注业务目标的实现,最终用户关注业务执行的效率和使用体验,开发人员关注产品需求是否准确和清晰。
产品经理就比较惨了,需要从多种角度去描述需求:高层用户视角的需求,即市场需求文档MRD;最终用户视角的需求,即业务需求文档BRD;开发人员视角的需求,即产品需求文档PRD(或软件需求文档SRS)。
“需求”,这是所有人都可以说上几句的话题。但最专业的,还是产品经理描述的需求,这正是产品经理的价值所在。
1.3 需求工程RE
应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科,即需求工程。需求工程通过合适的工具和记号系统地描述待开发系统及其行为特征和相关约束,形成需求文档,并对用户不断变化的需求演进给予支持。
通俗地说,需求工程就是把工程方法引入到需求领域,用工程方法开发清晰的、一致的,没有冲突、重叠和遗漏的需求,用工程方法来管理需求和控制变更。
1.4 软件需求工程SRE
软件工程的子学科,一门分析并记录软件需求的学科,它把系统需求分解成一些主要的子系统和任务,把这些子系统或任务分配给软件,并通过一系列重复的分析、设计、比较研究、原型开发过程把这些系统需求转换成软件的需求描述和一些性能参数。
需求工程是系统工程和软件工程的分支,分为系统需求工程(针对由软硬件共同组成的整个系统)和软件需求工程(专门针对纯软件部分)。我们都知道软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。软件开发的最终目的是生产出满足客户需求的软件产品,满足客户需求是软件开发的本质。
1.5 为什么有软件需求工程
软件需求是软件开发中的关键问题,没有需求就没有软件。
开发软件系统最困难的部分就是准确说明开发什么。最困难的概念性工作是编写出详细的需求,包括所有面向用户、面向机器或其他软件系统的接口,此工作一旦失误,将会带来极大的危害,修改也极其困难。
——Frederick P. Brooks,《No Silver Bullet》
备注:Frederick P. Brooks,60年代初只有29岁时就主持了被称为人类从原子能时代进入信息时代标志的IBM/360系列计算机的开发工作,取得辉煌成功,名噪一时。他作为硬件和软件的双重专家和出色的教育家始终活跃在计算机舞台上,在计算机技术的诸多领域中都做出了巨大的贡献,直到69岁才获得迟来的荣誉——1999年的图灵奖。
需求是软件项目成功的核心,良好的需求可以减少开发后期的返工和整个维护阶段的工作,做好需求等于项目成功了一半。
1.6 需求沟通是如此困难
需求是以交流为核心的工作,如果在开发过程的各个环节缺乏交流或交流不恰当,就会导致下图(如果学计算机,你必定见过此图)的效果。
很明显,项目开始时客户也不知道真实的需求,他表述的只是他理解的需求(小孩曾经给他说过,但显然他并没有认真聆听)。项目经理没有认真调研需求,他甚至根本不知道最终用户是谁。项目经理和分析员之间,分析员和程序员之间,明显没有良好的交流和反馈。像漏斗一样,每个环节都在遗失信息;像传声筒游戏一样,每个环节都在加入自己想当然的理解。所以,最终的结果必然的天差地别!最重要的是,他们缺一个打通各个环节的产品经理。
对于产品经理,有个常识你必须知道:
用户嘴里说的,不一定是他脑子里想的。他脑子里想的,也不一定就是业务实际运行的情况。业务的现状,不一定是合理的,也许正是客户需要你帮助改进的。
所以,我们要倾听用户,但不能完全按照用户说的去做。我们要倾听多方用户代表,特别是要关注那些互相冲突、需要妥协的部分。我们不光要听用户怎么说的,还要看他怎么做的。我们要听免费用户的免费意见,更要听付费用户的付费意见。我们要听用户的意见,更要听决定付钱的客户的意见……等等,自己总结吧,自己总结的才是最适合自己的,我不想展开了。
1.7 软件需求工程框架
CMMI对软件需求的描述集中在两个PA里:需求开发RD(3级),需求管理REQM(2级)。
2.2 需求获取方法SG1 干系人的需要、期望、约束与接口得到收集并转化为客户需求。
– SP1.1 挖掘干系人对产品生命周期所有阶段的需要、期望、约束与接口。
– SP1.2 将干系人的需要、期望、约束与接口转换为划分了优先级的客户需求。
SG2 客户需求得到提炼与细化,以开发产品与产品组件需求。
– SP2.1 依据客户需求,建立并维护产品与产品组件需求。
– SP2.2 为各产品组件分配需求。
– SP2.3 功能之间(或者是对象或其它逻辑实体之间)的接口进行了识别。
SG3 需求得到分析与确认。
相比“需求获取”,我个人更喜欢“需求挖掘”这个词。因为“需求获取”让我感觉需求就是树上的果子、地里的庄稼,只要产品经理去采摘就可以了。这样的描述,未免低估和轻视了得到需求的困难。反之,“需求挖掘”让我感觉需求是地里的金子等矿藏,需要产品经理去弯腰、埋头挖掘,而且挖掘了也不一定有成果,因为你需要寻找正确的地方挖,否则只能是徒劳。另外,在很多人都挖过的地里,你只有挖得更深才可能挖到矿藏。
常见的需求挖掘方法有:客户交流、竞品分析、市场调研、问卷调查、技术引导及其他。
客户交流是最常用的需求挖掘方法。大多数情况下,用户虽然知道自己的需求,但他们并不一定能或者也不想准确表达他们的需求是什么。如果用户第一次告诉你需求就是这些了,不要轻信,继续刨根问底,直到你们都筋疲力尽。
产品经理作为一个需求分析者,所谓的聆听客户需求,指必须透过客户所提出的表面需求理解他们的真实需求,避免理解不同会带来的期望差异。尽量把客户所持的假设解释清楚,特别是那些发生冲突的部分,甚至要逐字逐句去理解,以明确客户没有表达清楚但又想加入的特性或特征。
有经验的产品经理能深入地理解客户的业务(可以提取做大量准备工作),这样他才能通过询问客户一些合适的问题(需要提前设计),从而挖掘出高价值的用户需求。
2.3 需求分析方法
需求分析方法大致分为两类:模型法和原型法,都可以从不同角度说明需求,把一些模糊的需求变得清晰,便于理解,减少返工。不管是模型,还是原型,都是用来增强自然语言描述的需求规格说明,而不是代替。
模型一般分为面向过程的模型和面向对象的模型两类。建立需求模型的分析过程,称为“需求建模”。建模的目的是把模糊的东西搞清晰,把复杂的东西搞简化,而不是把简单的东西搞复杂(这是商务人员做的事,比如:电信运营商的话费套餐)。
原型法是一种减少软件项目失败风险的技术,它可以加快开发进度,增加用户满意度,减少需求错误和用户界面缺陷。
2.4 需求建模
常用的面向过程的需求建模方法(结构化分析):
常见的面向对象的需求建模方法:
建立原型的目的是为了解决在产品开发早期需求不确定的问题,利用这些不确定来判断系统中那一部分需要建立原型和希望从用户对原型的评价中获得什么信息。其优点是能减少软件项目失败风险,加快开发进度,增加用户满意度,减少需求错误,尤其是界面错误。其风险是当用户或项目经理看到一个正在运行的原型,会以为产品即将完成。
对于发现和解决需求中的二义性,原型是一种很好的方法。关于原型,不在这里赘述了,后面会另起一文。
常用的原型设计方法:草图(手绘图)、线框图、交互原型、高保真原型。
原型法不仅是需求分析方法,同时是需求验证方法。
2.6 需求定义的方法
3.2 需求管理的方法SG 1 管理需求
– SP 1.1 理解需求
– SP 1.2 获得对需求的承诺
– SP 1.3 管理需求变更
– SP 1.4 维护需求的双向可追溯性
– SP 1.5 确保项目工作与需求间的协调一致
大师说:“没有不变的需求,世上的软件都改动过3次以上,唯一只改动过两次的软件的拥有者已经死了,死在去修改需求的路上。”
需求变更是正常的,但不加控制的需求变更是不正常的。所以,不怕需求变更,但要严格控制,要让客户知道变更的代价(影响和成本),客户在理解变更的代价后再拍板会理智很多。
需求变更的原因:客户说不清楚需求;需求自身经常变动;分析人员或客户理解有误。
需求变更控制不是为变更设置障碍,而是建立一个渠道和过滤器,保护客户和开发者双方的权益,减低变更的影响。
参考资料:
CMMI-DEV 1.3
作者:叔宝,微信公众号“叔宝说”,专注产品设计和PPT设计。
本文由 @叔宝 原创发布于人人都是产品经理,未经作者许可,禁止转载。
题图来自Pexels,基于CC0协议。