您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件测试方法与实践讲义-第四章
2020年2月23日软件测试讲义1第四章软件测试覆盖分析2020年2月23日第四章软件测试覆盖分析2主要内容4.1代码覆盖分析4.2控制流覆盖4.2.1语句覆盖4.2.2判定覆盖4.2.3条件覆盖4.2.4条件判定组合覆盖4.2.5条件组合(多条件)覆盖4.2.6路径覆盖4.3数据流覆盖4.4其他覆盖标准2020年2月23日第四章软件测试覆盖分析3软件测试覆盖分析概述测试覆盖分析可以在测试计划阶段与测试执行阶段进行。在测试计划阶段,须确定用何种测试覆盖分析及相应的覆盖率。覆盖率通常表示为百分比,但是百分比的意义取决于使用的测试覆盖分析方法。测试覆盖分析的测试过程:1.生成一组测试用例;2.用测试用例执行测试;3.收集测试结果;4.进行测试覆盖分析;5.如果测试结果达到既定的覆盖率,停止测试,否则重复上面第1-4步。2020年2月23日第四章软件测试覆盖分析44.1代码覆盖分析1.代码覆盖的概念代码覆盖是测试软件的一种度量标准,它描述程序源代码被测试了的程度。代码覆盖是一种直接观测代码而进行的测试,所以归于白盒测试。代码覆盖的测试两个主要步骤是识别满足覆盖标准的一组实体,然后选择一组覆盖该组实体的有限路径。其中主要有下面两种方法:控制流覆盖:是选择一组实体以满足覆盖标准,主要包括语句覆盖、判定覆盖、条件覆盖、多条件覆盖、条件判定组合覆盖、修正条件/判定覆盖及路径覆盖;数据流覆盖:是选择一组满足变量定义与引用间某种关联关系实体,然后选择一组覆盖该组实体的有限路径。2020年2月23日第四章软件测试覆盖分析54.1代码覆盖分析2.代码覆盖的测试过程(1)由被测程序的源代码,构造程序图(数据流图或使用关联图);(2)根据程序图,生成测试用例;(3)编译被测源程序,生成可执行的代码;(4)生成的可执行代码,用测试用例输入条件驱动,以执行程序测试;(5)计算测试结果的实际覆盖率,如果达不到覆盖率,则返回第(2)步,否则结束测试;(6)对于测试结果,除了进行代码覆盖分析外,还可以进行其他方面的分析,如测试通过率,失败率,可靠性等。2020年2月23日第四章软件测试覆盖分析64.1代码覆盖分析2.代码覆盖的测试过程生成测试用例构造程序图Procedurepurge(varL:list)Varp,q:…//anytypeBeginq:=first(L)WhileqENDLdoIfAq=ApthenDelete(Aq,L)Elseq:=next(q,L);P:=next(p,L)EndEnd编译程序分析执行结果可执行代码达到覆盖率?123465停否是2020年2月23日第四章软件测试覆盖分析74.2控制流覆盖入口s(A1)and(B=0)a(A=2)or(x1)c返回ebx=x/AFTdx=x+1FT2020年2月23日第四章软件测试覆盖分析84.2控制流覆盖1.语句覆盖语句覆盖报告每个可执行语句是否被执行,即每行源代码是否被执行了并且被测试了。语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个可执行语句都至少执行一次。欲使每个语句都执行一次,只需执行路径L1(sabcde)即可。测试用例如下:测试数据预期结果x=4,A=2,B=0x=3seacbdTFFTa:(A1)and(B=0)c:(A=2)or(x1)2020年2月23日第四章软件测试覆盖分析94.2控制流覆盖1.语句覆盖【优点】:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。【缺点】:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。2020年2月23日第四章软件测试覆盖分析104.2控制流覆盖2.判定覆盖判定覆盖(也称分支覆盖)是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次(即判定的每个分支至少经过一次)判定覆盖将每个判定的所有可能结果都至少执行一次,所以,程序中的所有语句也必定都至少执行一次。因此,满足判定覆盖标准的测试用例也一定满足语句覆盖标准。2020年2月23日第四章软件测试覆盖分析114.2控制流覆盖2.判定覆盖欲使每个分支都执行一次,只需执行路径L3(sacde)和L4(sabce)即可。或者,执行路径L1(sabcde)和L2(sace).seacbdTFFTa:(A1)and(B=0)c:(A=2)or(x1)测试数据预期结果路径acx=1,A=2,B=1x=2sacdeFTx=3,A=3,B=0x=1sabceTF2020年2月23日第四章软件测试覆盖分析124.2控制流覆盖2.判定覆盖【优点】:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。【缺点】:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。2020年2月23日第四章软件测试覆盖分析134.2控制流覆盖3.条件覆盖条件覆盖报告每个布尔型子表达式的结果是真还是假,是否都被执行和测试过了。条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中的每个条件的所有可能结果都至少出现一次。2020年2月23日第四章软件测试覆盖分析144.2控制流覆盖3.条件覆盖判定a中各种条件的所有可能结果:A1,A≤1,B=0,B≠0。判定c中各种条件的所有可能结果:A=2,A≠2,x1,x≤1。seacbdTFFTa:(A1)and(B=0)c:(A=2)or(x1)测试数据预期结果路径覆盖的条件x=1,A=2,B=0x=1.5sabcdeA1,B=0,A=2,x≤1x=2,A=1,B=1x=3sacdeA≤1,B≠0,A≠2,x12020年2月23日第四章软件测试覆盖分析154.2控制流覆盖3.条件覆盖条件覆盖通常比判定覆盖强,但有时虽然每个条件的所有可能结果都出现过,但判定表达式的某些可能结果并未出现。上面的二个测试用例满足了条件覆盖标准,但判定c为“假”的结果并未出现。2020年2月23日第四章软件测试覆盖分析164.2控制流覆盖3.条件覆盖【优点】:增加了对条件判定情况的测试,增加了测试路径。【缺点】:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。2020年2月23日第四章软件测试覆盖分析174.2控制流覆盖4.判定/条件覆盖判定/条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定的所有可能结果都至少执行一次,并且,每个判定中的每个条件的所有可能结果都至少出现一次。显然,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、语句覆盖标准。2020年2月23日第四章软件测试覆盖分析184.2控制流覆盖4.判定/条件覆盖a:(A1)and(B=0)c:(A=2)or(x1)测试数据预期结果路径ac覆盖的条件x=4,A=2,B=0x=3sabcdeTTA1,B=0,A=2,x=4x=1,A=1,B=1x=1saceFFA≤1,B≠0,A≠2,x≤1seacbdTFFT2020年2月23日第四章软件测试覆盖分析194.2控制流覆盖4.判定/条件覆盖【优点】:能同时满足判定、条件两种覆盖标准。【缺点】:判定/条件覆盖准则的缺点是未考虑条件的组合情况。2020年2月23日第四章软件测试覆盖分析204.2控制流覆盖5.条件组合覆盖条件组合覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每个判定中条件结果的所有可能组合都至少出现一次显然,满足条件组合覆盖标准的测试用例一定也满足判定覆盖、条件覆盖、判定/条件覆盖、语句覆盖标准。2020年2月23日第四章软件测试覆盖分析214.2控制流覆盖5.条件组合覆盖seacbdTFFTa:(A1)and(B=0)c:(A=2)or(x1)判定a中条件结果的所有可能组合:①A1,B=0;②A1,B≠0;③A≤1,B=0;④A≤1,B≠0判定c中条件结果的所有可能组合:⑤A=2,x1;⑥A=2,x≤1;⑦A≠2,x1;⑧A≠2,x≤12020年2月23日第四章软件测试覆盖分析224.2控制流覆盖5.条件组合覆盖测试数据预期结果路径ac覆盖的条件x=4,A=2,B=0x=3sabcdeTT①A1,B=0⑤A=2,x=4x=1,A=2,B=1x=2sacdeFT②A1,B≠0⑥A=2,x≤1x=2,A=1,B=0x=3sacdeFT③A≤1,B=0⑦A≠2,x1x=1,A=1,B=1x=1saceFF④A≤1,B≠0⑧A≠2,x≤1a:(A1)and(B=0)c:(A=2)or(x1)seacbdTFFT2020年2月23日第四章软件测试覆盖分析234.2控制流覆盖5.条件组合覆盖条件组合覆盖是上述五种覆盖标准中最强的一种,然而,条件组合覆盖仍不能保证程序中所有可能的路径都被覆盖。本例中,满足条件组合覆盖标准的测试用例就没有经过sabce路径。2020年2月23日第四章软件测试覆盖分析244.2控制流覆盖5.条件组合覆盖【优点】:条件组合覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。【缺点】:线性地增加了测试用例的数量。2020年2月23日第四章软件测试覆盖分析254.2控制流覆盖6.路径覆盖路径覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每条可能执行到的路径都至少经过一次(如果程序中包含环路,则要求每条环路至少经过一次)。2020年2月23日第四章软件测试覆盖分析264.2控制流覆盖6.路径覆盖本例中所有可能执行的路径有:L1(sabcde,a为“T”且c为“T”)L2(sace,a为“F”且c为“F”)L3(sacde,a为“F”且c为“T”)L4(sabce,a为“T”且c为“F”)a:(A1)and(B=0)c:(A=2)or(x1)测试数据预期结果路径acx=4,A=2,B=0x=3sabcdeTTx=3,A=3,B=0x=1sabceTFx=2,A=1,B=0x=3sacdeFTx=1,A=1,B=1x=1saceFFseacbdTFFT2020年2月23日第四章软件测试覆盖分析274.2控制流覆盖6.路径覆盖路径覆盖实际上考虑了程序中各种判定结果的所有可能组合,但它未必能覆盖判定中条件结果的各种可能情况。因此,它是一种比较强的覆盖标准,但不能替代条件覆盖和条件组合覆盖标准。2020年2月23日第四章软件测试覆盖分析284.2控制流覆盖6.路径覆盖【优点】:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。【缺点】:需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。2020年2月23日第四章软件测试覆盖分析294.2控制流覆盖7.六种控制流覆盖的比较2020年2月23日第四章软件测试覆盖分析304.2控制流覆盖7.六种控制流覆盖的比较语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖,但它可能会使一些条件得不到测试。条件覆盖对每一条件进行单独检查,一般情况它的检错能力较判定覆盖强,但有时达不到判定覆盖的要求。判定/条件覆盖包含了判定覆盖和条件覆盖的要求,但由于计算机系统软件实现方式的限制,实际上不一定达到条件覆盖的标准。条件组合覆盖发现错误能力较强,凡满足其标准的测试用例,也必然满足前4种覆盖标准。前5种覆盖标准把注意力集中在单个判定或判定的各个条件上,可能会使程序某些路径没有执行到。路径测试根据各判定表达式取值的组合,使程序沿着不同的路径执行,查错能力强。2020年2月23日第四章软件测试覆盖分析314.3数据流覆盖控制流覆盖出现的问题:当语句或分支覆盖被用作测试数据的主要依据时,经过所选的路径并不能保证所有错误都被查出。而且,当路径覆
本文标题:软件测试方法与实践讲义-第四章
链接地址:https://www.777doc.com/doc-3906378 .html