软件开发需求问题

软件开发需求问题

开发过IBM 360的操作系统后,Frederick Brooks很快悟透了软件开发的特殊性,他意识到和其他工程不一样,软件工程的需求是最困难、最重要的概念性工作:
“构建一个软件系统最困难的部分就是精确地决定要构建什么。其他任何概念性的工作都不如确定详细的技术需求困难,需求包括与人、机器和其他软件系统的所有接口。如果做错了,没有任何其他工作的失误会这么削弱最终的系统,这么难纠正。” 开发过软件的朋友对需求都有一堆槽点,如:开发不懂应用领域,有时索性替客户决定需求;客户不懂技术,不知道什么能做,什么不能做,需求表达不清楚;各种原因(能力,投入,责任心…),需求描述质量差,如:二义性,各种遗漏需求,项目后期大量返工;需求不稳定,不断变更;需求传递过程中,信息变形,交付的产品脱离了客户的初衷。

CMMI5认证

 

承诺的和交付怎么差别怎么大呢?

 

需求这些槽点,揭示了它困难的原因。软件需求一方面具有动态不确定性,同时也牵扯到众多干系人,覆盖众多领域知识,解决起来极具困难。现实是软件需求是软件项目成功的最大障碍之一。业界数据显示,返工占软件总投入的30% - 60%, 而需求错误则占其中的75%-85%。上海赛谷CMMI3认证
但是不管怎样,这些困难都不应该成为做不好需求的借口。软件需求的本质从来没有变过,有些IT需求,软件团队就要收集这些需求,再分析它们使之完整、一致、可实现。最好能描述成清晰的软件的输入和对应的输出(功能),同时明确产生输出的时间和其他要求(非功能)。正如我的老同学怀斌说的那样,“现在平台日益复杂了,各种框架、模式、概念、技术层出不穷,但本质没变,0和1以及加法器没变。 本质很简单,从客户角度两个字“好用”。从管理角度是两个字“可控”,品质可控、过程可控、成本可控。从开发角度也是两个字“工程”,提高效率并杜绝黑盒。三者相辅相成。”

几十年来,业界已经积累了很多好的实践,Karl Wiegers总结出需求工程体系中7个领域52条优秀实践。学习、灵活应用、发展这些实践有助于我们管控好软件项目风险,开发出能解决客户问题的软件产品。可惜的是许多软件项目并没有真正重视需求,没有投入必要的时间和资源,不去尝试业界适用的实践,因此而产生低质量的需求,造成项目后期返工。 

多年的评估经历见识不少低质量的需求.

 

二义需求描述满纸飞

 

下列不应该应用于描述需求的词汇却比比皆是,这样的描述导致必然的返工——只有二义性的需求,没有二义的程序。

 

“可接受的,足够的,按实际要求,至少,小于,不超过, X和Y之间, 依赖于, 高效的,快,灵活,多样,如:,改进的,更好的,包括, 例如, 一般,大多数情况下,最大化,最小化,优化,正常情况下,理想情况下,可选择的,大概,应该, 合理的,需要时,合适的情况下,如果可能,可靠的,透明的,自然的,几个,一些,很多,多个,不应该,最新的,支持,驱动,容易,简单,易用等。”(上海赛谷CMMI3认证

明显的需求遗漏没人发现

常见的遗漏需求有隐含需求,如我看到了一条需求要求随时存储一个正在填写web表格,而没看到描述取出它继续填写的需求,简单的对称逻辑啊。异常需求看不到,怪不得有人说软件人员都是乐观主义者,总假设用户使用他们开发的系统时,不会犯操作错误。
遗漏的非功能需求也是非常常见,比如,你真的允许同一用户无限制的尝试不同密码登陆吗?你的安全意识一点都没有么?
垃圾类的需求描述
诸如下面用户故事例子的需求描述也是非常普遍:
“作为客户,我希望能用MP3听下网上所列歌曲的一小段(30秒),再决定购买那些歌曲。”
想象一下,上线后用户发现听30秒的歌不能暂停,不能停止;都是从头开始放,而有些歌前面是前奏音乐,用户30秒听不到半句歌词,刚要进入唱词阶段结果就到了30秒,戛然而止。这样的体验感你还指望有人买歌?
我把这类需求叫做垃圾需求,垃圾需求害死客户、用户,折腾死开发团队。造成这些问题的原因很多,但重要一点是缺乏换位思考的意识,不认真!需求投入不够!任正非关于需求的16字箴言点出了软件需求的精髓:去粗取精、去伪存真、由此及彼、由表及里!做到这一点,我们是需要在需求上花精力的。下面两张图显示,这个投入的回报是非常高的。

有人对一些成功的小项目做了调查,发现 15 – 18% 总时间投入到了需求相关的工作中。NASA对需求投入超过10%的项目和少于10%的项目做了个比较,后者成本进度超标情况远远大于前者。(上海赛谷CMMI3认证)

欧洲的一个组织也做了类似的分析,足够的需求投入,是项目受控的最重要原因。

改进需求过程首先要重视它,尊重它。要有足够的投入,在需求获取,分析,编写,确认各环节做到位,让需求澄清活动贯穿整个开发过程。同时需求人员和产品经理要不断提升自己的能力,学习需求工程积累的好实践。当有的客户提不出需求或者提出的需求不明确时,用你专业的知识,高度的沟通能力,引领客户进行IT规划,帮助客户改善业务效率,实现业务增长。

 

 

文章来源丛斌博士


点击关闭
  • CMMI认证客服

    CMMI3认证客服

    CMMI咨询

    CMMI4认证