实验二+125+洪诗育

被测代码:

一、实验目的

掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

二、实验要求

运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

包括的内容有:

1) 被测原代码

import java.util.Scanner;
public class homeWork01 {
public static String triangle(int a,int b,int c){
if(a>=1&&a<=100&&b>=1&&b<=100&&c>=1&&c<=100){
if((a<b+c)&&(b<a+c)&&(c<a+b)){
if(a==b&&b==c){
return "等边三角形";
}
if(a==b||a==c||b==c){
return "等腰三角形";
}
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
return"直角三角形";
}
return "一般三角形";
}else{
return"不构成三角形";
}
}else{
return "边的值不在范围内";
}

}
public static void main(String []args){
System.out.println("请输入三角形的三条边:");
int s1=0;
int s2=0;
int s3=0;
Scanner scan=new Scanner(System.in);
s1=scan.nextInt();
s2=scan.nextInt();
s3=scan.nextInt();
System.out.println(triangle(s1,s2,s3));

}
}

2)依据覆盖技术,测试用例列表:

1.语句覆盖

路径:

A-B-D-M

A-B-C-F-M

A-B-C-E-H-M

A-B-C-R-G-J-M

A-B-C-E-G-I-L-M

A-B-C-E-G-I-K-M

测试用例:

编号输入值执行路径预期输出实际输出
abc
1034A-B-D-M边的值不在范围内边的值不在范围内
2121A-B-C-F-M不构成三角形不构成三角形
3666A-B-C-E-H-M等边三角形等边三角形
4334A-B-C-R-G-J-M等腰三角形等腰三角形
5345A-B-C-E-G-I-L-M直角三角形直角三角形
6567A-B-C-E-G-I-K-M一般三角形一般三角形

    

2.分支覆盖:

路径:

A-B-D-M

A-B-C-F-M

A-B-C-E-H-M

A-B-C-R-G-J-M

A-B-C-E-G-I-L-M

A-B-C-E-G-I-K-M

测试用例:

编号输入值执行路径预期输出实际输出
abc
1034A-B-D-M边的值不在范围内边的值不在范围内
2121A-B-C-F-M不构成三角形不构成三角形
3666A-B-C-E-H-M等边三角形等边三角形
4334A-B-C-R-G-J-M等腰三角形等腰三角形
5345A-B-C-E-G-I-L-M直角三角形直角三角形
6567A-B-C-E-G-I-K-M一般三角形一般三角形

 

3.路径覆盖:

路径:

A-B-D-M

A-B-C-F-M

A-B-C-E-H-M

A-B-C-R-G-J-M

A-B-C-E-G-I-L-M

A-B-C-E-G-I-K-M

测试用例:

编号输入值执行路径预期输出实际输出
abc
1034A-B-D-M边的值不在范围内边的值不在范围内
2121A-B-C-F-M不构成三角形不构成三角形
3666A-B-C-E-H-M等边三角形等边三角形
4334A-B-C-R-G-J-M等腰三角形等腰三角形
5345A-B-C-E-G-I-L-M直角三角形直角三角形
6567A-B-C-E-G-I-K-M一般三角形一般三角形

 

 

条件覆盖:

编号1<=a<=1001<=b<=1001<=c<=100

1<=a<=100&&

1<=b<=100&&

1<=c<=100

覆盖路径
1TTTTB-C
2FFFFB-D-M
3TFFFB-D-M
4FTFFB-D-M
5FFTFB-D-M
6TTFFB-D-M
7TFTFB-D-M
8TTTFB-D-M

 

 

编号a<b+cb<a+cc<a+b

a<b+c&&

b<a+c&&

c<a+b

路径

1TFFFC-F-M
2FTFFC-F-M
3FFTFC-F-M
4TTFFC-F-M
5TFTFC-F-M
6FTTFC-F-M
7TTTTC-E
8FFFFC-F-M

 

 

编号

a==b

b==c

a==b &&b==c

覆盖路径

1

F

F

F

E-G

2

F

T

F

E-G

3

T

F

F

E-G

4

T

T

T

E-H

 

 

编号a==b a==cb==c

a==b || a==c||b==c

路径

1TFFTG-J-M
2FTFTG-J-M
3FFTTG-J-M
4TTFTG-J-M
5TFTTG-J-M
6FTTTG-J-M
7TTTTG-J-M
8FFFFG-I

 

 

编号

a*a+b*b==c*c

b*b+c*c==a*a

a*a+c*c==b*b

a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b

覆盖路径

1

T

F

F

T

I-L

2

T

T

F

T

I-L

3

T

T

T

T

I-L

4

T

F

T

T

I-L

5

F

F

F

F

I-K

6

F

T

F

T

I-L

7

F

F

T

T

I-L

8

F

T

T

T

I-L

 

 

测试用例:

编号输入值执行路径预期输出实际输出
abc
1034A-B-D-M边的值不在范围内边的值不在范围内
2304A-B-D-M边的值不在范围内边的值不在范围内
3430A-B-D-M边的值不在范围内边的值不在范围内
4121A-B-C-F-M不构成三角形不构成三角形
5211A-B-C-F-M不构成三角形不构成三角形
6112A-B-C-F-M不构成三角形不构成三角形
7666A-B-C-E-H-M等边三角形等边三角形
8334A-B-C-R-G-J-M等腰三角形等腰三角形
9343A-B-C-R-G-J-M等腰三角形等腰三角形
10433A-B-C-R-G-J-M等腰三角形等腰三角形
11345A-B-C-E-G-I-L-M直角三角形直角三角形
12453A-B-C-E-G-I-L-M直角三角形直角三角形
13354A-B-C-E-G-I-L-M直角三角形直角三角形
14567A-B-C-E-G-I-K-M一般三角形一般三角形

 

3)相应Junit测试脚本、执行结果

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;


public class TriangleTest {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void NoValue() {
         assertEquals("边的值不在范围内", Triangle.triangle(0, 3, 4));
         assertEquals("边的值不在范围内", Triangle.triangle(3, 0, 4));
         assertEquals("边的值不在范围内", Triangle.triangle(4, 0, 3));
    }
    @Test
    public void NoTriangle() {
         assertEquals("不构成三角形", Triangle.triangle(1, 2, 1));
         assertEquals("不构成三角形", Triangle.triangle(2, 1, 1));
         assertEquals("不构成三角形", Triangle.triangle(1, 1, 2));
    }
    @Test
    public void EqualTriangle() {
         assertEquals("等边三角形", Triangle.triangle(6, 6, 6));
         assertEquals("等边三角形", Triangle.triangle(5, 5, 5));
         assertEquals("等边三角形", Triangle.triangle(4, 4, 4));
    }
    @Test
    public void IsoscelesTriangle() {
         assertEquals("等腰三角形", Triangle.triangle(3, 3, 4));
         assertEquals("等腰三角形", Triangle.triangle(3, 4, 3));
         assertEquals("等腰三角形", Triangle.triangle(4, 3, 3));
    }
    @Test
    public void  RightAngle() {
         assertEquals("直角三角形", Triangle.triangle(3, 5, 4));
         assertEquals("直角三角形", Triangle.triangle(3, 4, 5));
         assertEquals("直角三角形", Triangle.triangle(4, 5, 3));
    }
    @Test
    public void TheTriangle() {
         assertEquals("一般三角形", Triangle.triangle(5, 6, 7));

    }
    
}

 

4)给出测试参数化和打包测试的脚本,并生成执行结果

import static org.junit.Assert.*;

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 java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class ParameterTest {
    private static Triangle triangle = new Triangle();
    private int a,b,c; 
    private String Result;  
    

    @Before
    public void setUp() throws Exception {
    }
    @Parameters
    public static Collection data(){
        return Arrays.asList(
            new Object[][]{
                    {0,3,4,"边的值不在范围内"},
                    {3,0,4,"边的值不在范围内"},
                    {4,3,0,"边的值不在范围内"},
                    {6,6,6,"等边三角形"},
                    {5,4,3,"直角三角形"},
                    {3,4,5,"直角三角形"},
                    {4,5,3,"直角三角形"},
                    {3,3,4,"等腰三角形"},
                    {3,4,3,"等腰三角形"},
                    {4,3,3,"等腰三角形"},
                    {5,6,7,"一般三角形"},

            }
        );
    }
      //构造函数
    public ParameterTest(int a,int b,int c,String Result) 
    {
        this.a=a;
        this.b=b;
        this.c=c;
        this.Result=Result;
    }
    @Test
    public void test() {
        assertEquals(Result, Triangle.triangle(a, b, c));
    }

}

打包测试:

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@Suite.SuiteClasses({
    ParameterTest.class
})
public class PakageTest {

    @Before
    public void setUp() throws Exception {
    }

}

4、测试小结:

源代码目前没有缺陷     

测试总结与心得体会:通过这次的学习,我明白了如何使用Junit中的方法来测试程序。发现适当的运行这些工具,可以更轻松,更好的发现程序中的问题。在运用参数化测试的方法中,发现不是很能理解,于是上网查找资料,资料总结了一下步骤。

Junit参数化步骤:

(1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
(2)为测试类声明几个变量,分别用于存放期望值和测试所用数据。
(3)为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
(4)为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
(5)编写测试方法,使用定义的变量作为参数进行测试。

 

转载于:https://www.cnblogs.com/hsy123/p/6709163.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值