写点什么

解析技术债务

  • 2009-10-27
  • 本文字数:1080 字

    阅读完需:约 4 分钟

术语”技术债务“是由 Ward Cunningham 首次提出,指的是开发团队在设计或架构选型时从短期效应的角度选择了一个易于实现的方案,但从长远来看,这种方案会带来更消极的影响,亦即开发团队所欠的债务。敏捷专家们就技术债务到底是什么以及如何对其进行分类给出了自己的看法。

Martin Fowler 认为下面的定义最能表现技术债务的含义:

技术债务类似于金融债务,它也会产生利息,这里的利息其实就是指由于鲁莽的设计决策导致需要在未来的开发中付出更多努力的后果。我们可以选择继续支付利息,也可以通过重构之前鲁莽的设计来将本金一次付清。虽然一次性付清本金需要代价,但却可以降低未来的利息。

Steve McConnell 将技术债务分为两类

  • 无意的——由于经验的缺乏导致初级开发者编写了质量低劣的代码。
  • 有意的——团队根据当前而非未来进行设计选型,这种方式可能很快就能解决当前的问题,但却很拙劣。

Bob 大叔补充到,有时人们将坏味道也看作是技术债务,但这是错误的,他说:

坏味道并非技术债务。坏味道就是坏味道。技术债务的评价标准是真实的项目约束,这些约束是风险和好处并存的。坏味道的产生永远都不是理性的结果,而是由懒惰和外行导致的,未来也没有机会偿还了。坏味道总是意味着损失。

Bob 大叔说技术债务让人们时刻牢记保持代码的整洁,就好像一个人在背负巨大的抵押债务时需要时刻保持警醒一样。他又说一旦团队决定采纳技术债务,那就意味着保持代码的整洁将变得空前的重要。如果不这样,情况很快就会变得糟糕不堪,偿还这些债务的代价也变得越来越大。

Martin Fowler 认为坏味道也是技术债务,只不过是另一种形式的技术债务而已。他觉得坏味道是一种不计后果(reckless)的债务,相对于根据精确计算而得来的谨慎的(prudent)债务而言,坏味道会让问题变得更加严重。他又加上了故意(deliberate)以及无意(inadvertent)从而将技术债务划分为四个象限。

Martin 通过如下示例将技术债务划分为 4 个象限

  1. 不计后果,故意的——团队没有时间做设计,仅仅给出了一个匆忙做出的方案,缺乏对质量的预见。
  2. 谨慎,故意的——尽管有很多已知的缺陷,但团队必须现在交付产品,同时对此造成的后果心中有数。
  3. 不计后果,无意的——团队压根就不知道基本的设计原则,更不用说引入的坏味道了。
  4. 谨慎,无意的——那些拥有优秀设计师的团队很容易遇到这种情况。他们交付的方案具有商业价值,但在完成方案后才明白什么才是最好的方案。

综上所述,实际的项目中将不可避免地存在技术债务问题,这是无法杜绝的,但问题的关键在于千万不能引入不计后果的债务,因为它会持续不断地产生坏味道,也很难对付。

查看英文原文: Dissecting Technical Debt

2009-10-27 05:434789
用户头像

发布了 88 篇内容, 共 274.0 次阅读, 收获喜欢 9 次。

关注

评论

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

Tapdata 与巨杉数据库完成产品兼容互认证

tapdata

Tapdata 巨杉数据库 产品兼容性互认

2021InfoComm|钉钉会议 Rooms 的 "全场景" 智能化解决方案

阿里云CloudImagine

音视频 钉钉 视频会议 会议 会议室

完美收官!字节4面斩下2-2Offer,入职就是30K16薪,全凭这套“面试+架构进阶知识点”pdf

Java 程序员 架构 面试

星环研发总监为你揭秘TDH8.0的前因后果 | TDH8.0 使用必读 3

星环科技

数据库 大数据 多模型数据

百度智能云人脸离线识别SDK再升级,优化复杂光线识别效果,急速通行无惧暗光

百度大脑

人脸识别 百度智能云

云原生Web服务框架ESA Restlight

安第斯智能云

云原生

大数据训练营 - 第二次作业hadoopRPC

西伯利亚鼯鼠

Alibaba永远滴神!阿里内部最新Java基础到中高级核心知识手册

Java~~~

Java 编程 程序员 架构 面试

如何实现70%丢包下音视频的高可用 - 数据篇

ZEGO即构

音视频 数据处理 传输协议 弱网环境高可用 Qo

浪潮云说直播间,就在今天!

爬虫入门到放弃03:爬虫如何模拟人的浏览行为

叫我阿柒啊

爬虫 代理IP user-agent

如何抓住用户体验的关键时刻?

石云升

用户体验 关键时刻 7月日更

供应链、产品溯源以及区块链所面临的巨大阻碍是什么?

CECBC

耗时半年,堪称神迹!阿里架构师整合出258W字Java全栈面试题

Java架构追梦

Java 阿里巴巴 面试 java架构 跳槽

lsyncd实现文件实时同步

阿呆

lsyncd

Realtime DB技术详解

安第斯智能云

数据

技术实践 | 网易云信视频转码提速之分片转码

网易云信

模型端侧加速哪家强?一文揭秘百度EasyEdge平台技术内核

百度大脑

人工智能 深度学习 百度 飞桨

干货 | 用JAVA实现多语言翻译组件

LigaAI

Java 国际化

网络攻防学习笔记 Day80

穿过生命散发芬芳

网络攻防 7月日更

解读新技术,解锁新玩法,HarmonyOS开发者日杭州站等你来参加

科技汇

手把手教你,从零开始搭建Spring Cloud Alibaba!这份笔记太牛了

场景背后见真章:银行数字化转型持续深入

CECBC

天不生我SpringBoot高级笔记 编程万古无常夜!

白亦杨

Java springboot

10分钟掌握Java性能分析诀窍

安第斯智能云

Java 后端

有奖体验活动,最新1.3版本试用

Geek_6cdeb6

人工智能 机器学习 深度学习 学习 AI

七种颜色的事件风暴法

escray

学习 极客时间 7月日更 如何落地业务建模

11道高频React面试题及详解,另附有React面试题集合

前端依依

面试 大前端 React

下一代人工智能:逻辑理解?物理理解?

安第斯智能云

人工智能

解析技术债务_研发效能_Vikas Hazrati_InfoQ精选文章