10年腾讯测试经验告诉你白盒测试是什么及其测试方法
它基于程序的控制结构;是基于-一个应用代码的内部逻辑知识;基于覆盖全部代码、分支、路径、条件,导出测试用例。
白盒测试产生的测试用例检查点:
保证一个 模块中的所有独立路径至少被使用一-次;
对所有逻辑值均需测试true 和false ;
在上下边界及可操作范围内运行所有循环;
检查内部数据结构以确保其有效性
白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,已知产品的内部工作过程,通过测试证明每种内部操作是否符合设计规格要求。
它基于程序的控制结构;是基于-一个应用代码的内部逻辑知识;基于覆盖全部代码、分支、路径、条件,导出测试用例。
白盒测试产生的测试用例检查点:
保证一个 模块中的所有独立路径至少被使用一-次;
对所有逻辑值均需测试true 和false ;
在上下边界及可操作范围内运行所有循环;
检查内部数据结构以确保其有效性。
逻辑细节测试的原因:
逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。当我们设计和实现主流之外的功能、条件或控制时,错误往往开始出现在我们工作中。日常处理往往被很好地了解,而“特殊情况“的处理则难于发现。
我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的基础上被执行。程序的逻辑流有时是违反直觉的,这意味着我们关于控制流和数据流的一-些无意识的假设可能导致设计错误,只有路径测试才能发现这些错误。
笔误是随机的。当一个程序被翻译为程序设计语言源代码时,有可能产生某些笔误,很多将被语法检查机制发现,但是,其他的会在测试开始时才会被发现。笔误出现在主流上和不明显的逻辑路径上的几率是一样的。
1逻辑覆盖
语句覆盖、判断覆盖、条件覆盖
2语句覆盖
语句覆盖就是设计若干个测试用例,运行被测程序,使得每一-条可执行语句至少执行次。
3判断覆盖
判定覆盖就是设计若千个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。
判定路径覆盖( Decision-to-Decision Paths Coverage,DDP Coverage )是判定覆盖的一个变体。这里的判定指的是一个序列语句,其起始位置是函数入口或一个判定(如If,while,switch等)的开始,结束位置是下一个判定的开始。
通过计算哪些判定路径已经走过,哪些没有走过,我们就可以得到DDP覆盖率了。其公式如下:
DDP覆盖= (至少被执行到一次的判定路径数量) / (系统中判定路径总数)
4条件覆盖
条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
判定一条件覆盖
判定一条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断中的每个条件的可能取值至少执行一次。
条件组合覆盖
条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。
更改条件判定覆盖( Modified Conditions/Decisions Coverage,MC/DC Coverage )
是判定条件覆盖的一个变体。更改条件判定覆盖主要为多条件测试提供了方便,通过分析条件判定的覆盖来增加测试用例,防止测试的指数上升趋势。
MC/DC标准满足下列需求:
被测试程序模块的每个入口点和出口点都必须至少被走一次。并且每一个程序判定的结果至少被覆盖一次。
通过分解逻辑操作,程序的判定被分解为基本的布尔条件表达式,每个条件独立的佣于判定的结果,覆盖所有条件的可能结果。
◆分支条件组合覆盖 ( Branch Condition Combination Coverage )是一种比判定条件覆盖更强的覆盖。它的含义是,设计一定的测试用例,使得每个分支的各操作数值的组合都遍历一次。其计算公式如下:
分支条件组合覆盖= (被评价到的分支条件组合数) 1 (分支条件组合总数)
5函数覆盖
有很多测试工具,例如TrueCoverage ,Logiscope 等,都提供了函数覆盖的概念,函数覆盖是针对系统或-一个子系统的测试的,它表示在该测试中,有哪些函数被测试到了,其被测试到的频率有多大,这些函数在系统所有函数中占的比例有多大。函数覆盖是--个比较容易自动化的技术,同时也易于理解。其公式如下:
函数覆盖= (至少被执行一 -次的函数数量) / ( 系统中函数的总数)
由于函数覆盖也是基于代码的,因此你可以把其归入到白盒的范畴内。
6基本路径测试
在程序控制流程图的基础上,导出可以执行的路径集合,设计测试用例。
Z路径覆盖是路径覆盖的一个变体。路径覆盖是白盒测试最为典型的问题。着眼于路径分析的测试可称为路径测试。完成路径测试的理想情况是做到路径覆盖。对于比较简的小程序实现路径覆盖是可能做到的。但是如果程序中出现多个判断和多个循环,可能的路径数目将会急剧增长,达到天文数字,以至实现路径覆盖不可能做到。
为了解决这一问题,我们必须舍掉- -些次要因素,对循环机制进行简化,从而极大地咸少路径的数量,使得覆盖这些有限的路径成为可能。我们称简化循环意义下的路径覆盖为Z路径覆盖。
这里所说的对循环化简是指,限制循环的次数。无论循环的形式和实际执行循环体的次数多少,我们只考虑循环- -次和零次两种情况。也即只考虑执行时进入循环体一次 和跳过循环体这两种情况。
对于程序中的所有路径可以用路径树来表示。当得到某一程序的路径树后,从其根结点开始,一次遍历,再回到根结点时,把所经历的叶结点名排列起来,就得到一个路径。如果我们设法遍历了所有的叶结点,那就得到了所有的路径。
当得到所有的路径后,生成每个路径的测试用例,就可以做到Z路径覆盖测试。
条件测试路径选择
当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构。
对于嵌套型分支结构,若有n个判定语句,需要n 1个测试用例;
对于连锁型分支结构,若有 n个判定语句,需要有2n个测试用例,覆盖它的2n条路径。
当n较大时将无法测试。
循环测试路径选择
循环分为4种不同类型:简单循环、连锁循环、嵌套循环和非结构循环。
简单循环
零次循环:从循环入口到出口
次循环:检查循环初始值
二次循环:检查多次循环
m次循环:检查在多次循环
最大次数循环、比最大次数多- -次、 少- -次的循环。
嵌套循环
对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;
逐步外推,对其外面-层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取”典型”值。
反复进行,直到所有各层循环测试完毕。
对全部各层循环同时取最小循环次数,或者同时取最大循环次数。
人连锁循环
如果各个循环互相独立,则可以用与简单循环相同的方法进行测试。但如果几个循环不题相独立的,则需要使用测试嵌套循环的办法来处理。
非结构循环
这一类循环应该使用结构化程序设计方法重新设计测试用例。
最后:【可能给你带来帮助的教程】
点击免费领取软件测试资料 100 名企测试内推资源倾情分享(私聊q1领取)
这一些资料,对做【软件测试】的朋友而言应该是较为完整了,这类学习资料也陪伴我走过了最艰难的路程,希望也可以帮助到你!万事要尽早,尤其是技术行业,一定要提升技术功底。
文章评论