当DevOps落地实施撞上技术债务,如何量化债务突破困局

陈哥聊测试
• 阅读 8

大家好,我是陈哥。

想必不少朋友在推进DevOps落地时,都或多或少遇到过技术债的问题。我们该如何有效解决这个问题呢?

今天,我邀请了禅道专栏作者李斌,和我们分享一下DevOps实践中量化技术债的方法。希望通过这些实操经验能给大家带来启发,帮助大家更好地应对技术债的挑战。


多年前,我在一个工作坊上,听到老师问“你们通常在什么时机进行代码重构?”的问题。台下沉默良久后,有人答“空闲时才做重构”,也有人称“代码编写完成后再开展重构”。此时,一句“重构应贯穿始终”的响亮回答,如闪电般打破了现场的沉寂。

在当今快速迭代的软件开发环境中,DevOps已成为加速交付和提高软件质量的关键实践。然而,随着交付速度的提升,技术债问题往往被忽视或低估。技术债不仅影响代码质量,更对DevOps流程产生深远影响。开头的例子,是无数个团队或组织的缩影,由于早期有意或无意的开发编码习惯引入了技术债务,以至于多年之后“债务缠身”。

举这个例子,是想说部分团队或企业并没有真正理解DevOps的逻辑。DevOps的核心目标之一是实现更快速、更高质量的交付,企业引入DevOps也是出于这一初衷。但在实际落地过程中,技术债务却成为其顺利实施的阻碍。

本文将从DevOps实施的前、中、后三个阶段,结合我的个人经验,阐述如何通过量化债务实现破局。

一、什么是技术债务?

1992年,著名计算机程序员沃德・坎宁安首次将软件系统内部的混乱问题喻为一种负债。比喻为“为快速交付而采取的捷径,未来需要偿还的额外工作”。

主要类型包括:

  • 代码债务:低质量、难以维护的代码;
  • 设计债务:架构层面的妥协决策;
  • 测试债务:不足或缺失的自动化测试;
  • 文档债务:不完整或过时的文档;
  • 基础设施债务:配置不当的部署环境。

而从广义来看,技术债务往往是由流程管理、组织架构等问题引发的系统性缺陷,潜藏于组织深处。具体包括流程债(缺乏标准化交付流程或流程繁琐无序)、创新债(疲于应对交付任务,架构演进缓慢)等。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

个人认为,唯有从狭义与广义双重视角理解技术债务,才能在后续破局过程中,制定出契合实际的DevOps实施策略与路线图。

二、如何量化债务突破困局

1.诊脉:快速定位“看得见的”技术债务

DevOps强调开发与运维的协作,通过持续集成(CI)、持续交付(CD)和自动化监控实现快速、可靠的软件交付。典型流程包括:

  • 代码提交与版本控制;
  • 自动化构建与测试;
  • 持续集成与交付;
  • 监控与反馈循环。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

在DevOps实施初期,可通过面谈或调研,梳理出明显的技术债务对DevOps造成的影响。切忌初期便空谈流程与架构,特别是作为外部咨询或者新加入这个组织的成员,很容易引起内部的反感,甚至抵触。因为,这些话题短期内难以清晰阐述或量化证明。精准定位团队共识的技术债务,以低成本快速启动工作才是第一步要做的。

通过调研和面谈,一般可以优先识别共性问题,这里列举了一些技术债对DevOps的影响场景。

(1)对CI/CD流水线效率的影响,往往表现在构建失败率上升,部署频率下降等。

  • 诊断工具:CI/CD工具;
  • 关键指标:构建失败率、构建频率、部署频率。

(2)对团队生产力的影响,往往表现在代码腐化、代码复杂度高,或者代码难以理解、协作成本升高等。

  • 诊断工具:缺陷,代码检查工具;
  • 关键指标:扫描问题数。

(3)对系统可靠性的影响,例如生产环境故障增加、平均恢复时间(MTTR)延长等。

  • 诊断工具:监控工具;
  • 关键指标:问题恢复时长。

若初期数据无法实现客观量化,可借助团队成员主观反馈的信息进行粗略识别(例如:多久构建一次?经常哪些问题引起部署失败?),尤其要关注那些普遍反映的问题。

2.破局:从最小可行动作到体系化治理

下一步,通过技术债的影响分析,进一步梳理其可能的引入阶段,将受影响阶段与DevOps链路建立映射关系,同时评估修复/治理成本。

如下表仅为简单示例,实际情况可能更为复杂深入。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

通过上述表格,大致可以得到出如下的关系图,初步建立“领域-研发阶段-研发活动-工具能力-数据”的映射关系图。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

接着,开始搭建工具链时,要明确建立数据量化指标体系(量化原则:可观测、可追踪、与业务目标对齐),制定“短-中-长期的DevOps建设目标”,借助工具从无到有地实现客观度量,避免主观臆断。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

通过整合与补充不同工具,分批分阶段分工具收集数据。遵循“从单点到多点,再串联成线”的思路,依次获取“局部单点、整体全局”数据。同时,记录每个周期的基准数据,为后续对比改进效果提供依据。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

对于管理层而言,只有通过量化数据指导业务目标的达成与改善,才能更有力地推动DevOps落地及技术债务的解决。

禅道的效能管理模块内置一键分析实验室与丰富统计分析模板,针对禅道核心对象数据,提供多维统计分析与深度数据解读,可以快速整合研发数据,形成可以量化的精准数据。

点击此处了解禅道效能管理

部分企业仅关注局部量化数据,或未构建全流程追溯体系,导致在实施中后期,难以争取到领导对债务治理工作的持续支持。这里很棘手的问题就在于,工具体系建设与流程规范没有很好的融合。到了这里,其实你已经到了开头提到的“广义的技术债务”,触及到了组织的深处的痛点。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

综上,结合技术债类型、DevOps工具体系,可落地的量化维度和方法,形成具有实操价值的研发治理框架:

当DevOps落地实施撞上技术债务,如何量化债务突破困局

3.守城:可视化债务&行动清单&债务文化

债务量化&治理体系的搭建非一朝一夕,可以一边破局,一边守城。谨慎评估技术债务的ROI(详见上文修复与影响成本),通过小规模试点增强管理层对治理工作的信心。

以代码债为例,可依托采用SQALE方法(评估代码质量的方法)的相关工具,从技术与商业双视角分析技术债务,确定不同优先级,明确技术债务偿还的ROI。

当DevOps落地实施撞上技术债务,如何量化债务突破困局

(示例图)

及时向领导层汇报阶段性成果,在获得认可后共同制定行动清单,确保组织上下目标一致。

  • 将技术债指标与业务目标相关联,如某个代码问题引起的质量问题下降30%;
  • 设定季度改进阈值,如将流水线成功率从70%提升至95%以上。

此外,在团队层面将技术债管理纳入DevOps文化,将债务评估作为常规实践,在组织级层面同步近期改进情况。

  • 定期通过工具生成技术债影响报告;
  • 将技术债治理纳入晋升评估体系;
  • 建立代码质量门禁,在开发周期中预留技术债处理时间;
  • 开展月度“最优雅代码”“最佳啄木鸟”评选活动。

三、需要注意哪些问题

1.量化治理需集中攻坚

技术债的累积会直接降低DevOps的「反馈循环效率」,量化是治理的前提。虽说看似简单,但量化与治理实则如同“先有鸡还是先有蛋”的关系。单纯治理如同无源之水,单纯量化也会寸步难行。因此,需像攻城略地般,集中优势资源攻克一个债务目标,稳固成果后,再向另一个债务目标发起进攻。

2.广义债需靠管理重塑

前文提及的广义技术债务,难以仅凭工具在短期内实现量化或解决,需借助管理手段进行诊断(如价值流分析、团队认知评估),进行相应的流程规范改造重塑,且整体修复周期较长(至少6个月,甚至需要1-2年)。

3.债务修复需把握时机

债务修复时机有时具有偶然性,可能因一项新创新、一次意外事故引发关注,或源于外部考核要求。作为实施者,需提前布局,伺机介入,推动治理工作开展。

最后,借用电影《无间道 2》中的台词:“出来混,迟早要还的。”对于企业来说,量化债务,时刻关注自身的债务状况,做到勤借勤还,才能实现持续健康发展。

专栏作者:李斌

DevOps Master、公众号【DevOps在路上】主理人。

深耕DevOps领域多年,专注于提升企业级研发效能与建设自动化工具链,主导/参与了多个企业级 DevOps 平台从0到1的全流程构建。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
SDL已死,应用安全路在何方?
前言应用安全仍是重点投入领域SDLC遇到的问题    安全并不是安全团队可以独立解决的事情    加强设计和部署阶段的投入是大势所趋    SDLC适合软件开发,云和devops定义了新时代    SDLC没有实现让业务承担责任    落地过程中缺乏协同性    缺少拥抱和激励安全的文化。    以大多数公司的
Tommy744 Tommy744
4年前
DevOps与CICD的区别 及 docker、k8s的CICD思路
1\.DevOps简介DevOps就是开发(Development)、测试(QA)、运维(Operations)这三个领域的合并。image.png为什么要合并这三个领域?主要是开发和运维的脱节。DevOps是一种思想、一组最佳实践、以及一种文化。DevOps落地实施,从组织架构、设计人员、流程、人员分工、人员技能到工具,变化
Stella981 Stella981
3年前
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps国际峰会是国内唯一的国际性DevOps技术峰会,由OSCAR 联盟指导、DevOps时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈DevOps体系与方法、过程与实践、工具与技术。会议召开时间:2019070508:00至2019070618:00结束会议召开地点:北京主办单位:DevOps
Stella981 Stella981
3年前
DevOps如何解决技术债务挑战?
!(https://oscimg.oschina.net/oscnet/32c0085858b04e6e80a771633912ce14.jpg)许多组织在迁移到云期间发现了大量的技术债务。但是什么是技术债务呢?DevOps如何帮助我们去解决技术债务呢?在这篇文章中,我们将讨论使用DevOps将您的技术债务负担减少的方式!什么是技
Stella981 Stella981
3年前
DevOps世界中的软件开发
!(https://oscimg.oschina.net/oscnet/f40e68cbfe8148deb00f040b4e917a0a.jpg)在整个软件开发过程中,开发人员通常需要花费大量时间来修复错误和漏洞,以便一切按计划进行交付。但是,通过DevOps实践,可以更轻松地管理和保护这些问题。这是由于以下事实:使用DevOps实践的软
Wesley13 Wesley13
3年前
2021年,是时候把技术债务管理提上日程了
开发人员面临着前所未有的压力:从传统的基础设施转移到现代的基础设施,减少效率低下的情况,并创建构建客户满意度和增加收入的产品。许多企业都在以DevOps的思维方式前进,但在他们前进的过程中,他们可能会忘记一件事,技术债务。的确,开发者可能会快速移动并破坏某些内容,但却从未真正去修复它们。因此,技术债务的积累,导致工程生产力的下降和生产成本的上升。
敏捷开发 敏捷开发
1年前
我们不可能永远都在救火 ——Scrum中技术债务“偿还”指南
这些技术债务到底是从何而来?为什么某些团队在Scrum开发过程中会导致技术债务的积累呢?我们该如何解决技术债务呢?
陈哥聊测试 陈哥聊测试
1年前
产品经理如何帮助减少技术债务 ?
这里有一些会起到帮助的可行策略。
陈哥聊测试
陈哥聊测试
Lv1
资深敏捷测试顾问,致力于测试自动化和DevOps等的实践和研究。
文章
78
粉丝
0
获赞
2