博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验二+001+陈定国
阅读量:6679 次
发布时间:2019-06-25

本文共 4403 字,大约阅读时间需要 14 分钟。

一、实验目的

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

二、实验要求

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

三、实验内容

1) 被测原代码

import java.util.Scanner;public class Triangle{    public static void main(String[] args) {        while(true){        System.out.println("请输入三角形的三条边:");        try {        int a,b,c;        Scanner input=new Scanner(System.in);        a=input.nextInt();        b=input.nextInt();        c=input.nextInt();        String str=triangle(a,b,c);        System.out.println(str);        } catch (Exception e) {            // TODO: handle exception          System.out.println("请确保输入的边为整数!");              }        }        }                public static String triangle(int a,int b,int c){            String result;            if ((a>=1&&a<=100)&&(b>=1&&b<=100)&&(c>=1&&c<=100)) {            if ((a+b>c)&&(a+c>b)&&(b+c>a)) {                if (a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) {                    if (a==b||a==c||b==c) {                        result="该三角形为等腰直角三角形.";                    } else {                        result="该三角形为直角三角形.";                    }                } else if (a==b&&b==c&&a==c) {                    result="该三角形为等边三角形.";                } else if (a==b||a==c||b==c) {                    result="该三角形为等腰三角形.";                } else {                    result="该三角形为一般三角形.";                }            } else {                result="不能构成三角形.";            }        } else {            result="不能构成三角形.";        }            return result;    }}

 

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

                               程序图                                                                                                               DD-路径图

DD-路径(只压缩链路经)

程序图节点

DD-路径

1

A

2

B

3

C

4

D

5

E

6

F

7

G

8

H

9

I

 

(I)语句覆盖:

    A-B-D-I

    A-B-C-F-I

    A-B-C-E-I

    A-B-C-E-G-I

    A-B-C-E-G-H-I

 

测试用例:

用例ID

输入值

执行路径

预期输出

A

B

X

X

1

101

101

101

A-B-D-I

边的值不在范围内

2

3

1

2

A-B-C-F-I

构成三角形

3

3

4

5

A-B-C-E-I

该三角形为直角三角形

4

6

6

6

A-B-C-E-G-I

该三角形为等边三角形

5

5

5

6

A-B-C-E-G-H-I

该三角形为等腰三角形

6

3

5

6

A-B-C-E-G-H-I

该三角形为一般三角形

II)分支覆盖(判断覆盖):

    A-B-C-F-I

    A-B-C-E-G-H-I

测试用例:

用例ID

输入值

执行路径

预期输出

A

B

X

X

1

1

0

3

A-B-C-F-I

构成三角形

2

3

4

3

A-B-C-E-G-H-I

该三角形为等腰三角形

III)路径覆盖:

    A-B-D-I

    A-B-C-F-I

    A-B-C-E-I

    A-B-C-E-G-I

    A-B-C-E-G-H-I

用例ID

输入值

执行路径

预期输出

A

B

X

X

1

101

101

101

A-B-D-I

边的值不在范围内

2

3

1

2

A-B-C-F-I

构成三角形

3

3

4

5

A-B-C-E-I

该三角形为直角三角形

4

6

6

6

A-B-C-E-G-I

该三角形为等边三角形

5

5

5

6

A-B-C-E-G-H-I

该三角形为等腰三角形

6

3

5

6

A-B-C-E-G-H-I

该三角形为一般三角形

IV)条件覆盖:各个条件取真或假的可能至少执行一次

编号

(a>=1&&a<=100)&&(b>=1&&b<=100)&&(c>=1&&c<=100)

(a+b>c)&&(a+c>b)&&(b+c>a)

 

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

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

 

a==b&&b==c&&a==c

 

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

 

覆盖路径

1

T

T

T

T

T

A-B-C-E-G-H-I

2

T

T

T

T

F

A-B-C-E-G-H-I

3

T

T

T

F

 

A-B-C-E-G-I

4

T

T

F

 

 

A-B-C-E-I

5

T

F

 

 

 

A-B-C-F-I

6

F

 

 

 

 

A-B-D-I

测试用例:

用例ID

输入值

执行路径

覆盖条件

预期输出

1

101

101

101

A-B-D-I

1,2

边的值不在范围内

2

1

1

2

A-B-C-F-I

1,2,3

构成三角形

3

3

4

5

A-B-C-E-I

1,2,35

该三角形为直角三角形

4

5

5

5

A-B-C-E-G-I

1,23,5,7

该三角形为等边三角形

5

3

5

3

A-B-C-E-G-H-I

1,2,3,5,7,8

该三角形为等腰三角形

6

3

5

7

A-B-C-E-G-H-I

1,2,3,5,7,8

该三角形为一般三角形

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

Junit测试脚本:

import static org.junit.Assert.assertEquals;import org.junit.Before;import org.junit.Test;public class TrangleTest {    private static Triangle trangle = new Triangle();    @Before    public void setUp() throws Exception {            }    @Test    public void testTriangle01() {        assertEquals("该三角形为直角三角形.", Triangle.triangle(3, 4, 5));//1            }    @Test    public void testTriangle02() {        assertEquals("该三角形为等边三角形.", Triangle.triangle(6, 6, 6));//2    }    @Test    public void testTriangle03() {        assertEquals("边的值不在范围内!",  Triangle.triangle(150, 150, 200));//3    }    @Test    public void testTriangle04() {        assertEquals("不能构成三角形.", Triangle.triangle(3, 1, 2));//4    }    @Test    public void testTriangle05() {        assertEquals("该三角形为一般三角形.",  Triangle.triangle(3, 5, 6));//5    }    @Test    public void testTriangle06() {        assertEquals("该三角形为等腰三角形.",  Triangle.triangle(5, 5, 6));//6    }    }

测试结果:

 

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

import org.junit.Before;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith(Suite.class)@Suite.SuiteClasses({    TrangleTest.class})public class Test {    @Before    public void setUp() throws Exception {    }}

测试结果:

4、测试小结:

  •      测试找到的缺陷清单
  •      对源代码的修改建议
  •      测试总结与心得体会

测试用例都成功通过。

修改建议:应先判断等腰再判断等边三角形,这样逻辑更顺畅;应在代码关键处添加注释。

总结与心得:在我们平常的项目开发中,测试是显得越来越重要。我们很多的时候,必须得测试与开发同步,测试代码和工作代码应同步编译和更新。而junit可以大大减少代码量和文件量,为测试提供了很大的灵活性。所以不要认为压力大,就不写测试代码。相反编写测试代码会使压力逐渐减轻,因为通过编写测试代码地编写出有效率工作代码在编写测试用例时要充分覆盖各个路径,以确保每个判断条件都能被执行。

转载于:https://www.cnblogs.com/chen-dg/p/6706684.html

你可能感兴趣的文章
ecshop用户中心订单详情增加快递单物流信息查询显示的功能
查看>>
【第一篇】Python基础
查看>>
android 更新实现自己主动
查看>>
RS导出Excel交叉表角对应的列占用多列问题
查看>>
2016校招内推 -- 阿里巴巴前端 -- 四面面试经历
查看>>
SQL Server里的INTERSECT ALL
查看>>
【Xamarin开发 Android 系列 6】 Android 结构基础(上)
查看>>
PowerDesigner反projectM连接ySql没有mySql odbc驱动器
查看>>
【Xamarin开发 Android 系列 13】 应用打包部署
查看>>
flask前后台交互数据的几个思路
查看>>
HDOJ 5188 zhx and contest 贪婪+01背包
查看>>
Git介绍和基本原理
查看>>
Activity生命周期回顾
查看>>
Rust初步(五):Rust与C#性能比较
查看>>
1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解...
查看>>
What exactly is the difference between WndProc and DefaultWndProc?
查看>>
创建加密应用程序
查看>>
NYOJ 24 素数的距离问题
查看>>
Jsoup解析Html中文文档
查看>>
学习一样新东西行而有效的方法 学习捷径 一项由10个步骤组成的学习方法
查看>>