修复错误是否有边际收益[关闭]


27

我从一位前同事那里听说,并不是所有的bug都需要修复,因为当您按优先级排列bug时,导致该bug变得更加模糊的用例,或者获得的客户满意度降低了。但是您仍然必须花费大量时间来修复该错误。

为了使我们的产品所有者相信这一概念,我找不到任何好的资源。我所能找到的只是关于软件开发是否存在边际成本的讨论。

修复错误真的有边际收益吗?是否有其他术语解释这个概念?



2
您的问题还不清楚。“不是所有的bug都需要修复”是指有些不值得修复的错误。对我来说,“修复错误真的有边际收益”,这对您来说意味着不同。你能解释一下吗?
布朗

2
那不是产品负责人知道的吗?您为什么认为需要说服他们呢?
停止伤害莫妮卡

@Goyo我并不是要特别问这个问题以说服他们。这是我前一段时间遇到的一个概念,但是找不到更多资源。对于软件开发人员来说,担任管理职位也很常见。因此,我本人将来可能会需要此信息。
格克汗库尔特

2
@GökhanKurt:不是从“所有错误都需要修复”中得出的,它们都同等重要。有些可能比其他更具破坏性,因此具有更高的优先级。
JacquesB

Answers:


66

从业务角度看,错误修复与功能请求没有什么不同。它具有一定的开发时间成本,并且对客户具有一定的价值。如果错误不很严重,则优先考虑该错误修复之上的重要功能完全具有商业意义。

但是从技术角度来看,错误可能更为严重,因为它们表示其他代码可能在其上使用/构建的基础中的错误,在这种情况下,该错误具有“传染性”,并增加了将来的维护成本。因此,修复错误是一项技术上的负担,需要管理,而未实现功能并不会带来持续的成本。但是,错误所引起的技术债务水平很大程度上取决于错误的性质。

在确定优先级时,应考虑所有这些因素。

至于修复错误是否有边际效益:这是给定的。由于并非所有错误的严重性都相同,因此您自然会优先考虑最重要的错误。因此,您修复的错误越多,修复下一个错误的边际价值就越低。但是,是否达到修复错误的水平不值得付出努力,这是业务决策而不是技术决策。


我喜欢这个答案,但是我不会说一个新功能不会产生持续的成本。它通常需要使代码更通用,以适应新功能,并且无论该功能真正提供多少价值,您都必须使用更高的抽象级别。
Doval

25
@Doval你误会了。雅克说的是,尚未编写的功能没有运行成本。换句话说,没有功能不会使实现其他功能变得更加困难(当然,除非后者取决于前者)。另一方面,错误使除修复它外的其他事情变得更加困难。因此,“未编写的功能”和“未修复的错误”是不同的,因为前者不会影响您的代码库,而后者会影响您的代码库。
塞巴斯蒂安·雷德尔

3
我还要补充指出,错误也可能对程序(以及整个产品以及生产它的公司)的形象产生重大影响。如果发现错误,可能会使公司损失一些客户和/或业务吗?
Olivier Dulac

2
举个例子,就是一个具有传染性的bug:在我的一个项目中,一切工作正常,除了在一段并不总是运行的代码中释放了内存。碰巧的是,在我之前编写的所有代码中,它总是能做到;我既没有内存泄漏也没有两次释放,只是一些调试日志似乎混乱。既然一切正常,我没有修复它。然后,我添加了更多代码,不再排队,并且开始出现内存泄漏。这样的错误很小,但是值得修复。不幸的是,它们也很难从实际上的小错误中分辨出来。
基金莫妮卡的诉讼

5
只是为了扩展@OlivierDulac的观点,一个错误可能使最终用户认为“我不相信该软件可靠”并放弃了它,尽管其功能强大。我敢肯定,我们都已经安装了一些似乎真正有用的软件,只是在几分钟后将其卸载,因为它似乎有故障。尽管可能会注意到缺少的功能,但最终用户却想“我将继续使用它,因为我喜欢它确实具有的功能”。从业务的角度来看,我认为错误和功能不应被视为等同。
乔恩·本特利

12

这是一个很好的参考

http://www.joelonsoftware.com/articles/fog0000000043.html

您在编写新代码之前会修复错误吗?Windows的Microsoft Word的第一个版本被认为是“死亡游行”项目。[...]因为错误修复阶段不是正式时间表的一部分[...]

微软普遍采用了最优先的做法是在编写任何新代码之前消除错误。通常,修复错误之前等待的时间越长,修复的成本(时间和金钱)就越昂贵。 。

您可以确定,这些错误在这里出现的时间越长,当它们成为优先级时,修复它们所花费的时间就越长。因此,您现在可以避免日渐昂贵的损失,而不是立即获得原始收益。

管理该问题的一种好方法是定义分配的时间来处理积压问题。这不会像Microsoft那样大肆宣传,但是即使客户并不在意这些问题,即使将来还不是您的问题,它将确保一定程度的解决方案。


3

为了使我们的产品所有者相信这一概念,我找不到任何好的资源。

假设您在一家商业机构工作,那么肯定会有某个知道成本效益分析的人

您的组织拥有有限的开发人员资源,并且有无数的有益工作要做。这些有益的事情包括添加新功能和删除现有错误-与添加新功能一样,删除错误可以改进软件。

因此,显然,对于如何针对此无限列表分配此有限资源,需要做出决策,结果有些错误现在,下周,明年或明年都没有得到修复也就不足为奇了。事实上。

如果您在这里寻找一种更结构化的方法,则可以尝试使用PEF / REV系统,该系统为错误的“用户”和“程序员”视图分配编号,以此作为确定已解决问题和未解决问题的起点。

另请参阅此处有关软件工程的这两篇文章:

解决哪些错误将带来最大的成本收益

几乎每个报告的错误都是高优先级错误


2

并非软件行为的所有无意或不良方面都是错误。重要的是确保软件具有有用的并记录有条件的条件范围,在这些条件范围内可以依靠它以有用的方式进行操作。例如,考虑一个程序,该程序应该接受两个数字,将它们相乘,然后输出结果,如果结果大于9.95但小于10.00,大于99.95但小于100.00,则输出伪数字,依此类推如果编写该程序是为了处理其乘积介于3到7之间的数字,并且永远不会被调用来处理其他任何数字,则使用9.95修复其行为将不会使其对其预期目的更加有用。但是,它可能会使该程序更适合于其他目的。

在上述情况下,将采取两种合理的措施:

  1. 如果可行,请解决此问题。

  2. 指定程序输出可靠的范围,并声明该程序仅适用于已知产生有效范围内值的数据。

方法1将消除该错误。方法2可能会使进度不适用于某些目的,而不是适合其他目的,但是如果不需要程序来处理可能不是问题的有问题的值,则方法2可能会使进度不适用于某些目的。

即使由于编程错误而无法正确处理99.95到100.0的值(例如,在四舍五入到一位后决定输出小数点后两位小数,从而得出00.00),也应仅将其视为错误,如果在这种情况下将程序指定为产生有意义的输出。[顺便说一下,上述问题出现在Turbo C 2.00 printf代码中;在这种情况下,这显然是一个错误,但是调用错误的printf的代码只有在它可能产生问题范围内的输出时才是错误的。


0

从广义上讲,是的,不是所有的bug都需要修复。所有这些都是关于风险/收益比的分析。

通常情况是,企业将与技术负责人和利益相关者举行会议,讨论“需要解决”的漏洞。他们将决定花费在修复错误上的时间(=金钱)是否对企业有价值。

例如,“小错误”可能是网站“条款和条件”部分中的轻微拼写/语法错误。提出此建议的个人可能会认为更改的幅度很小,但企业会认识到它可能对品牌造成的潜在危害,以及确定几个字符的相对容易性。

另一方面,您可能会发现一个似乎很重要的bug,但该bug难以修复,只会影响少量的用户。例如,对于使用旧版Google Chrome浏览器的用户,次要按钮链接已损坏,并且碰巧禁用了Javascript。

业务未修复错误的其他原因可能是,所花费的时间会使项目陷入无法预料的时间,或者开发人员的时间最好花在其他修复/编码上。该错误可能还很小,可以发布,然后在以后修复。

希望能更好地解释这个概念!我肯定会避免一般性地考虑这一点-每个错误都是唯一的,应该这样对待。


-4

因为当您进入错误的优先级列表时,导致该错误的用例变得更加晦涩,或者获得的客户满意度降低了。

所以他们的“争论”实际上是

如果您足够长时间忽略该错误,则用户将忘记问题所在或找到解决该问题的方法。

新的功能请求一样,应该对错误进行优先级排序并按顺序进行处理(但是,可以说,在所有功能请求之上)。


3
不,他的论据是,较低优先级的错误很可能很少发生,并且可能并没有真正在纠正方面增加很多价值(例如,如果您的网站上的时钟有半分钟的时间,或者您的网站是一月的午夜出现错误,首先是摩尔多瓦的用户)
显示名称
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.