From:http://www.designsmells.com/articles/four-strategies-for-managing-technical-debt/
image.png目前与软件工程研究,开发者博客以及软件工程开发者会议有关的文献大量谈论技术债务。要问 - 为什么技术债务是软件开发团队重要的关注点?我们为什么要关心技术债务?如果一个项目的技术债务增加,特别是当项目正常运行并且软件的客户不抱怨时该怎么办?我们应该关注它吗?在本文中,我们尝试了解技术债务和需要解决的原因。
让我们从一开始就介绍该术语的开始。 Ward Cunningham在1992年的一份报告中向全世界介绍了术语“技术债务”,因为当我们明知或无意地做出错误或非最佳的技术决策时产生的债务。这个决定不仅影响源代码实体对决策的影响,还会影响其他技术决策导致更多的债务。在长期未支付应计技术债务的情况下,软件越来越难以改变,并且在极端情况下,软件产品在技术上变得破产,即,将改变可靠地引入规定是不可行的时间。
此外,大量的技术债务影响软件开发团队的生产力,降低他们的士气和动力。技术债务持续累积导致恶性循环:大量的技术债务降低了团队的生产力和士气;与此同时,低生产力吸引管理层推动技术债务问题的更多特征和推迟,这反过来进一步增加了技术债务。
像金融债务一样,技术债务是委托人(最初的黑客或捷径)的结果,以及当委托人未按时处理时产生的累积利息。利益部分本质上是复合性的:越多的开发团队忽视或推迟它,债务随着时间的流逝就越大。
技术债务可能源自不同的工件和粒度。例如,实现,设计和体系结构的气味会导致源自不同粒度的源代码的技术债务。技术债务的其他来源是测试气味,配置气味和不良文档。
管理技术债务
管理技术债务的第一个方面是防止技术债务的累积。它包括提高软件开发团队对技术债务的认识,并引入组织内的相关流程(如手动同行评审和嵌入持续集成的质量分析)。
通常,团队从事累积相当数量技术债务的项目。在这种情况下,进一步忽略债务是不明智的,因为它可能导致项目走向技术破产。另一方面,在几个月内停止开发新功能也不切实际,而只是专注于偿还技术债务。在这些情况下,需要一个平衡和务实的方法来稳定偿还债务,并继续推进软件的功能和特性。现在让我们来讨论一些偿还技术债务的实用策略。
1.识别并跟踪债务
偿还技术债务的第一步是要知道我们有多深,即识别现有债务。可以使用相关工具来确定具体的债务情况(例如气味)。例如,Designite可用于在实现,设计和体系结构粒度上识别源代码中的气味。团队中有经验的开发人员和架构师也可以识别债务实例。
缺乏任何行动使识别技术债务问题的努力无效。
但是,并非所有确定的问题或气味都是相同的。有些问题在源代码中被识别出来,这些问题多年来一直没有被触及,有些问题被错误地检测到,有些问题被正确识别,但是你宁愿和他们一起生活(例如,在你认为它也是如此的情况下昂贵的重构)。决定你想要如何检测气味是很重要的。一些工具使开发人员更容易。例如,Designite在Visual Studio IDE中显示检测到的实现和设计气味,并鼓励开发人员标记气味。开发人员会对气味做出决定,标记它(重构,错误或丢弃),这是工具记住的。标签为错误或丢弃的气味实例不会显示给开发人员。
image.png
2.优先SMELLS
并非所有债务都是相同的 - 不同类型的债务有不同的利率。因此,必须根据诸如债务实例对项目的潜在影响等因素重新确定已确定的债务实例的优先顺序。在现实世界的项目中实际上不可能实现(实际上并不推荐)100%的“无债务”;用一些(低优先级)债务来维持特征开发和技术债务偿还之间的平衡是可以的。
3.计划在每次迭代中小型的分体式安装
在金融领域通常以较小的分期支付大笔贷款。以同样的方式,项目团队不太可能同时偿还巨额技术债务;然而,以小批次形式还款 - ERIs(Equated Release Instalments)是非常可行和实用的,每次迭代中的一小部分努力都致力于重构。
与金融领域的一次性还款类似,定期进行大额付款。这种偿还债务类似于在从雇主处获得奖金时支付大额住房贷款的部分支付。不断寻找机会大规模偿还债务,例如,在重大发布后。诸如进行架构重构等大规模改变可能会大大减少技术债务。这些练习需要大量的计划和有效的沟通来减少相关的风险。
4.激励和奖励维护质量的员工
“人们关心你衡量的东西,你会得到奖励。”
技术管理人员必须确保软件开发团队有动力维持软件的质量。如果软件开发团队的经理测量交付的功能(LOC)的数量或团队修复的一些缺陷作为他们性能的标准,那么团队将只关注添加功能和修复缺陷。它的完成程度与完成它一样重要。保持高动力和奖励人们不仅要制定工作规范,还要制定质量标准,这是战胜高技术债务和降低质量的关键战略。
在这种情况下,男孩的侦察兵规则可能非常相关。它说“总是离开露营地比你清理干净”。在软件开发的背景下,它可以被解释为:“让类(或方法)比你得到的更干净”。鼓励团队在他们接触一段代码时进行重构,以增加功能或修复错误,从而在一段时间内不断提高代码质量。
总之,理解技术债务并保持低水平对于软件开发团队来说至关重要。忽视技术债务问题会给团队带来负面影响,例如低生产力和低士气。但是,引入意识并引入适当的工具和策略可能有助于团队控制它。
RELATED READING
1. Book — Refactoring for Software Design Smells
网友评论