【软件测试】课程实验:实验三 黑盒测试实验二

目录

一、实验目的

二、实验环境

三、实验内容与步骤

3.1 实验一 :三角形判断问题

3.1.1 实验背景

3.1.2 实验步骤

3.2 实验二:文档修改问题之因果图实验

实验过程注意事项:

四、实验思考

实验报告

一、三角形判断问题

1.1 决策表设计

1.2 编写测试用例

1.3 测试分析

1.4 测试结果

二、文档修改问题值因果图实验

2.1 因果图

2.2 设计决策表

2.3 设计测试用例

2.4 测试结果

三、实验结果与分析

实验代码

1、Triangle.java

2、triangleTest.java

3、docmodify.java

4、docmodifyTest.java


一、实验目的

  1. 能熟练应用黑盒测试中的决策表划分方法、因果图测试方法设计测试用例;
  2. 能综合使用决策表划分方法、因果图测试方法分析解决黑盒测试需求;
  3. 会分析用例结果。
  4. 学习缺陷报告的撰写。

二、实验环境

  1. 硬件环境:PC 机一台
  2. 软件环境:Java 编程环境:Java SDK + Eclipse+junit5
  3. 待测程序:三角形判断testTrangle、因果图实验

三、实验内容与步骤

3.1 实验一 :三角形判断问题

3.1.1 实验背景

三角形问题接收三个整数a,b,c 作为输入,代表三角形的三条边。a,b,c 必须满足以下条件:

C1: a<b+c?        C2: b<a+c?        C3: c<a+b?

C4: a=b?        C5: a=c?        C6: b=c?

程序的输出是由这三条边确定的三角形类型:

等边三角形、等腰三角形、不等边三角形、非三角形

注:为便于统一,我们约定在“日期推算”程序中有三个整数型变量a、b、c,分别表示三条边,并假设已经限定输入数据均为整数,日期中年份的有效 取值范围为1-200。

要求用尽可能少的测试用例检测出尽可能多的软件缺陷:

  1. 参照testtrangle.java例子,实现程序功能;
  2. 设计判定表;针对有效等价类的简化判定表。判定表中一组条件加上对应的动作(也就是判定表中的 一个列)称为一条规则。可以把两条或多条具有相同动作、而其条件项之间存在着相似性的规则合并判定表。

【提示】 判定表有4个组成部分,如下图。

任务:设计判断表并化简。

3.1.2 实验步骤

        1、编写测试用例。

测试用例编号

决策表规则编号

测试用例

预期执行结果

实际执行结果

T1

R1

T2

R2

T3

R3

T4

R4

T5

R5

T6

R6

T7

R7

T8

R8

T9

R9

T10

R10

T11

R11

2、执行测试用例,并将执行结果记录在测试用例表中。

        3、测试执行结果统计 对比测试用例表中各测试用例的“预期执行结果”和“实际执行结果”,并填写测试用例执行结果统计表。测试用例执行结果统计表

项目

统计数据

测试用例总数

执行测试用例数

测试测试用例执行率

执行通过测试用例数

未通过软件测试用例数

3.2 实验二:文档修改问题之因果图实验

当输入第一个字符是‘#’ 或者是‘*’,第二个输入 字符是数字时,文档将被修改;如果第一个输入字符不是‘#’ 或 ‘*’ ,则输出消息N,如果第二个输入字 符不是数字,则输出消息M。

要求:

  1. 利用因果图方法,设计测试用例。请给出测试用例的具体设计思路。
  2. 罗列该问题的因和果;
  3. 找出原因和结果、原因和原因,结果和结果之间的关系,画出因果图;
  4. 将因果图转换成决策表,并设计测试用例。

实验过程注意事项:

  1. 因果图可以使用ppt,visio,word等工具,参考如下

四、实验思考

  1. 请结合题目1中的三角形判断问题,用具体的例子来解释一下测试用例设计中的一些基本原则。
  2. 在对应用程序执行测试用例的过程中,你遇到了什么影响你工作效率的问题,你希望有怎样的辅助工具软件?

实验报告

一、三角形判断问题

1.1 决策表设计

  1. 条件:C123表示同时满足C1、C2、C3;C4:a=b?;C5:a=c?;C6:b=c?
  2. 动作:R1:等边三角形;R2:等腰三角形;R3:不等边三角形;R4:非三角形

表1.1 决策表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

条件

C123

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

C4

1

1

1

1

0

0

0

0

1

1

1

1

0

0

0

0

C5

1

1

0

0

1

1

0

0

1

1

0

0

1

1

0

0

C6

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

动作

R1

1

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

R2

0

0

0

1

0

1

1

0

0

0

0

0

0

0

0

0

R3

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

R4

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

表1.2 化简后的决策表

(1-2)

3

4

5

6

7

8

(9-16)

条件

C123

1

1

1

1

1

1

1

0

C4

1

1

1

0

0

0

0

-

C5

1

0

0

1

1

0

0

-

C6

-

1

0

1

0

1

0

-

动作

R1

1

1

0

1

0

0

0

0

R2

0

0

1

0

1

1

0

0

R3

0

0

0

0

0

0

1

0

R4

0

0

0

0

0

0

0

1

1.2 编写测试用例

测试用例编号

决策表规则编号

测试用例

预期结果

实际结果

T1

(1-2)

8,8,8

equilateral

equilateral

T2

3

9,9,9

equilateral

equilateral

T3

4

8,8,7

isosceles

isosceles

T4

5

8,8,8

equilateral

equilateral

T5

6

9,6,9

isosceles

isosceles

T6

7

9,8,8

isosceles

isosceles

T7

8

3,4,5

scalene

scalene

T8

(9-16)

1,2,3

Not a triangle

Not a triangle

1.3 测试分析

1、三角形判断。(源代码:Triangle.java)

        首先输入数据,即三角形三条边长a、b、c。然后进行三角形判断,首先对于条件C1、C2和C3判断(即C1:a < b + c ?;C2:b < a + c ;C3:c < a + b ?),若三者都不满足则为“不是三角形”,否则对条件C4、C5、C6判断,若三者都不满足则为“普通三角形”,若全部满足则为“等边三角形”,否则为“等腰三角形”。具体流程图如下图所示。

2、三角形判断测试类。(源代码:triangleTest.java)

         具体实现采用参数注入的方法。

1.4 测试结果

表1.3:测试用例执行结果统计表

项目

统计数据

测试用例总数

8

执行测试用例数

8

测试测试用例执行效率

100%

执行通过测试用例数

8

未通过软件测试用例数

0

二、文档修改问题值因果图实验

当输入的第一个字符是‘#’或‘*’,第二个输入字符是数字时,文档将被修改; 如果第一个输入字符不是‘#’或‘*’,则输出消息 N;如果第二个输入在字符不是数字,则输出消息 M。(源代码:docmodify.java)

2.1 因果图

条件:

C1:第一个输入的字符为‘*’;

C2:第一个输入的字符为‘#’;

C3:第二个输入的字符为数字。

结果:

R1:文档被修改;

R2:输出消息N;

R3:输出消息M。

因果图如下图所示。(E为中间状态)

2.2 设计决策表

表2.1 文档修改问题决策表

1

2

3

4

5

6

条件

C1

1

1

0

0

0

0

C2

0

0

1

1

0

0

C3

1

0

1

0

1

0

动作

R1

1

0

1

0

0

0

R2

0

0

0

0

1

1

R3

0

1

0

1

0

0

表2.2 简化文档修改问题决策表

1

2

3

4

(5,6)

条件

C1

1

1

0

0

0

C2

0

0

1

1

0

C3

1

0

1

0

-

动作

R1

1

0

1

0

0

R2

0

0

0

0

1

R3

0

1

0

1

0

2.3 设计测试用例

(源代码:docmodifyTest.java)

测试用例编号

决策表规则编号

测试用例

预期输出结果

实际输出结果

1

1

*1

修改文档

修改文档

2

2

*A

输出消息M

输出消息M

3

3

#1

修改文档

修改文档

4

4

#A

输出消息M

输出消息M

5

(5,6)

66

输出消息N

输出消息N

2.4 测试结果

三、实验结果与分析

1、在设计和实施三角形判断问题的测试用例时,我们可以结合一些基本原则,确保测试的有效性和全面性。比如正确性、全面性、连贯性、可判定性、可操作性等。设计测试用例时,我们应确保覆盖所有可能的三角形类型。例如,可以设计以下测试用例:

  • 输入三个正数,满足两边之和大于第三边,预期输出为“可以构成三角形”。
  • 输入三个正数,满足两边之和等于第三边,预期输出为“不能构成三角形”。
  • 输入三个正数,满足两边平方和等于第三边平方,预期输出为“可以构成直角三角形”。

2、测试过程中,经常需要执行重复的任务,如登录、填写表单等,这些任务不仅耗时,而且容易出错。管理大量的测试数据,包括输入和期望输出,可能会变得非常繁琐。手动记录、跟踪和管理缺陷会消耗大量时间,并且容易出错。

希望的辅助工具软件:

  • 自动化测试工具:例如Selenium、Appium等,用于自动化执行测试脚本,减少重复性工作。
  • 测试数据管理工具:能够存储、生成和管理测试数据的工具,帮助测试人员快速创建和修改测试数据。
  • 日志分析和报告生成工具:能够自动收集和分析测试日志,生成详细的测试报告,帮助测试人员快速了解测试结果。

这些辅助工具软件不仅可以提高测试效率,还可以减少人为错误,提高测试质量。

实验代码

1、Triangle.java

package course3;

public class Triangle {
	public String isTriangle(int a, int b, int c) {
	      if (a <= 0 || b <= 0 || c <= 0) {
	         return "Not a triangle";
	      } else {
	         int max = a;
	         int min = b + c;
	         if (b > max) {
	            max = b;
	            min = a + c;
	         }
	         if (c > max) {
	            max = c;
	            min = a + b;
	         }
	         if (min <= max) {// 最小两边之和不大于第三边
	            return "Not a triangle";
	         }
	         if (a == b || b == c || a == c) {
	            if (a == b && b == c) {
	               return "equilateral";
	            } else {
	               return "isosceles";
	            }
	         } else {
	            return "scalene";
	         }
	      }
	   }

}

2、triangleTest.java

package course3;

import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.List;

@RunWith(Parameterized.class)
public class triangleTest {
    int a,b,c;
    String expected;
    public triangleTest(int a,int b,int c,String expected){
        super();
        this.a = a;
        this.b = b;
        this.c = c;
        this.expected = expected;
    }

    @Parameterized.Parameters(name = "a={0},b={1},c={2},excepted={3}")
    public static List datas(){
        return (List) Arrays.asList(
        		new Object[][]{
                    {8,8,8,"equilateral"},
                    {9,9,9,"equilateral"},
                    {8,8,7,"isosceles"},
                    {8,8,8,"equilateral"},
                    {9,6,9,"isosceles"},
                    {9,8,8,"isosceles"},
                    {3,4,5,"scalene"},
                    {1,2,3,"Not a triangle"}
            }

        );
    }

    @Test
    public void test(){
        Triangle triangle = new Triangle();
        Assertions.assertEquals(expected,triangle.isTriangle(a,b,c));
    }
}

3、docmodify.java

package course3;

public class docmodify {

	public String getresult(char c1,char c2) {
		if (c1 == '#' || c1 == '*') {
			if(c2 >= '0' && c2 <= '9')
				return "modify doc";
			else 
				return "output M";
	   } else
		   return "output N";
	}
}

4、docmodifyTest.java

package course3;

import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.List;

@RunWith(Parameterized.class)
public class docmodifyTest {
	char c1,c2;
    String expected;
    public docmodifyTest(char c1,char c2,String expected){
        super();
        this.c1 = c1;
        this.c2 = c2;
        this.expected = expected;
    }

    @Parameterized.Parameters(name = "c1={0},c2={1},excepted={2}")
    public static List datas(){
        return (List) Arrays.asList(
        		new Object[][]{
                    {'*','1',"modify doc"},
                    {'*','A',"output M"},
                    {'#','1',"modify doc"},
                    {'#','A',"output M"},
                    {'1','1',"output N"}
        		}
        );
    }

    @Test
    public void test(){
        docmodify docmodify = new docmodify();
        Assertions.assertEquals(expected,docmodify.getresult(c1,c2));
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值