软件工程:如何应对让人头疼的需求变更问题

为什么建筑行业很少有需求变更

要解决需求变更的问题,首先要知道,软件开发行业中的需求变更是怎么来的。

和建筑工程对比,同样是工程,建筑项目也是有需求变更的,但却不会像软件项目这么频繁和失控。为什么呢?

这里主要有两个原因:需求的确定性和需求变更的成本

需求的确定性

建筑需求是很具象的,而软件工程的需求是抽象的,所以建筑项目里面,无论是提出需求还是变更需求,客户和施工方都明确的知道他们想要什么。

软件需求往往是抽象、模糊、不精确的。模糊不清的需求导致在软件开发有了雏形之后,才慢慢想清楚真正的需求是什么,从而导致需求变更。

举个例子,客户最开始对软件界面的颜色是没有任何要求的,当第一版本的软件给客户看的时候,客户觉得白色背景太难看了,希望换成蓝色的;第二版本换成蓝色后,客户现在已经觉得黄色更好看,希望改成黄色背景;第三版本的时候,产品经理担心客户还想换颜色,就直接做成了换皮肤功能,用户可以自己选择颜色,客户还是不满意,问能不能把背景换成图片……

类似的事情其实经常发生在我们日常的工作场景里。

需求变更的成本

建筑项目里面的需求变更,我们都很容易和成本挂钩,因为这些东西已经是生活常识了。而相对的,很多人都对软件项目需求变更导致的成本增加缺少系统认识。

举个例子,装修房子的时候,如果墙面已经刷成白色了,但是客户想都刷成蓝色,那么他会很清楚,这涉及一系列成本:需要重新购买涂料、需要找人重新粉刷。

但换成一个软件项目,客户想把界面的白色背景换成蓝色的,他会觉得这是很简单也是理所当然的,甚至产品经理也会这么想,他会对程序员这么说:“不就是换个颜色吗?几行代码的事,客户让换就换了嘛!”

但是实际上,软件项目的需求变更,哪怕是换一个背景颜色,同样是要涉及成本的:需要修改所有涉及背景颜色的代码,需要更新相关测试代码,还需要对涉及的界面重新测试。

你可以说这成本是架构设计水平不到家导致的,但是如果设计时就考虑到要有支持换背景颜色的功能,那么开发的工作量从一开始就上去了,成本同样是提升了。

怎么解决需求变更的问题

首先,必须明确的是,在软件项目开发中,需求变更其实是不可避免的,一味地抵制需求变更也是不可取的。你能做的就是利用软件工程的知识,理解需求变更后深层次的原因,找到合适的方案来改善,积极拥抱合理的需求变化,减少不必要的需求变更。这是大的前提条件,也是共识的基础。

上面我们已经知道了引起需求频繁变更的原因了,那么,怎么有针对性的解决呢?

建议从源头入手,既然需求变更的原因是需求不确定和需求变更成本太低,那么我们就针对性地提出相应的解决方案:

  • 提升需求确定性,把需求分析做好,减少需求变更
  • 提升需求变更的成本,让客户或者产品经理不能太容易就变更需求,这样就可以达到减少需求变更的目的

但在实施的时候,我们会发现一个问题,假如一味提高需求变更的成本,会让客户满意度下降,也造成了产品经理和开发人员之间的对立,不利于项目协作。

所以我们从另一个角度思考:需求变更之所以让你痛苦不堪,也是因为需求变更让项目成员付出了高昂的代价,例如返工、加班,如果我们可以低成本地响应需求变更,那么一样可以达到管理需求变更的效果。

所以解决方案上可以再加上一条:

  • 降低响应需求变更的成本,可以方便快捷地响应需求变更

可以采用的步骤:

  • 第一步:规范变更流程,提升客户变更成本。就是通过严格的流程,来避免一些没有意义的变更,从而达到管理需求变更的目的。
  • 第二步:用原型设计低成本响应需求变更;做好需求分析和确认,减少需求变更。通过原型设计的方式,不仅可以方便地与客户沟通需求,还可以灵活响应需求变更。
  • 第三步:快速迭代,缩短版本周期。,就是将大的功能拆分,每个版本周期仅实现一部分功能需求,周期较短,这样需求发生变更时,就可以快速响应。
  • 第四步:通过灵活的架构和强大的配置,低成本响应客户需求变更。

总结

需求频繁变更,主要是由于需求不确定和变更成本过低导致的。并由此提出了三种不同的解决方案。

  • 提升需求确定性,来减少需求的变更。这种方案的优势就是对需求理解透彻,后期返工少,缺点是对产品经理的需求分析能力要求很高。
  • 提高需求变更的成本,规范需求变更流程,减少需求变更。这种方案的优势就是可以马上起到效果,缺点就是过于繁琐的流程不利于项目协作。
  • 降低响应需求变更的成本,积极应对需求变更。这种方案的优势在于可以快速响应需求变更,能快速试错尽快调整,缺点在于对软件架构和项目管理要求比较高。

おすすめ

転載: blog.csdn.net/zhizhengguan/article/details/121845213