当然软件并没有耗尽,但几十年前人们普遍认为,应用程序生命周期代码维护的后期引入了更多错误,而不是修复。
但浴缸曲线是否适用于使用现代软件工程方法开发的现代软件?
答案 0 :(得分:8)
简短回答是“是”。很长的答案是,浴缸分布不是一个很好的模型,因为失败的工作方式缺乏连续性。例如,输入值为42会导致被零除错误;那么这些失败的分布将完全是输入中42个值的分布。它不像硬件,正如你所说:软件不会随着时间的推移而失败,它会在错误时失败。
现在,可能是你误用了这里的字:你的意思是缺陷而不是失败。 失败是一次错误行为; 缺陷是实现中的一个缺陷,一个“bug”。
软件缺陷的出现往往具有类似浴缸的分布,但它实际上并不像你的图片那样干净:早期观察到错误并逐渐减少,然后补丁和新版本出现问题,总体上升趋势开始进入软件的生命周期。但是,即使这样做也需要仔细定义,因为你真的在谈论每单位时间观察到的缺陷。
现在,已经说过,现代SE实践往往会改变实际的速度,但不会改变观察到的缺陷随时间的分布。 “现代”在这里也值得一点定义:航天飞机HAL软件具有非常低的缺陷率,使用20年前“现代”的SE技术:强规格,结构化编程,严格审查和OCD版本控制和测试。极限编程往往具有较低的“缺陷”率,但许多传统方法称之为“缺陷”的XP称为“用户输入” - 因为没有有限和严格的定义应该做什么,“缺陷”只是另一个故事。
有一些不错的研究表明XP / TDD会导致低缺陷率,但如果缺陷/单位时间分布形状不同,我会非常惊讶。
答案 1 :(得分:1)
浴缸曲线实际上是硬件故障的描述(并且是一个很好的故障)而不是软件。
然而,软件也有类似的情况。一般来说,在大多数软件生产中,我们创造复杂性的能力继续略微超过我们处理它的能力 - i.o.w.有一些彼得校长在工作,软件系统(统称)在复杂性增长,直到它们变得无法管理,然后呆在那里。因此,虽然今天我们处理1990年代的一些系统性问题要好得多,但那时我们处理00年代的系统性问题并不是更好。这就是生活。
但我认为这看起来不像是一个浴缸。
答案 2 :(得分:0)
实际上,在软件的初始部署期间发现的错误最多。在此之后,它通常是一组渐进的错误,主要是由于对代码的修改或添加新功能造成的。没有像初始代码版本那样。随着制造原始产品的开发人员终止,升级停止,那么这些错误也会停止。
答案 3 :(得分:0)
我认为图中有一些(小)真相。在第一个版本或第一个版本发布之后,您将引入新功能和新错误以及针对先前错误的错误修复,因此我认为您的新错误源源不断。但是一段时间后代码库变得脆弱且难以维护,因此我相信新bug的流量会急剧上升。最后(希望)你可以说服你的老板停止修补并开始重新设计。
答案 4 :(得分:0)
我认为很多都取决于它的维护情况。我有一个大的GUI应用程序,我实际上是唯一一个维护它的程序员,它的缺陷频率多年来稳步下降,我预计它不会在未来的任何时候上升。
但是,如果我让一个初级程序员维护它,我就不会有同样的感觉,因为维护程序员编写一个“足够好”的修复而不是“正确”修复的诱惑很大。我不能完全责怪他,他可能不知道原始程序员所做的代码。
关于浴缸的右侧,如果考虑外部因素,例如操作系统,那么可能存在一些相关性,因为我有一些应用程序更新版本的Windows破了,通常没有应用程序的错误。但这只是一个相对较小的数字。