Blog chevron_right Performance

未使用代码和死代码的隐性成本

The Hidden Cost of Unused and Dead Code

未使用代码和死代码会随着时间的推移在我们的应用程序中不知不觉地累积。未使用的代码会限制开发人员构建、运行和维护应用程序所需的时间和资源。正如您的身体值得(并且需要)定期进行健康检查一样,您的代码库也值得(并且需要)进行同样的检查。借助合适的工具,您可以发现项目中斑块的累积,这些斑块最终可能导致生产力障碍。清除未使用代码和死代码的障碍可以提高开发人员的生产力和部署时间,降低维护成本并降低安全风险。

想象一下,您的医生在年度健康检查时向您展示您的动脉扫描图。结果显示,斑块多年来一直在累积,您正面临中风的风险,而您却从未察觉到即将到来的危险。您的心脏功能正在下降… 您会因为还有很多其他事情要做而继续忽视这个问题?还是会立即采取行动调整生活方式,慢慢恢复,从而防止糟糕的事情发生?您的应用程序中的代码就可能发生这种情况。 

就像胆固醇会在我们的动脉中逐渐累积一样,未使用代码和死代码也会随着时间的推移在我们的应用程序中不知不觉地累积。一个方法被另一个方法取代;一个功能不再使用;带注释的代码被提交;还有一小部分代码没人敢碰… 所有这些未使用的代码都限制了开发人员构建、运行和维护应用程序所需的时间和资源: 

  • 需要对从未使用的方法执行单元测试 。由于测试会检查未使用的代码,反馈循环会变得更长。当库发生变化或测试不稳定时,您需要调查问题并修复它。但最终,修复后的代码永远不会在生产环境中使用。 
  • 开发人员 常常会发现自己的热情正在消退,因为他们不得不翻阅堆积如山的遗留代码来实现一个简单的功能或追踪一个错误。他们会因为浏览不需要的代码而分心。这会导致开发时间延长,因为您的团队需要处理这些杂乱的代码。 
  • 部署包 会变得越来越大,占用内存、磁盘空间和网络流量。 
  • 未使用和无效的代码 可能依赖于过时的库,从而带来安全风险。其中一些风险的严重性评分很高,迫切需要解决方案。此类修复需要优先于带来新功能的工作,而实际上修复是不必要的,因为这些代码和依赖项根本没有被使用。 

是时候进行代码健康检查了 

正如您的身体值得(并且需要)定期进行健康检查一样,您的代码库也值得(并且需要)进行同样的检查。借助合适的工具,您可以发现项目中“斑块的累积”,这些斑块最终可能导致“生产力障碍”。 

有几个方面与未使用代码的积累有关。通常,应用程序越大、历史越久,参与过开发的人员就越多,闲置的未使用代码就越多。通过对许多应用程序的监测发现,闲置代码的大致比例接近 20%,而在一些大型应用程序中,这一比例甚至接近 66%。这些闲置代码不仅包括外部依赖项,还涵盖了企业自身开发的软件包。通过精简这些未使用的代码,开发人员可以节省大量时间,无需在杂乱的代码中费力梳理,从而缩短 CI/CD 反馈周期。

采取小举措 

处理未使用的代码无需大刀阔斧的举措或大规模重构。相反,我们可以在每次迭代中采用一些方法处理问题,从而降低问题严重程度,并在清除代码障碍方面产生显著效果。 

首先监控代码,以确定在短时间内使用了哪些方法,哪些方法未使用。经过短暂的一段时间后,您通常会确认对代码某些部分的怀疑;对于其他部分,你可能需要更长时间的监控。 

小型团队不需要正式的弃用流程。可以从挑选未使用的包、类或方法开始。通过 Slack、午餐时间或您喜欢的任何方式,告诉同事这些代码将被移除。然后移除代码:红色 diff 是最好的 diff。 

大型团队无法与所有人沟通,可以使用更正式但仍然简单的流程。首先将代码标记为 @Deprecated,向团队成员和工具表明某个方法或类不建议使用。团队可以在方法中添加额外的日志记录语句,作为一种双重保障。您可以根据需要应用额外的标志 @Deprecated (forRemoval=true),然后在未来的更新中移除该代码。不久之后,就该正式告别并移除这段代码了。 

团队中大多数熟悉代码的成员都会对未使用或不需要的代码有所了解。通过遵循以下步骤,这可以实现稳定的代码改进过程: 

  • 监控代码:找到监控代码的方法,以查找未使用的代码,或者让您的团队对其进行审核。 
  • 弃用:通过使用 @Deprecated 注解,我们可以标记那些拟删除的方法。 
  • 继续监控:当弃用的方法仍在使用时,构建工具会提醒您。 
  • 调整测试:重构据报告使用了已弃用代码的单元测试。 
  • 移除已弃用代码:当监控结果没有发现任何问题时,您可以安全地将其移除。 
  • 循环:不断重复此过程。清理历史悠久的大型项目需要一些时间。但是,此过程最终将形成更易于维护、更高效的代码库。 

Code Inventory 可以显示代码使用模式 

Code Inventory 是 Azul Intelligence Cloud 的一项功能,可在监控步骤中为您提供帮助,它通过提供深入见解,助力您针对代码健康状况做出明智决策。Code Inventory 提供有关代码使用模式的详细见解。您可以将其比作代码库的持续监控器,准确显示生产环境中正在使用的类和方法,且对正在运行的应用程序性能没有任何影响。

它是唯一能够精确记录企业所有 Java 工作负载中生产环境中运行代码的解决方案。它 大幅减少了维护 和测试 未使用代码的时间和负担 ,提高了开发人员的 生产力,并 节约了 成本。

Azul Intelligence Cloud 可基于生产环境中的 Java 运行时数据,提供可付诸行动的情报,从而高效地识别需要移除的未使用代码和死代码,并对存在漏洞的代码按优先顺序进行修复。它可与任何供应商或发行版的任何 JVM 配合使用,从而大幅减少企业的整个 Java 环境中执行非生产性任务的时间,提高 DevOps 生产力。

有了如此完善的健康计划,您将实现更快的部署速度、更低的维护成本、更高的开发人员生产力、更低的安全风险以及更佳的应用程序性能。 

结语 

正如您可能会寻求健康专家的帮助来改善身体状况一样,Azul 也时刻准备着帮助您提升代码健康。联系我们的销售团队,开始使用 Intelligence Cloud,找出代码中未使用的部分。 

立即开始。您的代码库健康刻不容缓。

Is Your Java Runtime as Secure as it Could Be?

DevOps Productivity

Get Started

本文原载于 《The New Stack》