白盒测试-路径覆盖

​ 程序中的路径是执行程序时经过的分支的集合。路径覆盖法是指设计一定数量的测试用例运行被测程序,使程序中的所有路径都至少被执行一次。路径覆盖率的计算方法为:测试时至少被执行过一次的路径总数 / 程序的总路径数。

栗子

public static int test(int a, int b, int c) {
    int result = 0;
    if (a == 0 || b > 2) {
        result = b - a;
    }
    if (a > 0 && c > 0) {
        result = c * a;
    }
    return result;
}

第 1 步:分析待测试代码,画出程序的流程图。

在这里插入图片描述

第 2 步:分析流程图。

从上图中可以看出,这段代码共有两个判断语句,每个判断语句分别有取真值、取假值两个分支。那么,程序中共有如下四条路径:

  • 路径 1 :A - C 路径 2 :A - D 路径 3 :B - C 路径 4 :B - D

第 3 步:编写测试用例。

​ 根据路径覆盖的定义,我们需要设计一些测试用例,使程序中的每个路径至少被执行一次。

测试用例编号输入数据预期结果路径覆盖情况
testcase_01a = -2 , b = 1 , c = 9result = 0路径 1 :A - C
testcase_02a = 5 , b = -2 , c = 3result = 15路径 2 :A - D
testcase_03a = 0 , b = 3 , c = 3result = 3路径 3 :B - C
testcase_04a = 1 , b = 5 , c = 9result = 9路径 4 :B - D

​ 路径覆盖可以使程序中的每一条路径都经过测试,确保程序执行路径的正确性。但是,对于判断语句多且复杂、循环次数多的程序,需覆盖的路径数量可能非常庞大,无法在短时间内测试完,例如,下图是一段代码的流程图,图中含有多个判断语句、循环语句,如果要将所有路径都测试到,将花费大量的时间,所以,在实际的项目测试中基本不可能把所有路径都覆盖到。

在这里插入图片描述

​ 路径覆盖可以保证程序中的所有路径都被覆盖到,但对于包含多且复杂的判断语句、循环语句的程序来说,要覆盖每一条路径将会非常困难。

代码实现

​ Demo.java

public static int test(int a, int b, int c) {
    int result = 0;
    if (a == 0 || b > 2) {
        result = b - a;
    }
    if (a > 0 && c > 0) {
        result = c * a;
    }
    return result;
}

​ TestDemo4.java

import org.junit.Assert;
import org.junit.Test;

public class TestDemo4 {

    @Test
    public void test01() {
        Assert.assertEquals(0, Demo.test(-2, 1, 9));
    }

    @Test
    public void test02() {
        Assert.assertEquals(15, Demo.test(5, -2, 3));
    }

    @Test
    public void test03() {
        Assert.assertEquals(3, Demo.test(0, 3, 3));
    }

    @Test
    public void test04() {
        Assert.assertEquals(9, Demo.test(1, 5, 9));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值