艾伟也谈项目管理,解读敏捷需求分析五大关键因素

  大多数学计算机语言的人都会有过这样的感受,过去一直认为编程和架构是整个软件生命周期里最了不起的部分,但实际工作后才会发现在商业产品里,需求分析才是一个商业软件成功与否的关键。

  放眼望去,在当今软件工程领域出现的许多问题,诸如缺陷及资源运用不当,都源于需求的不清晰,甚至有软件人戏称:“需求变更乃万恶之源”,一时也获得了颇多响应。时至如今,业务IT间需求分析过程中存在的问题主要有哪些?什么是敏捷需求分析?产品级和项目级需求有何异同?敏捷需求分析方法论中的五大关键点是什么?就以上热点话题,雅各布森中国区总经理吴穹分享了他的看法。

  三大症状

  在吴穹看来,两份需求、合同式验证、产品需求缺失成为了当前需求沟通的三大症结。

  两份需求——用户(业务)需求和软件需求。用户需求由不熟悉IT的业务人员完成,大多归于天马行空的意识流,基本上是想起什么写什么。而软件需求由IT人员编写,经过技术思维的过滤、梳理、增删,包含进了算法、数据库设计、架构之类的技术专业词汇,业务人员往往已不知文档内所云。

  合同式验证——业务人员和技术人员企图在沟通后以合同形式将需求固化并且确定下来,而没有充分考虑到软件开发过程中可能出现的需求变更。

  产品需求缺失——项目是片段,产品是总量,两者的关系在于项目其实就是一个不断完善产品的过程。由于国内PMP(ProjectManagement Professional)和项目管理流行,更多IT需求都是以项目形式存在,而往往忽视了产品需求的积累,导致最后的结果多是项目(需求)很多,但产品需求缺失。

  项目级和产品级需求的具体区别,如果放在几年或十多年前并不明显,对于全新产品而言,项目(需求)=产品(需求)。随着时间推移,两者的区分逐步明朗,由于全新项目越来越少,更多的需求都是在维护和升级老的产品。以咖啡机为例,从基本型升级到1.1版,或许是加入一个按钮。此时和客户沟通的时候就需要引导客户想清楚,需要的是项目级还是产品级的需求,是做整个咖啡机的需求还是仅仅只是新添按钮的需求。如果未来再做1.2版,继续添按钮,这时候的需求又该如何写?新按钮的需求,然后和以前的按钮有些变化。如果不能明确两种需求的差异,随着项目需求的累积,到最后会发现所有的(需求)都是片段的,都是增量而缺乏一个总的全景。

  事实上,业务IT需求造成如今的混乱状况,CMMI(Capability Maturity Model Integration,能力成熟度模型集成)和国内企业对CMMI的僵化理解可以说“功不可没”。在对“两份需求”的认识上,CMMI里有明确分项,用户需求和软件需求。但值得一提的是,其实里面并未明确要求是两份文档或由两部分人来写,而只是表示需求细化的两个阶段。遗憾的是,很多国内CMMI认证企业也并没有真正打算去了解它的内涵,只是僵化地表现出自己是否有这样的能力。

  最近接触到一些项目也出现了这样的情形,大家先做了一份用户需求,然后花费大量时间写软件需求,以满足认证的需要,但到头来软件需求根本没人看,大家都只是应付,CMMI成为了摆设。

  需求贯穿于软件开发测试全过程

  在吴穹看来,敏捷的最大贡献在于它是对整个软件工程的一次再认识。具体到敏捷需求分析领域,其实涉及到一个核心问题:是否承认(软件)需求可以在一开始就搞清楚并确定下来?敏捷的答案是No!而在传统瀑布式开发中,更多的是合同式验证的情形,大多数客户的思想基础都是基于需求最初就能确定下来的。但事实上,这在当前阶段基本属于“不可能完成的任务”,不符合软件开发本质。在敏捷需求分析中,需求应是贯穿于整个软件生命周期全过程中并在其中不断变更、迭代和完善。

  敏捷需求分析认为,需求应建立在以用例为中心的需求文档体系,采取协作式而非合同式的沟通方式之上。具体可分为五个关键点:

  用例;
  协作;
  迭代,即需求不是一次最终确定,而是先完成主要框架,再通过迭代逐步精化;
  整个过程中以分析为支撑,做需求同时也在做分析,分析模型的输出结果应跟需求分开;
  把用例分解到用户故事,在整个软件生命周期过程中来驱动开发和测试。

  业务/技术沟通频现“两份需求”

  同时还要考虑到的是,将两份需求改为一份文档,而不必死抠CMMI概念区分出用户和软件需求。首份需求稿将由SA(系统分析师)来牵头完成,负责各方协调和沟通的工作。理想的情况下,整个团队在项目开始前就应搭建完毕,包括客户、开发测试人员都参与的写作和迭代,而不是以往的由技术人员对用户进行里程碑式的教辅。通常来说,一个项目里一名SA同时对应5~9名开发人员是比较合适的。

  需求文档化与敏捷的平衡点

  至于用例和用户故事。按照敏捷大师Martin博客中的说法,两者都是组织需求的方式,只是目的不同而已,用例的目的是为了把需求描述清楚,而用户故事的目的是把需求分解成可用于迭代计划的单元。对应到产品级和项目级文档,用例是产品级,例如做咖啡机,不管有多少不同版本,有些核心功能是不改变的,这些都是产品级需求。而用户故事则是项目级,属于做完就扔的“抛弃型”。

  进一步理解的话,用户故事其实是一个或多个完整的业务场景,而用例是场景的抽象,一个用例里可以包含成百上千个场景。用户故事是基于开发思想的,不光要考虑业务,还要考虑如何实现包括工作量大小、任务分配、项目风险以及架构风险等多重因素。有人认为写用户故事是极简单的事,但在吴穹看来,现在有很多人都还在用功能点套用用户故事,显得不伦不类,而没有理解到用户故事的精髓。

  以ATM取款为例,正常流程是插卡、取钱、把钱拿走。这个看似简单的场景其实工作量很大,可以在整个流程中做一些必要的简化。有人认为既然用户故事是一个场景,那就把它变成一个场景步骤吧,于是就成了功能点。其实他们忽略了一点,用户故事还是一个简化了但还保证完整业务价值的场景。ATM取款建立用户故事会涉及哪些因素呢?取款是否需要输入密码?小额取款时能否取消密码输入的步骤?取钱后打印账单,查询余额等,在这里面哪些功能是风险级别高的,哪些需要与银行核心数据通信?这不仅涉及(功能)优先级的问题,还可以根据原则简化用户故事。例如可以考虑做一个用户故事,储户用不需验密的卡,限额是一千块,取几百块钱的时候,把去银行验证的过程取消掉。这种情形下很多时候都要考虑到账户的风险情况,这些都需要多方沟通。类似的用户故事简化的情形有很多,但这时一定基于黑盒方式来做简化。而在简化的过程中,考虑如何实现如何合理调整工作量提高效率,这些都是找(用户)故事的过程,也是一个白盒的过程。

  在实现上,除了强调快速交付或生命周期很短、业务模式高度可变的互联网、网游等项目,可以采用纯用例的模式,现阶段让(大型)企业IT项目全面接纳需求完全无文档化还是不现实的,更实际的解决办法是在文档化和敏捷需求分析之间找到一个平衡,一份需求用例加上用户故事,然后驱动开发这种方式,目前看来,这是现阶段更适合大型企业的敏捷需求实践模式。

时间: 2024-09-20 04:09:48

艾伟也谈项目管理,解读敏捷需求分析五大关键因素的相关文章

艾伟也谈项目管理,敏捷的坏态度

虽然所有软件开发的专业人士都会对这篇文章感兴趣,但是经理.CIO以及软件架构师会对它最感兴趣.这个话题可能会引起许多争议,但我写这篇文章是为了让你了解在敏捷运动中看起来正在日益增长的问题. 你为什么在这?敏捷不需要经理. 以前听过这种说法吗? 想象一下,如果你听到开发人员认为你这个职位根本就不应该存在,你会感到多么震惊,就好像是你特意为自己搞出经理这么个职位似的.这个话最常应用在项目经理第一次与将要和他一起工作的开发团队碰面的时候.的确,最初的敏捷宣言绝对没有提到项目管理,并且后来的敏捷理论家更

艾伟也谈项目管理,敏捷实施中的常见错误

一些评论员写下了敏捷实施中一些常见错误和反模式.他们贴出了"Top X"列表,列出了需要避免的事项和他们曾在各种组织实现敏捷时见过的错误. Target Process的Michael Dubakov写了两篇博文:"10个敏捷实施中最常见的错误"(Part 1; Part 2 ).他认为"许多公司在敏捷实施中再三犯同样的错误." 他的常见错误列表如下: 1. 从一个工具开始敏捷开发是不同的.一个工具不会立刻产生影响,不会由于这一工具的存在而解决多

艾伟也谈项目管理,敏捷教练的工具箱

学习并不是简简单单的阅读和浏览,而是一个积累的过程,一个通过持续的学习,对自己的知识体系不断丰富.索引的过程.接下来我会从四个方面入手分享我的经验. 高质量的信息源和高效的学习 Google是一个很好的工具,通过它,我们可以找到很多很好的资源,但前提是必须先知道要搜索的关键字,没有关键字,就不知道该查什么.多数情况下,人们都是在不可能知道自己不知道什么(Unknown unknown)的状态,也就是不知道该用什么关键字去查询,因此也不会知道该去学习些什么.所有基于Google检索的模型是一种基于

艾伟也谈项目管理,敏捷开发,在路上

如果有一种方法能使你的软件缺陷率降低63%,核心缺陷率降低79%,整体投入减少62%,整个项目开发的时间缩短69%,你会采用这种新的软件开发方法吗? 在回答这个问题之前,你可能会问:是什么方法能达到这样的效果?答案是:敏捷开发.你一定会开始质疑:这是真的吗?或者你会说:我们也在用敏捷,但没有以上提到的这么夸张. 以上提到的一些数据来自Forrester,一家善于用数字说话的咨询公司.他们对多个采用敏捷开发的项目与传统开发方式进行对比,得出以上数据.而这些项目来自敏捷刚刚开始起步的2002年. 不

艾伟也谈项目管理,敏捷个人:内容框架之执行力

    执行力是敏捷个人需要学习的一个内容,本篇主要介绍执行力相关的内容,大家在读后可以采用介绍的一些指南开始行动. 执行力的三个层面 按照命令和规则做事的过程,简单讲就是能够听话照做 按照预定的计划行为的过程,简单讲就是做事章法 将想法变成现实的过程,简单讲就是规划实现 对第一个层面来说,要做的事情是片段的.非连贯的,但对第二个层面来说是连续的.整体的.一个计划并不是一两个步骤做好就行,而要将整体的顺序都做好才能达成效果.有了第二个层面的执行,组织的运转就有了相对较高的效率,但仍然不够,这就需

艾伟也谈项目管理,动起来再调整 - 向项目经理推荐敏捷

要成为一个好的项目经理需要学会逆水行舟.虽然顺水推舟有时也能到达目的地,但学会逆水行舟,你才能到达任何地方. "虽然很有道理,但我认为现实不允许,很多项目都有规定的期限.中途还有给客户演示效果,往往实际项目中都是按最后上线日期来进行项目规划管理的." "写得不错,但是有些建议过于理想化了.毕竟说得很有道理,但实际中具体做起来又不是那么一回事了." 这是两位网友对<软件项目经理新手上路>的评论.这话很有道理,也是在现实生活中碰钉子碰出来的.在项目中确实存在

艾伟也谈项目管理,克服在企业中应用敏捷方法的技术挑战

在企业中应用敏捷方法是一项具有挑战性的任务.实现敏捷不像安装软件那样能在一天内完成.而是需要适应企业环境,其中包括:文化.技术和组织方面.本文将探讨面临的一些挑战,这些挑战与建立开发环境.自动化测试.持续集成相关,并且同在企业环境中明确完成的定义(DoD)相关. 建立开发环境 每位技术负责人和开发经理都想缩减团队成员建立开发环境的时间.然而,为了在项目中获得较高的产出,开发人员要持续投入许多精力,让事情变得有条不紊.缺乏文档,是建立开发环境时间过长的关键原因.第二个关键原因是建立过程中包含多少手

艾伟也谈项目管理,给敏捷软件开发的26条建议

我经常收集各种各样的至理名言,最近我重温敏捷软件开发:真正的问题是什么?下面是一份26条关键原则的清单,以指引敏捷软件开发团队. 1.完整地干完一件事后在开始另一件事:用厨房比喻来说就是:"先上这道菜,再开始做下一道".软件开发的最大问题就是同时开始几件事情,这将不可避免的造成某些工作被废弃,从而造成浪费.专注于一件事:完整地实现其功能:运行测试:编写文档:签入所有,把这当做一项工作完成,然后再开始下一件事. 2.不要破坏构建:非常明显,但必须被包含在任何软件开发建议清单中.程序员在签

艾伟也谈项目管理,需求分析之六大原则

需求分析的六个原则(一) 1.需求分析第一个原则:永远不要显得比客户更聪明. 聪明反被聪明误,这样的事情太多了,我们产品经理都是有智慧的人,而不是耍小聪明的人. 2.原则第一点:了解需求,而不是去批评客户.       产品经理不是批评家,心理上要重视客户,行动上要尊重客户,平等对待每一个客户. 3.原则第二点:客户比你更熟悉业务的环境. 产品经理熟悉的仅仅是产品本身,但是,产品经理要做的却不仅仅是产品本身. 4.原则第三点:真正的问题只有客户知道,我们要做的就是让客户愿意说出来. 客户会给你反