您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件工程第13章-软件测试
软件工程第13章软件测试复旦大学计算机科学技术学院软件工程(第二版)内容摘要•软件测试基础•白盒测试•黑盒测试•测试策略•面向对象测试•测试完成标准•调试2复旦大学计算机科学技术学院软件工程(第二版)内容摘要•软件测试基础•白盒测试•黑盒测试•测试策略•面向对象测试•测试完成标准•调试3复旦大学计算机科学技术学院软件工程(第二版)软件测试基础•软件测试的目的•软件测试的基本原则•白盒测试和黑盒测试4复旦大学计算机科学技术学院软件工程(第二版)有关软件测试的错误观点•“软件测试是为了证明程序是正确的,即测试能发现程序中所有的错误”•要通过测试发现程序中的所有错误,就要穷举所有可能的输入数据,这是不可能的对于一个输入三个16位字长的整型数据的程序,输入数据的所有组合情况有2483*1014,如果测试一个数据需1ms,则即使一年365天每天24小时不停地测试,也需要约1万年5复旦大学计算机科学技术学院软件工程(第二版)对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数字例如一个小程序的流程图,它包括了一个执行20次的循环,其循环体有五个分支。这个循环的不同执行路径数达520条,如果对每一条路径进行测试需要1毫秒,那么即使一年工作365×24小时,要想把所有路径测试完,大约需3170年6复旦大学计算机科学技术学院软件工程(第二版)7复旦大学计算机科学技术学院软件工程(第二版)•“程序测试是证明程序正确地执行了预期的功能”•实际上,一个程序不仅要完成它所需完成的功能,而且不应完成它不该做的事。如不能把边长为0、0、0的三条边判断为等边三角形8复旦大学计算机科学技术学院软件工程(第二版)软件测试的目的•GlenMyers给出的软件测试目的:测试是一个为了发现错误而执行程序的过程一个好的测试用例是指很可能找到迄今为至尚未发现的错误的测试用例一个成功的测试是指揭示了迄今为至尚未发现的错误的测试根据这个测试目的,我们应该排除对测试的错误观点,设计合适的测试用例,用尽可能少的测试用例,来发现尽可能多的软件错误9复旦大学计算机科学技术学院软件工程(第二版)软件测试的原则Davis提出了一组指导软件测试的基本原则:1.所有的测试都应可追溯到客户需求2.应该在测试工作真正开始前的较长时间就进行测试计划3.Pareto原则:测试中发现的80%的错误可能来自于20%的程序代码4.测试应从“小规模”开始,逐步转向“大规模”5.穷举测试是不可能的6.为了达到最有效的测试,应由独立的第三方来承担测试10复旦大学计算机科学技术学院软件工程(第二版)其他的测试原则:1.在设计测试用例时,应包括合理的输入条件和不合理的输入条件2.严格执行测试计划,排除测试的随意性3.应当对每一个测试结果做全面检查4.妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便5.检查程序是否做了应做的事仅是成功的一半,另一半是检查程序是否做了不该做的事6.在规划测试时不要设想程序中不会查出错误11复旦大学计算机科学技术学院软件工程(第二版)白盒测试与黑盒测试•测试用例的设计是软件测试的关键所在•设计尽可能少的测试用例来发现尽可能多的错误•设计最有可能发现软件错误的测试用例,同时避免使用发现错误效果相同的测试用例•测试用例的设计方法大体可分为两类:白盒测试和黑盒测试,也称白箱测试和黑箱测试12复旦大学计算机科学技术学院软件工程(第二版)•白盒测试(又称为结构测试)把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作•白盒测试主要用于对模块的测试,包括:程序模块中的所有独立路径至少执行一次对所有逻辑判定的取值(“真”与“假”)都至少测试一次在上下边界及可操作范围内运行所有循环测试内部数据结构的有效性等13复旦大学计算机科学技术学院软件工程(第二版)•黑盒测试(又称行为测试)把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需求•黑盒测试可用于各种测试,它试图发现以下类型的错误:不正确或遗漏的功能接口错误,如输入/输出参数的个数、类型等数据结构错误或外部信息(如外部数据库)访问错误性能错误初始化和终止错误14复旦大学计算机科学技术学院软件工程(第二版)内容摘要•软件测试基础•白盒测试•黑盒测试•测试策略•面向对象测试•测试完成标准•调试15复旦大学计算机科学技术学院软件工程(第二版)白盒测试常用的白盒测试方法有:•逻辑覆盖测试•基本路径覆盖测试•数据流测试•循环测试16复旦大学计算机科学技术学院软件工程(第二版)逻辑覆盖测试语句覆盖判定覆盖条件覆盖判定-条件覆盖条件组合覆盖路径覆盖逻辑覆盖主要考察使用测试数据运行被测程序时对程序逻辑的覆盖程度。通常希望选择最少的测试用例来满足所需的覆盖标准。主要的覆盖标准有:17复旦大学计算机科学技术学院软件工程(第二版)例:对下列子程序进行测试procedureexample(y,z:real;varx:real);beginif(y1)and(z=0)thenx:=x/y;if(y=2)or(x1)thenx:=x+1;end;该子程序接受x、y、z的值,并将计算结果x的值返回给调用程序与该子程序对应的流程图如下:18复旦大学计算机科学技术学院软件工程(第二版)入口s(y1)and(z=0)a(y=2)or(x1)c返回ebx=x/yftdx=x+1ft19复旦大学计算机科学技术学院软件工程(第二版)该子程序有两个判定:a:(y1)and(z=0)c:(y=2)or(x1)判定a中有两个判定条件:y1、z=0判定c中有两个判定条件:y=2、x1根据程序的执行流程不同,判定c中的“x1”的含义也不同当判定a为“真”时,“x1”实际是“x/y1”,即“xy”当判定a为“假”时,“x1”仍是“x1”20复旦大学计算机科学技术学院软件工程(第二版)该子程序有四条可执行路径:路径1sabcde,其执行条件(L1)是a为“t”且c为“t”L1={(y1)and(z=0)}and{(y=2)or(x/y1)}=(y1)and(z=0)and(y=2)or(y1)and(z=0)and(xy)=(y=2)and(z=0)or(y1)and(z=0)and(xy)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)21复旦大学计算机科学技术学院软件工程(第二版)路径2sace,其执行条件(L2)是a为“f”且c为“f”)L2=not{(y1)and(z=0)}andnot{(y=2)or(x1)}={not(y1)ornot(z=0)}and{not(y=2)andnot(x1)}=not(y1)andnot(y=2)andnot(x1)ornot(z=0)andnot(y=2)andnot(x1)=(y≤1)and(y≠2)and(x≤1)or(z≠0)and(y≠2)and(x≤1)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)22复旦大学计算机科学技术学院软件工程(第二版)路径3sacde,其执行条件(L3)是a为“f”且c为“t”)L3=not{(y1)and(z=0)}and{(y=2)or(x1)}={not(y1)ornot(z=0)}and{(y=2)or(x1)}=not(y1)and(y=2)ornot(y1)and(x1)ornot(z=0)and(y=2)ornot(z=0)and(x1)=(y≤1)and(y=2)or(y≤1)and(x1)or(z≠0)and(y=2)or(z≠0)and(x1)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)23复旦大学计算机科学技术学院软件工程(第二版)路径4sabce,其执行条件(L4)是a为“t”且c为“f”)L4={(y1)and(z=0)}andnot{(y=2)or(x/y1)}=(y1)and(z=0)andnot(y=2)andnot(xy)=(y1)and(z=0)and(y≠2)and(x≤y)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)24复旦大学计算机科学技术学院软件工程(第二版)语句覆盖语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次欲使每个语句都执行一次,只需执行路径sabcde即可,其条件是:L1=(y=2)and(z=0)or(y1)and(z=0)and(xy)测试用例如下:测试数据预期结果x=4,y=2,z=0x=3seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)25复旦大学计算机科学技术学院软件工程(第二版)判定覆盖判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次)26复旦大学计算机科学技术学院软件工程(第二版)欲使每个分支都执行一次,只需执行路径sacde(a为“f”且c为“t”,即条件L3)和sabce(a为“t”且c为“f”,即条件L4)即可或者,执行路径sabcde(a为“t”且c为“t”,即条件L1)和sace(a为“f”且c为“f”,即条件L2)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)27复旦大学计算机科学技术学院软件工程(第二版)L3(sacde,a为“f”且c为“t”):(y≤1)and(y=2)or(y≤1)and(x1)or(z≠0)and(y=2)or(z≠0)and(x1)L4(sabce,a为“t”且c为“f”):(y1)and(z=0)and(y≠2)and(x≤y)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)测试数据预期结果路径acx=1,y=2,z=1x=2sacdeftx=3,y=3,z=0x=1sabcetf28复旦大学计算机科学技术学院软件工程(第二版)判定覆盖将每个判定的所有可能结果都至少执行一次,所以,程序中的所有语句也必定都至少执行一次。因此,满足判定覆盖标准的测试用例也一定满足语句覆盖标准29复旦大学计算机科学技术学院软件工程(第二版)条件覆盖条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次30复旦大学计算机科学技术学院软件工程(第二版)判定a中各种条件的所有可能结果:y1,y≤1,z=0,z≠0判定c中各种条件的所有可能结果:y=2,y≠2,x1(或xy),x≤1(或x≤y)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)测试数据预期结果路径覆盖的条件x=1,y=2,z=0x=1.5sabcdey1,z=0,y=2,x≤yx=2,y=1,z=1x=3sacdey≤1,z≠0,y≠2,x131复旦大学计算机科学技术学院软件工程(第二版)条件覆盖通常比判定覆盖强,但有时虽然每个条件的所有可能结果都出现过,但判定表达式的某些可能结果并未出现。上面的二个测试用例满足了条件覆盖标准,但判定c为“假”的结果并未出现32复旦大学计算机科学技术学院软件工程(第二版)判定/条件覆盖判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次显然,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、语句覆盖标准33复旦大学计算机科学技术学院软件工程(第二版)seacbdtffta:(y1)and(z=0)c:(y=2)or(x1)测
本文标题:软件工程第13章-软件测试
链接地址:https://www.777doc.com/doc-3380994 .html