如何应对软件需求不明确、需求频繁更改和需求的无底洞

2023-05-16

入职以来一直会遇到这种问题,也许是软件行业的死穴,任何项目如果处理不好解决不了这些问题,就相当于得了慢性绝症,不但项目的结局是死路,经手项目的每 个开发人员到管理者都在经受挑战人体极限的折磨。开发人员就像交通工具,上级传达指令,他就会最高效的将之送到目的地,如果老板自己都不知道想去哪里或者 不会开或者GPRS导航都不会用,就算给他一辆保时捷或者飞机都是白搭,说到这就知道为什么软件行业跳槽之频繁了。

一、问题列表:

1.客户(或上级)自己不知道自己想要什么。
2.客户需求已明确,后由于业务需要,频繁更改,更改后发现还不是想要的。
3.无底洞的需求变更和功能修改。
4.项目催的紧,本来两天的工活一天要完成,项目变成拔苗助长。
5.后期软件改成一锅粥,程序员一走,基本无人能明白需求和可以接手。

二、搜集的例子:

1. 几年前,我和一位同事在外地共同参与一个软件项目的开发。项目本身并不算很大,开始的需求调研进行了很长时间,期间不但几乎拜访了所有部门,还与用户反复 讨论,征求意见,需求文档几易其稿。即便这样仍然有许多不确定因素,搞得人心烦意乱。当时我牢骚很多,总觉得又花时间似乎还没真正做事。
我的同 事经验比较丰富,他给我说了一个他自己的亲身经历。那时候他在深圳参与一个证券项目,当时软件开发管理非常不规范,基本上是了解需求后就编程序,根本没有 太多的交流,需求文档就更没有了。系统开发出以后,用户不断提出新需求。每天追着开发人员解决问题,项目实际是一个无底洞,没完没了地往下做,按他的说法 是项目成员“肥的拖瘦,瘦的拖死”,实在做不下去只能跑了。

2.前段时间,我出任项目经理承接了一个中型软件项目,公司再三叮咛我一定要尊重客户,充分满足客户需求。项目开始比较顺利,辛辛苦苦熬了几个月的通宵,基本保持项目的正常进度,客户相当满意。但进入后期以来,客户频繁的需求变更却带来很多额外工作。
需求变更不但越来越多,更可怕的是为了节省时间,客户不再向我申请变更,而是直接找程序员商量。程序员疲于应付,往往直接改程序而不做任何记录,很多相关 文档也忘记修改。很快就出现一个问题,就是需求、设计和代码无法保持一致,甚至没有人能说清楚现在系统到底改成什么样。后来因频繁出现改好的错误又重新出 现,这让我很无奈。

3. 这是我进入公司以来的第三个项目。做这个项目给我的最大感受就是:做项目前一定要弄清楚需求。否则只有无数次的反工。导致项目一直延期。成本超出预算。
我们公司是甲方。我们只做UAT测试。当已方把代码写完。提交我们测试的时候。我们竟然发现已方都没有做系统测试。最后我们只好又做系统测试,又做UAT4测试。
最初是分析需求,写用例。需求变化的非常频繁,以致于最初的需求和后来做出来的东西相差很大。导致三周写的用例变成了无用功。后来因为急于上线,大家加班 加点的测试,改BUG,回归BUG。还加班了好几个通宵呢。在主要流程凑合跑通的情况下。系统上线了。大家终于松了一口气。近两个月的加班加点,终于让系 统上线了。
接下来就是进一步的测试。很多细节都还没有测到。也不用那么加班加点的赶了。好景不长啊。不到一个月,第一次的需求便更来了。而且变化很大。又一次加班, 接下来就是接二连三的需求变更。就连主要流程都变了。同一个功能的需求两天内就变了三次。以致于到最后,和最初做的系统相比已经面目全非了。呵呵。等于又 重新做了一个嘛!这样不仅一直拖延工期,使得项目一直不能告一段落,而且预算超出很多。开发部、测试部的同事也很厌烦。尤其是测试部门的。大家都说用不着 细测的啦。反正过不了几天这个需求还得变。现在测了也没用。呵呵。看看。大家都有了这样的心里了。这测试的质量很难保证的啊。大家干活一点积极性也没有。

4.转自Javaeye的一篇:
==========================
问题
==========================
越来越像无底洞的需求

首先声明俺们是做项目的,每个项目都大多相同,但是有很多细小的地方是不一样的。 
于是乎,每个项目的需求总会有些差异。。。 
于是乎,需求就越来越无底洞了。。。

俺正在做的一个计费的程序,就是这样,从一个小蜗牛成长一只大乌龟(当然从遗传说角度来看这是不可能的)。

最开始的时候,这个计费是很简单的,只需要处理以下几个情况: 
从数据库固定的域里面读取出用来计费的依据。 
从数据库固定的域里面读取出用来筛选的域。 
按照三个固定的计费规则去计费,固定的收费,按比例的收费,按区间固定的收费。

本来这不是特别重要的,也没有特别去重视。 
但是这个需求开始慢慢鼓胀了。。。每个地方的项目总会有那么几个不一致的地方。。。总要改一下…… 
后来简直发展成每个地方一个版本了。

首先,计费的依据不再是从数据库固定的域里面去读取了,而是可以自由指定一个数据库的域。伤筋动骨啊。 
然后,计费规则也发生变化了,固定的收费,按比例的收费,按区间固定的收费,按区间固定比例的收费,按区间固定比例累加的收费。 
计费的方式也有了变化,有把要计费的依据加起来一起收费,也有把各个依据分别收费然后再总和起来。。。又是一个伤筋动骨。

于是在春节前后,趁着没啥事的时候把整个程序扔了,用了decorate模式。心想,这次完事了吧?

没想到……又有了更加BT的需求了。。。 
痛苦啊!!!!

遇到这种情况的时候,大家有什么感想……

==========================
回复一:
==========================
对项目的业务不清楚,光靠前期的调研只能知道大致要做的,实际上的细节用户自己也很难说清,等系统上线了,有了实际的原型,就是你认为开发完了不应该再变 动的系统,用户才会有具体的详细要求,当然也不是一次能给你,只会在碰到什么实际业务时突然想起,这是很常见的情况。

这种模式很常见,也就很合理,再做项目的时候,首先要考虑对用户的业务熟悉不熟悉,如果不熟悉,就要考虑好这种情况,换个角度来看,这种由于业务不熟悉导致的需求变更,是公司应该交的学费,怎么在前期做好项目策划,就非常重要。

对 具体做事的程序员来说,首先要清楚,这类项目上线后,才是原型完成,后面将有一轮又一轮的详细需求,开发时间基本上和模块开发时间相当,要做好 持续修改的准备,业务等于在这个阶段才真正开始做测试。第二就是,用户的每个需求变更都是有原因的,要把原因找到。第三,把工时记下,提交给项目经理。

===========================
fight_bird 的回复
===========================
楼主遇到的需求变更、膨胀状态其实是国内定制化软件项目业务逻辑挖掘的一个正常过程,并非存在所谓的无底洞,本质问题还是需求调研没有做好、做细,却匆忙开始系统分析和编码,结果当然是不停的做炒冷饭的事情!

恕我直言,根子还是在项目管理的水准,这么粗的需求分析状态下不应该允许进入详细设计阶段,我怀疑你这个项目是几个人的小项目,你们公司的项目监理机制几乎不起作用。

说得上纲上线一点,你们公司在国内项目业务需求的调研上没有成熟的方法论指导,还处于客户“指哪打哪儿的状态”,这种状态长期下去会拖垮开发团队,这对于处于创业成长阶段的公司倒是可以理解,但对于想做大、做强的公司来说却是必须跨越的阶段,否则这样的公司长不大的。

===========================
一蓑烟雨任平生 说:
===========================

项目管理也许有些问题,但我觉得还是项目策划的问题,对一个业务不熟的项目要有一个策略,成本估算时要充分考虑到后期的反复,这个跟走不走需求管理的流程没有关系。需要清楚的是怎么做这个项目,如果不挣钱,以后能从这个项目中得到什么?

因 为对业务不熟,到最后才能了解业务的细节,这里面有一个长期的学习过程,这个过程是要付出代价的,这个成本在项目的策划时就应该考虑到,同时要 考虑这代价在以后的项目中怎么逐步降下来,产品化不产品化不重要,重要的是业务的积累和团队的稳定,否则以后还会付出更大的代价。

===========================
Joo说:
===========================
说的很在理,基本上在国内这种状况能占了80%的项目(国外不知道,可能会好那么一点点?) 
但是一般往往软件费用在第一次上线之前就已经谈定了,再接下来要改你要收钱他就翻脸:不是之前说好的么?

==========================
fight_bird 回复:
==========================
对于国内项目这种事情很常见,就看搞售前和商业策划的本事了,这时候就凸显行业经验的重要性和价值,这样的项目最合适的方式是分期完成,合约也分期签署,前期做好了,后期可能合作更深入,可以达到双赢,反之,可能双亏了。

==========================
hax回复:
==========================

需求调研不可能达到做好做细的理想境界。

a. 需求本身就在变化,比方说在6个月的开发周期中可能客户自己的人、事、组织都有了变化。 
b. 客户代表本身不一定能很好的认识和把握需求,有许多细节是不可能在初期确定下来的。 
c. 企图做好做细,只会大大增加前期的时间和沟通成本,而且团队在拿到所谓的需求说明书之后往往忽略了开发过程中的沟通和调整,问题被掩盖、推迟和归咎于需求没做好的借口。

大 多数项目为什么会失败?失败并非是单纯的做不出东西,而是指无法在给定资源(时间、费用等)下完成项目,有大量资源被浪费了,做了无用功。所以很多人就认 为要一开始先把好关,避免浪费。然而认为把需求做好做细就能避免资源浪费,是一厢情愿的想法。因为需求是无止境的,你也无法有效验证需求的合理性。从理论 上说,需求做的是不是好,最后还是要看实施结果,所以前期对需求是不是足够好足够细的判断,只能基于猜测或者形式上的要求(比如写了多少页画了多少图开了 几次会)。 
==========================
abang回复:
==========================

看了楼上各位的留言,使我受益匪浅

总结了一下:需求的尽量全面细化与时间尽量少是一矛盾,需求越全面越细化,花费的时间就越多,花费的时间越少,需求就很难做到全面细化,解决这一矛盾的关键还是掌握好火候,使需求和时间的配比做到最佳。

说说容易,做起来难….
==========================
zhangshoukai回复:
==========================
国内的客户吧?

三、解决方法:

古人根治绝症的方法无非是从根源将其除之,软件行业的这些问题追其根源还是在于人,人性有很多弱点,如果卡耐基在世并且也做软件,应该不存在这些问题。[lol] 
说笑了,我想在目前软件行业发展的基础上,最好的方法还是多加强沟通,多学习国外的软件管理和规范,客户和老板要多考虑业务实际需求,项目经理严把关卡,开发人员也要学会拒绝。需要客户、老板、项目经理、开发人员四者配合才可以妥善解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何应对软件需求不明确、需求频繁更改和需求的无底洞 的相关文章

  • DIY制作示波器的超详细教程:(一)我不是为了做一个示波器

    讲一个故事 xff1a 今年九月 xff0c 一个新学期的开始 xff0c 课很少 我是一个闲不住的人 xff0c 这样的日子很难熬 xff0c 想去电子市场逛逛 xff0c 但学校离市区有三十 多公里路 xff0c 终于无聊到周末了 和平
  • Mysql取2位小数,加百分号,结果加序号

    1 取2位小数 方式一 xff1a select truncate data total 2 实际使用中发现丢失精度 方式二 xff1a select convert data total decimal 10 2 推荐此方法 xff0c
  • 从入门到进阶,JAVA书籍的最佳阅读顺序!

    本文首发于知乎 xff0c 已获得1000 43 赞和收藏 原文链接 xff1a https www zhihu com question 269505829 answer 1791006152 先介绍下本人的情况 xff0c 希望对大家学
  • 设计数据密集型应用-C5-主从架构及同步延迟问题

    本文是 设计数据密集型应用 第5章学习笔记 什么是Replication Replication是在多台机器上维护的相同的数据 xff0c 即副本 保存副本的原因有以下几种 xff1a 减小延迟 xff1a 使得地理位置上数据离访问者更近
  • 第一条Pulsar消息发送

    什么是Pulsar pulsar是一个多租户 高性能server to srever消息解决方案 xff0c 最初由雅虎开发 xff0c 现在由apache维护 Pulsar的核心特性 xff1a 多集群云原生支持低延迟 良好的伸缩性多语言
  • 2014找工作总结-机会往往留给有准备的人

    转发请注明出处 xff1a 2014找工作总结 机会往往留给有准备的人 计算机专业同学的充电站 CSDN博客 其实我的求职过程在十一之前就已经结束了 xff0c 总体讲比较顺利 参加面试的几家公司基本都拿到了offer xff0c 分别是阿
  • 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现

    通过我这些天用C 43 43 读写bmp图像的经历 xff0c 摸索再摸索 xff0c 终于对bmp文件的结构 操作有了一定的了解 xff0c 下面就大概介绍bmp图片纯C 43 43 的读取 旋转和保存的实现过程 要用C 43 43 读取
  • 【数字图像处理】直方图均衡化详解及编程实现

    直方图均衡化的英文名称是Histogram Equalization 图像对比度增强的方法可以分成两类 一类是直接对比度增强方法 另一类是间接对比度增强方法 直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法 直方图拉伸是通过对比度拉
  • 软链接和硬链接到底有啥作用和区别

    前言 xff1a 在网上搜索了好久 xff0c 看了很多博客 xff0c 某度知道等等 关于软硬链接的解释都太模糊 xff0c 还有什么i节点 xff0c 跨分区根本弄不明白 xff0c 在查阅了书籍和询问老师后决定自己写一篇简单的博文 x
  • 【GPU编程】体绘制传输函数-分类(Volume Rendering Transfer function:Pre- VS Post-Classification)

    在科学可视化中 xff0c 我们所获得的体数据集经常是代表一些光学上的不同物理属性的单值 通常没有可行的方法可以从这样的数据中获得发射和吸收属性 因此用户必须采用某种映射方法给数据值分配光学属性值来决定数据中的不同结构的模样 这离的映射就被
  • 【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

    GL TRIANGLE STRIP绘制三角形方式很多时候令人疑惑 xff0c 在这里对其运作机理进行解释 一般情况下有三种绘制一系列三角形的方式 xff0c 分别是GL TRIANGLES GL TRIANGLE STRIP和GL TRIA
  • 【C++深入探索】Copy-and-swap idiom详解和实现安全自我赋值

    任何管理某资源的类比如智能指针需要遵循一个规则 xff08 The Rule of Three xff09 xff1a 如果你需要显式地声明一下三者中的一个 xff1a 析构函数 拷贝构造函数或者是拷贝赋值操作符 xff0c 那么你需要显式
  • 【Linux】Vim编辑器-批量注释与反注释

    vim编辑器 批量注释与反注释 在使用vim编写代码的时候 xff0c 经常需要用到批量注释与反注释一段代码 下面简要介绍其操作 方法一 块选择模式 插入注释 xff1a 用v进入virtual模式 用上下键选中需要注释的行数 按Contr
  • 【笔试面试题】腾讯2013实习生面试算法题及参考答案

    总结了一下自己遇到的以及同学遇到的面试算法题 xff0c 是技术二面 有几道题给出了参考答案 xff0c 还有几道没有好的思路 路过的大侠如果有好的思路请留个言交流下呗 1 八数码问题 xff1a 3 3的格子 xff0c 有1 8个数 x
  • 【Linux学习】epoll详解

    什么是 epoll epoll 是什么 xff1f 按照 man 手册的说法 xff1a 是为处理大批量句柄而作了改进的 poll 当然 xff0c 这不是 2 6 内核才有的 xff0c 它是在 2 5 44 内核中被引进的 epoll
  • vs code 集成git 的使用

    vs code 集成git 的使用 目录概述需求 xff1a 设计思路实现思路分析1 1 git 安装配置2 下载源代码 拓展实现相关工具如下 xff1a 实验效果 xff1a xff08 解决思路 xff09 分析 xff1a 小结 xf
  • DataNode的启动流程

    hadoop 源码解析 DataNode启动流程 目录概述正文 xff1a 设计思路 相关代码如下 xff1a 小结 xff1a 参考资料和推荐阅读 LD is tigger forever xff0c CG are not brother
  • 算法设计应该依赖抽象而不是业务

    很多时候 xff0c 算法的设计是归属于详细设计阶段的 一些公司甚至都没有设计而直接编码 这些往往导致很多算法的实现都混杂在业务模块中 典型的特点是 xff0c 这些算法会依赖于业务实体的某些属性的实现 举一个简单的例子 xff0c 我曾经
  • 做程序员老婆的幸福

    刚好看网上一个写程序员老公的 说说程序员老公的一些事情 请帮忙分析是不是典型程序员 xff0c 想起自己就是一个程序员 xff0c 也是一个老公 xff0c 却不以为然起来 虽然不以为然 xff0c 却并没有驳斥的任何意思 毕竟很多人都不一
  • 前端与后端接口的交互案例

    一 案例描述 1 xff0c 前端页面提供用户名 xff0c 密码输入框 2 xff0c 通过Ajax发送请求到后端Serlvet 3 xff0c 后端Serlvet处理请求 xff0c 根据输入的用户名和密码返回给前端不同信息 前端访问后

随机推荐

  • 好习惯成就好程序员

    公司搞了一次技术峰会 xff0c 我有机会和大家聊了一下有关如何成功的问题 会上我向大家提出了我的想法 xff0c 好习惯才能成就好程序员 有很多人可能对这句话很不以为然 xff0c 我也不忙辩解 xff0c 先回答我下面的一个问题 现在我
  • 程序江湖:第三章 莫等闲白了少年头

    周五因为羽毛球比赛 xff0c 没有更新 xff0c 今天继续 读者反馈 xff1a 很多读者反馈主人公的名字比较土 呵呵这个没关系 xff0c 可以在整理的时候统一修改 另外有些人表示特别希望看到职场的故事 xff0c 这个放心 本就是这
  • 程序江湖:第二十章 讲标的前一晚上

    说明 xff1a 非常抱歉 xff0c 这周参加了太多的会议 原来写作也是需要心情的 xff0c 当没有心情的时候 xff0c 你都懒得动笔 欧阳明来到云南的最主要的目的 xff0c 是为了应对昆明客户要求的评标 就是客户邀请了几家资质还可
  • 管理 VS. 面向对象设计

    我是在吃虾的时候 xff0c 突然想起这个关联的 管理 xff0c 往往就是给你一堆事 xff0c 然后再给你一些人 xff0c OK xff0c 你去做吧 这是你的使命 下面我们来做类比吧 首先一个问题 xff0c 你是认为人重要 xff
  • 成功不是依靠机会 ---- 参加移动开发者大会有感

    这次有幸参加了CSDN和创新工厂主办的移动开发者大会 xff0c 感觉良多 第一印象是 xff1a 这真的是一次技术的大会 我之前参加过很多大会 我特别说的是微软的技术大会 xff0c 已经感受不到什么技术的味道了 xff0c 或者说是这种
  • 技术管理案例:代码规范还要继续推行吗?

    这是实际工作中总结的一个典型案例 是真实的 写出来供大家参考 案例 xff1a 技术经理 Y 今年新到了一个产品部门 xff0c 发现原来产品的代码很乱 xff0c 遗留的问题很多 而现有的人员 xff0c 又大半是新招的 xff0c 很多
  • 苹果成功的根本:统筹创新

    这周的某天中午 xff0c 我们聊起了这个话题 xff0c 是关于苹果为什么成功的话题 很多人都说是因为苹果的创新能力很强 但是诺基亚也不缺乏创新啊 xff01 为什么苹果就能胜出呢 xff1f 我个人认为这有很多方面是因为乔布斯 xff0
  • 建立健康的职业发展观

    Google的Reader要下线了 xff0c 很多人都说这是因为Blog的没落 微博的兴起 xff0c 确实给了很多人表达情绪的方式 如果我能够用140个字 xff0c 清晰的表达我的观点 xff0c 并且能够让我的读者做到一点点认可 x
  • 使用maven 自动为 js/css加版本号

    原理就是使用 maven replacer plugin 替换html 中的 js css 等 xff0c 难点主要是maven war plugin的生命周期的问题 xff0c 参考配置如下 xff1a lt plugin gt lt g
  • XTDrone学习笔记二:在Fedora运行ORB_SLAM2+PX4的仿真

    对应肖老师的内容 xff1a 视觉SLAM ORB SLAM2针对Fedora上使用的修改已提交到github上 在Fedora上的仿真环境搭建请参考 xff1a XTDrone学习笔记一 xff1a ROS 43 PX4仿真平台基础配置
  • 数据清洗的一些梳理

    xff08 欢迎转载到个人朋友圈 xff0c 转载时请带原文链接 xff0c 公众号和其他媒体转载前请私信联系本人获取授权 xff09 首先对 64 MayaG表示感谢 xff0c 这篇文章是被你提的问题激发出的灵感 xff0c 非常感谢
  • Conda install package遇到CondaHTTPError: HTTP 000 Connection Failed问题

    新安装的anaconda xff0c 在使用conda install时候会遇到错误信息 xff1a SSLError MaxRetryError 39 HTTPSConnectionPool host 61 39 repo anacond
  • 通过Node-Red将西门子PLC数据上传至阿里云物联网平台并进行可视化显示

    本篇基于我之前的文章 利用Node Red读写西门子PLC并将数据上传至云服务器 xff0c Node Red搭建及读写PLC部分请参考该文章 首先在阿里云物联网平台开通公共实例 xff0c 开通成功后在公共实例的设备管理 产品处点击创建产
  • C++笔记--关于string, char*, char[]中的‘\0’问题(2-3)

    0 问题 const char 字符串 以 0 结尾char 字符串 以 0 结尾string 字符串 不以 0 结尾char n 61 34 string 34 当string 长度 43 0 gt n时 xff0c 会因空间不足出错st
  • 经典C++笔试题目--100(C++面向对象的特性(38-61))

    C 43 43 面向对象的特性 38 61 38 是不是一个父类写了一个virtual 函数 xff0c 如果子类覆盖它的函数不加virtual 也能实现多态 参考答案 virtual修饰符会被隐形继承的 virtual可加可不加 子类的空
  • 经典C++笔试题目--100(编程练习(比C要难)(91-100))

    编程练习 比C要难 91 100 91 请编写一个 C 函数 xff0c 该函数给出一个字节中被置 1 的位的个数 参考答案 unsigned int TestAsOne0 char log int i unsigned int num 6
  • 小四轴调试笔记

    9 22 使用dmp进行姿态解算时 由于小四轴尺寸很小 电机和6050的距离略近 电机对MPU6050的影响就会很大当然 这种情况仅发生在尺寸很小的小四轴并且使用DMP时 图为电机转速增到最大时6050的值 可见加速度和角速度都发生了剧烈变
  • [STM32]开源光流定点 四轴 PIX

    废话不多说先上图 xff1a 硬件配置 xff1a STM32F407VET6 MPU6050 VL53L0X 光流的概念是Gibson在1950年首先提出来的 它是空间运动物体在观察成像平面上的像素运动的瞬时速度 xff0c 是利用图像序
  • svn status详解

    svn 是在提交前查看本地文本和版本库里面的文件的区别 返回值有许多种具体含义如下 xff1a url 61 L abc c svn已经在 svn目录锁定了abc c M bar c bar c的内容已经在本地修改过了 M baz c ba
  • 如何应对软件需求不明确、需求频繁更改和需求的无底洞

    入职以来一直会遇到这种问题 xff0c 也许是软件行业的死穴 xff0c 任何项目如果处理不好解决不了这些问题 xff0c 就相当于得了慢性绝症 xff0c 不但项目的结局是死路 xff0c 经手项目的每 个开发人员到管理者都在经受挑战人体