写点什么

在系统整体性和微服务方面合理偿还技术债务的指引:来自 Adam Tornhill 的一些思考

  • 2017-04-12
  • 本文字数:1838 字

    阅读完需:约 6 分钟

QCon London 大会上,Adam Tornhill 发表了演讲“合理偿还技术债务的指引(A Crystal Ball to Prioritize Technical Debt)”。他谈到,尽管技术债务预示了软件领域的一场风暴,但大部分机构发现很难合理偿还技术债务。他演讲的要点包括:识别代码复杂度和代码变动热点(hotspots)的方法;通过检查组件或微服务临时耦合之类的方法,对当前系统适用度持续评估的好处;通过检查在版本控制系统中随着代码提交的社交元数据,可以了解到跨团队协作的成本。

Tornhill ,Empear 的创始人和 CTO,引用 Martin Flower 的一句话开场:“像金融债务一样,技术债务也需要支付利息,这会导致你不得不在将来的开发中付出更多的精力”。关于这点,他陈述了三个观点:技术债的利息率与花费在系统上的时间相关;技术债都不尽相同;大部分技术债其实都不是因为技术——技术债往往与产出代码的组织架构有很强的关系。

Tornhill 接着建议到,如何高效合理地偿还技术债务,你所需要知道的信息和需要思考的问题包括:

  • 代码库中技术债利息率最高的点在哪?
  • 当前技术架构能否支撑系统的演化之路?
  • 跨团队协作方面是否有生产力瓶颈?

技术债利息率最高的代码也许可以通过使用热点(hotspot)分析法来发现,它们可以用来形象地表示为代码库中规模大、复杂、耦合度高的区域。代码的规模和复杂度可以通过传统的工具检测出来,例如 Sonar Qube 或者 Code Climate 。耦合度和其他协作信息,可以通过使用类似 Tornhill 的 Code Maat 工具在代码库所在的版本控制系统中获得。类似 Mosse CodeScene 的可视化分析工具,可以用来研究并理解热点分析的发现结果。

Tornhill 说,“所有代码都是平等的,但是有些代码比其他代码更平等一些”。这句话引自 George Orwell 的《动物庄园》(Animal Farm),但被 Tornhill 做了些幽默的改动。他然后以图片的方式演示,在较长时间段内,一些很流行的语言的代码库中耦合度最高的代码,都分布在某些代码区域内(伴随着一条长长的尾巴)。以.NET 开源项目 coreclr 中的 gc.cpp 文件为例,耦合代码在功能 / 方法级别和类 / 文件级别分布得一样多。他这里总结到,建议优先重构所有这些热点来减少技术债的利息率,同时持续监控这些代码相应的代码复杂度趋势。

接着,他针对“当前技术架构能否支撑系统的演化之路”这一问题进行了探讨。每个系统都有一个引爆点(tipping point),那里的代码复杂度会增加到无法控制,并且非常难以修改。他建议,应该经常监控系统复杂度,找出引爆点并通过优先安排系统重构来避免引爆点的出现。分析临时性耦合(Temporal Coupling)对于找出引爆点非常有用。如果两个或更多的组件(类、层、模块、微服务)经常在同一时间被修改,这就意味着一种架构层面的依赖关系。这种依赖关系不太容易通过单纯地分析代码本身发现。“微服务散弹修改模式(microservices shotgun surgery pattern)”应该被及时发现和避免。如果在新增或修改应用功能时,经常需要跨多个服务之间的协调修改,那么说明服务架构边界也许设置得不合理。

Tornhill 发言的最后部分集中在软件开发社交方面。他首先介绍到,在代码库上协作的所有开发人员的潜在生产力,通常有很高的过程损失(process loss)。团队协作,或者职责分配,可以通过 VCS 分析测量,以此找出跨多个团队的开发者都有提交操作的代码区域。Tornhill 建议到,这是可视化和测量“ Conway’s Law ”的一种方法。职能型团队架构会导致代码库中的很大区域需要跨团队协作,这通常成本很高并且会导致代码规范和风格不统一。Tornhill 强烈建议“系统架构要与组织架构相协调”,以此减少技术债务。

Tornhill 最后强烈建议依据数据来进行系统设计、实现和重构决策。Tornhill 认为,由于系统复杂度会在开发过程逐渐增加,因此依据数据来进行决策将成为一个必需的惯例,相应地,他已经将这些想法浓缩为《程序员修炼之道》(Pragmantic Programmer)系列的一本书“《代码即犯罪现场》(Your Code As a Crime Scene)”。

Adam Tornhill 在 QCon London 上演讲的幻灯片,“合理偿还技术债务的指引(A Crystal Ball To Prioritize Technical Debt)”,以及对外公开的大会演讲记录,都可以在QCon London 大会的网站上找到。

查看英文原文: A Crystal Ball to Prioritise Technical Debt in Monoliths or Microservices: Adam Tornhill’s Thoughts


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-04-12 19:001482

评论

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

微信开放小程序运行SDK,自己的app也能运行小程序

Onegun

微信小程序 小程序容器

国内外开源数据可视化工具对比:DataEase 与 MetaBase 对比

搞大屏的小北

DataEase Metabase 开源数据可视化

MySQL进阶:Innodb的RR到底有没有解决幻读?

程序员小毕

MySQL 数据库 程序员 后端 java面试

京东金融APP-新交互技术“虚拟数字人”赋能世界杯主题营销

京东科技开发者

大数据 前端 Web 交互 虚拟人

贾斯特里尼&布鲁克斯葡萄酒,历经百年的传世经典

联营汇聚

HVML 解释器 PurC 0.9.2 发布;持续演进!

hvmlenvoy

编程语言 解释器 HVML

如何接受或拒绝 Excel 中的修订

在下毛毛雨

C# .net Excel 工作表 跟踪修订

DataEase单点登录之OIDC

搞大屏的小北

keycloak 单点登录 OIDC

MySQL 慢查询日志分析(Filebeat+Elasticsearch+DataEase)

搞大屏的小北

MySQL慢查询 MySQL日志分析 MySQL日志可视化

弹性公网IP支持多产品灵活绑定或解绑,能为企业提供独立公网IP资源!

秃头也爱科技

同是弹性公网IP,华为云弹性公网IP的优势有哪些?

秃头也爱科技

用品质提升品味,贾斯特里尼&布鲁克斯葡萄酒

联营汇聚

让数据说话-中国农业经济发展情况

搞大屏的小北

数据可视化 经济可视化 经济发展

葡萄酒越贵越好?贾斯特里尼&布鲁克斯刷新你的认知

联营汇聚

自学数据分析——重新认识数据分析

搞大屏的小北

数据分析 数据分析可视化

vivo 游戏中心低代码平台的提效秘诀

vivo互联网技术

低代码 组件化 配置化 提效

想做运维审计大屏?用这个工具就对了!

搞大屏的小北

大屏可视化 运维审计 审计大屏

【大屏设计】数据大屏间距那点事-距离产生美

搞大屏的小北

大屏布局 报表布局 看板布局排版

线上GC故障:CMSGC太频繁,你知道这是什么鬼?

Java永远的神

程序员 性能优化 JVM java面试 GC

DataEase 做出来好看吗?

搞大屏的小北

数据可视化 大屏可视化 DataEase

关于佛萨奇系统开发及原力元宇宙2.0佛萨奇系统开发方案

I8O28578624

使用DataEase分析销售数据有多方便?

搞大屏的小北

数据可视化 销售数据分析 数据展示

实践GoF的23种设计模式:命令模式

华为云开发者联盟

Go 开发 华为云 12 月 PK 榜

是不是你在找的推特GIF动图下载方法?!支持苹果安卓双系统使用!

frank

twitter 推特视频下载

南京公安研究院与秒云达成生态合作,携手赋能产业智能化发展

MIAOYUN

智慧公安 生态合作

有序存储对于高性能的意义

陈橘又青

算法

一招搞定小白最头疼的数据大屏配色问题!

搞大屏的小北

色彩匹配 大屏配色

自学数据分析——数据分析方法和模型

搞大屏的小北

数据分析方法 自学数据分析

论文复现丨基于ModelArts实现Text2SQL

华为云开发者联盟

人工智能 华为云 12 月 PK 榜

预测式外呼算法模型的深度应用详解

中关村科金

人工智能 大数据 AI 智能

转转实时OLAP分析场景技术选型与应用实践

转转技术团队

OLAP

在系统整体性和微服务方面合理偿还技术债务的指引:来自Adam Tornhill的一些思考_架构_Daniel Bryant_InfoQ精选文章