- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4软件动态测试技术解析
4.7.1 逻辑覆盖 逻辑覆盖是动态测试的主要方法之一,是以程序内部的逻辑结构为基础的白盒测试技术,是通过对程序逻辑结构的遍历实现程序设计的覆盖。 根据覆盖目标的不同,逻辑覆盖可划分为:语句覆盖、分支(判定)覆盖、条件覆盖等。 语句覆盖:执行足够多的测试用例,使得程序中的每个可执行语句至少执行一次。 分支(判定)覆盖:执行足够多的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值,即要使程序中的每个取“真”分支和取“假”分支至少均经历一次。 条件覆盖:包含分支条件覆盖、分支条件组合覆盖 逻辑覆盖(续) void DoWork (int x,int y,int z) { int k=0,j=0; if ( (x3)(z10) ) { k=x*y-1; j=sqrt(k); } //语句块1 if ( (x==4)||(y5) ) { j=x*y+10; } //语句块2 j=j%3; //语句块3 } 逻辑覆盖(续) 语句覆盖(SC) 要实现DoWork函数的语句覆盖,只需设计一个测试用例就可以覆盖程序中的所有可执行语句。 测试用例输入为:{ x=4、y=5、z=5 } 程序执行的路径是:abd 分析: 语句覆盖可以保证程序中的每个语句都得到执行,但发现不了判定中逻辑运算的错误,即它并不是一种充分的检验方法。例如在第一个判定((x3)(z10))中把“”错误的写成了“||”,这时仍使用该测试用例,则程序仍会按照流程图上的路径abd执行。可以说语句覆盖是最弱的逻辑覆盖准则。 分支覆盖(BC) 要实现DoWork函数的分支覆盖,需要设计两个测试用例。 测试用例的输入为:{x=4、y=5、z=5};{x=2、y=5、z=5} 程序执行的路径分别是:abd;ace 分析: 上述两个测试用例不仅满足了分支覆盖,同时还做到语句覆盖。从这点看似乎分支覆盖比语句覆盖更强一些,但仍然无法确定判定内部条件的错误。例如把第二个判定中的条件y5错误写为y5,使用上述测试用例,照样能按原路径执行而不影响结果。因此,需要有更强的逻辑覆盖准则去检验判定内的条件。 分支覆盖(续) 条件覆盖(CC) 如果判定是由逻辑运算符连接的几个条件确定的,则测试中需要考虑条件的复杂性。 在实际程序代码中,一个判定中通常包含若干原子条件。条件覆盖的目的是设计若干测试用例,执行被测程序后,使每个判定中每个原子条件的所有可能值至少满足一次。 对DoWork函数的各个判定的各种原子条件取值加以标记。 对于第一个判定( (x3)(z10) ): 条件x3 取真值记为T1,取假值记为-T1 条件z10 取真值记为T2,取假值记为-T2 对于第二个判定( (x==4)||(y5) ): 条件x==4 取真值记为T3,取假值记为-T3 条件y5 取真值记为T4,取假值记为-T4 条件覆盖(续) 根据条件覆盖的基本思想,要使上述4个原子条件可能产生的8种情况至少满足一次,设计测试用例如下: 条件覆盖(续) 说明:虽然前面的一组测试用例同时达到了条件覆盖和分支覆盖,但是,并不是说满足条件覆盖就一定能满足分支覆盖。如果设计了下表中的这组测试用例,则虽然满足了条件覆盖,但只是覆盖了程序中第一个判定的取假分支c 和第二个判定的取真分支d,不满足分支覆盖的要求。 分支条件覆盖 分支条件覆盖是设计足够的测试用例,运行被测程序,使程序中每个判定的每个原子条件的所有可能值至少满足一次,并且每个判定的可能结果也至少出现一次。 根据分支条件覆盖的基本思想,只需设计以下两个测试用例便可以覆盖4个条件的8种取值以及4个判定分支。 分支条件覆盖(续) 分析:从表面上看,分支条件覆盖测试了各个判定中的所有原子条件的取值,但实际上,编译器在检查含有多个原子条件的逻辑表达式时,某些情况下的某些原子条件将会被其它条件所掩盖。因此,分支条件覆盖也不一定能够完全检查出逻辑表达式中的错误。 例如:对于第一个判定(x3)(z10)来说,必须x3和z10这两个条件同时满足才能确定该判定为真。如果x3为假,则编译器将不再检查z10这个条件,那么即使这个条件有错也无法被发现。对于第二个判定(x==4)||(y5)来说,若条件x==4满足,就认为该判定为真,这时将不会再检查y5,那么同样也无法发现这个条件中的错误。 分支条件组合覆盖 分支条件组合覆盖的目的是要使设计的测试
文档评论(0)