《软件测试》实验2

//不保证完全正确

实验二 白盒测试实验

一、 实验目的

(1) 掌握静态白盒测试的技术和原理。

(2) 掌握逻辑覆盖测试的方法和原理。

(3) 掌握基本路径测试的方法和原理。

二、要求

(1) 按照实验题目要求, 完成相关的白盒测试工作, 并写出详细的测试步骤和测试结果。

(2) 实验完成后, 按照要求编写实验报告

一、实验内容:

1逻辑覆盖测试
【例题2】 某程序中有如下函数, 请编写测试用例完成逻辑覆盖测试。

(1)画出程序流程图

(2)设计测试用例如下

1)语句覆盖: 本程序中共5个可执行语句块, 故设计测试用例如下:

2)分支覆盖: 本程序共2个分支, 故设计测试用例

3条件覆盖: 本程序共3个条件,故设计测试用例如下:

4) 分支/条件覆盖: 本程序共2个分支和3个条件, 故设计测试例如下:

5) 条件组合覆盖: 本程序中有3个条件, 其中后2个条件可以组合

6)路径覆盖: 本程序中共有a,b,c,d,e,f六条路径, 设计用例如下:

(3)进行测试运行程序, 并输入相关用例完成测试, 并编写测试报告

2、 基本路径测试

【例题3】 某软件中包含如下函数, 请设计测试用例完成基本路径测试。 函数代码为:

(1)根据程序画出程序控制流图, 如图2所示

(2)计算控制流图的环路复杂度, 计算方法如下:
V(G)=11个条边-9个节点+2=4
V(G)=3个判定节点+1=4
V(G)=4个区域=4
故该图环路复杂度为4。

(3)导出基本路径
A. 3-4-24
B. 3-4-6-8-24
C. 3-4-6-13-15-22-4-24
D. 3-4-6-13-19-22-4-24

(4)设计测试用例如下

(5)运行程序, 输入相关用例完成测试, 并编写测试报告

五、 实验内容

【题目】 编写函数getGCD,求两个1-100内的整数的最大公约数(通过参数传入两个整数),并编写测试用例完成逻辑覆盖测试和基本路径测试, 并编写测试报告。 参考代码如下:

要求: 完成程序开发工作(使用Java语言) ;
使用对该程序进行静态白盒测试;
设计相关用例完成逻辑覆盖测试和基本路径测试;
完成测试报告的编写。

  • 实验过程及结果记录

编写函数getGCD,求两个1-100内的整数的最大公约数(通过参数传入两个整数),并编写测试用例完成逻辑覆盖测试和基本路径测试, 并编写测试报告。

代码如下:

import java.util.Scanner;

public class GCDCalculator {
   public int getGCD(int x, int y) {
       if (x < 1 || x > 100) {
           System.out.println("参数不正确!x应在1100之间");//语句块1
           return -1;
       }
       if (y < 1 || y > 100) {
           System.out.println("参数不正确!y应在1100之间");//语句块2
           return -1;
       }

       int max, min, result = 1;
       if (x >= y) {

//语句块3
           max = x;
           min = y;
       } else {

//语句块4
           max = y;
           min = x;
       }
//语句块5
       for (int n = 1; n <= min; n++) {
           if (min % n == 0 && max % n == 0) {
               if (n > result) {
                   result = n;
               }
           }
       }
//语句块6
       System.out.println("最大公约数为:" + result);
       return result;
   }

   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       GCDCalculator calculator = new GCDCalculator();

       while (true) {
           System.out.println("请输入第一个整数(1 - 100,输入0退出):");
           int num1 = scanner.nextInt();
           if (num1 == 0) {
               System.out.println("程序退出");
               break;
           }
           System.out.println("请输入第二个整数(1 - 100):");
           int num2 = scanner.nextInt();
           calculator.getGCD(num1, num2);
       }

       scanner.close();
   }
}

一、静态白盒测试

对代码进行代码审查,检查代码结构、命名规范、算法逻辑等。发现代码中Scanner资源未及时关闭可能导致资源泄漏,在while循环结束后添加scanner.close()关闭资源。

代码审查参数范围检查逻辑正确(1-100),无效输入返回 - 1循环从 1 到较小数遍历,逐次判断公约数,逻辑清晰变量命名规范(minNum、gcd),流程无冗余代码。

二、逻辑覆盖测试

(1)画出程序流程图。

(2)设计测试用例如下

1)语句覆盖: 本程序中6个可执行语句块, 故设计测试用例如下:

测试用例

覆盖语句

所走路径

(-5,1)

1

a,c

(1,-5)

2

b,d

50,10

3,5,6

a,b,e,f,h,i,j

(10,50)

4,5,6

a,b,e,g,h,i

2)分支覆盖: 本程序共3个分支, 故设计测试用例。

测试用例

x < 1 || x > 100

y < 1 || y > 100

x>=y

所走路径

(-5,1)

T

F

F

a,c

(1,-5)

F

T

T

b,d

50,10

F

F

T

a,b,e,f,h,i,j

(10,50)

F

F

F

a,b,e,g,h,i

(101,50)

T

F

T

a,c

(50,101)

F

T

F

b,d

(17,17)

F

F

T

a,b,e,f,h,i,j

3)条件覆盖: 本程序共6个条件,故设计测试用例如下:

测试用例

x < 1

x > 100

y < 1

y > 100

x>y

x=y

所走路径

(-5,1)

T

F

F

F

F

F

a,c

(1,-5)

F

F

T

F

T

F

b,d

50,10

F

F

F

F

T

F

a,b,e,f,h,i,j

(10,50)

F

F

F

F

F

F

a,b,e,g,h,i

(101,50)

F

T

F

F

T

F

a,c

(50,101)

F

F

F

T

F

F

b,d

(17,17)

F

F

F

F

F

T

a,b,e,f,h,i,j

4) 分支/条件覆盖: 本程序共3个分支和6个条件, 故设计测试例如下:

测试用例

x < 1 || x > 100

y < 1 || y > 100

x>=y

x < 1

x > 100

y < 1

y > 100

x>y

x=y

所走路径

(-5,1)

T

F

T

T

F

F

F

F

F

a,c

(1,-5)

F

T

F

F

F

T

F

T

F

b,d

50,10

F

F

T

F

F

F

F

T

F

a,b,e,f,h,i,j

(15,50)

F

F

F

F

F

F

F

F

F

a,b,e,g,h,i

(101,50)

T

F

T

F

T

F

F

T

F

a,c

(50,101)

F

F

F

F

F

F

T

F

F

b,d

(17,17)

F

F

T

F

F

F

F

F

T

a,b,e,f,h,i,j

5) 条件组合覆盖: 本程序中有6个条件, 其中后2个条件可以组合

测试用例

x < 1

x > 100

y < 1

y > 100

x>y

x=y

所走路径

(-5,1)

T

F

F

F

F

F

a,c

(1,-5)

F

F

T

F

T

F

b,d

50,10

F

F

F

F

T

F

a,b,e,f,h,i,j

(10,50)

F

F

F

F

F

F

a,b,e,g,h,i

(101,50)

F

T

F

F

T

F

a,c

(50,101)

F

F

F

T

F

F

b,d

(17,17)

F

F

F

F

F

T

a,b,e,f,h,i,j

(1,100)

F

F

F

F

F

F

a,b,e,g,h,i

(100,1)

F

F

F

F

T

F

a,b,e,f,h,i,j

(0,0)

T

F

T

F

F

T

a,c

6)路径覆盖: 本程序中共有a,b,c,d,e,f,g,h,i,j十条路径, 设计用例如下:

测试用例

所走路径

(-5,1)

a,c

(1,-5)

b,d

50,10

a,b,e,f,h,i,j

(10,50)

a,b,e,g,h,i

(101,50)

a,c

(50,101)

b,d

(17,17)

a,b,e,f,h,i,j

(1,100)

a,b,e,g,h,i

(100,1)

a,b,e,f,h,i,j

(0,10)

a,c

(100,100)

a,b,e,f,h,i,j

2、 基本路径测试

  1. 计算控制流图的环路复杂度, 计算方法如下:

方法一:边数 - 节点数 + 2

假设控制流图边数为e,节点数为n,经分析V(G) = 2 - 1 + 2 = 3

方法二:判定节点数 + 1 ,判定节点数为 2,V(G)=2 + 1 = 3

方法三:区域数 ,V(G)=3个区域= 3

故环路复杂度为 3。

3导出基本路径

路径A:1-2-9

路径B:1-2-3-9

路径C:1-2-3-4-5-6-7-9

路径D:1-2-3-4-8-6-7-9

  1. 设计测试用例如下

测试用例

覆盖基本路径

-5,1

A

5,-5

B

(60,20)

C

20,80

D

三、实 验 小 结

在本次白盒测试实验中,我围绕求最大公约数程序,系统实践了静态白盒测试、逻辑覆盖测试与基本路径测试,收获颇丰,同时也深刻认识到自身不足。

实验过程中,我通过代码审查修复了Scanner资源泄漏问题,理解了静态测试对保障代码质量的重要性。在逻辑覆盖测试中,从语句覆盖到条件组合覆盖的逐步深入,让我掌握了不同覆盖标准的差异与适用场景。例如,语句覆盖仅能保证代码执行,而条件组合覆盖则能全面检测条件的各种组合情况,使我意识到测试用例设计需兼顾全面性与效率。基本路径测试中,通过绘制控制流图、计算环路复杂度、导出基本路径,我学会了如何从程序结构出发设计测试用例,有效覆盖程序的不同执行路径,进一步提升了对程序逻辑的分析能力。

然而,实验也暴露出我的不足之处。在计算环路复杂度时,因对控制流图的节点和边分析不细致,导致初次计算错误;设计测试用例时,对复杂条件组合的考虑不够周全,出现部分组合遗漏的情况。这些问题反映出我对理论知识的掌握还不够扎实,实践经验也较为欠缺。

通过本次实验,我不仅加深了对软件测试理论的理解,更提升了实际操作能力,认识到测试在软件开发中的关键作用。未来,我将加强理论学习,多进行实践练习,注重细节和逻辑分析,以提高测试用例设计的准确性和有效性,更好地保障软件质量 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰锋ff

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值