NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

管理软件债务

  • 2014-03-24
  • 本文字数:1710 字

    阅读完需:约 6 分钟

软件债务以不同的形式存在。技术债务广为人知,能力债务和质量债务是另外的一些形式。软件债务会导致产品运维成本增加,使开发人员沮丧。现在有几种解决方案可以管理软件债务。

在博文《另一种软件债务》中,Niklas Björnerstedt 谈了“能力债务”,并将它定义为:

代码库中有什么和你了解多少之间的差距。

为了将软件运维成本保持在一个较低的水平上,技术债务和能力债务都应该受到重视,正如 Niklas 的阐述:

除非你偿还,否者技术债务将不可避免地随着时间增长,同样地,能力债务也会随着时间增长。这两种债务之间最大的不同在于:代码库修改越多,技术债务增长越快;而如果停止修改,能力债务就会更快地增长。因此,在成熟的系统中,现行开发已经结束,能力债务最为严重。

Niklas 推荐了两种可用于减少债务的技术:结对编程和代码重构:

在我看来,结对编程的真正价值在于减少了技术债务和能力债务。通过结对,团队成员扩大了他们熟悉的代码库范围,并且增加了重叠范围。类似地,重构的价值也不仅仅是减少技术债务。重构还是一种减少能力债务的好方法。只有真正地了解一个系统时,你才能修改它。

当能力债务增长,系统运维所需的工作量就会增加,到了一定程度,组织就会开始考虑替换该系统:

当真正的问题是他们不知道系统如何工作时,人们就会声称旧系统无法运维。是的,技术债务使情况变得更糟,因为混乱的代码和缺少自动化测试使得系统了解起来令人沮丧。当最初的开发人员剩下的太少,而企业又无法找到新的能够或愿意学习的开发人员,通常就会产生重写的冲动。

Mike Hustler 写了一篇博文《管理技术债务最敏捷的方式》。他在文中探讨了如何平衡产品开发能力和管理技术债务。他对将产品移交给运维团队如何导致技术和能力债务的增长进行了说明:

我见过有的组织建立一个单独的运维团队,比如,规模是新功能团队的一半。在我看来,这个做法是错误的(至少,对于与我们合作的那种规模的团队而言是如此)。(……)源于主人翁自豪感的那份坚持没有了,因为某人正在处理的 Bug 是由另一个人造成的,事实上,是另一个团队。如果没有良好的沟通,最初为什么采用某个特定方法的背景就无从知晓。缺少领域知识导致问题修复的效率降低。更糟糕的是,我见过有的运维团队,成员是缺乏经验的开发人员,他们很难确定问题的根源,导致了将返工当首选的创可贴式修复的发生。

技术债务会令开发人员沮丧,并使他们放弃会增加能力债务的系统。Cory House 在博文《干净代码重要的七个原因》中有这样的描述:

编写马虎或混乱的代码会使项目出现技术债务。当结合上下文仔细考虑,技术债务可能有用,但过多的技术债务会令人沮丧,进而导致组织人才流失。当简单的事情变得困难,开发人员开始用脚投票,去其它地方。相比于工作数量,开发人员更能从其工作质量上获得工作满足感。技术债务降低了重用机会,而且为代码库的其余部分设置了一个较低的质量门槛。

David Hammerslag 写了一篇博文《想要可预见性吗?避免质量债务》。在文中,他探讨了放着代码中已发现的缺陷不解决的影响。他将质量债务定义为:

质量债务是在任意给定的时间点修复软件产品中的一个缺陷所需要的工作量的度量。

他将质量债务与技术债务做了比较:

技术债务衡量设计和代码的质量,是软件的内部质量。质量债务衡量代码的外部质量,是用户可以看到和体验到的东西。用户永远无法(直接)看到技术债务。

一个程序可以完全没有质量债务,而有大量的技术债务。所有必需和预期的功能都可以正确地实现,并完美地运行。然而,技术债务可能相当多,显示出你能想象到的每一个糟糕的软件设计和实现。另一方面,最好的设计,最优雅的代码也可能产生错误的结果或缺少功能。

David 写道,质量债务应该忽略:

质量债务很像财务债务:时间越久越难偿还。在最坏的情况下,项目将测试推迟到开发完成之后。缺陷存在时间越久就越难以修复,这已是不争的事实。如果许多缺陷持续存在(不管是已知的,还是未知的),影响就会因为缺陷相互遮掩而加剧,而修复会涉及相同的代码。

David 推荐了几种可以用于管理缺陷及将质量债务保持在较低水平上的敏捷实践:

  • 完工定义。
  • BDD/ 自动验收测试。
  • 持续集成。
  • 自动化测试。
  • 不容忍“破窗”。

查看英文原文:**** Managing your Software Debt

2014-03-24 03:051477
用户头像

发布了 256 篇内容, 共 81.8 次阅读, 收获喜欢 11 次。

关注

评论

发布
暂无评论
发现更多内容

IPQ5018 VS IPQ6010 VS IPQ9574|Advancing Wireless Connectivity: The Power of Wi-Fi 6 & Wi-Fi 7

wallyslilly

IPQ6010 ipq5018 ipq9574 IPQ9274

对话在行人|厦门航空:紧抓数智化转型关键因素实现业财融合

用友BIP

2023全球商业创新大会 对话在行人

Web3.0时代的全新合作模式:DAO | 京东云技术团队

京东科技开发者

区块链 DAO Web3.0 企业号9月PK榜

百度集团副总裁吴甜:大语言模型面临三大技术挑战

飞桨PaddlePaddle

文心一言 文心大模型

文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题

福大大架构师每日一题

福大大架构师每日一题

慢SQL治理实践及落地成果分享 | 京东物流技术团队

京东科技开发者

数据库 sql 慢SQL 企业号9月PK榜

在加密货币交易所开发中使用人工智能和机器学习

区块链软件开发推广运营

交易所开发 数字藏品开发 dapp开发 区块链开发 NFT开发

集成学习方法——随机森林

小魏写代码

如何提高技术领导力?与你分享 5 个心得

LigaAI

程序人生 技术管理 成长与思考 技术领导力 企业号9月PK榜

探索以太坊 Layer 2 解决方案的后起之秀——Starknet

Footprint Analytics

区块链 以太坊 Layer 2

中国广核集团智慧司库系统票据业务成功上线!打造票据数智管理新标杆!

用友BIP

全球司库

JDK8升级JDK11最全实践干货来了 | 京东云技术团队

京东科技开发者

Java jdk8 JDK11 企业号9月PK榜

Microsoft word 2019 for Mac v16.78 beta中文激活版

mac

windows 办公软件 苹果mac Word 2019 文字处理软件

教你用API插件开发一个AI快速处理图片小助手

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号9月PK榜

快手发布文生图大模型“可图”,探索AI新玩法

Geek老T

短视频 AIGC

什么是隧道代理、http代理,隧道代理较于http代理有什么优势?

巨量HTTP

代理IP http代理

对线面试官 - Java基础面试题【一】

派大星

Java 面试题

国庆机酒预订又快又便宜?内附华为Mate60负一屏抢购攻略

最新动态

软件测试/测试开发丨利用人工智能ChatGPT批量生成测试数据

测试人

人工智能 程序员 软件测试 ChatGPT 测试数据

聚焦企业开放OpenAPI痛难点,华为云API Explorer助力构建API门户

华为云开发者联盟

软件开发 华为云 华为云开发者联盟 企业号9月PK榜

中国机械总院张红新:强化集团级数据治理 业财融合助力企业降本增效

用友BIP

2023全球商业创新大会

选择渲染农场的几个标准

Finovy Cloud

游戏制作 影视制作 渲染 云渲染 渲染农场

修旧利废,提升净资产收益率

用友BIP

资产管理

Java并发Map的面试指南:线程安全数据结构的奥秘

程序那些事

Java 多线程 程序那些事 面试秘籍

主动写入流对@ResponseBody注解的影响 | 京东云技术团队

京东科技开发者

spring 注解 企业号9月PK榜 @ResponseBody

Unite for Mac(将网站转化为应用程序) v4.6中文激活版

mac

苹果mac Windows软件 Unite 应用程序转换工具

Rocketmq并发和顺序消费的失败重试机制

石臻臻的杂货铺

RocketMQ

管理软件债务_架构_Ben Linders_InfoQ精选文章