软件工程白盒测试.docx
- 文档编号:6513330
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:8
- 大小:29.18KB
软件工程白盒测试.docx
《软件工程白盒测试.docx》由会员分享,可在线阅读,更多相关《软件工程白盒测试.docx(8页珍藏版)》请在冰豆网上搜索。
软件工程白盒测试
白盒测试
白盒测试以程序的结构为依据,所有又称为结构测试。
早期的白盒测试把注意力放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度。
随着测试技术的发展,人们越来越重视对程序执行路径的考察,并且用程序图代替流程图来设计测试用例。
为了区分这两种白盒测试技术,以下把前者称为逻辑覆盖测试,后者称为路径测试。
一、逻辑覆盖测试
逻辑覆盖测试法(LogicCoverageTesting)考察的重点是图中的判定框(菱形框)。
因为这些判定若不是与选择结构有关,就是与循环结构有关,是决定程序结构的关键成分。
按照对被测程序所作测试的有效程度,逻辑覆盖测试可由弱到强区分为5种覆盖标准:
发现错误的能力
弱
强
语句覆盖
每条语句至少执行一次
判定覆盖
每一判定的每个分支至少执行一次
条件覆盖
每一判定中的每个条件,分别按“真”、“假”至少各执行一次
判定/条件覆盖
同时满足判定覆盖和条件覆盖的要求
条件组合覆盖
求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一次
举例说明:
有一个程序段如下:
a
bFTc
dFTe
(a)语句覆盖:
设计若干个测试用例,运行被测程序,使得每一个可执行语句至少执行一次。
例如在上图所给出的例子中,正好所有的可执行语句都在路径L1(a->c->e)上,所以选择路径L1设计测试用例,就可以覆盖所有的可执行语句。
L1(a->c->e)
={(A>1)and(B=0)}and{(A=2)or(x/A>1)}
=(A=2)and(B=0)or{(A>1)and(B=0)and(x/A>1)}
测试用例可以设计为:
【(2,0,4),(2,0,3)】覆盖ace【L1】
从程序中每个可执行语句都得到执行这一点来看,语句覆盖的法似乎能够比较全面的检验每一个可执行语句。
但与后面介绍的其它覆盖相比,语句覆盖是最弱的逻辑覆盖准则。
(b)判定覆盖
所谓判定覆盖就是设计若干个测试用例,运行被测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次。
判定覆盖又称为分支覆盖。
如上例如果选择路径L1(a->c->e)和L2(a->b->d),可得满足要求得测试用例:
L2(a->b->d)
={(A<=1)or(B≠0)}and{(A≠2)and(x<=1)}
=(A<=1)and(x<=1)or{(B≠0)and(A≠2)and(x<=1)}
测试用例可以设计为:
【(2,0,4),(2,0,3)】覆盖ace【L1】
【(1,1,1),(1,1,1)】覆盖abd【L2】
如果选取路径L3(a->b->e)和L4(a->c->d)
L3(a->b->e)
={(A<=1)or(B≠0)}and{(A=2)or(x>1)}
={(A<=1)and(x>1)}or{(B≠0)and(A=2)}or{(B≠0)and(x>1)}
L4(a->c->d)
={(A>1)and(B=0)}and{(A≠2)and(x/A<=1)}
还可以得到另一组可用得测试用例:
【(2,1,1),(2,1,2)】覆盖abe【L3】
【(3,0,3),(3,1,1)】覆盖acd【L4】
所有测试用例得取法不唯一。
注意有例外情况,例如,如果把上例中第二个判定中的条件x>1错写成x<1,那么利用上面两组测试用例,仍能得到同样的结果。
这表明,只是判定覆盖,还不能保证一定能查出在判断得条件中存在得错误。
因此还需要更强的逻辑覆盖准则检验判断部条件。
(c)条件覆盖
所谓条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
上例中,我们事先可对所有条件得取值加以标记。
例如:
对于第一个判断:
条件A>1取真值为T1,取假值为T1
条件B=1取真值为T2,取假值为T2
对于第二个判断:
条件A=2取真值为T3,取假值为T3
条件x>1取真值为T4,取假值为T4
则可选取测试用例如下:
测试用例通过路径条件取值覆盖分支
【(2,0,4),(2,0,3)】ace(L1)T1T2T3T4c,e
【(1,0,1),(1,0,1)】abd(L2)T1T2T3T4b,d
【(2,1,1),(2,1,2)】abe(L3)T1T2T3T4b,e
或
测试用例通过路径条件取值覆盖分支
【(1,0,3),(1,0,4)】abe(L3)T1T2T3T4c,e
【(2,1,1),(2,1,2)】abe(L3)T1T2T3T4b,d
注意,前一组测试用例不但覆盖了所有判断得取真分支和取假分支,而且覆盖了判断中所有条件得可能取值。
但是后一组测试用例虽满足了条件覆盖,但只覆盖了第一个判断得取假分支和第二个判断得取真分支,不满足判定覆盖得要求。
为了解决这一矛盾,需要对条件和分支兼顾,有必要考虑以下得判定-条件覆盖。
(d)判定-条件覆盖
所谓判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件得所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。
上例中可以设计如下测试用例:
测试用例通过路径条件取值覆盖分支
【(2,0,4),(2,0,3)】ace(L1)T1T2T3T4c,e
【(1,1,1),(1,1,1)】abd(L2)T1T2T3T4b,d
判定-条件覆盖也有缺陷。
从表面上来看,它测试了所有条件得取值,但是事实并非如此。
因为往往某些条件掩盖了另一些条件。
对于条件表达式
(A>1)and(B=0)来说,若(A>1)的测试结果为真,则还有测试(B=0),才能决定表达式得值;而若(A>1)的测试结果为假,可以立刻确定表达式得结果为假。
这时往往就不再测试(B=0)的取值了。
因此,条件(B=0)就没有检查。
同样,对于条件表达式(A=2)or(X>1)来说,若(A=2)得测试结果为真,就可以立即确定表达式的结果为真。
这时,条件(X>1)就没有检查。
因此,采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来。
(e)条件组合覆盖
所谓条件组合覆盖就是设计足够得测试用例,运行被测程序,使得每个判断得所有可能得条件取值组合至少执行一次。
上例中,先对各个判断得条件取值组合加以标记。
如下:
记
1A>1,B=0作T1T2,属第一个判断得取真分支;
2A>1,B≠0作T1T2,属第一个判断得取假分支;
3A≯1,B=0作T1T2,属第一个判断得取假分支;
4A≯1,B≠0作T1T2,属第一个判断得取假分支;
5A=2,x>1作T3T4,属第二个判断得取真分支;
6A=2,x≯1作T3T4,属第二个判断得取真分支;
7A≠2,x>1作T3T4,属第二个判断得取真分支;
8A≠2,x≯1作T3T4,属第二个判断得取假分支;
对于每个判断,要求所有可能得条件取值得组合都必须取到。
测试用例如下:
测试用例通过路径条件取值覆盖分支
【(2,0,4),(2,0,3)】ace(L1)T1T2T3T4①,⑤
【(2,1,1),(2,1,2)】abe(L3)T1T2T3T4②,⑥
【(1,0,3),(1,0,4)】abe(L3)T1T2T3T4③,⑦
【(1,1,1),(1,1,1)】abd(L2)T1T2T3T4④,⑧
这组测试用例覆盖了所有条件得可能取值的组合,覆盖了所有判断得可取分支,但路径漏掉了L4。
测试还不完全。
六种白盒子测试法:
语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组...
白盒测试的概述
由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。
由于我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的情况下被执行。
由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。
白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。
白盒测试是一种测试用例设计法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子部的东西以及里面是如运作的。
白盒的测试用例需要做到:
·保证一个模块中的所有独立路径至少被使用一次
·对所有逻辑值均需测试true和false
·在上下边界及可操作围运行所有循环
·检查部数据结构以确保其有效性
白盒测试的目的:
通过检查软件部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
白盒测试的特点:
依据软件设计说明书进行测试、对程序部细节的密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。
白盒测试的实施步骤:
1.测试计划阶段:
根据需求说明书,制定测试进度。
2.测试设计阶段:
依据程序设计说明书,按照一定规化的法进行软件结构划分和设计测试用例。
3.测试执行阶段:
输入测试用例,得到测试结果。
4.测试总结阶段:
对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。
白盒测试的法:
总体上分为静态法和动态法两大类。
静态分析是一种不通过执行程序而进行测试的技术。
静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。
动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。
它显示了一个系统在检查状态下是正确还是不正确。
在动态分析技术中,最重要的技术是路径和分支测试。
下面要介绍的六种覆盖测试法属于动态分析法。
黑盒测试(black—boxtesting)又称功能测试、数据驱动测试或基于规的测试。
用这种法进行测试时,被测程序被当作看不见部的黑盒。
在完全不考虑程序部结构和部特性的情况下,测试者仅依据程序功能的需求规考虑确定测试用例和推断测试结果的正确性。
因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任情况下都做的对。
完整的“任情况”是无法验证的,为此黑盒测试也有一套产生测试用例的法,以产生有限的测试用例而覆盖足够多的“任情况”。
由于黑盒测试不需要了解程序部结构,所以多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。
黑盒测试首先是程序通常的功能性测试。
要求:
每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。
不仅要考核“程序是否做了该做的?
”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。
这些情况包括数据类型和数据值的异常等等。
下述几种法:
(a)等价类划分,(b)因果图法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。
每一个法都力图能涵盖更多的“任情况”,但又各有长处,综合使用这些法,会得到一个较好的测试用例集。
1.等价类划分 等价类划分是一种典型的黑盒测试法。
等价类是指某个输入域的集合。
它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。
因此我们只要在一个集合中选取一个测试数据即可。
等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。
这样就可使用少数测试用例检验程序在一大类情况下的反映。
在考虑等价类时,应该注意区别以下两种不同的情况:
有效等价类:
有效等价类指的是对程序的规是有意义的、合理的输入数据所构成的集合。
在具体问题中,有效等价类可以是一个,也可以是多个。
无效等价类:
无效等价类指对程序的规是不合理的或无意义的输入数据所构成的集合。
对于具体的问题,无效等价类至少应有一个,也可能有多个。
确定等价类有以下几条原则:
如果输入条件规定了取值围或值的个数,则可确定一个有效等价类和两个无效等价类。
例如,程序的规中提到的输入条包括“……项数可以从1到999……”,则可取有效等价类为“l考项数<999”,无效等价类为“项数<l,,及“项数>999”。
输入条件规定了输入值的集合,或是规定了“必须如”的条件,则可确定一个有效等价类和一个无效等价类。
如某程序涉及标识符,其输入条件规定“标识符应以字母开头……”则“以字母开头者”作为有效等价类,“以非字母开头”作为无效等价类。
如果我们确知,已划分的等价类中各元素在程序中的处理式是不同的,则应将此等价类进一步划分成更小等价类。
输入条件有效等价类无效等价类
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
根据已列出的等价类表,按以下步骤确定测试用例:
为每个等价类规定一个唯一的编号;
设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。
重复这一步,最后使得所有有效等价类均被测试用例所覆盖;
设计一个新的测试用例,使其只覆盖一个无效等价类。
重复这一步,使所有无效等价类均被覆盖。
这里强调每次只覆盖一个无效等价类。
这是因为一个测试用例中如果含有多个缺陷,有可能在测试中只发现其中的一个,另一些被忽视。
等价类划分法能够全面、系统地考虑黑盒测试的测试用例设计问题,但是没有注意选用一些“高效的”、“有针对性的”测试用例。
后面介绍的边值分析法可以弥补这一缺点。
2.因果图
等价类划分法并没有考虑到输入情况的各种组合。
这样虽然各个输入条件单独可能出错的情况已经看到了,但多个输入情况组合起来可能出错的情况却被忽略。
采用因果图法能帮助我们按一定步骤选择一组高效的测试用例,同时,还能为我们指出程序规的描述中存在什么问题。
利用因果图导出测试用例需要经过以下几个步骤:
分析程序规的描述中哪些是原因,哪些是结果。
原因常常是输入条件或是输入条件的等价类。
结果是输出条件。
分析程序规的描述中语义的容,并将其表示成连接各个原因与各个结果的“因果图”。
由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。
为表明这些特定的情况,在因果图上使用持殊的符号标明约束条件。
把因果图转换成判定表。
把判定表的每一列写成一个测试用例。
3.边值分析法
边值分析法是列出单元功能、输入、状态及控制的合法边界值和非法边界值,设计测试用例,包含全部边界值的法。
典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入,末受控状态等。
边值分析法不是一类找一个例子的法,而是以边界情况的处理作为主要目标专门设计测试用例的法。
另外,边值分析不仅考查输入的边值,也要考虑输出的边值。
这是从人们的经验得出的一种有效法。
人们发现多软件错误只是在下标、数据结构和标量值的边界值及其上、下出现,运行这个区域的测试用例发现错误的概率很高。
用边值分析法设计测试用例时,有以下几条原则:
如果输入条件规定了取值围,或是规定了值的个数,则应以该围的边界及刚刚超出围的边界外的值,或是分别对最大、最小及稍小于最小、稍大于最大个数作为测试用例。
如有规“某文件可包含l至255”个记录……“,则测试用例可选1和255及0和256等。
针对规的每个输出条件使用原则〔a〕。
如果程序规中提到的输入或输出域是个有序的集合(如顺序文件、表格等)就应注意选取有序集的第一个和最后一个元素作为测试用例。
分析规,尽可能找出可能的边界条件。
一个典型的边值分析例子是三角形分类程序。
选取a,b,c构成三角形三边,“任意两边之和大于第三边”为边界条件。
边值分析相等价类划分侧重不同,对等价类划分是一个补充。
如上述三角形问题,选取a=3,b=4,c=5,a=2,b=4,c=7则覆盖有效和无效等价类。
如果能在等价类划分中注入边值分析的思想。
在每个等价类中不只选取一个覆盖用例,而是进而选取该等价类的边界值等价类划分法将更有效,最后可以用边值分析法再补充一些测试用例。
4.猜错法
猜错法在很大程度上是凭经验进行的,是凭人们对过去所作的测试工作结果的分析,对所揭示的缺陷的规律性作直觉的推测来发现缺陷的。
一个采用两分法的检索程序,典型地可以列出下面几种测试情况:
被检索的表只有一项或为空表;
表的项数恰好是2的幂次;
表的项数比2的幂次多1等。
猜错法充分发挥人的经验,在一个测试小组中集思广益,便实用,特别在软件测试基础较差的情况下,很好地组织测试小组(也可以有外来人员)进行错误猜测,是有效的测试法。
5.随机数法 即测试用例的参数是随机数。
它可以自动生成,因此自动化程度高。
使用大量随机测试用例测试通过的程序会提高用户对程序的信心。
但其关键在于随机数的规律是否符合使用实际。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 测试