​许多工程团队都在努力衡量他们重构工作的有效性。让我们看一下可以帮助您衡量重构成功的 5 个指标。

代码重构为开发人员提供了急需的精神休息,我认为许多开发人员都可以与此相关。整天编写代码要求很高,尤其是在您每天创建新功能的情况下。这是一项繁重的工作,开发人员通常需要一些空间来思考代码库的整体组织并回顾可以改进的地方。

这正是代码重构所做的。它为开发人员提供了这种急需的精神休息,并让他们有机会解决更高级别的代码库相关问题。但是,这也是根据代码库指南检查您的代码的好时机。没有代码库是完美的。违反准则的小错误使其进入“主要”分支。

最重要的是,它减少了 技术债务。开发人员有机会探索代码库并了解他们未接触过的其他部分或功能。这是代码重构的一个很好的附带好处。

然而,许多团队都在努力衡量他们重构工作的有效性。团队领导或 CTO 经常需要向管理层报告。如果没有“硬”数字,就很难证明重构代码库所花费的时间与开发新功能所花费的时间是合理的。对于许多初创公司来说,压力一直存在。这种持续的压力使得很难证明代码库重构的合理性。

本文着眼于可用于衡量代码重构成功的不同指标。

衡量重构成功的指标

您可以实施几个指标来衡量代码库重构是否成功。您不需要实现所有指标,因为代码重构仍然是一项合乎逻辑的工作。但是,特定指标可以很好地表明重构是否成功。

1. 开放代码库问题的数量

当开放代码库问题的数量不断增长时,这是代码库质量下降的危险信号。但是,除了作为危险信号之外,它还可以帮助您跟踪重构工作的成功。您的明显目标是在开始下一个 sprint 之前将开放代码库问题的数量减少到零。

您希望尽快解决这些问题,因为它们仍然是相对较小的问题。但是,当您的代码库随着时间的推移而发展时,小问题可能会变得复杂且耗时。你想避免这种情况,因为它会让你更加落后 - 在时间和成本方面。

如果您想知道如何跟踪和了解您的代码库的问题,请尝试 Stepsize VSCode和 JetBrains扩展。该工具将帮助您:

  • 将您的问题工具连接到代码

  • 在团队内部分享关于代码库中的定时炸弹的知识

  • 确定问题的优先级并跟踪进度

2. 代码库中的 TODO 数量

通常,您不希望在代码库中看到太多的 TODO。这是事情需要改进但没有积极解决的迹象。当您的代码库发展时,TODO 的上下文可能会丢失,从而难以理解原始问题,更重要的是,难以解决 TODO。

因此,使用重构时可从代码库中删除空闲的 TODO 或 您可以查看上下文并在以后更快地解决它们的方式组织您的 TODO。

3. 失败的单元测试数量

许多代码库都遭受单元测试失败的困扰。只要失败的单元测试的百分比保持相对较低,这不会威胁到您的代码库的质量。

不过,请留意失败测试的数量。这是开始代码重构并衡量代码重构成功与否的危险信号。在开始新的 sprint 之前,您希望将失败的测试数量减少到接近于零。

4. 代码覆盖率

代码覆盖率指标与测量失败单元测试的数量密切相关。但是,要衡量代码重构的成功与否,您还想知道代码库的质量如何提高。衡量代码库质量的一种方法是衡量代码覆盖率,因为它告诉您可以信任您的代码库的程度。如果测试编写正确,则更高的代码覆盖率通常会导致更高的代码质量。

没有代码库是完美的,但是,请尝试接近 100% 的代码覆盖率。如果您没有资源通过测试完全覆盖您的代码库,请确保覆盖整个代码中最关键的路径。这将帮助您增加对代码的信任。

常见陷阱: 重构代码时不要忘记编写、更新或更改测试。您不想改进代码,但要降低代码覆盖率。换句话说,重构和代码测试齐头并进。

5. 测量重复

衡量重复度不是您应该瞄准的高级指标。但是,在重构代码时,它仍然是一个值得关注的指标。当代码库增长时,人们并不总是完全理解代码库。因此,他们可能不知道已经存在一个帮助库或函数,并创建一个具有相同功能的新库或函数。同样的情况也经常发生在较大代码库中的模块上。

首先,尝试识别重复代码并记下位置以衡量重构是否成功。您可以重新访问此列表以衡量在完成代码重构后从代码库中删除了多少行重复代码。

如何使用这些指标来改进你的重构过程?

如果您考虑代码库重构,请不要在没有计划的情况下直接加入。您需要为重构过程设定目标和界限,以便更容易衡量成功。

首先,您要 收集在此代码库重构冲刺期间要解决**的所有与代码库相关的问题。如果缺少某些票证,请确保跟踪它们或创建问题。例如, 查看您想要从代码库中删除的所有 TODO

一旦确定了要解决的问题,就可以制定有助于跟踪重构成功的指标。例如,您想删除三个重复的模块并将代码覆盖率提高 15%。

现在您已经收集了所有问题并设定了目标,是时候分享有关代码库的知识以及为什么需要解决特定的问题了。如果您不解决问题,您可以解释问题的背景和对项目的影响。这也是分享代码库新部分知识的好时机,因此所有开发人员都可以跟上进度。

最后, 优先考虑您要首先解决的问题。您将无法在重构周或您设置的任何时间线内完成所有问题。因此,在处理不太重要的问题之前,请确保首先解决影响最大的组织问题。

要结束代码库重构,请 **收集所有指标数据并根据您设定的目标对其进行验证。**现在是讨论出了什么问题以及将来如何改进代码库重构过程的好时机。不要指望一切顺利。可能会发生错误,这很好。

结论:重构的成功和目的?

无论您如何衡量重构成功,请确保不要使用这些指标来评估程序员的表现或决定晋升或类似的事情。

重构代码旨在尽早解决代码库和组织问题。如果不加以处理,它们可能会升级为更严重的问题,需要更多的时间和资源来解决。

这也是组织代码重构的主要论据之一。在初创公司中,交付新功能的压力始终存在。但是,作为一个团队,有时您必须退后一步来评估代码并对其进行重构以 保持其质量。

代码重构的力量:如何衡量重构成功相关推荐

  1. 50天10万行代码,一号专车系统重构细节回顾

    2013年底,我关闭当时的创业项目,无所事事之时,打电话向快的CEO Dexter请教,当时快的和大黄蜂刚刚合并,他建议我可以先和大黄蜂CEO李祖闽(Joe)聊聊. 和Joe第一次见面是在虹桥火车站的 ...

  2. 代码重构(五):继承关系重构规则

    陆陆续续的发表了多篇关于重构的文章了,还是那句话,重构是一个项目迭代开发中必不可少的一个阶段.其实重构伴随着你的项目的整个阶段.在前几篇关于重构的文章中我们谈到了函数的重构.类的重构.数据的重构以及条 ...

  3. 代码重构(四):条件表达式重构规则

    继续更新有关重构的博客,前三篇是关于类.函数和数据的重构的博客,内容还算比较 充实吧.今天继续更新,本篇博客的主题是关于条件表达式的重构规则.有时候在实现比较复杂的业务逻辑时,各种条件各种嵌套.如果处 ...

  4. 机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八)

    机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八) 压缩分量的EEMD代码 压缩分量的EEMD数据 压缩分量的EEMD结果 CEEMDAN代码 CEEMDAN ...

  5. 怎么把HTML网页重构为VUE,前端VUE重构之路

    今年8月份进入前端重构组,用vue重构jq老工程,记录一下在重构过程中遇到的问题.解决方法和一些心得体会吧.项目技术栈:Vue + Vue-Router + Vuex, UI组件库用的有赞的vant ...

  6. 【重构篇js案例解析重构】第一章 重构的原则

    重构的原则 重构代码示例 重构前的代码 var plays = {"hamlet": { "name": "Hamlet", "t ...

  7. 什么是重构,什么不是重构

    英文原文:What Refactoring is, and what it isn't,翻译:外刊IT评论 有时候,会有程序员跑到我这里说他们不喜欢某个东西的设计,"我们需要给它来个全面的重 ...

  8. 《重构HTML:改善Web应用的设计(修订版)》——第1章 重构1.1 为何重构

    本节书摘来自异步社区<重构HTML:改善Web应用的设计(修订版)>一书中的第1章,第1.1节,作者: [美]Elliotte Rusty Harold 更多章节内容可以访问云栖社区&qu ...

  9. python外星人入侵游戏代码大全-Python外星人入侵游戏开发—重构键盘鼠标响应代码...

    用法分析 在大型项目中,经常需要在添加新代码前重构既有代码.重构旨在简化既有代码的结构,使其更容易扩展.在本节中,我们将创建一个名为game_functions 的新模块,它将存储大量让游戏<外 ...

最新文章

  1. 用立异,声东击西——贵阳Flex创客团队航行器吸引世界眼光
  2. tensorflow学习(3.tensorboard的使用)
  3. js 判断移动端还是pc端,ios或者android
  4. 移动端真机调试,手机端调试,移动端调试
  5. Django讲课笔记08:定义商城的数据模型
  6. (23)FPGA面试技能提升篇(SSC接口、V35接口)
  7. 服务自动拉起,定时日志清理,数据统计的shell脚本
  8. 程序员专属段子集锦 7/10
  9. python属性查找 深入理解(attribute lookup)
  10. Zookeeper(一) zookeeper基础使用
  11. Flask 扩展 自定义扩展
  12. 有限元计算计算机配置,关于有限元分析的电脑配置问题
  13. 修改input提示文字样式
  14. 赴微软 软件开发测试工程师。
  15. python爬斗鱼直播数据图片_最美小编带你Python爬虫实现获取斗鱼主播信息
  16. Leetcode面试题22. 链表中倒数第k个节点
  17. bootstrap3 表单构建器_Knex - 灵活轻便的 Node.js SQL 查询构建器
  18. bzoj4137[FJOI2015]火星商店问题
  19. Bootstrap 字体图标和自定义矢量图标
  20. TWS ChargerBox 驱动篇(一):Charger

热门文章

  1. VHDL语言基础-数据类型及运算符
  2. 初识html5小游戏
  3. html5 获得窗口焦点和失去窗口焦点
  4. python 非线性规划
  5. 中国视频点播vod系统 v4.2 build 2002.09.21 是什么
  6. nginx请求转发被拒绝_解决nginx反向代理proxy不能转发header报头
  7. 注会考试计算机应用技巧,2019年注会cpa考试机考系统计算器的操作技巧
  8. 计算机网络系统集成有哪些方面,计算机网络中系统集成主要包含哪些?
  9. php全套之七,【独家首发】最新七星修改二开正米酷影视7.2完整版/支持自定义解析/支持PHP7.0及以上...
  10. The package jxl is not accessible解决