Technical debt (技术负债 / 技术债)

Technical debt (技术负债 / 技术债)

In software development, or any other IT field (e.g., Infrastructure, Networking, etc.) technical debt (also known as design debt or code debt) is the implied cost of future reworking required when choosing an easy but limited solution instead of a better approach that could take more time.
在程序设计及软件工程中,技术负债 / 技术债 / 设计负债 / 代码负债是指开发人员为了加速软件开发,在应该采用最佳方案时进行了妥协,改用了短期内能加速软件开发的方案,从而在未来给自己带来的额外开发负担。这种技术上的选择,虽然眼前看起来可以得到好处,但在未来必须付出额外的时间和精力持续修复之前的妥协所造成的问题及副作用,或是进行重构,把架构改善为最佳实现方式。

1. Introduction

Ward Cunningham first drew the comparison between technical complexity and debt in a 1992 experience report:
“Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite… The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation, object-oriented or otherwise.”

1992 年,Ward Cunningham 首次对技术复杂性和债务进行了比较:
交付第一次代码就像欠债一样。只要通过重写及时偿还,一点点债务会加速开发。当债务没有偿还时,危险就会发生。在不完全正确的代码上花费的每一分钟都算作该债务的利息。整个工程组织可能会因为未整合的实施 (无论是面向对象的实施还是其他实施) 的债务负担而陷入停滞状态。

In his 2004 text, Refactoring to Patterns, Joshua Kerievsky presents a comparable argument concerning the costs associated with architectural negligence, which he describes as “design debt”.
Joshua Kerievsky 在其 2004 年的文章 Refactoring to Patterns 中提出了一个类似的论点,涉及与架构疏忽相关的成本,他将其描述为设计债务。

Activities that might be postponed include documentation, writing tests, attending to TODO comments and tackling compiler and static code analysis warnings. Other instances of technical debt include knowledge that isn’t shared around the organization and code that is too confusing to be modified easily.
可能被推迟的活动包括文档、编写测试、关注 TODO 注释以及处理编译器和静态代码分析警告。技术债务的其他实例包括组织内未共享的知识以及过于混乱而难以轻松修改的代码。

In open source software, postponing sending local changes to the upstream project is a form of technical debt.
在开源软件中,推迟向上游项目发送本地更改是一种技术债务。

2. Causes

band-aid:n. 急救带,急救绷带 adj. 急忙拼凑的

Common causes of technical debt include:

  • Ongoing development, long series of project enhancements over time renders old solutions sub-optimal.
    Insufficient up-front definition, where requirements are still being defined during development, development starts before any design takes place. This is done to save time but often has to be reworked later.
    不充足的事前定义,在开发过程中仍在定义需求,开发在任何设计发生之前就开始了。这样做是为了节省时间,但通常需要稍后返工。
  • Business pressures, where the business considers getting something released sooner before the necessary changes are complete, builds up technical debt involving those uncompleted changes.
    业务压力,即企业考虑在必要的更改完成之前尽早发布某些内容,会积累涉及那些未完成的更改的技术债务。
  • Lack of process or understanding, where businesses are blind to the concept of technical debt, and make decisions without considering the implications.
    缺少流程或理解,从而商务上对技术债务不了解,不考虑后果就做出决策。
  • Tightly coupled components, where functions are not modular, the software is not flexible enough to adapt to changes in business needs.
    组件紧密耦合,功能不是模块化的,软件不够灵活,无法适应业务需求的变化。
  • Lack of a test suite, which encourages quick and risky band-aid bug fixes.
    缺乏测试套件,这刺激了快速高风险凑活式的修复 bug。
  • Lack of software documentation, where code is created without supporting documentation.
    缺少文档,写代码但没有必要的支撑性文档。
  • Lack of collaboration, where knowledge isn’t shared around the organization and business efficiency suffers, or junior developers are not properly mentored.
    缺乏合作。知识没有得到共享,对新手缺乏监督辅导。
  • Parallel development on multiple branches accrues technical debt because of the work required to merge the changes into a single source base. The more changes done in isolation, the more debt.
    在两个或多个分支上平行开发而累积了技术债务。由于工作最终需要合并两个分支的代码,拖延越晚,需要工作代价越大。
  • Deferred refactoring; As the requirements for a project evolve, it may become clear that parts of the code have become inefficient or difficult to edit and must be refactored in order to support future requirements. The longer refactoring is delayed, and the more code is added, the bigger the debt.
    推迟重构。随着项目需求的发展,可能会发现部分代码变得效率低下或难以编辑,必须进行重构才能支持未来的需求。重构拖延的时间越长,添加的代码越多,债务就越大。
  • Lack of alignment to standards, where industry standard features, frameworks, and technologies are ignored. Eventually integration with standards will come and doing so sooner will cost less (similar to “delayed refactoring”).
    缺乏与标准的一致性,行业标准功能、框架和技术被忽视。最终与标准的集成将会到来,而且越早这样做成本就会更低 (类似于延迟重构)。
  • Lack of knowledge, when the developer doesn’t know how to write elegant code.
    缺少知识,开发者并不知道如何写精致的代码。
  • Lack of ownership, when outsourced software efforts result in in-house engineering being required to refactor or rewrite outsourced code.
    缺少所有权,外包的软件最终要让自己的工程师去重构或重写源代码。
  • Poor technological leadership, where poorly thought out commands are handed down the chain of command.
    技术领导力差,未深思熟虑的命令传达下来,增加了技术债务,而不是减少它。
  • Last minute specification changes. These have potential to percolate throughout a project, but there is insufficient time or budget to document and test the changes.
    最后一分钟规范变更。这些有可能渗透到整个项目中,但没有足够的时间或预算来记录和测试这些更改。

Kenny Rubin uses the following status categories:

  • Happened-upon technical debt - debt that the development team was unaware existed until it was exposed during the normal course of performing work on the product.
    发生的技术债务 - 开发团队不知道债务的存在,直到在产品的正常工作过程中暴露出来。
  • Known technical debt - debt that is known to the development team and has been made visible using one of many approaches.
    已知技术债务 - 开发团队已知的债务,并且已使用多种方法之一使其可见。
  • Targeted technical debt - debt that is known and has been targeted for servicing by the development team.
    有针对性的技术债务 - 已知的债务,并且已成为开发团队要偿还的债务。

3. Technical debt quadrant

技术债务的四象限分类:
在这里插入图片描述

在这里插入图片描述

References

https://yongqiang.blog.csdn.net/
https://en.wikipedia.org/wiki/Technical_debt
Technical Debt Quadrant,https://martinfowler.com/bliki/TechnicalDebtQuadrant.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/84657.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支持对接鸿蒙系统的无线模块及其常见应用介绍

近距离的无线通信得益于万物互联网的快速发展,基于集成部近距离无线连接,为固定和移动设备建立通信的蓝牙技术也已经广泛应用于汽车领域、工业生产及医疗领域。为协助物联网企业终端产品能快速接入鸿蒙生态系统,SKYLAB联手国产芯片厂家研发推…

新能源汽车充电桩控制主板有哪些特点

你是否好奇,新能源汽车充电桩控制主板是什么样子的?它有哪些特点?接下来,我们将为您揭秘。 控制主板是充电桩的大脑,它决定了充电桩的性能和稳定性。睿讯微充电桩主板拥有良好的整机抗干扰能力,能够有效地防止外部信号和电磁波的…

模仿火星科技 基于cesium+水平面积测量+可编辑

​ 当您进入Cesium的编辑水平积测量世界,下面是一个详细的操作过程,帮助您顺利使用这些功能: 1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。 在屏幕的一角,一个友好的提…

C++中如何让程序休眠自定义的时长

在C中&#xff0c;可以使用以下几种方法让程序休眠指定的时间&#xff1a; 1 使用操作系统相关的方法&#xff0c;如 Windows 中的 Sleep 函数&#xff0c;需要包含 <windows.h> 头文件 #include <windows.h> // 休眠1000毫秒&#xff08;1秒&#xff09; Sleep(…

Bert详细学习及代码实现详解

BERT概述 BERT的全称是Bidirectional Encoder Representation from Transformers&#xff0c;即双向Transformer的Encoder&#xff0c;因为decoder是不能获要预测的信息的。在大型语料库&#xff08;Wikipedia BookCorpus&#xff09;上训练一个大型模型&#xff08;12 层到 …

Java:Stream API

文章目录 1 说明2 为什么要使用Stream API3 什么是StreamStream的操作三个步骤创建Stream实例一系列中间操作终止操作 1 说明 Java8中有两大最为重要的改变。第一个是 Lambda 表达式&#xff1b;另外一个则是 Stream API。Stream API ( java.util.stream) 把真正的函数式编程风…

android studio内存分析之Memory profiler的使用

目录 Android Studio中内存分析工具Memory profiler的使用1. 打开Memory Profiler2. 工具使用3. 内存选项说明4. 内存性能分析器概览5. 内存计算方式6. 查看内存分配7. 捕获java/kotlin方式查看内存分配8. 堆转储文件导入和导出 内存性能分析器中的泄漏检测 Android Studio中内…

模仿火星科技 基于cesium+ 贴地测量+可编辑

当您进入Cesium的编辑贴地测量世界&#xff0c;下面是一个详细的操作过程&#xff0c;帮助您顺利使用这些功能&#xff1a; 1. 创建提示窗&#xff1a; 启动Cesium应用&#xff0c;地图场景将打开&#xff0c;欢迎您进入编辑模式。在屏幕的一角&#xff0c;一个友好的提示窗将…

【ROS】Ubuntu18.04安装Ros

Ubuntu18.04安装Ros 引言1 ROS安装&#xff08;一键式&#xff09;2 正常安装2.1 添加ROS软件源2.2 添加公钥2.3 更新2.4 安装ros2.5 初始化 rosdep2.6 设置环境2.7 安装rosinstall,便利的工具2.8 检验 3 rviz将bag数据可视化为点云3.1 打开ROS和rviz软件3.2 配置rviz软件可视化…

【论文阅读】基于深度学习的时序预测——Autoformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文链接&#xff1a;https://arxiv.org/abs/2106.13008 github链接&#xff1a;https://github.com/thuml/Autoformer 解读参考&…

UDS诊断笔记

文章目录 常见缩写简介UDS寻址模式1. 物理寻址&#xff08;点对点、一对一&#xff09;2. 功能寻址&#xff08;广播、一对多&#xff09;3. 功能寻址使用场景举例 UDS报文格式UDS协议栈网络层网络层功能网络层协议1. 单帧 SF&#xff08;Single Frame&#xff09;2. 首帧 FC&a…

gradio解决上传文件数最大为1000的限制

当使用上传文件夹功能传输超过1000个文件时&#xff0c;会报出以下错误&#xff1a; 在github上&#xff0c;最新版的gradio仓库已经解决了这一问题&#xff1a; 但是这一更改还没有正式发布&#xff0c;因此无法使用pip更新&#xff1a; 因此只能先手动git clone https://g…

Pytest三种运行方式

Pytest 运行方式共有三种&#xff1a; 1、主函数模式 运行所有 pytest.main() 指定模块 pytest.main([-vs],,./testcase/test_day1.py) 只运行testcase 下的test_day1.py 文件 指定目录 pytest.main([-vs]),./testcase) 只运行testcase 目录下的文件 通过nodeid指定用例…

JavaScript + GO 通过 AES + RSA 进行数据加解密

浏览器端搞些小儿科的加密&#xff0c;就好比在黑暗夜空中&#xff0c;点缀了几颗星星&#xff0c;告诉黑客「这里有宝贵信息&#xff0c;快来翻牌」 浏览器端的加密&#xff0c;都是相对安全的。 它的具体安危&#xff0c;取决于里面存在的信息价值&#xff0c;是否值得破解者…

虹科新品 | 振动监测:提升风能行业效率与安全!

一、 CTC概览 服务于工业振动分析市场ISO 9001认证设计和测试以满足工业环境的实际需求无条件终身保修兼容所有主要数据采集器、分析仪和在线系统美国制造 二、风能行业&#xff1a;为什么要进行监测&#xff1f; 在风能行业&#xff0c;振动监测是一项至关重要的节约成本和安…

学习笔记-JVM监控平台搭建

SpringBoot Actuator 1 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>2 开启配置 # 暴露所有的监控点【含Prometheus】 management.endpoin…

windows下以指定用户访问SMB服务器进行读写

一 概述 最近遇到一个问题&#xff0c;linux 的 smb服务器开启匿名访问&#xff0c;windows访问linux文件夹不需要用户名密码就可以进去使用&#xff0c;但是存在一个问题&#xff0c;ssh连接到linux 后修改的文件&#xff0c;在windows已smb方式下打开某个文件修改 是没有权限…

uniapp文件下载并预览

大概就是这样的咯&#xff0c;文件展示到页面上&#xff0c;点击文件下载并预览该文件&#xff1b; 通过点击事件handleDownLoad(file.path)&#xff0c;file.path为文件的地址&#xff1b; <view class"files"><view class"cont" v-for"(…

docker-compose Install minio

前言 MinIO 是一种高性能、兼容 S3 的对象存储。它专为大规模 AI/ML、数据湖和数据库工作负载而构建。它在本地和任何云(公共或私有云)上运行,从数据中心到边缘。MinIO是GNU AGPL v3下的软件定义和开源。 MinIO是对象存储服务,它基于Apache License 开源协议,兼容Amazon …

无脑——010 复现yolov8 使用rt detr 训练自己的数据集

1.配置环境 1. 首先去官网下载yolov8的zip https://github.com/ultralytics/ultralytics 存放在我的目录下G:\bsh\yolov8 然后使用conda创建新的环境 conda create -n yolov8 python3.8 #然后激活环境 conda activate yolov8然后安装pytorch&#xff0c;注意 &#xff0c;py…