写点什么

技术债还是有用的隐喻吗?

  • 2011-08-07
  • 本文字数:1572 字

    阅读完需:约 5 分钟

技术债由 Ward Cunningham 提出,是指:

另一个更严重的缺陷是无法稳固 。虽然不成熟的代码有可能工作正常也能被客户完全接受,额外的工程量将会导致程序不可掌控,引发程序的极端特化并最终得到一个不灵活的产品。交付第一次的代码就像开始背负债务。少量的债务可以加速开发过程,但很快就要偿还回来,代码需要重写。目标让这种成本可被接受。当债务没被偿还的时候会引发危险。在“不那么正确”的代码上花费的每一分钟都是技术债的利息。整个工程组织都会因这种债务压力导致的不稳定的实现,无论是面向对象还是其它方法,而停滞不前。

在 LinkedIn 敏捷联盟小组的一个讨论中质疑“技术债”在如今全球化软件开发世界中是否仍是个有效的隐喻 Marvin Toll 发起了这个讨论,他说到:

在将近二十年之后可能我们现在有足够的经验来观察这个隐喻是否还有效。我的观察?“没什么用”在一个愈加全球化的 IT 社区中,英语作为第二语言,140 个字符就能引起注意,这个隐喻的细微差别已不能很好的指导应用程序开发了。

换句话说,关于劣质代码的讨论陷入解释财务用例的困境。

绝大多数人站出来为这个术语辩护,它的重要性在于让人们关注一个常常忽视但代价高昂的问题。 Daniel Nelson 分享了他的感受,即人们不熟悉这个术语的危险:

从我数年的编程经历、然后成为业务分析师、现在是 CSPO 的经验来看,我发现如果敏捷团队成员没有对技术债(无论在你的特定环境下叫做什么)哪怕基本的理解将是危险的,也是引发和补救这种技术债的常见原因。

没有明确的实践来预防它,技术债能够并会发展超出控制并损害软件。代码会变得缺陷众多、零碎,并导致接口混乱。

我喜欢这里用的隐喻并认为适用得很好,只要用某些东西提醒团队注意这些问题。

Steve Gordon 指出隐喻可以并存:

隐喻只是模型,但使用其它常见的概念而非数学术语或绘图约定。像所有模型一样,隐喻描述了某个方面并忽视了其它方面。

技术债隐喻描述了劣质代码的持续增长的成本。它并不想描述坏的代码是什么……许多模型或隐喻能没冲突的共存,特别是当它们描述不同的方面或让不同的人达成共识。

Curtis Stuehrenberg ,QA 经理,解释了为什么对他的角色来说技术债是个重要的术语:

我个人喜欢这个术语,因为关于它的讨论趋向凸显主题和冲突,这在通常的标准项目团队中是想掩盖的。无论你在那种团队中,总会有你了解需要做的基础设施的事情和销售团队知道他们能卖更多钱的炫目的功能的角力。如果你关注居住改善,你也会看到类似的角力,卖房者尝试在卖出房子之前粉饰一新。房屋代售的每一天,卖房者都会损失钱,无论是直接的维持成本还是他可以将资本投资其它方面的间接成本。这就导致了售房者希望项目时间尽可能短。他们也希望尽可能少的投资以便最大化他的投资回报率(ROI)。

如果你仔细观察,你会发现有经验的售房者尽其所能的避免做诸如打开墙壁或挖开地板之类的事情。有经验的售房者知道一旦他们做了这些事,他们从统计上来说总会发现他们不得不因结构或安全原因进行修复或是基于法律缘故告知潜在买家的有风险的事实。

项目中的技术债就像隐藏在墙后的,埋于地板下的和在屋顶內的缺陷。大多数团队会花大量精力不搞坏原始的源代码因为他们知道一旦这么做了他们就是打开了需要高昂代价重做的大口子。就像房屋一样,代码库越老你越可能发现把手和管子的线路或石棉或铅涂料。

这就是为什么我作为一个 QA 喜欢谈论“技术债”。如果我们只是等在那儿并说我们隐约担心检查天窗因为我们非常肯定会找到黑霉菌,那我们可以理性的评估风险并选择一个风险规避策略。不谈论它只意味着一些人正在试穿一件新的公司衬衣后背缝着巨大的靶子。

因此,技术债是一个好的隐喻吗?看上去对于大多数人还是管用的,至少它没什么害处。它可能不适合所有的文化和所有团队,这也可以接受因为隐喻可以共存。这符合你的经验吗?

查看英文原文: Is Technical Debt Still a Useful Metaphor?

2011-08-07 21:542342
用户头像

发布了 32 篇内容, 共 97775 次阅读, 收获喜欢 1 次。

关注

评论

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

直播预告|从新手村到魔王城,高效默契的敏捷团队如何炼成

观测云

聚焦企业流程智能化发展新趋势,中国信通院2022 RPA创新产业峰会即将开启

王吉伟频道

RPA 机器人流程自动化 中国信通院 机器人开发 智能自动化

开源生态与AI芯片的碰撞&Dragonfly基于P2P的镜像加速系统 | 第 39-40 期

OpenAnolis小助手

开源 dragonfly p2p 龙蜥社区 AI 芯片

阿里面试官最新分享的Java面试宝典,含8大核心内容讲解

Java工程师

Java 面试 offer

聊聊云原生数据平台

观远数据

开源 云原生 8月月更

一种新的测试方法:视觉感知测试

和牛

软件测试 8月月更

常用持续集成工具对比

和牛

软件测试 8月月更

自助服务知识库是什么?

Geek_da0866

在 Istio 服务网格内连接外部 MySQL 数据库

万猫学社

MySQL 云原生 istio

defi质押借贷理财挖矿dapp系统开发逻辑

开发微hkkf5566

一文搞懂传统单节点网站的 Serverless 上云

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

Python命令行输出彩色字符串

和牛

Python 8月月更

在Istio中,到底怎么获取 Envoy 访问日志?

万猫学社

云原生 istio envoy

requests库访问接口

和牛

测试 8月月更

观测云入选 CNCF 云原生全景图

观测云

web技术支持| 基于vue3实现自己的组件库第三章:Checkbox组件

anyRTC开发者

Vue Web 音视频 WebRTC Checkbox组件

一张图快速了解 Istio 的 EnvoyFilter

万猫学社

云原生 istio envoy

Go-Excelize API源码阅读(六)—— DeleteSheet(sheet string)

Regan Yue

Go 8月日更 8月月更

SpringBoot+Vue+Flowable,模拟一个请假审批流程!

江南一点雨

Java spring springboot flowable

不爱生活的段子手不是好设计师|ONES 人物

万事ONES

烟雾、空气质量、温湿度...自己徒手做个环境检测设备

华为云开发者联盟

开发 传感器 环境监测

开源一夏 | 使用 JavaScript 和 CSS 的简单图像放大镜

海拥(haiyong.site)

开源 8月月更

【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(上)

荣耀开发者服务平台

开发者 教程 安卓 荣耀 honor

【接入指南 之 直接接入】手把手教你快速上手接入HONOR Connect平台(中)

荣耀开发者服务平台

手机 新手指南 安卓 荣耀 honor

app自动化测试webview怎么操作

和牛

自动化 软件测试 8月月更

如何搭建知识库,让您的内容更丰富?

Geek_da0866

阿里总部最新分享SpringCloud 生态全栈笔记,涵盖了五大核心组件,太强了!

Java工程师

Java spring spring-cloud

怎么学自动化测试

和牛

自动化 软件测试 8月月更

分享几个自动化测试的练手项目

和牛

自动化 软件测试 8月月更

本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统

OpenHarmony开发者

OpenHarmony

技术债还是有用的隐喻吗?_研发效能_Amr Elssamadisy_InfoQ精选文章