软工第八次实验——测试

其实是没有前七次实验的
因为第八次实验是考试,复习了前七次实验的内容。
所以这个第八次实验是个伪命题hiahiahia

文章目录

    • 一、软件测试
      • 1.1 概述
      • 1.2 软件生命周期
      • 1.2 软件测试原则
      • 1.3 测试分类
    • 二、黑盒测试
      • 2.1 概述
      • 2.2 等价类划分法
        • 2.2.1 概述
        • 2.2.2 等价类
        • 2.2.3 划分原则
        • 2.2.5 划分步骤
      • 2.3 示例
        • 2.3.1 题目要求
        • 2.3.2 等价类划分表
        • 2.3.3 测试用例
          • 2.3.3.1 有效等价类
          • 2.3.3.2 无效等价类
    • 三、白盒测试
      • 3.1 概述
      • 3.2 逻辑覆盖法
      • 3.3 分支覆盖
      • 3.4 示例
        • 3.4.1 题目要求
        • 3.4.2 流程图及分支标注
        • 3.4.3 分支覆盖及用例列表
    • 四、实验1:三角形类型判断
      • 4.1 问题描述
      • 4.2 参考等价类划分
    • 五、往届试题
      • 5.1 11年试题:标识符判断
        • 5.1.1 题目描述
        • 5.1.2 参考等价类划分
        • 5.1.3 参考测试用例
      • 5.2 15年试题:标识符判断加工
      • 5.3 12年试题:用户名正确性测试
        • 5.3.1 题目描述
        • 5.3.2 参考等价类划分
        • 5.3.3 参考测试用例
      • 5.4 14年试题(一):测试抄错的代码
        • 5.4.1 题目描述
        • 5.4.2 参考流程图
        • 5.4.3 参考测试用例
      • 5.5 14年试题(二):电话号码
        • 5.5.1 题目描述
        • 5.5.2 参考等价类划分
        • 5.5.3 参考测试用例
    • 六、参考资料

一、软件测试

1.1 概述

软件测试是为了发现程序中的错误而执行程序的过程,贯穿于软件生命周期,其目的是尽早发现软件缺陷,并确保其得以修复。再全面的测试也不能完全消除软件缺陷,希望完全依托测试确保软件质量是不现实的。

1.2 软件生命周期

从软件工程的角度来看,软件的生命周期一般分为4部分:

  • 软件分析时期
  • 软件设计时期
  • 编码和测试时期
  • 软件运行与维护时期

在编码的同时,也进行着单元测试。

1.2 软件测试原则

  • 完全测试是不可能的。测试并不能找出所有错误。
  • 测试中存在风险。
  • 软件测试只能表示缺陷的存在,而不能证明软件产品已经没有缺陷。
  • 软件产品中潜在的错误数与已发现的错误数成正比。
  • 让不同的测试人员参与到测试工作中。
  • 让开发小组和测试小组分立。
  • 尽早并不断进行测试。
  • 在设计测试用例时,应该包括输入数据和预期的输出结果两部分。
  • 集中测试容易出错或错误较多的模块。
  • 长期保留所有的测试用例。

1.3 测试分类

 

二、黑盒测试

2.1 概述

将被测试的软件系统看成一个黑盒子,不关心盒子的内部结构和内部特性,只关心软件产品的输入数据和输出结果。
黑盒测试的测试方法有等价类划分法边界值分析法错误推测法因果图法

2.2 等价类划分法

2.2.1 概述

将程序的输入域划分为若干子集,然后从每个子集中选取少数具有代表性的数据用作测试用例。所选取的输入数据对于揭露程序中的错误都是等效的。

2.2.2 等价类

等价类分为有效等价类和无效等价类:

  • 有效等价类:对程序的规格说明是有意义的、合理的输入数据所构成的集合。
  • 无效等价类:对程序的规格说明是无意义的、不合理的输入数据所构成的集合

2.2.3 划分原则

划分等价类时遵循的原则:

  1. 如果输入条件规定了取值范围或个数,则可确定一个有效等价类和两个无效等价类。例如,如果输入值x在0到100之间,那么有效等价类是0<=x<=100,无效等价类是x<0和x>100。
  2. 如果输入条件规定了输入值的集合或是规定了“必须如何”的条件,则可以确定一个有效等价类和一个无效等价类。例如,如果输入值是日期类型,那么有效等价类是日期类型的数据,无效等价类是非日期类型的数据。
  3. 如果输入条件是布尔表达式,则可以分为一个有效等价类和一个无效等价类。例如,如果要求密码非空,则有效等价类为非空密码,无效等价类为空密码。
  4. 如果输入条件是一组值,且程序对不同的值有不同的处理方式,则每个允许的输入值对应一个有效等价类,所有不允许的输入值的集合为一个无效等价类。例如,如果级别的值是初级、中级、高级,则有效等价类应该有三个,分别为初级、中级、高级,无效等价类有一个,为其他任何级别。
  5. 如果规定了输入数据必须遵循的规则,则可划分出一个有效等价类(符合规则)和若干个无效等价类(从不同的角度违反规则)

2.2.5 划分步骤

  1. 对每个输入和外部条件进行等价划分,画出等价类表,并为每个等价类进行编号。
  2. 设计一个测试用例,使其尽可能多地覆盖有效等价类,重复这一步直到其有效等价类被覆盖。
  3. 为每一个无效等价类设计一个测试用例。

2.3 示例

2.3.1 题目要求

测试一个函数dateValidation(int year, int month, int day),功能是验证输入日期是否合法。

输入三个变量(年、月、日),函数返回布尔值,判断该日期是否合法:1≤月份≤12,1≤日期≤31,2000≤年份≤2019。

2.3.2 等价类划分表

输入及外部条件 有效等价类 等价类编号 无效等价类 等价类编号
日期的类型 数字字符 1 非数字字符 8
year 2000<=year<=2019 2 year<2000 year>2019 9 10
month 1<=month<=12 3 month<1 month>12 11 12
非闰年的2月 1<=day<=28 4 day<1 day>28 13 14
闰年的2月 1<=day<=29 5 day<1 day>29 15 16
month ϵ {1,3,5,7,8,10,12} 1<=day<=31 6 day<1 day>31 17 18
month ϵ {4,6,9,11} 1<=day<=30 7 day<1 day>30 19 20

2.3.3 测试用例

2.3.3.1 有效等价类
序号 输入数据 预期输出 覆盖范围(等价类编号)
year month day
1 2008 1 9 TRUE 1,2,3,6
2 2008 2 29 TRUE 1,2,3,5
3 2008 4 30 TRUE 1,2,3,7
4 2018 2 28 TRUE 1,2,3,4
2.3.3.2 无效等价类
序号 输入数据 预期输出 覆盖范围(等价类编号)
year month day
1 x 2 29 FALSE 8
2 1234 3 2 FALSE 9
3 2222 3 2 FALSE 10
4 2018 0 3 FALSE 11
5 2018 13 1 FALSE 12
6 2018 2 0 FALSE 13
7 2018 2 29 FALSE 14
8 2004 2 0 FALSE 15
9 2004 2 30 FALSE 16
10 2018 3 0 FALSE 17
11 2018 3 32 FALSE 18
12 2018 4 0 FALSE 19
13 2018 4 31 FALSE 20

三、白盒测试

3.1 概述

白盒测试关注软件产品的内部细节和逻辑结构。

方法:

  • 逻辑覆盖测试方法
  • 基本路径测试方法

3.2 逻辑覆盖法

根据覆盖的目标不同,可分为语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖、条件组合覆盖、路径覆盖。

  1. 语句覆盖每条语句至少执行一次。
  2. 判定覆盖每个判定的每个分支至少执行一次。
  3. 条件覆盖每个判定的每个条件应取到各种可能的值。
  4. 判定/条件覆盖同时满足判定覆盖条件覆盖。
  5. 条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
  6. 路径覆盖使程序中每一条可能的路径至少执行一次。

3.3 分支覆盖

基本思想:设计若干个测试用例,运行被测程序,使程序中的每个分支至少被执行一次。

以考察程序if-else结构为基础。

对循环结构,考察循环条件能够满足和不可能满足两种情况。

3.4 示例

3.4.1 题目要求

判断是否为闰年的函数isLeapYear(int year)。

闰年的条件是:

  • 能被4整除,但不能被100整除;
  • 能被100整除,又能被400整除。

3.4.2 流程图及分支标注

 

3.4.3 分支覆盖及用例列表

输入执行路径
2000 1,2,4,5,8,10
2004 1,2,4,7,10
2006 1,2,3,9
1900 1,2,4,5,6,9,10

四、实验1:三角形类型判断

4.1 问题描述

三角形的判断:(题目链接)
定义一个函数,用于判断三角形的三条边能否构成三角形,如果能,则判断是普通三角形,等腰三角形,还是等边三角形。(三角形的边长为整数)
输入:三角形的三条边a,b,c(1≤a,b,c≤104)
输出:如果是普通三角形,输出:regular triangle!
如果是等腰三角形,输出:isosceles triangle!
如果是等边三角形,输出:equilateral triangle!
如果不能构成三角形,输出:not a triangle!
实现代码:

//Trangle.java

package testProject;

import java.util.Scanner;

public class Trangle {
    public static boolean isTrangle (int x, int y, int z) {
        if (x <= 0 || y <= 0 || z <= 0 ||x + y <= z
                || x + z <= y || y + z <= x) {
            return false;
        }
        return true;
    }

    public static boolean isIsosceles (int x, int y, int z) {
        if(x == y || y == z || z == x) {
            return true;
        }
        return false;
    }

    public static boolean isEquilateral (int x, int y, int z) {
        if(x == y && y == z && z == x) {
            return true;
        }
        return false;
    }

    public static void main (String[] args) {
        Scanner sca=new Scanner(System.in);
        int a = 0, b = 0, c = 0;
        try {
            a = sca.nextInt();
            c = sca.nextInt();
            b = sca.nextInt();
        } catch (Exception e) {
            System.out.println(e);
        }
        if (isTrangle(a, b, c)) {
            if (isEquilateral(a, b, c)) {
                System.out.println("equilateral triangle!");
            } else if (isIsosceles(a, b, c)) {
                System.out.println("isosceles triangle!");
            } else {
                System.out.println("regular triangle!");
            }
        } else {
            System.out.println("not a triangle!");
        }
    }
    public String type (int a, int b, int c) {
        if (isTrangle(a, b, c)) {
            if (isEquilateral(a, b, c)) {
                return "equilateral triangle!";
            } else if (isIsosceles(a, b, c)) {
                return "isosceles triangle!";
            } else {
                return "regular triangle!";
            }
        } else {
            return "not a triangle!";
        }
    }
}

 

编写实现并做黑盒(等价类划分)与白盒测试(分支覆盖)

注意事项:

黑盒测试:

  1. 无效等价类三条边的划分范围:
    [1, 10^4],并且是正整数

  2. 黑盒测试的每一个无效等价类只包含一个无效条件

  3. 容易出现过于笼统的问题

4.2 参考等价类划分

    有效等价类 等价类编号 无效等价类 等价类编号
输入值 输入3个整数a,b,c(1<=a,b,c<=10000) 数字字符 1 非数字字符 15
整数 2 一边为非整数 a为非整数 16
b为非整数 17
c为非整数 18
两边为非整数 a,b为非整数 19
a,c为非整数 20
b,c为非整数 21
三边为非整数 22
3个数 3 只输入1个数 只输入a 23
只输入b 24
只输入c 25
只输入2个数 只输入a,b 26
只输入a,c 27
只输入b,c 28
输入3个以上数 29
1<=a,b,c<=10000 4 一边小于1或大于10000 a<1||a>10000 30
b<1||b>10000 31
c<1||c>10000 32
两边小于1或大于10000 (a<1||a>10000)&&(b<1||b>10000) 33
(a<1||a>10000)&&(c<1||c>10000) 34
(b<1||b>10000)&&(c<1||c>10000) 35
三边小于1或大于10000 (a<1||a>10000)&&(b<1||b>10000)&&(c<1||c>10000) 36
输出值 “not a triangle” a+b<=c 5    
a+c<=b 6
b+c<=a 7
"regular triangle" a+b>c 8    
a+c>b 9
b+c>a 10
"isosceles triangle" a=b&&b!=c 11    
a=c&&c!=b 12
b=c&&c!=a 13
"equilateral triangle" a=b&&b=c 14    

五、往届试题

5.1 11年试题:标识符判断

5.1.1 题目描述

在某一个PASCAL语言版本中规定:“标识符由字母开头、后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”请用等价类划分方法设计测试用例。

分析:有效字符数为8个,最大字符数为80个的意思是八个以内是有效的,可以大于80个,但那些都是无效的,就跟百度搜索前三十个字是有效的,你可以输进去很多,但是无效。

5.1.2 参考等价类划分

输入条件 有效等价类 等价类编号 无效等价类 等价类编号
标识符首字符 字母 1 非字母 6
标识符组成 字母或数字组合 2 非字母和数字组合 7
保留字 8
标识符字符数 1~8个 3 0个 9
>8个 10
>80个 11
标识符个数(同一语句中) 至少一个 4 0个 12
标识符使用 先说明后使用 5 未说明就使用 13

5.1.3 参考测试用例

测试用例序号 输入 预期结果 覆盖范围
1 VAR x,y; REAL;BEGIN x:=3.14; 通过 1,2,3,4,5
2 VAR 2x; REAL; 不通过 6
3 VAR x$; REAL; 不通过 7
4 VAR GOTO; REAL; 不通过 8
5 VAR x,y,; REAL; 不通过 9
6 VAR x123456789; REAL; 不通过 10
7 VAR x123…; REAL;(多余80个字符) 不通过 11
8 VAR ; REAL; 不通过 12
9 VAR x,y; REAL;BEGIN z:=5.20; 不通过 13

5.2 15年试题:标识符判断加工

在某程序设计语言的语法中规定:“标识符由字母开头、后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”
根据上述的描述,利用等价类划分法,得到下表(表中括号中的数字为等价类编号)。

输入数据有效等价列无效等价类
标识符个数 1个(1),多个(2) 0个(3)
标识符字符数 1-80个(4) 0个(5),大于80个(6)
标识符组成 字母(7),数字(8) 非字母数字字符(9),保留字(10)
第一个字符 字母(11) 非字母(12)
标识符使用 先说明后使用(13) 未说明已使用(14)

下面选取了八个测试用例,它们覆盖了所有的等价类,请在下划线中标出相应的等价类编号。

  1. VAR x, S7654321;
    BEGIN x:=6.313;S7654321:=8.953;
    (1)(2)(4)(7)(8)(11)(13)
  2. VAR:REAL;
    (3)
  3. VAR x,:REAL;
    (5)
  4. VAR S7654321…:REAL;(注:标识符字符数超过80个)
    (6)
  5. VAR S$:CHAR;
    (9)
  6. VAR GOTO:INTEGER;
    (10)
  7. VAR 5S:REAL;
    (12)
  8. VAR TAR:REAL;
    BEGIN…
    TAP:=SIN(3.14*0.8)/8
    (14)

5.3 12年试题:用户名正确性测试

5.3.1 题目描述

登录用户名由英文字母和数字组成,字符长度8-12位,不能仅有字母,也不能仅有数字,也不能有其他非英文字母。用等价类划分法设计测试用例。

5.3.2 参考等价类划分

输入条件 有效等价类 编号 无效等价类 编号
用户名长度 8~12位 1 <8位 3
>12位 4
用户名组成 英文字母和数字组合 2 只包含字母 5
只包含数字 6
包含其他非英文字母 7

5.3.3 参考测试用例

测试用例序号用户名输入预期结果覆盖类范围
1 zhangsan3 有效 1,2
2 lisi4 无效 3
3 wangwudalang12345 无效 4
4 gebilaowang 无效 5
5 233333333 无效 6
6 &&&$$&&& 无效 7
7 zhangsan_3 无效 7

插播一条特别消息…
不要问我为啥没有13年的 😦 ,因为我就是没有13的。
也没得题,也没得答案,自己也菜的不敢瞎写,所以没得2013

5.4 14年试题(一):测试抄错的代码

5.4.1 题目描述

同学A写代码段如下:
{
int T = 0;
if(A>=1) &&(B>=2) T=T+1;
else T=T+2;
if(x>=90)&&(y>=75) T=T+3;
else T=T+4;
printf(“%d”,&T);
]
同学B抄错如下:
{
int T = 0;
if(A>=1) &&(B>=2) T=T+1;
else T=T+2;
if(x>=90)&&(y<75) T=T+3;
else T=T+4;
printf(“%d”,&T);
]
请用白盒测试-分值覆盖法设计测试。写出思路,并进行描述。

5.4.2 参考流程图

 

5.4.3 参考测试用例

序号输入覆盖分支A的正确输出B的错误输出
1 A=1;B=2;x=90;y=75; 124 4 5
2 A=0;B=2;x=90;y=75; 134 5 6
3 A=1;B=2;x=90;y=74; 125 5 4
4 A=0;B=2;x=90;y=74; 135 6 5

通过测试,B同学对于测试用例1得到结果T=5,测试用例2得到结果T=6,测试用例3得到结果4,测试用例4得到结果5明显错误,可以测试出问题。

5.5 14年试题(二):电话号码

5.5.1 题目描述

一个地区的电话号码由地区码,前缀,后缀三部分组成。地区码可以是空白,也可以是三个数字。前缀由首位大于等于5的四位数字组成。后缀由四位数字组成。请用等价类划分法设计测试。写出思路,并进行描述。

5.5.2 参考等价类划分

输入条件 有效等价类 等价类编号 无效等价类 等价类编号
地区码 空白 1 包含非数字字符 5
长度<3 6
三位数字 2
长度>3 7
前缀 5000~9999 3 包含非数字字符 8
首位<5 9
长度<4 10
长度>4 11
后缀 四位数字 4 包含非数字字符 12
长度<4 13
长度>4 14

5.5.3 参考测试用例

测试用例序号 输入 预期结果 覆盖范围
区域码 前缀 后缀
1 空白 5000 1234 有效 1,3,4
2 123 5000 1234 有效 2,3,4
3 A12 5000 1234 无效 5
4 12 5000 1234 无效 6
5 1234 5000 1234 无效 7
6 123 500A 1234 无效 8
7 123 4000 1234 无效 9
8 123 500 1234 无效 10
9 123 50000 1234 无效 11
10 123 5000 A123 无效 12
11 123 5000 123 无效 13
12 123 5000 1234 无效 14

六、参考资料

[1]软工第五次上机PPT
[2]https://www.cnblogs.com/AlvinZH/p/7055708.html


  1. 软工第五次上机PPT ↩︎

  2. https://www.cnblogs.com/AlvinZH/p/7055708.html ↩︎

posted @ 2019-05-25 16:50  即昵称,不少于2个字符  阅读(909)  评论(0编辑  收藏  举报