前言:

Adam Thornhill 的算法模型中的 Hotspots, 代表的是产品中复杂度高并且是提交到配置库频率高的模块、文件。

Hotspots 是经由计算两个纬度的度量而获得的:

  • 模块、文件的代码行数; 代表著模块、文件的复杂度。
  • 模块、文件提交到配置库的频率; 代表著模块、文件的变更频率。
图一: Hotspots = f(复杂度, 变更频率)

图二是由 CODESCENE 所分析出的 ASP.NET Core MVC 的 Hotspots。

图二: ASP.NET Core MVC 的 Hotspots

让我们看看 ASP.NET Core MVC 的 Hotspots 里面的故事。

本文:

由 CODESCENE 所分析出的 ASP.NET Core MVC 的 Hotspots 当中, 我们找到了 Top Hotspot; 图三中最大的红色圆圈。

Top Hotspot 代表的是:

在 ASP.NET Core MVC 中代码行数最多 (复杂度最高) 并且是提交到配置库的频率最高的模块、文件。

图三: CODESCENE 所分析出的 ASP.NET Core MVC 的 Top Hotspot

因为, ASP.NET Core MVC 是个中等大小的模块; 整个 ASP.NET Core MVC 的代码行数是 200,000  行, 大部分是用 C#  开发。所以, 我们便可直接由 CODESCENE 去分析 ASP.NET Core MVC 的 Top Hotspot 内部所发生的故事, 而获得可大幅改善 ASP.NET Core MVC 质量的启发。

如图四所示, 模块 ASP.NET Core MVC 中 Top Hotspot 中的文件是: ControllerActionInvokerTest.cs; 大约  1,400 行的代码, 超过 100 次的提交配置库的变更。

图四: CODESCENE 所分析出的 ASP.NET Core MVC 的 Top Hotspot: ControllerActionInvokerTest.cs

因为, Hotspot 构成的主要的要素是来自于:

  • 模块、文件的复杂度
  • 模块、文件的变更频率

所以, 我们就先看看 Top Hotspot: ControllerActionInvokerTest.cs 的复杂度的趋势图。

从图五所显示的复杂度的趋势当中, 我们很容易的就发现在 2016 年 五 月, ControllerActionInvokerTest.cs 的代码行数并没有明显的增加, 但是复杂度却明显的飙升。

另一方面, 我们审视 ControllerActionInvokerTest.cs  的代码, 我们发现, ControllerActionInvokerTest.cs 复杂度上升的原因, 并不是因为开发人员在 ControllerActionInvokerTest.cs 中加入了可帮助开发人员理解代码、提升代码维护效率的 “代码注释”。

所以, 我们可以确定的是: ControllerActionInvokerTest.cs 的复杂度的上升, 将会使得 ControllerActionInvokerTest.cs 更加日益的难以维护, 而影响到 ASP.NET Core MVC 开发的效率、产品的质量。

图五: ControllerActionInvokerTest.cs 复杂度的趋势图

CODESCENE 使得我们能从 200,000 行代码的 ASP.NET Core MVC 模块中, 专注到大约 1,400 行代码的ControllerActionInvokerTest.cs 文件中, 去分析值得投入人力、时间去进行整改的技术债务; 而不致于在 ASP.NET Core MVC 模块中盲目的整改技术债务。

我们继续的分析下去…

从图五复杂度的趋势图当中, 我们只是知道 ControllerActionInvokerTest.cs 的复杂度, 将会使得ControllerActionInvokerTest.cs 更加日益的难以维护。但, 我们尚无法得知, 该从何处下手去解决这个问题? 因为, 我们尚无法得知是什么样的开发者行为, 会发生代码行数并没有明显的增加, 但是复杂度却明显的飙升?

所以, 我们将使用 CODESCENE 的 X-Ray, 进行 ControllerActionInvokerTest.cs 文件的代码分析; 找出使得ControllerActionInvokerTest.cs 复杂度明显的飙升的开发者行为。

首先, CODESCENE 的 X-Ray 帮我们分析出在 ControllerActionInvokerTest.cs 文件中的 Top Hotspot 函数; 在 ControllerActionInvokerTest.cs 文件中复杂度最高、变更频率最高的函数。

ControllerActionInvokerTest.cs 文件中的 Top Hotspot 函数:

  • CreateInvoker; 大约 180 行的代码, 超过 80 次的提交配置库的变更。
图六: ControllerActionInvokerTest.cs 文件中的 Hotspot 函数: CreateInvoker

同样的思路、方法:

Top Hotspot 函数: CreateInvoker 的代码, 一定有著是值得我们投入人力、时间去进行分析、整改的技术债务。

我们就先看看 Top Hotspot 函数: CreateInvoker 的复杂度的趋势图。

由 Top Hotspot 函数: CreateInvoker 的复杂度的趋势图当中, 我们可以很容易的看到:

Top Hotspot 函数: CreateInvoker 在 2016 年 五月时, 新增了少量的代码, 却使得复杂度急遽的上升。

图七: Top Hotspot 函数: CreateInvoker 在 2016 年 五月时, 新增了少量的代码, 却使得复杂度急遽的上升

所以, 我们找到了使得 ASP.NET Core MVC 模块, 在代码行数并没有明显的增加, 但是复杂度却明显的飙升的开发者行为:

  • 在 2016 年 五月时, 开发人员在函数 CreateInvoker 中新增了少数的代码, 但却造成函数 CreateInvoker 复杂度急遽的上升, 当然, 也就使得 ControllerActionInvokerTest.cs 文件、ASP.NET Core MVC 模块的复杂度也就急遽的飙升。

结论:

CODESCENE 分析出了开发者在配置库中的行为:

  • 使得我们能从 200,000 行代码的 NET Core MVC 模块中, 专注到大约 1,400 行代码的ControllerActionInvokerTest.cs 文件中。
  • 再从大约 1,400 行代码的 ControllerActionInvokerTest.cs 文件中, 找到值得投入人力、时间去进行整改的 Top Hotspot 函数: CreateInvoker。
  • Top Hotspot 函数: CreateInvoker 虽然有大约 180 行的代码, 但已比 200,000 行代码的 NET Core MVC 模块、1,400 行代码的 ControllerActionInvokerTest.cs 文件少了许多。

分析出了开发者在配置库中的行为, 我们终于可以高效、低成本的付清技术债务; 在 200,000 行代码的模块里, 找到最值得优先关注的 180 行代码!

相关阅读:

产品中的 Hotspots: 基于配置库中代码所隐藏的开发者行为, 高效的提升产品的质量与开发的效率 

开发人员提交代码行为的背后, 隐藏著会让我们大为惊讶的故事 

Proximity: 付清技术债务; 不消除重复代码, 却能提升产品开发的效率、质量 

别再傻傻的写单元测试了; Hotspots 告诉我们单元测试的真相: 单元测试是负债? 还是资产?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据