# 结构性测试

结构性测试

*西南科技大学计算机科学与技术学院*

2018-2019学年 第2学期

*《软件测试技术》实验报告*

实验名称: 结构性测试

组号
专业学号姓名
信安16045120160140刘力铭

报告时间: 2019-5-20

任课教师: 潘 娅

成 绩:

一、实验目的

1、能熟练应用白盒测试方法(逻辑覆盖) 进行测试用例设计

2、评价测试覆盖率,对测试用例进行优化设计

3、熟悉代码静态分析方法和工具

二、实验内容

1、题目内容描述(指定程序代码测试):

(1)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖、基路径测试

方法设计测试用例。
(2)使用 JUnit 编写测试用例,并采用参数化设置测试多种覆盖。

(3)使用 EclEmma 查看测试覆盖率。

2、测试用例的设计、实现与执行

【详细测试用例见源码,请单独在对分易上提交java源码文件】

程序流程图和控制流图如下:

在这里插入图片描述

(1)语句覆盖

用例编号用例类名称测试方法测试数据组数执行(P/F)
1语句覆盖类路径为1-2-3-4-5-6-8-9-10等价类、边界值、特殊值x=5,y=6,z=6,预测结果=1P

【可在此附上实验过程截图,同时请注明截图内容】

1号测试用例正确的截图和源代码显示情况:

在这里插入图片描述
在这里插入图片描述
(2)判定覆盖

在上述程序段中,x>3取真值时记为2T,x>3取假值时即x<=3记为2F;

z<10取真值时记为3T,z<10取假值时即z>=10记为3F;

x4取真值时记为6T,x4取假值时即x!=4记为6F;

y>5取真值时记为7T,y>5取假值时即y<=5记为7F;

用例编号用例类名称测试方法测试数据组数执行(P/F)
2判定覆盖类分支为2T-3T-6T-7T等价类、边界值、特殊值x=4,y=6,z=7,预测结果=1P
3判定覆盖类分支为2F-3F-6F-7F等价类、边界值、特殊值x=1,y=4,z=10,预测结果=0P

2,3号测试用例正确的截图和源代码显示情况:

在这里插入图片描述
在这里插入图片描述

(3)条件覆盖

在上述程序段中,x>3取真值时记为2T,x>3取假值时即x<=3记为2F;

z<10取真值时记为3T,z<10取假值时即z>=10记为3F;

x4取真值时记为6T,x4取假值时即x!=4记为6F;

y>5取真值时记为7T,y>5取假值时即y<=5记为7F;

用例编号用例类名称测试方法测试数据组数执行(P/F)
4覆盖条件为2T-3F-6T-7F等价类、边界值、特殊值x=4,y=5,z=15,预测结果=0P
5覆盖条件为2F-3T-6F-7T等价类、边界值、特殊值x=2,y=7,z=5,预测结果=0P

4、5号测试用例的执行情况(发现源代码的语句都没有执行完):

在这里插入图片描述
在这里插入图片描述

(4)判定-条件覆盖

在上述程序段中,x>3取真值时记为2T,x>3取假值时即x<=3记为2F;

z<10取真值时记为3T,z<10取假值时即z>=10记为3F;

x4取真值时记为6T,x4取假值时即x!=4记为6F;

y>5取真值时记为7T,y>5取假值时即y<=5记为7F;

用例编号用例类名称测试方法测试数据组数执行(P/F)
6覆盖条件为2F-3F-6F-7F覆盖分支为2F-3F-6F-7F等价类、边界值、特殊值x=2,y=5,z=15,预测结果=0P
7覆盖条件为2T-3T-6T-7T覆盖分支为2T-3T-6T-7T等价类、边界值、特殊值x=4,y=7,z=5,预测结果=2P

6,7号测试用例正确的截图和源代码显示情况:

在这里插入图片描述
在这里插入图片描述

(5)条件组合覆盖

在上述程序段中,x>3取真值时记为2T,x>3取假值时即x<=3记为2F;

z<10取真值时记为3T,z<10取假值时即z>=10记为3F;

x4取真值时记为6T,x4取假值时即x!=4记为6F;

y>5取真值时记为7T,y>5取假值时即y<=5记为7F;

编号具体条件组合覆盖条件判定取值
1x>32T第一个判定取真分支
2x<=32F第一个判定取假分支
3z<103T第二个判定取真分支
4Z>=103F第二个判定取假分支
5x==46T第三个判定取真分支
6x!=46F第三个判定取假分支
7y>57T第四个判定取真分支
8y<=57F第四个判定取假分支
用例编号用例类名称测试方法测试数据组数执行(P/F)
8覆盖条件为2T-3T-6T-7T覆盖分支为2T-3T-6T-7T等价类、边界值、特殊值x=4,y=6,z=5,预测结果=1P
9覆盖条件为2T-3F-6F-7F覆盖分支为2T-3F-6F-7F等价类、边界值、特殊值x=4,y=5,z=15,预测结果=0P
10覆盖条件为2F-3T-6F-7T覆盖分支为2F-3T-6F-7T等价类、边界值、特殊值x=2,y=6,z=5,预测结果=1P
11覆盖条件为2F-3F-6F-7F覆盖分支为2F-3F-6F-7F等价类、边界值、特殊值x=2,y=5,z=15,预测结果=0P

8,9,10,11号测试用例正确的截图和源代码显示情况:

在这里插入图片描述
在这里插入图片描述

(6)路径覆盖

在上述程序段中,x>3取真值时记为2T,x>3取假值时即x<=3记为2F;

z<10取真值时记为3T,z<10取假值时即z>=10记为3F;

x4取真值时记为6T,x4取假值时即x!=4记为6F;

y>5取真值时记为7T,y>5取假值时即y<=5记为7F;

用例编号用例类名称测试方法测试数据组数执行(P/F)
12覆盖路径为1-2-3-4-5-6-8-9-10等价类、边界值、特殊值x=4,y=6,z=6,预测结果=1P
13覆盖路径为1-2-6-7-8-9-10等价类、边界值、特殊值x=3,y=6,z=6,预测结果=1P
14覆盖路径为1-2-3-6-7-9-10等价类、边界值、特殊值x=5,y=5,z=10,预测结果=0P

12,13,14号测试用例正确的截图和源代码显示情况:

在这里插入图片描述
在这里插入图片描述

(7)基路径覆盖

在上述程序段中,x>3取真值时记为2T,x>3取假值时即x<=3记为2F;

z<10取真值时记为3T,z<10取假值时即z>=10记为3F;

x4取真值时记为6T,x4取假值时即x!=4记为6F;

y>5取真值时记为7T,y>5取假值时即y<=5记为7F;

用例编号用例类名称测试方法测试数据组数执行(P/F)
15独立路径为1-2-3-4-5-6-8-9-10等价类、边界值、特殊值x=4,y=6,z=6,预测结果=1P
16独立路径为1-2-3-4-5-6-7-8-9-10等价类、边界值、特殊值x=5,y=6,z=1,预测结果=1P
17独立路径为1-2-3-4-5-6-7-9-10等价类、边界值、特殊值x=5,y=2,z=5,预测结果=0P
18独立路径为1-2-3-6-7-9-10等价类、边界值、特殊值x=5,y=5,z=10,预测结果=0P
19独立路径为1-2-6-7-8-9-10等价类、边界值、特殊值x=3,y=6,z=6,预测结果=1P

15,16,17,18,19号测试用例正确的截图和源代码显示情况:

在这里插入图片描述
在这里插入图片描述

3、bug清单

【报告中分版本罗列简要BUG清单(附BUG截图)】

BUG编号BUG描述关联用例编号BUG等级修正T/F

【可在此附上实验过程截图及BUG截图,同时请注明截图内容】

4、测试覆盖率分析

【请分析各个类的代码覆盖率情况,静态检查情况等,可以截图说明】

语句覆盖的代码覆盖率:

在这里插入图片描述

判定覆盖的代码覆盖率:

在这里插入图片描述

条件覆盖的代码覆盖率:

在这里插入图片描述

判定-条件覆盖的代码覆盖率:

在这里插入图片描述

条件组合覆盖的代码覆盖率:

在这里插入图片描述

路径覆盖的代码覆盖率:

在这里插入图片描述

基路径覆盖的代码覆盖率:

在这里插入图片描述

5、思考题:

  • 使用公式 e-n+p/e-n+2p 确定的 McCabe 基路径与实际分析的是否完全一致?

答:完全一致。

  • DD-路径和 MM-路径的区别与联系。

    定义:

    DD-路径:程序图中的一条链,使得: 情况1:由一个节点组成,内度=0。情况2:由一个节点组成,外度=0。 情况3:由一个节点组成,内度≥2或外度≥2。情况4:由一个节点组成,内度=1并且外度=1。 情况5:长度≥1的最大链。

    MM-路径:图G的圈数由V(G)=e-n+p给定,其中: e是G中的边数。n是G中的节点数。 p是G中的组件数。V(G)是图中不同区域的个数。

    区别和联系:

    DD-路径:该测试方法的突出特点,是它们都基于被测程序的源代码,而不是基于定义。

    MM-路径:通过定义加法和标量乘法的概念,强制使其看起来像向量空间:路径加法就是一条路径后接另一条路径,乘法对应于路径的重复。一、测试基路径集合是充分的(它不是)二、向量运算用于程序路径的表达上,没有意义。

6、实验关键代码

源代码:

package lab1_1;

public class Exam11 {

​ public double dowork(int x, int y, int z)

​ {

​ double k = 0, j = 0;

​ if ((x > 3) && (z < 10)) {

​ k = x * y - 1;

​ j = Math.sqrt(k);

​ }

​ if ((x == 4) || (y > 5))

​ j = x * y + 10;

​ j = j % 3;

​ return j;

​ }

}

测试代码:

package lab1_1;

import static org.junit.Assert.*;

import java.util.Arrays;

import java.util.Collection;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import org.junit.runners.Parameterized.Parameters;

import org.junit.After;

import org.junit.Assert;

import org.junit.Before;

import org.junit.Test;

import java.util.Arrays;

import java.util.Collection;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

import org.junit.Test;

@RunWith(Parameterized.class)

public class Exam11Test {

​ int testA;

​ int testB;

​ int testC;

​ double testExp;

​ public Exam11Test(int a, int b, int c, double exp)

​ {

​ testA = a;

​ testB = b;

​ testC = c;

​ testExp = exp;

​ }

​ @Parameters

​ public static Collection data(){

​ return Arrays.asList(new Object[][]{

​ {4,6,6,1},

​ {5,6,1,1},

​ {5,2,5,0},

​ {5,5,10,0},

​ {3,6,6,1}

​ });

​ }

​ private double DELTA = 1e-15;

​ Exam11 testObject;

​ @Before

​ public void setUp() throws Exception {

​ testObject = new Exam11();

​ }

​ @After

​ public void tearDown() throws Exception {

​ }

​ @Test

​ public void testDowork() {

​ double act=testObject.dowork(testA, testB, testC);

// System.out.print(act);

​ assertEquals(testExp, act, DELTA);

​ }

}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值