《(精品)软件工程-09.ppt》由会员分享,可在线阅读,更多相关《(精品)软件工程-09.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第九章第九章软件测试用例设计软件测试用例设计软件工程课件软件工程课件1软件工程软件工程第九章第九章 软件测试用例设计软件测试用例设计9.1 测试用例设计概述测试用例设计概述 9.2 软件测试用例设计方法软件测试用例设计方法9.3 白盒测试用例设计方法白盒测试用例设计方法9.4 黑盒测试用例设计方法黑盒测试用例设计方法9.5 单元测试的测试用例设计单元测试的测试用例设计9.6 集成测试的测试用例设计集成测试的测试用例设计9.7 系统测试的测试用例设计系统测试的测试用例设计2软件工程软件工程9.1 测试用例设计概述测试用例设计概述 n测试用例测试用例是为有效地发现软件缺陷的是为有效地发现软件缺陷的
2、最小测试执行单元。最小测试执行单元。测试用例的重要性测试用例的重要性1.1.测试用例是测试人员执行测试的重要参考依据。测试用例是测试人员执行测试的重要参考依据。不同的测试人不同的测试人员根据相同的测试用例所得到的输出应该是一致的,测试实际员根据相同的测试用例所得到的输出应该是一致的,测试实际上就是测试用例的计划、执行和跟踪过程。上就是测试用例的计划、执行和跟踪过程。2.2.良好的测试用例具有复用的功能,良好的测试用例具有复用的功能,在测试过程中可以重复使用。在测试过程中可以重复使用。因此,设计良好的测试用例可以大大节约时间,提高测试效率。因此,设计良好的测试用例可以大大节约时间,提高测试效率。
3、3.3.测试用例是在长期测试实践中积累起来的测试用例是在长期测试实践中积累起来的。组织好这些测试用。组织好这些测试用例,可帮助测试者有效使用它们。例,可帮助测试者有效使用它们。4.4.测试用例的通过率是检验程序代码质量的例证测试用例的通过率是检验程序代码质量的例证。衡量程序代码。衡量程序代码的质量,量化的标准应该是测试用例的通过率和软件缺陷的质量,量化的标准应该是测试用例的通过率和软件缺陷(bugbug)的数目。)的数目。5.5.测试用例也是检验测试人员进度、工作量以及跟踪管理测试测试用例也是检验测试人员进度、工作量以及跟踪管理测试人员的工作效率的因素。人员的工作效率的因素。尤其适用于对于新的
4、测试人员考核,尤其适用于对于新的测试人员考核,从而更加合理做出测试安排和计划。从而更加合理做出测试安排和计划。3软件工程软件工程测试用例数和软件规模的关系测试用例数和软件规模的关系 n对软件质量的要求不同,测试用例数与程序源代码规模的比对软件质量的要求不同,测试用例数与程序源代码规模的比例不同例不同。如航天软件的测试用例数与程序源代码行数的比例。如航天软件的测试用例数与程序源代码行数的比例就高于普通民用软件。就高于普通民用软件。n软件的规模不同,若要达到相同的软件质量,软件的测试用软件的规模不同,若要达到相同的软件质量,软件的测试用例数与程序代码行数的比例页不同,例数与程序代码行数的比例页不同
5、,大规模软件应该比小规大规模软件应该比小规模软件更高些。模软件更高些。测测试试用用例例数数软件规模软件规模4软件工程软件工程测试用例设计说明的书写规范测试用例设计说明的书写规范 n在在ANSIIEEE 829 1983 标准中列出了和测试设计相关的测试用例编写规范标准中列出了和测试设计相关的测试用例编写规范和模板。和模板。n标准模板中主要元素如下。标准模板中主要元素如下。u标识符标识符:每个测试用例应有一个惟一的标识,作为引用的基本元素。:每个测试用例应有一个惟一的标识,作为引用的基本元素。u测试项测试项:测试用例应准确地描述被测试项及其特征。如做:测试用例应准确地描述被测试项及其特征。如做
6、Windows 应应用程序的窗口测试,测试对象是整个应用程序用户界面,其特性要求包用程序的窗口测试,测试对象是整个应用程序用户界面,其特性要求包括窗口缩放、界面布局、菜单等。括窗口缩放、界面布局、菜单等。u测试环境要求测试环境要求:用来表明执行该测试用例需要的测试环境,:用来表明执行该测试用例需要的测试环境,可根据被测模块对测试环境的需求来描述测试用例的测试环可根据被测模块对测试环境的需求来描述测试用例的测试环境。境。u输入数据输入数据:用来执行测试用例的输入数据。:用来执行测试用例的输入数据。u对应输出数据对应输出数据:表示按照指定的环境和输入标准得到的期望:表示按照指定的环境和输入标准得到
7、的期望输出结果。输出结果。u测试用例间的关联测试用例间的关联:用来标识该测试用例与其他的测试(或:用来标识该测试用例与其他的测试(或其他测试用例)间的依赖关系。其他测试用例)间的依赖关系。5软件工程软件工程9.2 软件测试用例设计方法软件测试用例设计方法n静态测试和动态测两类的测试静态测试和动态测两类的测试静态测试:不必执行程序,目的是收集有关程序代静态测试:不必执行程序,目的是收集有关程序代码的结构信息而非查错。码的结构信息而非查错。主要采用检查、分析、评审等人工测试的方法;主要采用检查、分析、评审等人工测试的方法;动态测试动态测试 需要执行程序,目的是查错。需要执行程序,目的是查错。主要有
8、:主要有:黑盒测试、白盒测试黑盒测试、白盒测试 6软件工程软件工程9.2.1 黑盒测试(黑盒测试(Black-Box Test)n把把测试对象测试对象看做看做一个黑盒一个黑盒,测试人员完全不考虑程序内部的逻,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能规格说明,检查辑结构和内部特性,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明。程序的功能是否符合它的功能说明。n黑盒测试叫做黑盒测试叫做功能测试功能测试或或数据驱动测试数据驱动测试。n采用黑盒测试方法就意味着测试要在软件的接口处进行。采用黑盒测试方法就意味着测试要在软件的接口处进行。7软件工程软件工
9、程黑盒测试方法主要是为了发现以下几类错误:黑盒测试方法主要是为了发现以下几类错误:1)是否有不正确或遗漏了的功能?是否有不正确或遗漏了的功能?2)在接口上,输入能否正确地接受在接口上,输入能否正确地接受?能否输出正确的结果能否输出正确的结果?3)是否有数据结构错误或外部信息是否有数据结构错误或外部信息(例如数据文件例如数据文件)访问错误访问错误?4)性能上是否能够满足要求性能上是否能够满足要求?5)是否有初始化或终止性错误是否有初始化或终止性错误?用黑盒测试发现程序中的错误,必须在用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出所有可能的输入条件和输出条件中条件中确定测试数据,来检查
10、程序是否都能产生正确的输出。确定测试数据,来检查程序是否都能产生正确的输出。n但这是但这是不可能不可能的。的。PXYZ第三方测试大多采用黑盒测试方法第三方测试大多采用黑盒测试方法8软件工程软件工程9.2.2 白盒测试(白盒测试(White-Box Test)n此方法此方法把测试对象看做一个玻璃盒子把测试对象看做一个玻璃盒子,它允许测试,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。选择测试用例,对程序所有逻辑路径进行测试。n白盒测试又称为结构测试、逻辑驱动测试、白盒测试又称为结构测试、逻辑驱动测试、开
11、盒测开盒测试、玻璃盒测试、基于程序的测试试、玻璃盒测试、基于程序的测试.。9软件工程软件工程n对于有多重循环的程序,穷举测试是不可能的。对于有多重循环的程序,穷举测试是不可能的。n例如,给出一个小程序的流程图,它包括了一个执行例如,给出一个小程序的流程图,它包括了一个执行 20 次的次的循环。循环。n循环内有循环内有 5 条不同的路径,循环条不同的路径,循环 20 次,则组合起来可能的不次,则组合起来可能的不同执行路径数达同执行路径数达 520 条。条。n假设对每一条路径进行测试需要假设对每一条路径进行测试需要1毫秒,一年工作毫秒,一年工作365 天,每天,每天工作天工作 24 小时,要想把所
12、有路径测试完,需小时,要想把所有路径测试完,需 3024 年。年。循环循环20次次10软件工程软件工程9.3 白盒测试用例设计方法白盒测试用例设计方法1.逻辑覆盖逻辑覆盖2.判定结构分析判定结构分析3.循环结构分析循环结构分析4.基本路径覆盖基本路径覆盖11软件工程软件工程9.3.1 逻辑覆盖逻辑覆盖n逻辑覆盖是以程序内部的逻辑结构为基础的设逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试。计测试用例的技术。它属白盒测试。u语句覆盖语句覆盖u判定覆盖判定覆盖u条件覆盖条件覆盖u判定条件覆盖判定条件覆盖u条件组合覆盖条件组合覆盖u路径覆盖路径覆盖n介绍逻辑覆盖的方法时均以下
13、页的图为例。介绍逻辑覆盖的方法时均以下页的图为例。12软件工程软件工程(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1TT TFFabdce13软件工程软件工程1.语句覆盖语句覆盖n语句覆盖就是设计若干个测试用例,运行被测程序,使得语句覆盖就是设计若干个测试用例,运行被测程序,使得每一每一可执行语句至少执行一次可执行语句至少执行一次。n图中,正好所有的可执行语句都在图中,正好所有的可执行语句都在路径路径ace上上 n测试用例的设计格式如下测试用例的设计格式如下【输入的输入的(A,B,X),对应输出的,对应输出的(A,B,X)】n为图例设计满足为图例设计满足语句覆盖语句覆盖的测
14、试用例是的测试用例是:Test1:【(2,0,4),(2,0,3)】n覆盖覆盖 ace【P1】。n“语句覆盖是最弱的逻辑覆盖准则语句覆盖是最弱的逻辑覆盖准则”。n如果第一个判如果第一个判 断断“and”错为错为“or”,第二个判断,第二个判断“or”错为错为“and”,使用以上,使用以上 测试用例,查不出问题。测试用例,查不出问题。n因此,因此,使用语句覆盖,可能查不出判定中逻辑运算中出现的错误使用语句覆盖,可能查不出判定中逻辑运算中出现的错误。(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1TT TFFabdce14软件工程软件工程 2.判定覆盖判定覆盖n判定覆盖就是设计若
15、干个测试用例,运行被测程序,使得程序判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中中每个判断的取真分支和取假分支至少经历一次每个判断的取真分支和取假分支至少经历一次。n判定覆盖又称为判定覆盖又称为分支覆盖分支覆盖。n对于图例,如果选择路径对于图例,如果选择路径P1P1和和P2P2,就可得满足要求的测试用例。就可得满足要求的测试用例。Test1:Test1:【(2,0,4)(2,0,4),(2,0,3)(2,0,3)】覆盖覆盖 aceace【P1P1】Test2:Test2:【(1,1,1)(1,1,1),(1,1,1)(1,1,1)】覆盖覆盖 abdabd【P2P2】(A1)and(
16、B=0)(A=2)or(X1)X=X/AX=X+1TT TFFabdce或者或者Test1Test1:【(2,1,1)(2,1,1),(2,1,2)(2,1,2)】覆盖覆盖 abeabe【P3P3】Test2Test2:【(3,0,3)(3,0,3),(3,0,1)(3,0,1)】覆盖覆盖 acdacd【P4P4】使用判定覆盖,有可能查不出在判定的条件使用判定覆盖,有可能查不出在判定的条件中存在的错误。中存在的错误。例如,若把图例中第二个判定中的条件例如,若把图例中第二个判定中的条件 X1 错写成错写成X1,那么利用上面两组测试用例,那么利用上面两组测试用例,仍能得到同样结果。仍能得到同样结果
17、。15软件工程软件工程3.条件覆盖条件覆盖条件覆盖:使得程序中条件覆盖:使得程序中每个判断的每个条件的可能取值至少取得一次每个判断的每个条件的可能取值至少取得一次。(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1TT TFFabdce 测试用例测试用例 覆盖分支覆盖分支 条件取值条件取值Test1:【(2,0,4),(2,0,3)】P1(c,e)T1T2T3T4 Test2:【(1,1,1),(1,1,1)】P2(b,d)F1F2F3F4对于第一个判断:条件对于第一个判断:条件 A1 取真为取真为T1,取,取假为假为F1;条件;条件 B0 取真为取真为T2,取假为,取假为F2
18、。对于第二个判断:条件对于第二个判断:条件A2 取真为取真为T3,取,取假为假为F3;条件;条件X1 取真为取真为T4,取假为,取假为F4。测试用例测试用例 覆盖分支覆盖分支 条件取值条件取值Test1:【(1,0,3),(1,0,4)】P3(b,e)F1T2F3T4 Test2:【(2,1,1),(2,1,2)】P3(b,e)T1F2T3F4为解决这一矛盾,需要对条件和分支兼顾,为解决这一矛盾,需要对条件和分支兼顾,有必要考虑下面的有必要考虑下面的条件条件判定覆盖判定覆盖。从结果来看,这一组测试用例从结果来看,这一组测试用例覆盖了所有条覆盖了所有条件的取值,但没有覆盖所有的分支。件的取值,但
19、没有覆盖所有的分支。16软件工程软件工程n判定条件覆盖判定条件覆盖:判断中判断中每个条件的可能取值至少执行一次每个条件的可能取值至少执行一次,每,每个判断中的个判断中的每个分支至少执行一次每个分支至少执行一次。n可取覆盖可取覆盖P1和和P2的测试用例,覆盖所有分支和所有条件的取值。的测试用例,覆盖所有分支和所有条件的取值。4.判定条件覆盖判定条件覆盖真真值值表表XYX and Y动作动作111X,Y都执行都执行100X,Y都执行都执行010仅仅X执行执行000仅仅X执行执行XYX or Y动作动作111仅仅X执行执行100仅仅X执行执行010X,Y都执行都执行000X,Y都执行都执行先取覆盖先
20、取覆盖 P1 和和 P2 的测试用例,覆盖所有分支和所有条件的取值。再判断哪些的测试用例,覆盖所有分支和所有条件的取值。再判断哪些条件取值执行不到,据此补充一个测试用例条件取值执行不到,据此补充一个测试用例 测测 试试 用用 例例 条件取值条件取值 覆盖分支覆盖分支 执行条件执行条件【(2,0,4),(2,0,3)】T1T2T3T4 c,e T1T2T3【(1,1,1),(1,1,1)】F1F2F3F4 b,d F1F3F4【(3,1,2),(3,1,3)】T1F2F3T4 b,e T1F2F3T4第第3个补充了前两个没有执行到的个补充了前两个没有执行到的T4和和F2。(A1)and(B=0)
21、(A=2)or(X1)X=X/AX=X+1TT TFFabdce17软件工程软件工程5.条件组合覆盖条件组合覆盖n条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所所有可能的条件取值组合至少执行一次有可能的条件取值组合至少执行一次。n记记 A1,B0 作作 T1T2判定判定1的取真分支的取真分支 A1,B0 作作 T1F2判定判定1的取假分支的取假分支 A 1,B0 作作 F1T2判定判定1的取假分支的取假分支 A 1,B0 作作 F1F2判定判定1的取假分支的取假分支 A2,X1 作作 T3T4判定判定2的取真分
22、支的取真分支 A2,X 1 作作 T3F4判定判定2的取真分支的取真分支 A2,X1 作作 F3T4判定判定2的取真分支的取真分支 A2,X 1 作作 F3F4判定判定2的取假分支的取假分支n对于两个判定各对于两个判定各 4 个条件取值组合,最多需要有个条件取值组合,最多需要有42=16 个测试用例,最少需个测试用例,最少需要要 4 个测试用例。个测试用例。测测 试试 用用 例例 条件取值条件取值 覆盖组合覆盖组合 路径路径【(2,0,4),(2,0,3)】T1T2T3T4 ,P1(c,e)【(2,1,1),(2,1,2)】T1F2T3F4 ,P3(b,e)【(1,0,3),(1,0,4)】F
23、1T2F3T4 ,P3(b,e)【(1,1,1),(1,1,1)】F1F2F3F4 ,P2(b,d)(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1TT TFFabdce18软件工程软件工程6.路径测试路径测试n路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,覆盖程序中所有可能的路覆盖程序中所有可能的路径径。测测 试试 用用 例例 通过路径通过路径 覆盖条件覆盖条件 执行条件执行条件【(2,0,4),(2,0,3)】P1(c,e)T1T2T3T4 T1T2T3【(1,1,1),(1,1,1)】P2(b,d)F1F2F3F4 F1F3F4【(1,1,2),(1,
24、1,3)】P3(b,e)F1F2F3T4 F1F3T4【(3,0,3),(3,0,1)】P4(c,d)T1T2F3F4 T1T2F3F4n路径覆盖是最强的覆盖,但由此例知,路径覆盖是最强的覆盖,但由此例知,F2未执行。未执行。(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1TT TFFabdce19软件工程软件工程9.3.2 判定结构分析判定结构分析n当程序中判定多于一个时,形成的分支结构可以分为两类:当程序中判定多于一个时,形成的分支结构可以分为两类:嵌嵌套型分支结构套型分支结构和和连锁型分支结构连锁型分支结构。n对于嵌套型分支结构,若有对于嵌套型分支结构,若有 n 个判定
25、语句,则存在个判定语句,则存在 n+1 条路径,条路径,需要需要 n+1 个测试用例;个测试用例;n对于连锁型分支结构,对于连锁型分支结构,若有若有 n 个判定语句,需要有个判定语句,需要有 2n 个测试用个测试用例,覆盖它的例,覆盖它的 2n 条路径。条路径。n当当 n 很大时,路径数成为天文数字,因此,就有覆盖率的问题。很大时,路径数成为天文数字,因此,就有覆盖率的问题。嵌套型分支结构嵌套型分支结构嵌套型分支结构嵌套型分支结构连锁型分支结构连锁型分支结构连锁型分支结构连锁型分支结构s1s2s3s4p1p2p3s1s2s3s4s5s6p1p2p320软件工程软件工程n为减少测试用例的数目,可
26、采用实验设计法,抽为减少测试用例的数目,可采用实验设计法,抽取部分路径进行测试。取部分路径进行测试。n由于抽样服从均匀分布,因此,在假定各条路径由于抽样服从均匀分布,因此,在假定各条路径的重要性相同,或暂不明确各条路径的重要性的的重要性相同,或暂不明确各条路径的重要性的情况下可以做到均匀抽样。情况下可以做到均匀抽样。n如果明确了各条路径的重要性,还可以采取加权如果明确了各条路径的重要性,还可以采取加权的办法,筛选掉部分路径,再进行抽样。的办法,筛选掉部分路径,再进行抽样。21软件工程软件工程单重循环单重循环嵌套循环嵌套循环连锁循环连锁循环非结构循环非结构循环9.3.3 循环结构分析循环结构分析
27、循环分为循环分为 4 种不同类型:种不同类型:简单循环简单循环、连锁循环连锁循环、嵌套循环嵌套循环和和非结构循环非结构循环。22软件工程软件工程n在数组在数组 A1.n 中从第中从第i 个位置起选择最小值,用个位置起选择最小值,用 k 记忆记忆最小值的位置。最小值的位置。k=i;for(j=i+1;j=n;j+)if(Aj Ak)k=j;单重循环情形单重循环情形零次循环:从循环入口到出口零次循环:从循环入口到出口一次循环:检查循环初始值一次循环:检查循环初始值二次循环:检查多次循环二次循环:检查多次循环m次循环:次循环:检查在多次循环检查在多次循环最大次数循环、比最大次数多一次、少一次的循环。
28、最大次数循环、比最大次数多一次、少一次的循环。k=i;j=i+1;j=n?AjAk?k=jj+fdcabe测测试试用用例例选选择择23软件工程软件工程2)嵌套循环情形嵌套循环情形对对最内层循环做简单循环的全部测试最内层循环做简单循环的全部测试。所有其他层的循环变。所有其他层的循环变量置为最小值;量置为最小值;逐步外推,对其逐步外推,对其外面一层循环进行测试外面一层循环进行测试。测试时保持所有外。测试时保持所有外层循环的循环变量取最小值,所有其他嵌套内层循环的循环层循环的循环变量取最小值,所有其他嵌套内层循环的循环变量取变量取“典型典型”值。值。反复进行,直到所有各层循环测试完毕。反复进行,直到
29、所有各层循环测试完毕。对全部各层循环同时取最小循环次数,或者同时取最大循环对全部各层循环同时取最小循环次数,或者同时取最大循环次数。次数。3)连锁循环连锁循环u如果各个循环如果各个循环互相独立互相独立,则可以用与简单循环相同的方法进,则可以用与简单循环相同的方法进行测试。行测试。u但如果几个循环不但如果几个循环不是互相独立是互相独立的,则需要使用测试嵌套循环的,则需要使用测试嵌套循环的办法来处理。的办法来处理。4)非结构循环非结构循环u这一类循环应该使用结构化程序设计方法重新设计测试用例。这一类循环应该使用结构化程序设计方法重新设计测试用例。24软件工程软件工程9.3.4 基本路径测试基本路径
30、测试n基本路径测试方法把覆盖的路径数压缩到一定限度内,基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中程序中的循环体最多只执行一次的循环体最多只执行一次。n设计出的测试用例要保证在测试中,程序的每一个可执行语句设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。至少要执行一次。1.程序的控制流图程序的控制流图顺序结构顺序结构IF两分支两分支选择结构选择结构while-do先判断先判断重复结构重复结构do-while后判断后判断重复结构重复结构switch多分支多分支选择结构选择结构25软件工程软件工程36578111091244,5R32,3168791011R1R2R
31、4复杂性度量方法:复杂性度量方法:(1)控制流图的区域数控制流图的区域数(2)V(G)=E N+2=11-9+2=4 其中,其中,V(G)是图是图G中环路数,中环路数,E是图中弧数,是图中弧数,N是图中结点数是图中结点数(3)V(G)=P+1=3+1 P 是图是图G中判定结点数中判定结点数26软件工程软件工程2.程序环路复杂性程序环路复杂性n程序环路复杂性给出了程序环路复杂性给出了程序基本路径集中的独立路径条数程序基本路径集中的独立路径条数,这,这是确保程序中每个可执行语句至少执行一次所必需的测试用例是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。数目的上界。n从控制流图来看
32、,一条独立路径是从控制流图来看,一条独立路径是至少包含有一条在其他独立至少包含有一条在其他独立路径中从未有过的边路径中从未有过的边的路径。的路径。n例如,在控制流图中,一组独立的路径是例如,在控制流图中,一组独立的路径是path1:1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-9-10-1-11path4:1-2-3-6-7-9-10-1-114,5R32,3168791011R1R2R4路径路径 path1,path2,path3,path4组成组成了控制流图的一个基本路径集。了控制流图的一个基本路径集。27软件工程软件工程确保基本路径集中的每一条路径
33、的执行确保基本路径集中的每一条路径的执行。3.导出测试用例导出测试用例举例:选择排序(举例:选择排序(C/C+描述)描述)123456789i=0;in-1k=i;j=i+1;jnVjVkk=j;j=j+1;returniki=i+1;ViVk基本路径集基本路径集 path1:1-3 path2:1-2-5-8 path3:1-2-5-9 path4:1-2-4-6 path5:1-2-4-7 测试用例测试用例Path1:1-3 取取 n=1Path2:1-2-5-8-3 取取 n=2 预期结果:路径预期结果:路径5-8-3不可到达不可到达Path3:1-2-5-9-3 取取 n=2 预期结果
34、:路径预期结果:路径5-9-3不可到达不可到达path4:1-2-4-6-5-8-3 取取 n=2,v0=2,v1=1 预期结果:预期结果:k=1,v0=1,v1=2path4:1-2-4-6-5-9-3 取取 n=2,v0=2,v1=1 预期结果:预期结果:k=1,路径路径 9-3 不可到达不可到达path5:1-2-4-7-5-8-3 取取 n=2,v0=2,v1=1预期结果:预期结果:k=0,路径路径 8-3 不可到达不可到达path5:1-2-4-7-5-9-3 取取 n=2,v0=2,v1=1 预期结果:预期结果:k=0,v0=1,v1=2n28软件工程软件工程9.4 黑盒测试用例设
35、计方法黑盒测试用例设计方法u等价类划分等价类划分u边界值分析边界值分析u判定表法判定表法u因果图法因果图法u规范导出法规范导出法u内部边界值法内部边界值法u错误推测法错误推测法u接口测试接口测试u使用各种测试方使用各种测试方法的综合策略法的综合策略29软件工程软件工程9.4.1 等价类划分等价类划分n等价类划分方法等价类划分方法把所有可能的输入数据把所有可能的输入数据,划分成若干部分划分成若干部分,然,然后后从每一部分中选取少数代表性的数据做为测试用例从每一部分中选取少数代表性的数据做为测试用例。n等价类划分方法步骤:等价类划分方法步骤:n1、划分等价类划分等价类(列出等价类表)(列出等价类表
36、)2、选取测试用例选取测试用例1.划分等价类划分等价类u等价类是指在某个输入域的子集合中,等价类是指在某个输入域的子集合中,各个输入数据对于揭各个输入数据对于揭露程序中的错误都是等效的。露程序中的错误都是等效的。测试某等价类的代表值就等价测试某等价类的代表值就等价于对这一类其他值的测试。等价类的划分有两种不同的情况:于对这一类其他值的测试。等价类的划分有两种不同的情况:有效等价类有效等价类:是对于程序规格说明来说,是合理的,有意义:是对于程序规格说明来说,是合理的,有意义的输入数据构成的集合。的输入数据构成的集合。无效等价类无效等价类:是指对于程序规格说明来说,是不合理的,无:是指对于程序规格
37、说明来说,是不合理的,无意义的输入数据构成的集合。意义的输入数据构成的集合。在设计测试用例时,要同时考虑在设计测试用例时,要同时考虑有效等价类和无效等有效等价类和无效等价类价类的设计。的设计。30软件工程软件工程n划分等价类的原则。划分等价类的原则。(1)如果输入条件规定了取值范围,或值的个数,则可确立一个如果输入条件规定了取值范围,或值的个数,则可确立一个有有效等价类效等价类和和两个无效等价类。两个无效等价类。如,在程序规格说明中对输入条件有一句话:如,在程序规格说明中对输入条件有一句话:“项数可以项数可以从从1到到999”则有效等价类是则有效等价类是“1项数项数999”两个无效等价类是两个
38、无效等价类是“项数项数1”或或“项数项数999”。在数轴上表示。在数轴上表示成成:无效等价类无效等价类有效等价类有效等价类无效等价类无效等价类1999(2)如果输入条件规定了输入值的集合,或者是规定了如果输入条件规定了输入值的集合,或者是规定了“必须必须如何如何”的条件,这时可确立一个有效等价类和一个无效等价类。的条件,这时可确立一个有效等价类和一个无效等价类。例如,在例如,在Pascal语言中对变量标识符规定为语言中对变量标识符规定为“以字母打头的以字母打头的串串”。那么所有以字母打头的构成有效等价类,而不在此集。那么所有以字母打头的构成有效等价类,而不在此集合内(不以字母打头)的归于无效等
39、价类。合内(不以字母打头)的归于无效等价类。31软件工程软件工程(3)如果输入条件是一个布尔量,则可以确定一个有效等价类和一如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。个无效等价类。(4)为每一个输入值确立一个有效等价类,和一个无效等价类。为每一个输入值确立一个有效等价类,和一个无效等价类。u例如,在教师上岗方案中规定对教授、副教授、讲师和助教例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。分别计算分数,做相应的处理。u因此可以确定因此可以确定 4 个有效等价类为教授、副教个有效等价类为教授、副教 授、讲师和助教,授、讲师和助教,一个无效
40、等价类,它是所有不符合以上身分的人员的输入值一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。的集合。(5)如果规定了输入数据必须遵守的规则,则可以确立一个有效等如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)价类(符合规则)和若干个无效等价类(从不同角度违反规则)。u例如,例如,Pascal语言规定语言规定“一个语句必须以分号一个语句必须以分号;结束结束”。这时可以确定一个有效等价类这时可以确定一个有效等价类“以以;结束结束”,若干个无,若干个无效等价类效等价类“以以:结束结束”、“以以,结束结束”、“以以 结束结束”、
41、“以以LF结束结束”。32软件工程软件工程2.确立测试用例确立测试用例a)在确立了等价类之后,建立等价类表,列出所有划分出的等在确立了等价类之后,建立等价类表,列出所有划分出的等价类。价类。b)再从划分出的等价类中按以下原则选择测试用例:再从划分出的等价类中按以下原则选择测试用例:c)为每一个等价类规定一个唯一编号;为每一个等价类规定一个唯一编号;d)设计一个新的测试用例,使其设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的尽可能多地覆盖尚未被覆盖的有效等价类有效等价类,重复这一步,直到所有的有效等价类都被覆盖,重复这一步,直到所有的有效等价类都被覆盖为止;为止;e)设计一个新的测试用例,
42、使其设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的仅覆盖一个尚未被覆盖的无效无效等价类等价类,重复这一步,直到所有的无效等价类都被覆盖为止。,重复这一步,直到所有的无效等价类都被覆盖为止。输入条件输入条件有效等价类有效等价类无效等价类无效等价类33软件工程软件工程3.用等价类划分法设计测试用例的实例用等价类划分法设计测试用例的实例n在某一在某一Pascal语言版本中规定:语言版本中规定:“标识符是由字母开头,后跟字母或数字的任意组合构成。编标识符是由字母开头,后跟字母或数字的任意组合构成。编译器能够区分的有效字符数为译器能够区分的有效字符数为8 个,最大字符数为个,最大字符数为 80 个。个
43、。”并且规定:并且规定:“标识符必须先说明,再使用。标识符必须先说明,再使用。”“在同一说明语在同一说明语句中,标识符至少必须有一个句中,标识符至少必须有一个。”用等价类划分方法,建立输入等价类表用等价类划分方法,建立输入等价类表:输入条件输入条件有效等价类有效等价类无效等价类无效等价类说明语句中标识符个数说明语句中标识符个数1个个(1),多个多个(2)0个个(3)标识符中字符数标识符中字符数18个个(4)0个个(5),8个个(6),80个个(7)标识符组成标识符组成字母字母(8),数字数字(9)非非字母数字字符字母数字字符(10),保留字保留字(11)标识符第一个字符标识符第一个字符字母字母
44、(12)非字母非字母(13)标识符使用标识符使用先说明后使用先说明后使用(14)未说明就使用未说明就使用(15)34软件工程软件工程 VAR x,T1234567:REAL;BEGIN x:=3.414;T1234567:=2.732;.(1),(2),(4),(8),(9),(12),(14)VAR :REAL;(3)VAR x,:,:REAL;(5)VAR T12345678:REAL;(6)VAR T12345.:REAL;(7)多于多于80个字符个字符输入条件输入条件有效等价类有效等价类无效等价类无效等价类说明语句中标识符个数说明语句中标识符个数1个个(1),多个多个(2)0个个(3)
45、标识符中字符数标识符中字符数18个个(4)0个个(5),8个个(6),80个个(7)标识符组成标识符组成字母字母(8),数字数字(9)非非字母数字字符字母数字字符(10),保留字保留字(11)标识符第一个字符标识符第一个字符字母字母(12)非字母非字母(13)标识符使用标识符使用先说明后使用先说明后使用(14)未说明就使用未说明就使用(15)VAR T$:CHAR;(10)VAR GOTO:INTEGER;(11)VAR 2T:REAL;(13)VAR PAR:REAL;(15)BEGIN .PAP:=SIN(3.14*0.8)/6;下面选取了下面选取了 9 个测试用例,它们覆盖了所有的等价类
46、。个测试用例,它们覆盖了所有的等价类。35软件工程软件工程例题:对用户输入的分数进行评级,其中例题:对用户输入的分数进行评级,其中90到到100为为A,80-89为为B,70-79为为C,60-69为为D,60以下为以下为E。输入分数。输入分数要求必须是正整数或要求必须是正整数或0。根据分析得出以下等价类划分列。根据分析得出以下等价类划分列。输入条件输入条件有效等价类有效等价类无效等价类无效等价类分数分数0-5960-6970-7980-8990-100空空负数负数大于大于100的数的数小数小数含字母的字符串含字母的字符串36软件工程软件工程9.4.2 边界值分析边界值分析n边界值分析也是黑盒
47、测试方法,是对等价类划分方法的补充。边界值分析也是黑盒测试方法,是对等价类划分方法的补充。n经验得知,经验得知,大量的错误是发生在输入或输出范围的边界上,而大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部不是在输入范围的内部。因此针对各种边界情况设计测试用例,因此针对各种边界情况设计测试用例,可以查出更多的错误可以查出更多的错误。n例如,有一段小程序,输入三个整数例如,有一段小程序,输入三个整数a、b和和c,判断它们能否构,判断它们能否构成三角形。只有在成三角形。只有在 a0、b0、c0、a+bc、a+cb、b+ca 时才能构成三角形。但如果把时才能构成三角形。但如果把六个不等
48、式中的任一个大于六个不等式中的任一个大于号号“”错写成大于等于号错写成大于等于号“”,那就不能构成三角形。,那就不能构成三角形。n问题恰出现在容易被疏忽的边界附近。边界是指,输入等价类问题恰出现在容易被疏忽的边界附近。边界是指,输入等价类时,时,稍高于其边界值及稍低于其边界值的一些特定情况。稍高于其边界值及稍低于其边界值的一些特定情况。n使用边界值分析方法设计测试用例,首先应确定边界情况。通使用边界值分析方法设计测试用例,首先应确定边界情况。通常应当针对输入等价类的边界,选取常应当针对输入等价类的边界,选取正好等于正好等于,刚刚大于刚刚大于,或,或刚刚小于边界刚刚小于边界的值做为测试数据,而不
49、是选取等价类中的典型的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。值或任意值做为测试数据。37软件工程软件工程n如何确定边界?通常的边界检查原则:如何确定边界?通常的边界检查原则:a)数字:最大最小刚大于最大刚小于最小、数字:最大最小刚大于最大刚小于最小、b)字符串:字符串:位置(首位末位首位前末位后)位置(首位末位首位前末位后)长度(零长度(零 很大很大 超出缓冲区)超出缓冲区)取值范围(刚到达边界取值范围(刚到达边界 刚超出边界)刚超出边界)c)其他如质量、大小、速度、方位、尺寸、空间其他如质量、大小、速度、方位、尺寸、空间等都可按照等都可按照最轻最轻 最重,最大最小最
50、重,最大最小,最快最快最慢、最高最低、最短最长、空满最慢、最高最低、最短最长、空满等确等确定边界。定边界。38软件工程软件工程n使用边界值分析,最重要的是确定正确的边界值域。对于输入使用边界值分析,最重要的是确定正确的边界值域。对于输入输出等价类,选取输出等价类,选取正好等于正好等于、刚刚大于刚刚大于和和刚刚小于刚刚小于边界值的边界值的数据作为测试数据。数据作为测试数据。n例如,判断三角形问题,问题的提法是:程序接受例如,判断三角形问题,问题的提法是:程序接受 3 个整数个整数 a、b 和和 c 作为输入,用做三角形的边。整数作为输入,用做三角形的边。整数 a、b 和和 c 必须满足以必须满足