`

我的项目血泪史之频繁需求变更

阅读更多

前段时间,我出任项目经理承接了一个中型软件项目,公司再三叮咛我一定要尊重客户,充分满足客户需求。项目开始比较顺利,辛辛苦苦熬了几个月的通宵,基本保持项目的正常进度,客户相当满意。但进入后期以来,客户频繁的需求变更却带来很多额外工作。

 

  需求变更不但越来越多,更可怕的是为了节省时间,客户不再向我申请变更,而是直接找程序员商量。程序员疲于应付,往往直接改程序而不做任何记录,很多相关文档也忘记修改。很快就出现一个问题,就是需求、设计和代码无法保持一致,甚至没有人能说清楚现在系统到底改成什么样。后来因频繁出现改好的错误又重新出现,客户投诉表示无法容忍这种低下的项目管理水平。这让我很无奈,疑惑自己到底错在哪里。

 

  什么是需求变更?

  (1)什么是需求分析?

  要知道需求变更是什么,首先要知道什么是需求分析。

  需求分析是一个复杂的问题。作为软件开发人员,一定了解软件工程学,而这门科学的第一步就是需求分析。打开任何一本软件工程的书籍,翻看目录就知道需求分析的地位。软件需求分析是整个软件开发最关键的一个输入。和传统的生产企业相比较,软件需求具有模糊性、不确定性、变化性和主观性的特点,它不像生产汽车、电脑等硬件的需求,是有形的、客观的、可描述的、可检测的。因此,软件需求是软件项目最难把握的问题。

 

  简单的说:需求分析是指理解客户需求,就软件功能与客户达成一致,估计软件风险和评估项目成本代价,最终形成开发计划的一个复杂过程。需求分析主要包括:业务需求、客户需求和功能需求三个部分。业务需求意为客户对产品的目标或者要求,客户需求意为客户在使用产品过程中需要完成的一系列任务,功能需求则指定了产品系统必须提供的功能。

 

  (2)什么是需求变更?

  在软件开发过程中,开发经理所要面对的将是一系列和多方面的考验。其中,最让开发经理头痛的就是需求变更。根据软件工程思想定义,需求说明书一般要经过论证,如果在需求说明书经过论证以后,需要在原有需求基础上追加和补充新的需求,或对原有需求进行修改和削减,均属于需求变更。而且,客户变更需求是软件开发与生俱来的特性,也是一个无法避免的事实。

 

  需求变更好比是万恶之源,为项目的正常开展带来不尽的麻烦。需求变更的表现形式是多方面的,如客户临时改变想法、项目预算增加或减少、客户对功能的需求改变等。需求变更问题是每个开发人员最头痛的问题。因为一旦发生了需求变化,就不得不重新修改设计、重写代码、修改测试用例、调整项目计划等。这时,如果开发团队缺少明确的需求变更控制过程或采用的变更控制无效,很可能会造成开发进度拖延、成本超支、人员士气低落,而且越往后的需求变更产生的风险将越大,甚至导致整个项目失败。

 

  需求变更无可避免

  对于需求变更,我们总认为能够完全掌握它,可实际情况是——需求变更往往在所难免。以前出现这种情况时,总觉得很沮丧,觉得自己的工作做得还不细,有些内容要让用户签字确认就好了。可在经过多次需求变更的痛苦后,才恍然大悟:软件开发的需求变更是无可避免的。

 

  (1)三极世界和需求变更的必然性

  需求、客户、开发人员是一个三极世界。这三极的沟通是很不容易的。客户向我们滔滔不绝地描述需求,开发者听得头晕脑胀,但又不得不根据这些来理解需求。有的时候我们也会派好几拨人轮番折腾客户,这样客户也晕头转向,巴不得赶快需求调研结束。这样的需求调研像透过布满小水珠的玻璃看世界一样,即使能够看清轮廓,但细节的丢失在所难免。

 

  之所以这样,是有原因的:第一,是因为客户自己对需求进行了过滤,有时是因为客户对需求的理解也不准确,有时是客户的视角与我们的不同。第二,是开发者对需求的理解偏差。有可能是由于缺乏知识,开发者对需求理解错了;还可能是开发团队内部造成的偏差,比如需求调研人员往往同时做好几个项目,在调研完成后便不在开发团队中,这样偏差便在所难免。还有就是内部沟通、人员更替造成的偏差。因此,在这样一个三极世界,需求变更是必然的。

 

  (2)合同签订马虎,没有真正明白客户需求

  当我以合同上没有规定的需求不予开发时,客户搬出销售人员的承诺这一招,更让我几乎吐血。销售人员在签订合同时缺乏对客户需求的认真对待,导致需求描述不清,为开发带来了许多困惑和后患。例如,销售人员有时为使客户能够快速地签订合同,往往草率决定和片面同意客户提出的需求。当客户提出新的需求时,往往是销售人员一看“应该”只是一个小小的修改,没有太大的影响,所以直接答应能变更。

 

  该问题的关键是合同签署得太烂,没有把需求明确再签合同,而且也没有把需求变更的流程写入合同。如果在签合同前就把客户需求弄清楚,后期就根本不需要频繁地变更需求。签订合同时明确定义开发需求的范围,可以为以后各项开发工作的开展奠定好的基础。

 

  需求变更为何没完没了?

  在软件开发中,最常抱怨的是这样一个问题:客户为什么总是反反复复?造成需求变更没完没了的原因,可以是这样几个方面存在问题。

 

  (1)没有明确的需求变更流程没有明确的需求变更管理流程,就会使需求变更变得泛滥,在这一点上我尝尽了苦头。并不是所有的变更都要修改,也不是所有变更都要立刻修改,明确需求变更管理流程的目的是为了决定什么类型的变更需要修改和什么时候修改。比如单纯的界面风格问题,就可以先不修改,或者规划一下修改的时间待到以后进行优化。另外,对于核心功能的修改没有严格把关流程,有些小需求看起来工作量不大,但是哪些销售人员或者客户没有考虑到的细节问题实际上需要花费开发人员相当长的时间去完成,从而是捡了芝麻掉了西瓜,得不偿失,使开发进度失控和资源浪费。

 

  (2)没有让客户知道需求变更的代价对变更的影响没有进行成本评估是需求变更泛滥的根本原因,这是我从单纯的技术人员转变到统筹兼顾成本管理的转变点之一,当然为了这一点我也付出了血与泪,为此饱受公司领导和客户的重重抱怨和责备。变更都是有代价的,应该要评估变更的代价和对项目的影响,要让客户了解需求变更的后果。如果客户不知道需求变更付出的代价,对开发人员的辛苦就会难以体会。在评估代价(包括成本、时间等多方面)过程中,可以请客户一起做判断:“我可以修改,但您能接受后果吗?”

 

  如何有效控制需求变更?

  需求变更对软件开发项目成败有重要影响,既不能一概拒绝客户的变更要求,也不能一味地迁就客户,所以实施需求变更之前必须做好控制。需求变更控制的目的不是控制变更的发生,而是对变更进行管理,确保变更有序进行。

 

  (1)明确合同约束,建立需求基线需求变更给软件开发带来的影响有目共睹,所以在与客户签订合同时,可以增加一些相关条款,如限定客户提出需求变更的时间,规定何种情况的变更可以接受、拒绝或部分接受,还可以规定发生需求变更时必须执行变更管理流程。虽然软件开发合同很难在签订之初就能够精确定义每项需求,单靠合同是帮不上忙的,但也不能忽视合同的约束力。

 

  明确和树立需求基线是需求变更的依据。在开发过程中,需求确定并经过评审后(客户参与评审),建立第一个需求基线。此后每次变更并经过评审后,都要重新确定新的需求基线,做到小需求可以变更,但大方向要力保不频繁变更。例如,对于项目中的需求,可以实行分级管理,以达到对需求变更的控制和管理。

 

  (2)建立变更审批流程在实践中,人们往往不愿意为小的需求变更去执行正规的需求管理过程,认为降低开发效率,浪费时间。正是这种观念才使需求变更变得不可控,最终导致项目的失败。因此,小的需求变更也要经过正规的需求管理流程,否则会积少成多,积重难返。

 

  明确需求变更审批环节、审批人员、审批事项、审批流程。这么做的目的有两个:一是将客户下达变更的流程尽可能地规范化,减少张嘴就来的非必要、非紧急、非合理、非高层领导意图的无效变更。二是留下书面依据,为今后可能的成本变更和索赔准备好“变更账”。凡未履行审批程序的“变更”,一律是无效变更不予受理。

 

  (3)分级管理变更,定时批量处理软件开发项目中,“客户永远是对的”和“客户是上帝”并不完全正确,因为在已经签定的项目合同中,任何新需求的变更和增加除了影响项目的正常进行以外,还影响到客户的成本投入收益。因此,用户不断提出对项目进度有重大影响的需求对双赢也并不是好事。

 

  当遇到客户提出需求,不及时处理可能会使项目不能验收通过时,也不能一味拒绝不予开发。因此,当客户坚持变更新需求时,可以建议客户将新需求按重要和紧迫程度划分档次,作为需求变更评估的一项依据。例如,每周或每两周甚至每月召开一次需求变更专题会议,集中研究处理这些零碎变更事项,主动控制好工作节奏,尽量避免由于处理零碎变更而影响项目进度。针对会议结果可向客户正式提交一份需求变更计划,注明变更引起的时间、成本、工期代价和增加工作量等。要求客户配合需求变更计划,确定变更时限,控制变更规模,过时变更不候,离谱变更不做,保大局弃小变。

 

  (4)安排专职人员负责变更管理有时开发任务较重,开发人员容易陷入开发工作中而忽略了与客户的随时沟通。因此,需要安排一名专职的需求变更联络人员,负责与客户及时交流,跟踪和汇报需求变更完成进度和情况。同时,可以成立项目变更控制小组,负责裁定接受哪些变更,小组由项目所涉及的多方人员共同组成,应该包括客户方和开发方的决策人员在内。

 

  (5)确认客户是否接受变更的代价要让客户认识到变更都是有代价的,要和客户一起判断需求变更是否依然进行。例如,变更是没有问题的,但是要明确客户能否接受由此引起的如进度延迟、费用增加、效率下降等问题。一般来说,如果客户认为该变更是必须的(不是其上级领导拍脑袋提出的)就会接受这些后果。通过与客户协商,这样开发团队即使没有回报,也不会招致公司和客户双方的埋怨。

 

  如果客户认为该变更虽然有必要但是可以暂缓,双方签署备忘录后留待以后解决。如果客户认为该变更可有可无,多数情况下会取消变更。这样即可防止频繁变更,也让客户认识到不是所有的需求都需要变更。

 

  以上便是本人在频繁需求变更的血泪史中收获的经验,与大家分享。

分享到:
评论

相关推荐

    程序员的工作经验分享大合集+个人经验+创业血泪史+工作几年的一些感悟+程序员如何高效学习

    一位程序员工作10年总结的13个忠告+一名程序员的十年工作经历+程序员(工作十几年)的创业血泪史,万字长文,与君共勉!+程序员工作几年的一些感悟+程序员找工作的个人经验及注意事项+告诉你编程路上应该这么过+...

    中华民族品牌的血泪史[参照].docx

    《中华民族品牌的血泪史》揭示了自改革开放以来,我国民族品牌遭受外资并购的历程,以及这一现象对中国经济和民族工业的深远影响。1994年到2008年间,许多知名的中国品牌如中华牙膏、乐百氏、太太乐、南孚电池等纷纷...

    在安装双系统时的一点经验血泪史.docx

    "在安装双系统时的一点经验血泪史" 在安装双系统时,我曾经遇到的一些问题和教训,主要是关于系统修复的经验总结。下面是我在安装双系统时的一些经验和教训。 首先,在安装 Ubuntu 16.04 时,我配置失败,决定分配...

    mysq血泪史

    本文将围绕“mysq血泪史”这一主题,详细讲解在学习MySQL过程中可能遇到的问题,以及相应的解决方案,特别是关于用户权限、字符集和配置方面的知识。 首先,我们来谈谈MySQL的用户权限管理。在MySQL中,用户权限...

    P2P投资人自述血泪史连遭13家平台跑路.pptx

    从这段血泪史中,我们可以总结出以下几点投资教训: 1. 尊重市场经济规律:高息往往意味着高风险。没有哪个可持续发展的产业能够承受过高的借贷成本,因此对于提供过高回报的平台,投资者应保持警惕。 2. 实地...

    用ARM7做工控板的血泪史.doc

    通过使用这种UART软仿真技术,我们可以在不需要专门的UART接口的情况下,仍然能够实现UART通信功能,从而满足工业控制领域中的各种需求。 在本文中,我们仅仅实现了UART发送功能,如果需要实现完整的UART功能,还...

    攻防演练打响,听一听老兵们的“血泪史”.pdf

    在当今数字化时代,网络安全攻防...通过他们的“血泪史”,我们可以看到网络安全的艰辛与挑战,同时也能够更好地理解网络安全工作的重要性,进而在实际工作中不断提升自身的安全能力,以应对日益严峻的网络安全形势。

    我创业失败的血泪史:折腾了三年 却失败了.docx

    他们往往只关注上司的指令,而忽视成本效益分析和市场需求。 2. **执行力**:强大的执行力关乎团队能否有效地实施商业模式。CEO应将大部分精力放在内部事务,如团队管理和产品开发,同时也要保持与外界的联系,获取...

    血泪史:Arcgis Engine安装经验 配对10.2的版本.txt

    列举前三步,看对你是否有用,再下载: 1.首先,用设置中的卸载应用程序把10.3卸载即可 2.安装好VS2010或者VS2012 3.安装Arcgis Desktop 10.2(一定要安装这个,单独安装Arcgis Engine 10.2无用)

    徐中约的ZG近代史读后感600字五篇.docx

    本书通过对中国近代史的详细记载,展示了中国人民在近代史上的挣扎和抗争,展示了中国的苦难和血泪史。 从鸦片战争到中华人民共和国的成立,中国人民经历了侵略、奴役、压迫和反抗的历史事件。这本书详细记载了外国...

    unity安卓交互完整demo

    就想着顺带记录一下我的安卓交互血泪史。网上 的参考博客很多很多五花八门,琳琅满目,其实都挺不错的但是呢在实际开发过程中会遇到各种各样的 你想不到的坑,而这些坑只能自己一个人默默的去填平。以下也是本博主...

    技改之路:从单块应用到微服务,我的血泪总结.docx

    技改之路:从单块应用到微服务,我的血泪总结.docx

    项目性销售培训.pptx

    - **血泪史是最好的培训**:强调从实际经验中学习,通过失败案例吸取教训。 - **开天眼**:指提升洞察力,能预见到潜在的机会和挑战。 2. **销售工作开展**: - **客户资源开发与维护**:找到合适的客户并建立...

    血泪史- Mac 安装 Linux Ubuntu系统

    先上图: “ MAC的强大办公能力+ Linux的开源能力 = 一个优秀的编程环境。” 额~也不知道谁说的,小生不才,引用一下。 看了很多论坛和博客,得出的结果是,Mac并没有为Linux系统配置相应的驱动,所以不能将其作为...

    逆流而上+阿里巴巴技术成长之路.rar

    《逆流而上:Alibaba技术成长之路》是Alibaba集团荣耀背后的技术血泪史。本书通过分享业务运行过程中各个领域发生的典型“踩坑”案例,帮助大家快速提升自我及团队协作,学习到宝贵的处理经验及实践方案,为互联网...

    Centos-7下安装oracle10g及打补丁

    linux新人借鉴前辈安装oracle10g血泪史加上自己遇到问题的总结

    大数据失败案例的血泪教训.md

    大数据失败案例的血泪教训.md,最新的分享学习。 汇集了八个大数据项目失败案例,八种导致失败的理由。 对原文的理论概括水平不足的地方,粗略做了理解归纳。

Global site tag (gtag.js) - Google Analytics