作家
登录

代码质量 – 代码的历史是代码未来的预言

作者: 来源: 2018-01-03 00:14:59 阅读 我要评论

cloc ./ --by-file --csv --quiet --report-file=react_lines.csv 
代码行数排序

维度的归并以及可视化

单一维度对于我们来说,不足以解释某个可能存在 hotspot,接下来我们做一下维度的归并,我们把代码更改的频率和代码行数归并,形成代码修改次数 + 代码行数的一个新的综合维度,在这个维度中,代码修改次数要比代码行数拥有更多的权重。这个工作我们经由过程 Python 编写脚本完成,Python 脚本的代码位于 hotspots-helper。我们来看一下新的维度产生的数据:

python merge_comp_freqs.py ../complexity/data/react_freqs.csv ../complexity/data/react_lines.csv > react_hotspot_candidates.csv

图7:代码质量 - 代码的汗青是代码将来的预言
代码修改次数 + 代码行数排序

这个维度异常清楚的表达了 React 大年夜 15.0.0 到 16.0.0 的重要代码改变,来源竽暌冠 React fiber,fiber 带来了大年夜量的代码和多次的修改,个中排名前三的有两个都是衬着过程中 fiber 用来调剂义务的部分。排名前几位的代码行数累计近万,这么多代码逐个去浏览源码照样很消费精力的,不过经由过程这些数据,我们可以应用 D3.js 做一些可视化,经由过程 circle packing 算法,获得一个 enclosure diagram,图中每个圆的直径越大年夜,代表这个模块/文件代码行数越多,色彩越深代表这个模块/文件修改的次数越多,修改越频繁:

图8:代码质量 - 代码的汗青是代码将来的预言
React 代码大年夜 15.0.0 到 16.0.0 的可视化
图9:代码质量 - 代码的汗青是代码将来的预言
hotspots 候选文件

具体可视化页面参考 Complexity Study,我也做了一个 Docker 镜像,地址是 youngleehua/complexity-study。

文件定名和再惹人的复杂度分析

如今我们测验测验在这些潜在的 hotspots 中找出真正的问题,我们再增长一个维度,即文件定名。文件,类,函数的定名,可以或许异常好的表现出开辟者的设计意图,平日情况下,我们浏览代码都是经由过程文件,类和函数的定名领会之前开辟者的设计和思惟的。定名不只可以或许区搀扶哪些是设备文件,哪些是代码本身,并且也能区搀扶文件所负责的职责,好的文件定名,可以或许确认模块的代码职责,让代码内聚,尽可能的削减后续其他职责代码的参加,避免逻辑变得过于复杂,增长修改次数和bug。例如比拟 ReactFiberBeginWork.js,ReactDOMComponent.js 就是一个更好的定名,如不雅不去看 ReactFiberCommitWork.js 以及 ReactFiberCompleteWork.js 得出 Fiber 本身有个调剂周期的结论,ReactFiberBeginWork.js 显得不那么竽暌寡好和清楚(谁都知道一个模块须要一个初始的代码),而经由过程文件定名,我们也能明显的清除一些文件比如 package.json 这种项目标设备文件(不过设备文件产生问题的情况并不是没有,参考大年夜型C说话项目标Makefile)。

  1. git log --pretty=format:'[%h] %an %ad %s' --date=short --numstat --before=2017-09-27 --after=2016-04-09 > react_evo.log 
图3:代码质量 - 代码的汗青是代码将来的预言

接下来,我们针对定名上并不友爱以及在综合维度上排名靠前的文件做一次代码复杂度分析,并根据复杂度分析,肯定代码复杂度在汗青提交中的变更,以及为后续代码的修改供给指导和看法。复杂度分析的手段今朝看来也比较多,比如圈复杂度,也存在针对说话的复杂度分析对象,例如针对 Javascript 的 es-analysis/plato,然则为了做到说话的中立,形成一个通用的筹划,我经由过程代码的缩进来标记代码文件的复杂度情况。

对于大年夜多半说话来说(尤其对于C-like的说话),代码缩绝代表的是更深层次的逻辑,逻辑层次越深,须要控制的逻辑也就越复杂,可能产生的问题也就越多。下面两个文件,你更欲望本身保护哪一个?我更欲望本身负责保护的是左边的代码:)

图10:代码质量 - 代码的汗青是代码将来的预言
代码的外形
  1. java -jar code-maat/target/code-maat-1.1-SNAPSHOT-standalone.jar -l react_evo.log -c git -a summary 
图4:代码质量 - 代码的汗青是代码将来的预言

我们照样应用 Python,对代码的缩进进行分析,我们把一个 tab 和 2 个空格(为了相符 React 代码的风格)作为一个逻辑上的缩进,忽视掉掉?行,每个缩紧作为一个复杂度的得分(1 分),看一看全部文件的总复杂度,平均复杂度,复杂度的方差以及最大年夜复杂度。


  推荐阅读

  发挥税收大数据优势 利用大数据监督税务工作

【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 出力于“查”,筛选锁定疑点信息。面对改头换面、花样翻新的“四风”问题,发挥自身优势>>>详细阅读


本文标题:代码质量 – 代码的历史是代码未来的预言

地址:http://www.17bianji.com/lsqh/40179.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)