前言
根据该博客的说法:
就是让做的那个JUnit5的实验,考的也比较简单,我们只考到了让编写对于一个东西的测试代码,如果实验自己写的完成这个也不是很困难,然后再就是给了一个网易邮箱的注册界面,让等价类分析,然后还有路径测试,和边界值测试
我自己考过试的人的说法,自己编一些题目,进行实操试试看
网易邮箱(等价类测试)
题目
题目是自己编的
请根据以上界面,完成等价类分析,编写等价类测试用例。
分析
首先,将该界面的信息提取出来:
一共有四个可选的输入:
- 邮箱地址
- 密码
- 手机号码
- 勾选同意《条款》
而输出应该只有一个:
- 注册成功与否
对于输出不需要进行等价类分析了;
对于输入进行分析:
邮箱地址
注意到小字部分:以字母开头,支持字母、数字组合
所以说,邮箱地址的编写应该符合某种规范。
对于,需要符合某种规范的等价类规则如下:
因此,可以得到以下输入条件:
- 邮箱地址是否以字母开头
- 邮箱地址是否仅包含字母和数字
根据每个输入条件,违背一个得到一个无效等价类,得到了如下等价类:
- 有效等价类:以字母开头,是字母和数字的组合。
- 无效等价类:1、不以字母开头,但仅包含字母数字;2、以字母开头,包含其他字符。
密码
密码在界面好像没有过多限制,不过可以想到一些常规的限制,即我们自定义。
自定义以下输入条件:
- 密码长度
- 密码是否过于简单,比如只包含数字或者只包含字符。
得到以下等价类:
- 有效等价类:密码长度合规,且够复杂。
- 无效等价类:1、密码长度合规但过于简单;2、密码长度超标
手机号码
手机号码分析应该都会直接给了
输入条件:
- 手机号码长度
- 手机号码是否存在
等价类:
- 有效等价类:存在的手机号
- 无效等价类:1、不符合长度要求的手机号;2、符合长度要求但不存在的手机号。
勾选
只有勾选和未勾选两个选项,不赘述。
请注意,上述的分析存在不严谨之处,还带有主观色彩,主要是传达等价类测试的思想。
解答
注册邮箱的输入条件如下:
编号 | 条件 |
A1 | 邮箱地址是否以字母开头 |
A2 | 邮箱地址是否只为字母数字组合 |
A3 | 密码长度 |
A4 | 密码是否过于简单 |
A5 | 手机号码长度 |
A6 | 手机号是否存在 |
A7 | 是否勾选《条款》 |
注册邮箱的等价类划分如下:
编号 | 有效等价类 | 无效等价类 |
A1 | 邮箱地址以字母开头(1) | 不以字母开头(2) |
A2 | 仅为字母数字组合(3) | 包含了其他字符(4) |
A3 | 8<=密码长度<=15(5) | 密码长度>15(6);密码长度<8(7) |
A4 | 密码符合,够复杂(8) | 密码过于简单(9) |
A5 | 8<=手机号码长度<=15(10) | 手机号码长度>15(11);手机号码长度<8(12) |
A6 | 手机号码存在(13) | 手机号码不存在(14) |
A7 | 勾选条款(15) | 不勾选条款(16) |
注册邮箱的等价类测试用例如下(注:这里采用了弱健壮等价类测试):
测试用例 | 输入 | 预期输出 | |||
邮箱地址 | 密码 | 手机号码 | 勾选 | ||
1 | YiYo832 | YiYo832123 | 134567955(存在) | 是 | 注册成功 |
2 | 832YiYo | YiYo832123 | 134567956(存在) | 是 | 注册失败 |
3 | YiYo832**** | YiYo832123 | 134567957(存在) | 是 | 注册失败 |
4 | YiYo832 | 123456789123456000 | 134567958(存在) | 是 | 注册失败 |
5 | YiYo832 | 123 | 134567959(存在) | 是 | 注册失败 |
6 | YiYo832 | 12345678(过于简单) | 134567960(存在) | 是 | 注册失败 |
7 | YiYo832 | YiYo832123 | 123456789123456000 | 是 | 注册失败 |
8 | YiYo832 | YiYo832123 | 13 | 是 | 注册失败 |
9 | YiYo832 | YiYo832123 | 123456789(不存在) | 是 | 注册失败 |
10 | YiYo832 | YiYo832123 | 134567964(存在) | 否 | 注册失败 |
至此,等价类测试的一般大题步骤结束。
优化还存在,比如可以细化输入条件,还可以从输出等价类分析(如果有的话)。
三角形程序(边界值分析)
三角形程序在课上被反反复复提及了好多次,下面使用其程序进行边界值分析的讲解。
题目
分析
如果是等价类测试还挺麻烦的,但是边界值测试属实是小打小闹,就三个输入,取值范围都一样。
给出:
- min- = 0
- min = 1
- min+ = 2
- norm = 50
- max- = 99
- max = 100
- max+ = 101
解答
看清楚题目的要求是什么边界值测试:
- 普通边界值测试:单缺陷假设,考虑5种值,4n+1个测试用例。
- 健壮性测试:单缺陷假设,考虑7种值,6n+1个测试用例。
- 最坏情况测试:多缺陷假设,考虑5种值,5^n个测试用例。
- 健壮最坏情况测试:多缺陷假设,考虑7种值,7^n个测试用例。
下面就以健壮性测试为例吧
健壮性测试的测试用例如下:
用例 | 输入 | 预期输出 | ||
a | b | c | ||
1 | 50 | 50 | 50 | 等边三角形 |
2 | 0 | 50 | 50 | 不构成三角形 |
3 | 1 | 50 | 50 | 等腰三角形 |
4 | 2 | 50 | 50 | 等腰三角形 |
5 | 99 | 50 | 50 | 等腰三角形 |
6 | 100 | 50 | 50 | 不构成三角形 |
7 | 101 | 50 | 50 | 不构成三角形 |
… | ||||
19 | 50 | 50 | 101 | 不构成三角形 |
一段小程序(DD路径)
DD路径可以看书,比较详细,P74-76
题目
#include "stdio.h"
void main()
{ ①//1
int n,i;
int x=0;
int y=0;
printf("请输入n\n");
scanf("%d",&n);
printf("请输入i\n");
scanf("%d",&i);
while ( n-- > 0 ) ②//2
{
if ( i==0 ) ③//3
x=y+2; ④//4
else
if ( i==1 ) ⑤//5
y=y+10; ⑥//6
else
x=y+20; ⑦//7
}// while ⑧ //8
printf("x=%d,y=%d\n",x,y);
}// main ⑨//9
问题:
(1)画出上述算法的程序流图;
(2)求程序的环复杂度并设计该程序的基本路径测试用例。
网上找的题目,估计考试不会考循环,但原理差不多
解答
DD路径
环复杂度
V(G)=E-N+2
E=11
N=9
所以V(G)=11-9+2=4
语句覆盖
编号 | 输入 | ||
n | i | 覆盖语句 | |
1 | 2 | 0 | 1、2、3、4、8、9 |
2 | 2 | 1 | 1、2、3、5、6、8、10 |
3 | 2 | 2 | 1、2、3、5、7、8、11 |
判定覆盖
同语句覆盖
由于判断都只涉及一个变量,条件覆盖,判定-条件覆盖,条件组合覆盖不再给出。
路径覆盖
一共有四条独立路径
路径1:1-2-3-4-8-9
路径2:1-2-3-5-6-8-9
路径3:1-2-3-5-7-8-9
路径4:1-2-9
用例编号 | 路径 | 输入数据 | 预期输出 |
1 | 1-2-3-4-8-9 | n=1,i=0 | x=2,y=0 |
2 | 1-2-3-5-6-8-9 | n=1,i=1 | x=0,y=10 |
3 | 1-2-3-5-7-8-9 | n=1,i=2 | x=20,y=0 |
4 | 1-2-9 | n=0,i=3 | x=0,y=0 |
三角形程序(等价类测试)
题目
输入三个数a、b、c,分别作为三角形的三条边,通过程序判定该三角形的类型是否为一般三角形、等腰三角形或等边三角形。用等价类划分法为该程序设计测试用例。分析:题目中给出和隐含的对输入条件的要求:(1)三个数(2)非零数(3)正数(4)两边之和大于第三边(5)等腰(6)等边。如果 a 、 b 、 c 满足条件( 1 ) ~ ( 3 ),则输出下列四种情况之一:
1) 如果不满足条件(4),则程序输出为 " 非三角形 " 。
2) 如果三条边相等即满足条件(6),则程序输出为 " 等边三角形 " 。
3) 如果只有两条边相等、即满足条件(5),则程序输出为 " 等腰三角形 " 。
4) 如果三条边都不相等,则程序输出为 " 一般三角形 " 。
列出等价类表并编号,根据编号设计覆盖有效等价类和无效等价类的测试用例。
解答
1.对于输入进行等价类测试:
输入条件的等价类:
输入等价类 | 有效等价类 | 无效等价类 |
参数个数 | 三个数(1) | 小于三个数(4) 大于三个数(5) |
参数是否为零 | a,b,c!=0(2) | a=0(6) b=0(7) c=0(8) |
参数是否为正数 | a,b,c>0(3) | a<0(9) b<0(10) c<0(11) |
为有效类设计测试用例:
测试数据 | 期望结果 | 覆盖范围 |
a=10,b=10,c=10 | 等边三角形 | 等价类(1)(2)(3) |
为每一个无效等价类设计至少一个测试用例:
测试数据 | 期望结果 | 覆盖范围 |
a=10,b=10 | 输入无效 | 等价类(4) |
a=10,b=10,c=10,d=10 | 输入无效 | 等价类(5) |
a=0,b=10,c=10 | 输入无效 | 等价类(6) |
a=10,b=0,c=10 | 输入无效 | 等价类(7) |
a=10,b=10,c=0 | 输入无效 | 等价类(8) |
a=-10,b=10,c=10 | 输入无效 | 等价类(9) |
a=10,b=-10,c=10 | 输入无效 | 等价类(10) |
a=10,b=10,c=-10 | 输入无效 | 等价类(11) |
2.对于输出进行等价类测试:
输出条件的等价类:
输出等价类 | 条件 | 输出结果 |
1 | 不满足条件(4) | 非三角形 |
2 | 满足条件(6) | 等边三角形 |
3 | 满足条件(5),而且a=b!=c | 等腰三角形 |
4 | 满足条件(5),而且a=c!=b | 等腰三角形 |
5 | 满足条件(5),而且c=b!=a | 等腰三角形 |
6 | 满足条件(4),而且三边不相等 | 一般三角形 |
为每一个输出条件的等价类设计至少一个测试用例:
测试数据 | 期望结果 | 覆盖范围 |
a=10,b=10,c=100 | 非三角形 | 等价类(1) |
a=10,b=10,c=10 | 等边三角形 | 等价类(2) |
a=10,b=10,c=15 | 等腰三角形 | 等价类(3) |
a=10,b=15,c=10 | 等腰三角形 | 等价类(4) |
a=15,b=10,c=10 | 等腰三角形 | 等价类(5) |
a=6,b=8,c=10 | 一般三角形 | 等价类(6) |
3.综合输入输出等价类,得到全部测试用例:
测试数据 | 期望结果 | 覆盖范围 |
a=10,b=10,c=100 | 非三角形 | 输出等价类(1) |
a=10,b=10,c=10 | 等边三角形 | 输出等价类(2) |
a=10,b=10,c=15 | 等腰三角形 | 输出等价类(3) |
a=10,b=15,c=10 | 等腰三角形 | 输出等价类(4) |
a=15,b=10,c=10 | 等腰三角形 | 输出等价类(5) |
a=6,b=8,c=10 | 一般三角形 | 输出等价类(6) |
a=10,b=10 | 输入无效 | 输入等价类(4) |
a=10,b=10,c=10,d=10 | 输入无效 | 输入等价类(5) |
a=0,b=10,c=10 | 输入无效 | 输入等价类(6) |
a=10,b=0,c=10 | 输入无效 | 输入等价类(7) |
a=10,b=10,c=0 | 输入无效 | 输入等价类(8) |
a=-10,b=10,c=10 | 输入无效 | 输入等价类(9) |
a=10,b=-10,c=10 | 输入无效 | 输入等价类(10) |
a=10,b=10,c=-10 | 输入无效 | 输入等价类(11) |