写点什么

在系统整体性和微服务方面合理偿还技术债务的指引:来自 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:001822

评论

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

揭示低代码与AI结合的商业价值

天津汇柏科技有限公司

人工智能 低代码

探索HarmonyOS位置服务:为用户提供直观的坐标显示

白晓明

HarmonyOS HarmonyOS NEXT 位置服务 地理编码转化 逆地理编码转化

香城档案利用 NocoBase 快速实现智能档案管理

NocoBase

低代码 无代码 档案管理

coconutBattery Plus:苹果mac电脑 电池健康检测工具

Rose

统一多场景自动编译加速

百度Geek说

编译器 百度飞桨

简历,需要和求职岗位匹配

老张

裁员 职场成长 求职面试

身份管理“六边形战士”闪亮登场

芯盾时代

身份安全 iam 统一身份认证 身份和访问管理

如果提议者提议区块的时间晚了,会对见证有何影响?

TechubNews

LED单色显示屏未来发展的3个困难点

Dylan

技术 LED显示屏 全彩LED显示屏 led显示屏厂家 市场

扬帆蓝海,智起未来!和鲸科技助力第十三届全国海洋航行器设计与制作大赛智能感知赛道精彩收官!

ModelWhale

小小的引用计数,大大的性能考究

bin的技术小屋

Netty Java' netty

fxfactory视觉特效下载 FxFactory 8 Pro mac破解资源

Rose

FxFactory Pro 8 fxfactory视觉特效

Parallels Desktop 19完美破解版 附PD虚拟机永久密钥

Rose

Parallels Desktop 19 Parallels虚拟机下载 Mac虚拟机安装 PD19密钥

天猫商品详情API:商品推荐与关联的获取

技术冰糖葫芦

API Explorer API 接口 API 测试 API 策略 pinduoduo API

天猫商品详情API:深度挖掘商品推荐与关联的新路径

代码忍者

API 接口 API 测试

机器人测试自动化智能化交流沙龙 —免费参与,线上线下同步进行

测试人

软件测试

大数据处理与智慧营销系统性能优化

鲸品堂

大数据 营销 流程化 企业号2024年8月PK榜

如何做好API安全

德迅云安全杨德俊

6 个Spring tx 事务注解:4种隔离&7种事务传播业务案例(必须收藏)

肖哥弹架构

Java spring 注解

mac防火墙软件Radio Silence 完整激活版 支持M1/M2

Rose

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