作者丨Rina Diane Caballar
译者丨夏夜
相片:来自谷歌
五颜六色标识的行号(用赤色矩形框杰出显现)用来可视化地检查代码掩盖状况。行号假如被测验掩盖,则为绿色;假如没有被掩盖,则为橙色;假如没有检测该行,则为白色。
在软件开发中,一个称为代码掩盖率的常用衡量规范,用于衡量布置代码之前,所履行的测验掩盖到的体系代码的百分比。代码掩盖率一般由独自的软件程序主动丈量,或许能够从命令行手动发动某些代码掩盖率东西。测验成果精确地显现了在运转测验套件时履行了哪些代码行,而且能够提醒哪些代码行或许需求进一步的测验。
抱负状况下,软件开发团队的方针是 100% 的代码掩盖率。但在实践中,这种状况很少发作,由于有些代码块会走许多不同的履行途径,也由于各种边际状况,根据体系的需求不同,应该(或不应该)考虑这些边际状况。
图表示例:近年来,越来越多的谷歌项目现已很积极地引入了主动化代码掩盖率测验东西
衡量代码掩盖率现已成为软件开发和测验团队的常见实践,可是这种实践是否真的进步了代码质量,这个问题依然存在争议。
一些人以为,开发人员或许把焦点放在了数量上,而非质量上,创立测验仅仅为了满意代码掩盖率,而不是满足强健地辨认高风险或要害的代码区域。其他人则对它的本钱效益提出了忧虑——它需求名贵的开发人员时刻来评定成果,而且纷歧定能进步测验质量。
关于像谷歌这样的大型安排(具有 10 亿行代码,每天接纳数万次提交,并支撑七种编程言语)来说,衡量代码掩盖率特别困难。
谷歌的 AI 研讨人员 Marko Ivankovi 和 Goran Petrovi 最近的一项研讨,供给了这家科技巨子代码掩盖率基础设施的不为人知的状况,它由四个核心层组成。底层组合了针对每种编程言语规划的代码掩盖率库,中间层将代码掩盖主动化流程集成到了公司的开发和构建作业流中。顶层运用代码修改器和其他的定制东西,将代码掩盖信息可视化显现出来。
作为这项研讨的一部分,Ivankovi 和 Petrovi 剖析代码掩盖率在 5 年内的采用率。他们发现,虽然谷歌没有强制规则代码掩盖率,但自 2014 年以来,采用率却一直在稳步增长。2018 年第一季度,超越 90% 的项目运用了主动的代码掩盖东西。
研讨人员还从 3000 名随机挑选的谷歌开发人员和其他非工程人员中,收集了 512 份关于代码掩盖率有用性的查询问卷。在受访者中,只要 45% 的人在代码修正时频频运用代码掩盖率测验,而 40% 的人在进行代码评定时会定时地运用代码掩盖率。
图表示例:来自谷歌
谷歌的查询参与者在代码修正(赤色)、检查代码更改(蓝色)和阅读代码更改(绿色)时,对代码掩盖率的有用性进行了评分。
Ivankovi 向 IEEE Spectrum 谈到了他们的这项研讨,和代码掩盖在软件开发和测验中的效果。(为了明晰起见,以下采访记载经过了修改和浓缩。)
IEEE Spectrum:为什么你以为代码掩盖率很重要?
Marko Ivankovi :许多人或许期望咱们说,“好的掩盖率能够削减 bug 的数量。“这当然是其间的一个原因,但(咱们发现的)更令人惊奇的是,即便掩盖率不能直接作为一种质量信号,它依然值得核算。”
掩盖率或许对检查代码的人没有直接的协助,可是对东西依然有协助——例如,剖析依靠联系的东西。例如,假如代码 A 声明它依靠于代码 B,可是对代码 A 的测验永久无法触及代码 B,那么这种依靠或许不是实在的,主动化东西能够测验删去它来简化代码库。
当然,实践完成要杂乱得多。咱们现已发现了许多这样的东西,它们能够运用咱们的基础设施供给的掩盖率信息,来改善它们自己的功用。关于许多这些用例,代码掩盖率和代码质量之间的相关性底子不重要。
IEEE Spectrum:是什么激发了你研讨谷歌的代码掩盖率?
Ivankovi :由于咱们面对着一个问题。在代码评定时刻,咱们花费了很多的时刻企图弄清楚,测验是否真的测验到了这些评定的代码。那时,代码构建体系支撑掩盖率核算,可是您有必要手动激活它,并手动将掩盖率成果和您正在审理的代码叠加来检查。有一天,咱们对自己说,“有必要找到一种主动化的办法。“一个星期后,咱们有了第一个可运转的原型。其他工程师看到后,问是否他们也能具有这样的原型。咱们想保证咱们为他们供给了最好的体会,所以咱们开端研讨这个问题。
IEEE Spectrum:你的调研成果里,你最惊奇的是什么?
Ivankovi :咱们感到惊奇的是,开始置疑代码掩盖率办法,但却终究发现它很有用的人数十分多。咱们查询的一些人基本上是对立掩盖率的,但他们依然供认他们有时运用掩盖率办法,而且发现它很有用。
IEEE Spectrum:你在调研中面对的最大应战是什么?你是怎么战胜的?
Ivankovi :从表面上看,代码掩盖率似乎是一个简略的概念:即一行代码是否被测验掩盖。但事实证明,当大规划施行时,它充满了各种边角状况和意外状况。咱们花了几年的时刻,来修正测验的基础设施中的一切失利状况。
咱们在进行研讨时遇到了相似的应战。咱们查询的大多数工程师对掩盖率的整体概念是相同的,但当被问及细节时,他们的答复却截然不同。咱们有必要对一小部分人群进行几回查询,才干得到正确答案。
IEEE Spectrum:你以为谷歌的代码掩盖基础设施有哪些优势?你以为还有什么能够改善的?
Ivankovi :咱们尽力保证基础设施资源是有用运用的,而且能够运转在谷歌如此大的代码规划上。向人们展现这是或许的,这或许是(咱们的研讨)最大的奉献。
咱们规划咱们的基础设施,以更容易地进行试验、做 A /B 测验和评价假定。咱们还以可拜访的格局导出一切数据,这样掩盖率信息就能够可视化,这有助于团队坚持健康的代码,并准备好修正事情。
当咱们在查询工程师的时分,他们中的一些人给了咱们改善的主张,其间一些主张值得咱们去探究。其间一个比较风趣的办法是,假如代码掩盖率测验成果太好,就不要显现它们,这样工程师就不会过于自信。
IEEE Spectrum:关于期望布置代码掩盖率,或改善现有代码掩盖率的软件开发和测验团队,您有什么主张?
Ivankovi :我以为能够给到的最重要的主张,是专心于他们的作业流程。不要仅仅布置掩盖率测验,还要保证您将其集成到开发人员作业流的正确方位,只要在这个方位上,掩盖率成果才是最有用的。在咱们的经历中,代码评定是代码健康的柱石。
IEEE Spectrum:关于谷歌的代码掩盖基础设施,未来将会有什么开展?
Ivankovi :现在,咱们在更进一步地研讨数据运用和开发人员的定见,以便更好地了解怎么运用掩盖率。例如,咱们正在研讨,人们了解到的有用性与实践的有用性之间的差异。咱们想要研讨的一个详细问题是,“在代码评定时刻,显现掩盖率实践上会加速评定进程吗?”这项研讨的成果,将决议咱们下一步的基础设施怎么改善。
https://spectrum.ieee.org/tech-talk/computing/software/qa-how-google-implements-code-coverage-at-massive-scale
点个在看少个 bug