错误是技术债务的一部分吗?


44

我们的Scrum Master一直将错误称为技术债务。他说得对吗,在敏捷世界中,虫子被视为技术债吗?


为什么确定它们是否为技术债务很重要?它会影响您在Scrum板上表示错误的方式,还是会影响您计划修复它们的方式?
布莱恩·奥克利

@BryanOakley有些错误会阻止您以迫使您解决这些问题的方式,从而引入更多的技术债务。这些错误可能是过于昂贵修复
BЈовић

4
@BryanOkley-我一直认为技术债务是设计或重构,这是改进实施所必需的,但由于时间/预算的限制,目前暂时无法实现。我认为使用正确的术语很重要。我可能错了,或者他可能错了,这就是为什么我问这个问题。
user86834 2013年

我明白那个。为什么称它们为技术债务很重要?您是说如果将它们归类为“技术债务”,那么您将对这些错误与其他错误的处理方式有所不同?
布莱恩·奥克利

1
您可以拥有大量的技术部门,而没有一个错误。技术部与编写良好和设计良好的代码相反。编写良好的代码易于维护,测试和添加。技术部门减慢了开发速度,使其难以跟踪错误,并增加了新代码引入错误的机会。
路易斯·佩雷斯

Answers:


35

我认为这里的答案很简单-技术债务的关键特征是它是我们选择产生的。

我们选择做出我们期望会在以后引起问题的架构,设计或实施决策,以便更快地实现特定目标。

错误不是我们选择在代码中包含的东西-因此,事实上不包含技术债务。

当然,对于发现后做出的选择,人们可以提出各种有趣的(可能是有效的)论点,但是从根本上(尤其是在问题的上下文中)不,错误不是技术上的负担-听起来更像是对流行语宾果游戏的滥用。


作为后记-我不同意这样的说法,即技术债务将导致自身错误,因为这对选择的性质做出了许多假设。例如,您可以编写出结构良好,结构良好,经过测试的代码,这些代码仍然会(例如)在架构方面做出妥协,以实现早期交付。同样,您可以选择不自动执行您的部署过程,这不会导致错误,但可能会导致很多压力和痛苦。当然,如果所欠的债项是您编写的代码不是SOLID(或其他),则可以……但是,绝非总是如此。


1
+1。我认为BЈовић的答案非常正确,但您的答案确实触动了脑筋。(不过,我对您使用“ 事实上的”一词感到有些困惑。我认为您不能说法律上的错误技术债务吗?)
ruakh

使用语言是如此有趣……请尝试以下方法: en.wikipedia.org/wiki/De_facto-将其阅读为“出于所有意图和目的”,与我的意图非常接近
Murph 2013年

“我认为这里的答案很简单-技术债务的关键特征是它是我们选择产生的。” 您从哪里得到这个定义?我认为这是不对的。那是技术债务的一部分,另一部分是隐性的,通常是由于无知和不良做法所致。
gphilip 2014年

法律上的法律 明天事实上。QED。
Radarbob 2014年

1
根据Martin Fowler的《技术债务象限》,您可以将错误和错误代码识别为“鲁bad的无意”债务:martinfowler.com/bliki/TechnicalDebtQuadrant.html。我认为,要点是,如果您将一些敏感的bug标记为债务,那么您可以了解它们花费了多少成本以及是否需要消除它。例如,您是否草率编写模块,并且一年仅更改一次,并且可能需要数周的时间来重写它-您可能应该保持原样,因为该债务的利息支付非常少
-shershen

20

是。

技术债务(也称为设计债务或代码债务)是一种神经病的隐喻,是指代码库中软件体系结构和软件开发不佳或不断发展的最终结果。

资料来源:维基百科

通过更好的工作流程(例如,在跳转到编码之前进行正确的体系结构设计,执行TDD等),更好的编码实践等可以避免的技术债务。

通过进行额外的审查或使用更正式的方法,可以避免大多数错误。通过尽一切努力避免一开始就没有错误,可以降低项目的短期/短期成本,但会增加技术负担。


阅读了BЈовић的答案后,我发现它可能不像我想的那么容易。

  • 例如,错误是技术债务的一部分吗?文章声称,只有您知道但没有解决的错误才属于技术债务的一部分。

  • 另一个例子,克里斯托弗(Christopher)的“技术债务思想”将缺陷归结为技术债务结果,而不是技术债务的一部分。话虽这么说,但许多列出的结果(例如“实现新功能的成本”)都受到错误数量的影响。

  • 最后,在创建技术债务的ABCDE-T模型时,我将错误作为六个因素之一,但对它们的考虑却有所不同。重点不是错误本身,而是错误的收集,优先级和解决方法。错误本身是由于技术债务而出现的(就像前面的示例一样),但从来没有将它们本身视为技术债务的因素。

话虽如此,我仍然倾向于回答错误-任何错误-是技术债务的一部分。

第一个论点:

阅读Jeff Atwood的报价,大多数错误的资格如下:

快速而肮脏的设计选择,使我们在未来的开发中需要付出额外的努力

在业务应用程序中,几乎每个错误都来自快速而肮脏的设计选择或错误的做法(可能是缺乏测试,开发人员对技术的了解不足,缺乏沟通,对领域缺乏了解,等等),这意味着“通过将快速,肮脏的设计重构为更好的设计”并采用更好的实践,企业可以解决大多数错误。

第二个论点:

如果我们将公司出售给另一公司时要考虑的重要普通债务与技术债务(将项目出售给另一公司或给定给某公司的考虑在内)同样重要,对于另一个团队,我们很容易看到错误是技术负担的一部分,因为新团队将:

  • 在开发新功能之前,要么必须处理这些错误(Joel Test的第5点:您是否在编写新代码之前修复了错误?)

  • 或者保留漏洞,以这种方式保存/增加技术债务。


1
即使此答案提出的论据是正确的,我个人也不认为缺陷是技术债务,但是a)我们如何定义技术债务IMO并不重要,并且b)这是一个写得很好的答案,我我还是要投票 +1!
布莱恩·奥克利

13

杰夫·阿特伍德(Jeff Atwood)在他的文章偿还技术债务》中对什么是技术债务给出了很好的答案:

技术债务会产生利息支出,这是由于快速而肮脏的设计选择,我们在未来的开发中必须付出额外的努力。我们可以选择继续支付利息,也可以通过将快速而肮脏的设计重构为更好的设计来偿还本金。尽管偿还本金需要付出成本,但未来我们会减少利息支出,从而获得收益。

严格地说,如果错误不会减慢软件开发的速度(更改功能,添加新功能等),则它们不属于技术负担。它们是软件缺陷。

但是,如果修复错误的成本太高,或者迫使您解决它(并引入更多的技术债务),那么它将成为技术债务的一部分。


1
实际上,它们确实是这样做的,因为错误可能导致新功能的额外工作,而没有这些错误将是不必要的。我什至看到代码朝着一个错误的方向发展(增加了更多的技术负担),因为一个错误以某种方式演变为“这不是一个错误,它是一个功能”,因为客户编写了脚本或任何依赖于错误行为的行为。
Marjan Venema

@MarjanVenema好点。我还没想到
2013年

请注意,此引用并非来自Jeff Atwood,而是来自Martin Fowler的帖子。Jeff在他的博客文章中也引用了这一点。
Uooo

6

错误不是技术债务。技术债务正在追求质量,而不是缺乏质量。首先,软件不应该包含错误。您知道,整个工作软件都超过了综合文档。

技术债务的最大违法者是“临时错误修复”,您知道要通过测试并接受故事的人,您曾承诺自己会在以后重构,但以后再也不会重构。随着这些临时修复程序,补丁程序和其他内容的累积,代码变得不必要地混乱,难以更新和测试,并且通常是一场噩梦,但它仍然可以正常工作。

为了支持这种观点,我直接去了沃德·坎宁安(Ward Cunningham)。关于这一点,沃德前不久与Capers Jones进行了很好的访谈,值得一看。

与Ward Cunningham&Capers Jones进行的技术债务辩论

另一本值得一读的文章是马丁·福勒(Martin Fowler)

马丁·福勒(Martin Fowler)谈技术债务

在Martin的文章中,请找到指向OOPSLA92的Ward Cunningham最初提到的技术债务的链接:

WyCash投资组合管理系统

以上文章的引文:

尽管不成熟的代码可以很好地工作并完全为客户所接受,但是过多的代码将使程序无法控制,从而导致程序员的专业化程度极高,最终导致产品不够灵活。交付第一次代码就像陷入债务。

最后,技术债务可能已经包含一些人的错误,我想这很好。我只是不认为这是初衷。


“软件一开始不应该包含错误。” 除最简单的程序外,所有软件均包含错误。您将此栏设置得太高。
bhspencer '16

2

严格来说,您的问题的答案是“否”。

技术债务可能(并且可能会)导致错误,但是断定任何错误都是技术债务的结果,这可以在两个事实之间进行解释:存在错误并且存在技术债务(假定可以得出结论)。

如果您的Scrum Master“作为理论”指出错误是技术债务的结果,那么他在偷工减料。如果他对不断出现的特定错误说这话,那可能是对的-我们从这里看不到代码质量;-)

他可能还会不断抱怨人们没有听他讲技术债,因此将每个错误都标记为技术债,但现在我正在猜测。


2

在我看来,您是否认为错误是技术债务的一部分...还是没有关系。

显而易见的事实是,现有的错误代表着将来可能需要执行的额外工作,以进行修复或解决。

技术债务(通常使用标签)也代表将来可能需要执行的额外工作……一种或另一种方式。

因此,无论您说已知(或未知)错误是技术债务,还是不是技术债务,实际上只是定义的问题。而且,由于没有关于“技术债务”的权威性定义1,因此整个讨论都是毫无意义的。

正如刘易斯·卡洛尔(Lewis Carroll)写道:

“当我使用一个词时,”矮胖子用一种轻蔑的语气说,“它的意思就是我所选择的意思-既不多也少。”

这实际上就是自然语言的工作方式。话是人们所认为的意思。词典定义等仅记录了单词的使用方式,而不一定是准确的记录。如果您的Scrum Master希望将已知的bug称为技术债务,那么谁又说他是“错误的”呢?


1-引用Ward Cummingham和Caper Jones之类的人也无济于事。充其量可以告诉我们他们使用(使用)该短语时的意思(或意思)。他们没有“拥有”这句话。尽管他们无疑是这些问题的权威,但这仍然只是他们的意见。

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.