其实是没有前七次实验的 因为第八次实验是考试,复习了前七次实验的内容。 所以这个第八次实验是个伪命题hiahiahia
软件测试是为了发现程序中的错误而执行程序的过程,贯穿于软件生命周期,其目的是尽早发现软件缺陷,并确保其得以修复。再全面的测试也不能完全消除软件缺陷,希望完全依托测试确保软件质量是不现实的。
从软件工程的角度来看,软件的生命周期一般分为4部分:
软件分析时期软件设计时期编码和测试时期软件运行与维护时期在编码的同时,也进行着单元测试。
将被测试的软件系统看成一个黑盒子,不关心盒子的内部结构和内部特性,只关心软件产品的输入数据和输出结果。 黑盒测试的测试方法有等价类划分法、边界值分析法、错误推测法和因果图法。
将程序的输入域划分为若干子集,然后从每个子集中选取少数具有代表性的数据用作测试用例。所选取的输入数据对于揭露程序中的错误都是等效的。
等价类分为有效等价类和无效等价类:
有效等价类:对程序的规格说明是有意义的、合理的输入数据所构成的集合。无效等价类:对程序的规格说明是无意义的、不合理的输入数据所构成的集合划分等价类时遵循的原则:
如果输入条件规定了取值范围或个数,则可确定一个有效等价类和两个无效等价类。例如,如果输入值x在0到100之间,那么有效等价类是0<=x<=100,无效等价类是x<0和x>100。如果输入条件规定了输入值的集合或是规定了“必须如何”的条件,则可以确定一个有效等价类和一个无效等价类。例如,如果输入值是日期类型,那么有效等价类是日期类型的数据,无效等价类是非日期类型的数据。如果输入条件是布尔表达式,则可以分为一个有效等价类和一个无效等价类。例如,如果要求密码非空,则有效等价类为非空密码,无效等价类为空密码。如果输入条件是一组值,且程序对不同的值有不同的处理方式,则每个允许的输入值对应一个有效等价类,所有不允许的输入值的集合为一个无效等价类。例如,如果级别的值是初级、中级、高级,则有效等价类应该有三个,分别为初级、中级、高级,无效等价类有一个,为其他任何级别。如果规定了输入数据必须遵循的规则,则可划分出一个有效等价类(符合规则)和若干个无效等价类(从不同的角度违反规则)1
测试一个函数dateValidation(int year, int month, int day),功能是验证输入日期是否合法。
输入三个变量(年、月、日),函数返回布尔值,判断该日期是否合法:1≤月份≤12,1≤日期≤31,2000≤年份≤2019。
白盒测试关注软件产品的内部细节和逻辑结构。
方法:
逻辑覆盖测试方法基本路径测试方法根据覆盖的目标不同,可分为语句覆盖、分支覆盖、条件覆盖、分支-条件覆盖、条件组合覆盖、路径覆盖。
语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。基本思想:设计若干个测试用例,运行被测程序,使程序中的每个分支至少被执行一次。
以考察程序if-else结构为基础。
对循环结构,考察循环条件能够满足和不可能满足两种情况。
判断是否为闰年的函数isLeapYear(int year)。
闰年的条件是:
能被4整除,但不能被100整除;能被100整除,又能被400整除。三角形的判断:(题目链接) 定义一个函数,用于判断三角形的三条边能否构成三角形,如果能,则判断是普通三角形,等腰三角形,还是等边三角形。(三角形的边长为整数) 输入:三角形的三条边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, 10^4],并且是正整数
黑盒测试的每一个无效等价类只包含一个无效条件
容易出现过于笼统的问题
2
在某一个PASCAL语言版本中规定:“标识符由字母开头、后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。”请用等价类划分方法设计测试用例。
分析:有效字符数为8个,最大字符数为80个的意思是八个以内是有效的,可以大于80个,但那些都是无效的,就跟百度搜索前三十个字是有效的,你可以输进去很多,但是无效。
在某程序设计语言的语法中规定:“标识符由字母开头、后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个。”并且规定:“标识符必须先说明,再使用。”“在同一说明语句中,标识符至少必须有一个。” 根据上述的描述,利用等价类划分法,得到下表(表中括号中的数字为等价类编号)。
输入数据有效等价列无效等价类标识符个数1个(1),多个(2)0个(3)标识符字符数1-80个(4)0个(5),大于80个(6)标识符组成字母(7),数字(8)非字母数字字符(9),保留字(10)第一个字符字母(11)非字母(12)标识符使用先说明后使用(13)未说明已使用(14)下面选取了八个测试用例,它们覆盖了所有的等价类,请在下划线中标出相应的等价类编号。
VAR x, S7654321; BEGIN x:=6.313;S7654321:=8.953; (1)(2)(4)(7)(8)(11)(13)VAR:REAL; (3)VAR x,:REAL; (5)VAR S7654321…:REAL;(注:标识符字符数超过80个) (6)VAR S$:CHAR; (9)VAR GOTO:INTEGER; (10)VAR 5S:REAL; (12)VAR TAR:REAL; BEGIN… TAP:=SIN(3.14*0.8)/8 (14)登录用户名由英文字母和数字组成,字符长度8-12位,不能仅有字母,也不能仅有数字,也不能有其他非英文字母。用等价类划分法设计测试用例。
插播一条特别消息… 不要问我为啥没有13年的 ? ,因为我就是没有13的。 也没得题,也没得答案,自己也菜的不敢瞎写,所以没得2013
同学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); ] 请用白盒测试-分值覆盖法设计测试。写出思路,并进行描述。
通过测试,B同学对于测试用例1得到结果T=5,测试用例2得到结果T=6,测试用例3得到结果4,测试用例4得到结果5明显错误,可以测试出问题。
一个地区的电话号码由地区码,前缀,后缀三部分组成。地区码可以是空白,也可以是三个数字。前缀由首位大于等于5的四位数字组成。后缀由四位数字组成。请用等价类划分法设计测试。写出思路,并进行描述。
[1]软工第五次上机PPT [2]https://www.cnblogs.com/AlvinZH/p/7055708.html
软工第五次上机PPT ↩︎
https://www.cnblogs.com/AlvinZH/p/7055708.html ↩︎
