当前位置: 首页 > 网络应用技术

询问“覆盖率检测”的实施原则,这是吗?

时间:2023-03-08 20:39:24 网络应用技术

  覆盖范围检测用于确定单个测试的完整性。玩笑和业力都提供了此功能:

  覆盖率是已执行的代码的比例。例如,已经执行了多少行,执行了多少个分支,执行了多少个功能以及执行了多少个语句。

  覆盖率的总数分为行覆盖范围,分支覆盖范围,功能覆盖范围,声明覆盖范围等。

  看来这很棒。执行后,您可以知道涵盖了哪些代码。实际上,实施原则相对简单。我相信,在阅读本文后,您会感到“只是吗?”

  开玩笑和卡拉马都是基于伊斯坦布尔的报道。让我们探索伊斯坦布尔的实施原则。

  测试代码如下:

  我们执行伊斯坦布尔的仪器命令:

  仪器是指插入堆的函数,即,在函数透明的功能中添加一些代码。

  为什么要插入桩?阅读生成的代码后,您了解。

  让我们格式化并替换变量名称。

  这是切换代码。在每个语句中,每个函数,每个分支,计数,s,f,b属性。

  上面还有一个代码:

  初始化全局变量AAA,记录以下信息:

  看到这里,我们可能可以理解覆盖范围的原则。它是为每个语句,函数和分支插入计数代码,该代码记录在全局对象中。

  为了不与其他全局变量冲突,该对象的名称是随机生成的。例如,这是更改为AAA的简化。

  我们知道覆盖率是插入计数代码。那你怎么堆呢?

  功能桩基于AST,找到语句,功能,分支和插入的AST AST,将桩代码插入前方。

  伊斯坦布尔也这样做。

  以下是Isstanbul的源代码(只需查看以红线标记的位置):

  正是通过Esprima(JS解析器)作为AST解析,然后插入AST堆。

  桩代码分为两个部分,一个是全局对象的代码,一个是每个分支,语句和功能的计数代码。

  让我们看一下:

  伊斯坦布尔初始化统计的全局封面对象:

  堆积时,您将在此Coverstate中记录信息:

  最后,将封面变成字符串到代码:

  特定的分支,语句和功能AST插入桩如何?

  一堆不同的AST,也就是说,根据遍历过程中的类型进行不同的治疗:

  然后,将特定堆插入AST的一部分:

  声明插入堆:

  功能插入桩:

  看到这一点,我们知道该函数插入桩的实现原理是遍历AST,以及将计数代码插入不同位置的AST。

  但是有些学生可能会说我通常在插入堆后不会手动生成代码?使用开玩笑 - 覆盖自动运行测试用例,然后给出覆盖范围数据。

  伊斯坦布尔是如何制造透明堆的?

  阅读了上一篇《启用钩子》的朋友知道nodejs的模块被分为负载,扩展名['。JS'],并编译。

  我们只需要重写扩展步骤['。JS']以实现透明的代码转换。

  伊斯坦布尔也一样:

  通过修改扩展名['。JS']方法。在这里,插入了函数。之后,执行的代码是在转换之后,开发人员无法感知它。

  开玩笑和业力都基于伊斯坦布尔实现了覆盖范围检测。覆盖统计原理是插入桩的功能。基于AST的语句,功能和分支,插入了代码的数量,并通过要求挂钩实现透明的转换。在执行代码后,可以获取统计信息,并可以计算覆盖范围。

  阅读后,您认为:

  这是覆盖范围检测的实现吗?