软件中的路径测试和基础路径测试示例

⚡ 智能摘要

基本路径测试是一种白盒测试技术,它利用控制流图和圈复杂度,从程序的逻辑路径中导出测试用例,从而找到最小的独立路径集。

  • 🗺️ 核心理念: 测试用例来源于代码结构,而不是需求文档。
  • 🔢 四个步骤: 绘制控制流图,计算环路复杂度,导出基集,为每条路径编写一个测试。
  • 📐 测试用例数量: 独立路径的数量等于环路复杂度,这是一个客观目标。
  • 🔄 混合方法: 它结合了分支测试和路径测试,以最少的测试次数达到最大的覆盖率。
  • 承保范围保证: 执行基础集会至少运行模块中的每个语句一次。
  • ⚠️ 已知极限: 它无法找到缺失的需求,因为它只测试已经存在的代码。

路径测试基础路径测试

软件测试中的路径测试是什么?

路径测试是一种结构测试方法,它涉及使用程序的源代码来查找所有可能的可执行路径。它有助于确定一段代码中的所有错误。此方法旨在执行计算机程序中的所有或选定的路径。

任何非平凡程序都包含许多可能的执行路径。测试每一条路径既困难又耗时,而且大多数路径都会重叠。基本路径测试通过识别出能够至少执行到每个语句和每个分支一次的最小路径集合来减少这种冗余。

软件工程中的基础路径测试

基础路径测试 在软件工程中 白色 Box 测试与验证 该方法基于程序中可采用的流程或逻辑路径来定义测试用例。基本路径测试的目标是定义独立路径的数量,因此可以明确定义所需的测试用例数量,以最大化测试覆盖率。

In 软件工程,基础路径测试涉及执行程序中所有可能的块,并以最少的测试用例实现最大的路径覆盖率。它是分支测试和路径测试方法的混合方法。

一个简单的例子就能使这个概念具体化。

软件工程中的基础路径测试

上面的流程图包含条件语句,因此控制流可以通过多条路径到达出口。需要三条独立的路径才能覆盖整个流程:

  • 路径1:1,2,3,5,6,7
  • 路径2:1,2,4,5,6,7
  • 路径31 6,7

如何绘制控制流程图

基础路径测试的每一步都依赖于控制流图,因此,精确地构建控制流图是值得的。

  • 节点: 一系列始终同时执行的语句,用圆圈表示。没有分支的语句序列会合并成一个节点。
  • 边缘: 控制权从一个节点转移到下一个节点,用箭头表示。控制权转移的唯一途径就是通过边。
  • 谓词节点: 包含条件的节点,且有两条或多条边从该节点发出。这些边决定了节点的复杂度。
  • 地区: 由边和节点围成的区域。区域数加一也等于环路复杂度。

考虑一个包含两个决策的简短模块:

if (a > b) {          // node 1, predicate
    max = a;          // node 2
} else {
    max = b;          // node 3
}
if (max > limit) {    // node 4, predicate
    alert();          // node 5
}
return max;           // node 6

该图有 6 个节点和 6 条边,根据边数公式,V(G) = 6 – 6 + 2 = 2。谓词计数法可以更快地得出相同的结果:2 个决策加 1 等于 3 条独立路径,分别经过两个分支。选择你能可靠计算的方法,并与其他方法进行交叉验证。

两条规则可以避免大多数错误。 首先,复合病症,例如 如果 (x > 0 && y > 0) 因为短路会产生第二个决策,所以算作两个谓词节点,而不是一个。其次,无论循环迭代多少次,它都只贡献一个谓词节点。

基础路径测试步骤

基本路径测试的基本步骤包括

  • 绘制控制图(确定不同的程序路径)
  • 计算 圈复杂度 (确定独立路径数量的指标)
  • 找到路径的基集
  • 产生 测试用例 练习每条路径

基础路径测试的优势和局限性

基础路径测试的优势

  • 它有助于减少冗余测试
  • 它重点关注程序逻辑
  • 它以分析为基础,取代了任意的测试用例选择。
  • 执行基础集的测试用例将至少执行一次程序中的每个语句

基础路径测试的局限性

  • 找不到缺失的代码。 从未实现的需求没有路径,因此不会为其生成测试用例。基础路径测试必须与基于需求的测试相结合。
  • 路径数量增长迅速。 嵌套循环和复合条件会迅速增加复杂度,V(G) 大于 20 的模块用这种方式覆盖就变得不切实际了。
  • 覆盖面广并不等于正确性。 执行某个路径只能证明代码能够运行,并不能证明它能产生正确答案。每个测试仍然需要一个有意义的断言。
  • 数据相关路径。 有些路径只能通过特定的输入组合才能到达,而这些输入组合可能很难甚至不可能构建。

常见问题

路径测试旨在执行所有可能的路径,但这对于任何包含循环的模块来说都是不切实际的。基础路径测试仅执行独立路径,这是一个小得多的路径集合,但仍然能够覆盖所有语句和分支。

模块的圈复杂度恰好就是 V(G) 的值。如果 V(G) 为 4,则存在 4 条独立路径,需要 4 个测试用例才能实现完全分支覆盖。

不。它只会测试已存在的代码,因此从未实现的需求不会生成任何路径,也不会导致测试失败。这两种技术是互补的。

AI 工具会生成到达特定分支的输入值,这是人工操作中最耗时的部分。它们还会标记出无法到达的路径,这些路径表明存在死代码。

是的。静态分析工具多年来一直在生成控制流图和复杂度图,而现在人工智能辅助工具还会为每个独立路径添加建议的测试输入。

总结一下这篇文章: