Code 覆盖率工具:语句、分支和决策测试

什么是 Code 覆盖范围?
Code 覆盖 是衡量程序源代码测试程度的指标。它是以下形式的一种衡量标准: 白盒测试 它可以找出程序中未被一组测试用例覆盖的区域。它还有助于创建额外的测试用例以提高覆盖率,并确定代码覆盖率的量化指标。
大多数情况下,代码覆盖率系统会收集有关正在运行的程序的信息。然后,它将这些信息与源代码信息结合起来,生成一份关于测试套件代码覆盖率的报告。
为何使用 Code 覆盖率测试?
以下是使用代码覆盖率的一些主要原因:
- 它可以帮助您衡量测试实施的效率。
- 它提供了一种量化的测试方法。
- 它定义了源代码的测试程度。
Code 覆盖方法
以下是主要的代码覆盖率计算方法:
- 声明覆盖范围
- 决策覆盖
- 分支机构覆盖范围
- Toggl电子覆盖范围
- FSM 覆盖范围
声明覆盖范围
声明覆盖范围 语句覆盖率是一种白盒测试技术,它至少执行源代码中的所有可执行语句一次。它用于计算源代码中已执行的语句数量。语句覆盖率的主要目的是覆盖源代码中所有可能的路径、行和语句。
语句覆盖率用于根据被测代码的结构推导出各种场景。
在白盒测试中,测试人员专注于软件的工作原理。换句话说,测试人员专注于源代码的内部运行机制,特别是控制流图或流程图。
一般来说,任何软件的源代码中都会包含各种各样的元素,例如运算符、函数、布局等等。ping例如异常处理程序等等。根据程序的输入,某些代码语句可能不会被执行。语句覆盖率的目标是覆盖代码中所有可能的路径、行和语句。
让我们通过一个例子来理解如何计算语句覆盖率。这里我们选取两种不同的场景,分别计算每种场景下的语句覆盖率百分比。
来源 Code:
Prints (int a, int b) { ------------ Printsum is a function int result = a + b; If (result > 0) Print ("Positive", result) Else Print ("Negative", result) } ----------- End of the source code
情景1: 如果 A = 3,B = 9
图中黄色标记的语句是根据场景执行的语句。已执行语句数为 5,语句总数为 7,因此语句覆盖率为 5/7 = 71%。
情景2: 如果 A = -3,则 B = -9
图中黄色标记的语句是根据场景执行的语句。已执行语句数为 6,语句总数为 7,因此语句覆盖率为 6/7 = 85%。
但总的来说,你会发现所有陈述都涵盖在两种情景中。因此我们可以得出结论,总体陈述覆盖率为 100%。
声明覆盖范围包括哪些内容?
- 未使用的语句
- 死 Code
- 未使用的分支
- 缺失语句
决策覆盖测试
决策覆盖 决策覆盖率测试是一种白盒测试技术,它会报告源代码中每个布尔表达式的真假结果。决策覆盖率测试的目标是覆盖并验证所有可访问的源代码,方法是检查并确保每个可能的决策点的每个分支都至少执行一次。
在这种覆盖类型中,表达式可能变得非常复杂,因此很难实现 100% 的覆盖率。这就是为什么需要使用各种方法来报告此指标的原因。这些方法优先考虑最关键的组合。虽然它与分支覆盖率类似,但它对控制流更加敏感。
决策覆盖示例
考虑以下代码:
Demo(int a) { If (a > 5) a = a * 3 Print (a) }
情景1: a 的值为 2。如果 (a>5) 则决策结果为“否”,因此决策覆盖率 = 50%。
情景2: a 的值为 6。如果 (a>5) 则决策结果为“是”,因此决策覆盖率 = 50%。
| 测试用例 | A 的值 | 输出 | 决策覆盖 |
|---|---|---|---|
| 1 | 2 | 2 | 50% |
| 2 | 6 | 18 | 50% |
分支覆盖测试
分支机构覆盖范围 分支覆盖率是一种白盒测试方法,它测试代码模块(语句或循环)的每个输出结果。分支覆盖率的目的是确保每个分支的每个决策条件至少执行一次。它有助于衡量独立代码段的比例,并找出没有分支的代码段。
例如,如果结果是二元的,则需要测试真和假结果。
计算分支覆盖率的公式:
分支机构覆盖示例
要学习分支覆盖率,请参考前面用过的例子。分支覆盖率也会考虑无条件分支。
| 测试用例 | A 的值 | 输出 | 决策覆盖 | 分支机构覆盖范围 |
|---|---|---|---|---|
| 1 | 2 | 2 | 50% | 33% |
| 2 | 6 | 18 | 50% | 67% |
分支机构覆盖的优势:
- 允许您验证代码中的所有分支。
- 帮助您确保任何分支都不会导致程序运行出现任何异常。
- 消除因语句覆盖率测试而产生的问题。
- 可以帮助您找到其他测试方法未测试过的领域。
- 允许您找到代码覆盖率的量化指标。
- 分支覆盖率会忽略布尔表达式内部的分支。
条件覆盖测试
条件覆盖条件覆盖(或表达式覆盖)是一种测试方法,用于测试和评估条件语句中的变量或子表达式。条件覆盖的目标是检查每个逻辑条件的具体结果。与决策覆盖相比,条件覆盖对控制流的敏感性更高。在这种覆盖方式中,仅考虑包含逻辑操作数的表达式。
例如,如果一个表达式包含布尔运算(如 AND、OR 或 XOR),则表示所有可能的结果。条件覆盖率并不保证完全的决策覆盖率。
条件覆盖率的计算公式:
对于一个包含两个操作数的表达式,有四种可能的组合:TT、FF、TF 和 FT。考虑输入 X=3,Y=4(x)。 b) FALSE,条件覆盖率为 1/4 = 25%。
有限状态机覆盖
有限状态机覆盖率无疑是最复杂的代码覆盖率方法之一。这是因为它着眼于设计的行为。在这种覆盖率方法中,你需要查看特定状态被访问或转换的次数,以及有限状态机中包含的序列数量。
哪种类型 Code 可选择的保障范围
这无疑是最难回答的问题。为了选择合适的覆盖率方法,测试人员需要检查以下几点:
- 被测代码存在一个或多个未发现的缺陷,
- 潜在处罚的成本
- 声誉损失的代价
- 销售损失成本等等。
缺陷导致代价高昂的生产故障的可能性越高,您需要选择的覆盖级别就越严格。
Code 覆盖范围与功能覆盖范围
| Code 保障范围 | 功能覆盖 |
|---|---|
| 告诉你你的测试平台对源代码的测试效果如何。 | 衡量您的测试平台对设计功能性的覆盖程度。 |
| 从不使用设计规范。 | 采用设计规范。 |
| 由开发人员完成。 | 由测试人员完成。 |
Code 覆盖工具
以下是一些重要的代码覆盖率工具:
| 工具名称 | 描述 |
|---|---|
| Cobertura | 一款开源代码覆盖率工具。它通过对代码库进行插桩,分析测试套件运行时哪些代码行被执行、哪些代码行未被执行,来衡量测试覆盖率。 |
| 三叶草 | 三叶草(OpenClover) 还可以通过仅运行涵盖自上次构建以来修改的应用程序代码的测试来减少测试时间。 |
| 开发合作伙伴 | DevPartner 使开发人员能够分析 Java 代码质量和复杂度。 |
| 艾玛 | EMMA 支持类、方法、行和基本块覆盖率,并按源文件、类和方法级别进行聚合。 |
| 卡利斯蒂克 | Kalistick 是一款第三方应用程序,它可以从不同角度分析代码。 |
| CoView 和 CoAnt | 一款用于指标、模拟对象创建、代码可测试性、路径和分支覆盖率等的代码覆盖率工具。 |
| 靶心 C++ | BullseyeCoverage 是一款代码覆盖率工具,适用于 C++ 和C. |
| 声纳 | Sonar 是一款开源代码覆盖率工具,可帮助您管理代码质量。 |
使用的优点和缺点 Code 保障范围
| 优势 | 缺点 |
|---|---|
| 有助于对代码覆盖率进行定量评估。 | 即使设计中没有实现某个特定功能,代码覆盖率仍然会显示 100% 的覆盖率。 |
| 允许您创建额外的测试用例以提高测试覆盖率。 | 使用代码覆盖率无法确定是否已测试了某个功能的所有可能值。 |
| 允许您查找程序中未被一组测试用例执行到的区域。 | Code 覆盖率并不能说明你的逻辑覆盖了多少以及覆盖得如何。 |






