逻辑覆盖:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖

记录一次作业,有关白盒测试的知识点。
详细讲解可看这篇博文
https://www.cnblogs.com/virus1102/p/4953099.html

用逻辑覆盖法为流程图设计测试用例

为以下流程图所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。

  • 语句覆盖:每条语句至少执行一次,即每个可执行语句都执行一次。

  • 判定覆盖:每个判定的每个分支至少执行一次。即图中的条件判定必须覆盖Y/N的情况。

  • 条件覆盖:每个判定的每个条件应取到各种可能的值。

  • 判定/条件覆盖:同时满足判定覆盖条件覆盖。

  • 条件组合覆盖:判定中各条件的每一种组合至少出现一次。如X<4 and Y>8 那么即有4种

  • 路径覆盖:使程序中每一条可能的路径至少执行一次。
    在这里插入图片描述
    测试用例:

  • 语句覆盖

X=10,Y=11
X=-1,Y=1
X=-1,Y=-1

  • 判定覆盖

X=10,Y=11
X=10,Y=10
X=-1,Y=1
X=-1,Y=-1

  • 条件覆盖

X=17 Y=11
X=-5 Y=-1;

  • 判定/条件覆盖

X=17,Y=11
X=10,Y=10
X=-1,Y=1
X=-5,Y=-1

  • 组合覆盖

X=17,Y=11
X=17,Y=-1;
X=-5,Y=11;
X=-5,Y=-1;

  • 路径覆盖

X=17,Y=11;
X=10,Y=8;
X=-1,Y=-1;
X=-1;Y=1

### 设计满足不同覆盖率的测试用例 #### 语句覆盖 语句覆盖的目标是最少数量的测试用例能够执行程序中的每一可执行语句至少一次。对于给定表达式 \(M = (x > 3) && (z < 10)\),可以通过设置变量 \(x\) \(z\) 的值来确保所有可能的分支都被访问到。 - 测试用例 1: \(x = 4, z = 9\), 结果为真。 此用例可以验证整个表达式的计算路径被触发[^1]。 ```java @Test public void testStatementCoverage() { int x = 4; int z = 9; boolean result = (x > 3) && (z < 10); assertTrue(result); // 验证结果是否为 true } ``` #### 判定覆盖 判定覆盖要求每个判断的结果都至少有一次为真假的情况。因此,需要两个测试用例分别使表达式整体为真为假。 - 测试用例 1: \(x = 4, z = 9\), 整体为真。 - 测试用例 2: \(x = 2, z = 15\), 整体为假。 这两个用例涵盖了所有的布尔决策情况。 ```java @Test public void testDecisionCoverageTrue() { int x = 4; int z = 9; boolean result = (x > 3) && (z < 10); assertTrue(result); // 验证结果是否为 true } @Test public void testDecisionCoverageFalse() { int x = 2; int z = 15; boolean result = (x > 3) && (z < 10); assertFalse(result); // 验证结果是否为 false } ``` #### 条件覆盖 条件覆盖要求每个逻辑件的所有可能取值都要被执行至少一次。这意味着需要单独考虑每一个子件 \(x > 3\) \(z < 10\) 是否成立。 - 测试用例 1: \(x = 4, z = 9\), 子件分别为真。 - 测试用例 2: \(x = 2, z = 15\), 子件分别为假。 这些用例确保了单个件的真假均能被检测到。 ```java @Test public void testConditionCoverageBothTrue() { int x = 4; int z = 9; boolean conditionX = (x > 3); boolean conditionZ = (z < 10); assertTrue(conditionX && conditionZ); // 验证两件均为 true } @Test public void testConditionCoverageBothFalse() { int x = 2; int z = 15; boolean conditionX = (x > 3); boolean conditionZ = (z < 10); assertFalse(conditionX || conditionZ); // 验证两件均为 false } ``` #### 判定/条件覆盖 判定/条件覆盖不仅要求每个件的所有可能取值都要被执行至少一次,还要求每个决定的整体结果也要被执行至少一次。通常情况下,四个测试用例足以完成这一目标。 - 测试用例 1: \(x = 4, z = 9\), 所有件为真,最终结果为真。 - 测试用例 2: \(x = 2, z = 9\), 只有第二个件为真,最终结果为假。 - 测试用例 3: \(x = 4, z = 15\), 只有第一个件为真,最终结果为假。 - 测试用例 4: \(x = 2, z = 15\), 所有件为假,最终结果为假。 通过上述用例,既实现了条件覆盖也完成了判定覆盖的要求[^2]。 ```java // 同上省略部分代码... ``` #### 组合覆盖 组合覆盖要求测试用例的设计使得所有可能的组合都能被执行到。由于本例子中有两个件,则共有四种可能性: - 测试用例 1: \(x = 4, z = 9\): (\(T,T\)) - 测试用例 2: \(x = 2, z = 9\): (\(F,T\)) - 测试用例 3: \(x = 4, z = 15\): (\(T,F\)) - 测试用例 4: \(x = 2, z = 15\): (\(F,F\)) 这四组数据完全覆盖了所有件的可能性组合。 ```java // 同上省略部分代码... ``` #### 路径覆盖 路径覆盖是指设计足够的测试用例覆盖程序内的所有可能路径。在复杂件下,路径数会迅速增加。针对当前简单的布尔表达式而言,只需保证以上提到的各种输入场景即可达到路径覆盖的目的。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值