应变之道 浅析需求变更管理

阅读提示:本文作者从项目管理的角度来讨论对变化需求管理的策略。首先是讨论在构建前需求的质量,然后说明了如何在构建过程中对需求进行跟踪,最后讲述了当真正发生需求变更的时候,我们应该如何去面对。

  需求总是在变化,客户总会有新的想法,项目好像没有终结,我们软件开发人员应对软件需求变化时,为了拥有更多的准备,应该做些什么呢?

  这个世界唯一不变的就是变化了。月有阴晴圆缺,潮涨潮落,千年前的沧海是现在的良田,这是自然界的变化;人有悲欢离合,生老病死,这是人情世故。变化是并不一定总是给我们带来惊喜,更多的是带来意外,使得我们被迫去作一些改变来适应这种变化。

  所以,变化也是我们人类得以从简单生物进化到今天的推动力。

  回到我们软件需求这个论题上来,无疑,变化是需求的一个基本特性。

  没有一成不变的需求,无论我们在正式构建之前对需求进行了多么深入的开发,和客户进行了多少回合的反复验证,而最终却不得不接受这样的现实:系统正式上线之后,在客户提交的试运行报告中,客户的需求发生了变化,或者客户又提出了新的需求等等。

  我们的软件开发人员陷入了这样的一个困境:需求总是在变化,客户总会有新的想法,项目好像没有终结,即使验收通过,那也是草草完事,而不是想象中的那么完美。

  这是一个残酷的现实。之所以Fred Brooks敢在1987的《没有银弹》这篇论文中强调即使不存在银弹,也能使得软件工程的生产力在十年之内提高十倍,这也是基于软件需求自身复杂性的原因。

  在本文中,笔者从项目管理的角度来讨论对变化需求管理的策略。首先是讨论在构建前需求的质量,然后说明了如何在构建过程中对需求进行跟踪,最后讲述了当真正发生需求变更的时候,我们应该如何去面对。

  我们先来看软件需求的生命周期,正如软件项目具有一般的过程,软件需求也有着一个普遍的生命周期,如图1所示:

图1:软件普遍的生命周期

  图1中的项目阶段反映的是一般的项目过程,不管采用瀑布模型还是迭代开发或者是其他的软件开发生命周期模型,这样的一个基本过程都是需要遵循的。而需求的生命周期和项目的阶段也是一一对应的。

  在项目的启动阶段,我们需要对项目进行可行性分析,完成立项报告,在这个阶段,也就种下了需求的“种子”,这个“种子”也决定了下面所有阶段的努力是否有成果,如果项目根本就是不可行的,那么就别提最后的“结果”了,“种子”是否能“萌芽”也都是个未知之数。

  如果通过了可行性分析,完成了项目的启动过程。接下来我们就要把需求这颗“种子”种下去,通过需求调研和需求分析阶段的努力,需求的“种子”开始“萌芽”,并且一直“成长”,直到“成熟”,需求“成熟”之后,我们就可以构建需求基线,进入项目构建阶段。

  如果对还没有“成熟”的需求就开始构建,那么后果就是在构建阶段需求的反复变化,开发人员疲于奔命。

  对“成熟”的需求进行构建,我们所交付的才是优质的“果实”,当然,项目后期也不可避免有需求变更,这时,只要我们按照规定的流程进行需求变更,将变更控制在一个可以接受的范围,这是不会影响到我们最终的交付的“果实”。

  做好需求变更的管理,最终的目的是为了有优质的交付品。从上面的图中,我们可以得知,首先必须要有良好的“种子”和健康的“果树”,最后才有可能结出优质的“果实”。所以,做好需求开发是有效需求变更管理的基础。

重视需求开发

  需求开发是在问题及其最终解决方案之间架设桥梁的第一步,是软件需求过程的主体。一个项目的目的就是致力于开发正确的系统,要做到这一点就要足够详细地描述需求,也就是系统必须达到的条件或能力,使用户和开发人员在系统应该做什么,不应该做什么方面达成共识。

  我们都知道开发软件系统最为困难的部分就是准确说明开发什么,最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。

  需求开发就是为了解决这些问题,它必不可少的成果就是对项目中描述的用户需求的普遍理解,一旦理解了需求,分析者、开发者和用户就能探索出描述这些需求的多种解决方案。

  这一阶段的工作一旦做错,将最终会给系统带来极大损害的部分,由于需求获取事物造成的对需求定义的任何改动,都将导致设计、实现和测试上的大量返工,而这时花费的资源和时间将大大超过仔细精确获取需求的时间和资源。

  首先,软件需求不能如实反映用户的真正需要。比较常见的一种误解是需求的简单和复杂程度决定了用户是否能够真正理解相应的内容:误认为客户只能看懂简单的需求,但是对开发没有直接帮助;只有复杂的需求才有用,但是大多用户又不可能看得懂。事实上,造成这类问题的主要原因是捕获的需求不能反映用户的视角,因而,用户站在自己的立场上很难判断需求是否完备和正确,特别是在开发活动的早期。

  其次,软件需求不能被开发团队的不同工种直接共用。理论上,开发团队所有成员的工作内容都受软件需求制约;现实中,如果不采用理想的需求捕获方式,只有分析人员的工作看起来和软件需求的内容直接关联,其它人的工作内容和软件需求的关联并不直观,形式上的差异或转述往往不易察觉地造成了诸多歧义、冗余或者缺失。

  本文并不会就此开始探讨需求开发的问题,只是强调需求开发过程的重要,以及需求开发过程对需求变更的影响。就拿笔者亲身参与的一个项目来说:我们遵循一般的软件开发过程,通过前期一段时间的调研,做需求分析,客户基本确认之后,开发人员就投入到紧张的开发工作中,由于项目时间要求紧迫,在经过测试人员的简单确认之后,进入到试运行阶段。

  结果是,在客户的试运行报告中,提出了很多问题,其中就有一条,关于一个数据查询条件的设置,客户要求的是模糊匹配查询,而实现的却是精确匹配查询。在相关的需求文档中,却找不到任何相关的需求说明。

  需求开发完成之后,进入系统构建阶段,下面我们来谈构建过程中如何做好需求跟踪,以便于后期需求变更的管理。

  构建过程中的需求跟踪

  跟踪需求是高质量软件开发过程中必需的一个特性。用以保证开发过程中每一个步骤的正确性,以及该步骤与上一步的一致性。经验表明,在需求规格、架构、设计、开发和测试阶段,对需求的跟踪能力是确保实现高质量软件的重要因素,同时也为需求变更管理提供有力的支持。

  跟踪这些需求在每个阶段的变化,并且分析变更带来的影响,是现代软件过程的一个主线,尤其是在一些事关重大的软件工程项目中,需求跟踪的影响更加突出。

  历史数据表明,如果需求没有被完整的跟踪,那么总会有遗失的需求或者是没有解决的需求,或者是需求的变更没有彻底进行,导致部分影响被忽略了,而往往是这样的失误导致很严重的安全问题和可靠性问题,给客户带来不可估量的损失。

  这样的教训往往是非常惨痛而且印象深刻,笔者至今尤对这样的一次“事故”记忆犹新。那是参加的一个预算项目,在我们开发即将结束的时候,客户由于业务情况发生变化,提出了一条业务数据修改规则的变更。

  对于这个这个业务数据的写规则,虽然我们在需求文档中有记录,但是没有将其与设计、开发构件一一对应,建立它们之间的关联,导致在处理这条变更的时候,开发人员遗漏了一种情况的处理。

  而这样的问题直到在客户的应用系统运行半年之后才由客户发现,虽然事情最后通过升级软件、人工加工数据处理了这次意外,但是,事故给企业带来的不仅是金钱上的损失,也给企业的声誉带来非常不利的影响。

图2:需求跟踪模型

 在图2跟踪模型中,箭头代表的是跟踪的方向,模型表明,不仅在需求定义的领域跟踪需求,而且我们也在实现领域和测试领域跟踪需求。

  在系统定义领域,包括有三个方向的跟踪:从业务需求到产品特性的跟踪;从用例到产品特性的跟踪;从变更的需求到产品新特性的跟踪。对于每一种跟踪,我们都可以使用类似于如下的一个表格来管理。在实际项目中,要做好需求的跟踪管理并非易事,也许我们可以使用电子表格,办公软件来协助处理,确实,它们对于项目的管理非常有用。

  但是,表格的问题在于难于维护,特别是当项目较大,存在复杂的关联关系的情况,改变一个链接可能涉及到很多相关的链接,在这种情况下,维护就成了一场噩梦。

  在这种情况下,我们要么简化需求跟踪处理,对大的模块进行跟踪;要么使用专门的需求管理工具。如果是大型项目,最好使用工具来进行管理。这样,在我们面临需求变更的时候,才能有备无患。

  因时而变,做好需求变更控制

  就如前文所述,变化总是避免不了的。变更天生就是软件过程的一部分。在这种情况下,我们需要建立一个管理变更的过程,使得变更的工作得到控制,并能高效的发现变更,进行影响分析,将变更有效的集成到现有系统中。

  产生需求变更的因素包括内部因素和外部因素,不管需求变更来自哪里,都需要遵循一个既定的流程来提出变更请求。

  这样的渠道根据实际的企业情况有各自的方案。一般说来,如果是来自客户的变更,都需要遵照一个固定流程,通过一种正式的方式提交。即使客户口头的提出,那么也需要通过会议记录、文件交由客户签字确认后才正式进入变更流程。

  否则,如果在没有正式依据下就进行需求变更,这样的项目将进入无休止的修改和维护状态。

  对于提出的变更请求,首先可以通过项目小组指派专人负责进行分析,包括该变更的可行性分析,对其他需求的影响分析,对项目进度的影响分析等。在这个过程中,就需要利用前文中所述的各种需求跟踪表格。

  通过需求跟踪表格,列举出该变更所涉及需要修改的其他需求,影响的其他用例、测试用例、用例实现等。然后才可以对工作量进行估算,评估该变更的可行性以及对项目进度影响等。

  变更开发结束之后,也需要组织相关人员对变更进行评审,这样的评审往往能发现不少潜在的问题,比如有遗漏的需求没有修改等。只有评审通过后,才能进入下一阶段,对变更相关的文档、产品进行维护,使得需求文档、设计文档、产品保持一致性。至此,整个需求变更过程结束。

  需求变更管理是需求管理中的一个重要部分,只有有效的需求变更管理提才能高产品的可能性,并使最终产品更接近于解决需求,提高了用户对产品的满意度,从而使产品成为真正优质合格的产品。从这层意义上说,需求变更管理是产品质量的基础。

  笔者通过对需求开发、需求跟踪和需求变更过程三个方面对需求的变更管理进行讨论。一方面希望能引起业界对需求管理的关注,另外也希望能借此抛砖引玉,引发各位方家对需求管理方面的讨论。

  管理变更步骤:

  ● 提出变更请求
● 变更分析
● 变更评审
● 制定变更计划
● 变更需求的开发
● 变更结果评审
● 维护变更

  跟踪需求变更的问题:

  ● 谁提出变更;
● 什么时候提出变更;
● 变更的内容是什么;
● 为什么变更;
● 变更处理意见;
● 变更执行结果。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-21 01:59:05

应变之道 浅析需求变更管理的相关文章

需求变更管理综述

需求变更是软件项目一个突出的特点,也是软件项目最为普遍的一个特点.虽然这与人类认识问题的自然规律是一致的,但是频繁而无管理的需求变更非常容易导致复杂.无形的软件在多变的情况下失控,加剧了软件开发过程中的不稳定性,从而造成多方的损失.那么如何对需求变更加以有效的控制和管理,从而保证软件开发的进度.成本和质量,便成为软件开发过程中一个值得思考的问题. 下面,我们将"需求变更管理"作为一个"项目",按照问题定义.需求分析.设计.开发等步骤,从软件工程的角度来加以分析,而这

web项目经理手册-【4】需求变更管理

 需求变更管理是web项目管理中最重要的一个环节,需求变更管理的有效性直接影响项目的成功与否.   对待变更的态度: 1.变更是不可避免的. 2.变更必须被管理. 3.积极发现引起变更的因素,促使变更尽可能早的出现,减低变更带来的风险. 需求变更管理的目标: 1.相关的干系人必须清楚地了解发生的变更. 2.变更处于有效的管理中. 3.尽量降低变更带来的风险.   通过制定需求变更的流程,确保项目中的需求变更有效地进行,实现上述的目标.   需求变更流程: 1.确定需求的基准线.  通常我们会以U

浅谈项目需求变更管理

"项目一旦启动,变更也就随之而来." 变更是无法避免的,作为一个合格的项目经理,我们应该有有效的方法来管理项目变更. 先来看一个小案例: A公司正在实施一个业务系统项目,该项目包括人事行政部.信息部.业务部.财务部.生产部等多个部门人员. 系统采取外包的形式,雇佣了某知名软件B公司的10名开发人员. 系统实施时,出现了下述情况:A公司一个系统的用户向他所认识的B公司一个项目开发人员抱怨系统软件中的一项功能问题,并且表示希望能够进行修改.于是,该开发人员就直接对系统软件进行了修改,并告诉

互联网产品方法论:需求变更循环

文章描述:恰恰PM的工作缺不了项目管理,更缺不了对于需求的管理,偶然的原因,和团队分享了我对于项目进行中"需求变更"的理解和管理方法.忽然发现之前写过很多产品思考和细节思考的东西,但从没有整理出方法论,后续应该多整理下方法论. IT行业中失败项目的比例可以说明"项目管理"是很难做好的事情,项目失败的原因千千万,我认为需求管理.需求变更管理是个很重要的因素.恰恰PM的工作缺不了项目管理,更缺不了对于需求的管理,偶然的原因,和团队分享了我对于项目进行中"需求变

需求变更七步管理法

典型场景:最近比较烦,烦客户!我们现在正在给长江市政府做一个电子政务项目,其中有一项功能是网上婚姻申请登记功能.因为前一段国家政策取消了强制性体检这个环节,所以我们的工作流程也相应的变更. 没想到客户从中得到启发:我们的许多工作流程做好后改动的可能性很大(例如政策调整.部门变动.领导班子重组等),干脆给我们做成可定制的功能,我们提一个最大的功能集合,你们做好了我们自己就可以随需而变,嗯,这样好! 可是对项目组来说这可是个灾难啊!因为可定制的功能往往意味着工作量的倍增! 分析:先说说大家对于这种现

软件开发的非功能性需求变更

需求变更本应是客户的权力,如果确是需要变更,当然要满足客户需要.但问题是不能让变更权力滥用,把一些无关痛痒的非功能性需求变更宠惯养成堂而皇之的变更.对于非功能性需求客户总会有新的想法,项目好像总没有办法终结.以前当出现这种情况时,我总觉得很沮丧,觉得自己非常不幸,怎样会碰上这样的客户.可在读了<设计模式精解(Design Patterns Explained)>一书的一段话后,我恍然大悟,这不是我的错,世界原来就是这样子的啊,永远不变的就是变化. 令人烦恼的非功能性需求变更 在软件开发中,大家

ERP实施中最可怕的是需求变更

辛辛苦苦熬了几个月的通宵,终于确立了erp需求,规范了工作流程,系统配置也完成了,正准备按部就班ERP系统上线时,企业用户突然改变了需求,不想这么做了,提出了新的需求.这对于ERP实施顾问来说,正如晴天惊雷,这也是所有ERP顾问最感到恐怖的事情.因为有时候,用户只是简单的一句话,但是对于系统的调整来说工作量是非常大的. 一.需求变更:迁就or拒绝? 从ERP项目立项开始,需求就是ERP实施顾问的心头之痛.随着对ERP的深入认识.项目环境的变动,企业内外部多种因素都可能使客户对ERP的需求不断改变

产品需求中的需求变更是为什么

IT行业中失败项目的比例可以说明"项目管理"是很难做好的事情,项目失败的原因千千万,我认为需求管理.需求变更管理是个很重要的因素.恰恰PM的工作缺不了项目管理,更缺不了对于需求的管理,偶然的原因,和团队分享了我对于项目进行中"需求变更"的理解和管理方法.忽然发现之前写过很多产品思考和细节思考的东西,但从没有整理出方法论,后续应该多整理下方法论. 我认为对需求变更这件事是需要无限关心的,它的目的在于两点: 1,管理需求变更的过程,实际上是不断明确项目目标的过程,是自我

需求变更的烦恼

客户今天要求变更需求,加某某功能,"这个应该不难吧,某某公司的产品都有这个功能的."客户的需求一直在变,烦恼... 开始是需求不明确,客户都不知道要做成什么样,只有一个大概的粗略的描述.等到大楼盖好了,给客户,却发现大楼应该是这样那样的......客户方和开发方在一起( WorkShop) 还好,如果分开在两地就更糟糕...... 永远不变的就是变化,这个大家都知道,但关键是如何合理的控制需求变更? 我以前做的上百人一年多一个的大项目,完全按照CMMI Level3规范来控制需求变更的