白盒测试方法比较

上传人:jin****ng 文档编号:190012137 上传时间:2023-02-25 格式:DOCX 页数:8 大小:173.52KB
返回 下载 相关 举报
白盒测试方法比较_第1页
第1页 / 共8页
白盒测试方法比较_第2页
第2页 / 共8页
白盒测试方法比较_第3页
第3页 / 共8页
点击查看更多>>
资源描述
“语句覆盖”是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中 每个语句至少都能被执行一次。图 6.4 是一个被测试的程序,它的源程序是:PROCEDURE M(VAR A, B, X: REAL);ANDX-J1) AND (B=0) THENX:=X/A;IF(A=2)OR (X1) THENX:=X+1;END.为使程序中每个语句至少执行一次,只需设计 一个能通过路径 ace 的例子就可以了,例如选择输 入数据为:A=2, B=0, X=3就可达到“语句覆盖”标准。 从本例可看出,语句覆盖实际上是很弱的,如果第一个条件语句中的 AND 错误地编写成OR,上面的测试用例是不能发现这个错误的;又如第三个条件语句中X1误写成X0,这个 测试用例也不能暴露它,此外,沿着路径 abd 执行时, X 的值应该保持不变,如果这一方面有 错误,上述测试数据也不能发现它们。总之,一般认为“语句覆盖”是很不充分的一种标准。二、判定覆盖(Decision coverage)比“语句覆盖稍强的覆盖标准是“判定覆盖”(或称branch coverage分支覆盖)标准。含 义是:执行足够的测试用例,使得程序中的每一个分支至少都通过一次。对图6.4的程序,如果设计两个例子,使它们能通过路径ace和abd,或者通过路径acd和abe,就可达到“判定覆盖”标准,为此,可以选择输入数据为:A=3, B=0,X=1 (沿路径acd执行);A=2,B=l, X=3(沿路径abe执行)KIffi6. 4程序中含有判定的语句包括IF-THEN-ELSE、DO-WHILE、REPEAT-UNTIL等,除了双值 的判定语句外,还有多值的判定语句,如PASCAL中的CASE语句、FORTRAN中带有三个分 支的IF语句等。所以“判定覆盖”更一般的含义是:使得每一个判定获得每一种可能的结果。“判定覆盖”比“语句覆盖”严格,因为如果每个分支都执行过了,则每个语句也就执行 过了。但是,“判定覆盖”还是很不够的,例如上面两个测试用例未能检查沿着路径abd执行时, X 的值是否保持不变。、条件覆盖 (Condition coverage)一个判定中往往包含了若干个条件,例如图6.4的程序中,判定(A1) AND (B=0)包含了两个条件:A1以及B=0,所以可引进一个更强的覆盖标准一一“条件覆盖”。“条件覆盖”的含义是:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。图 6.4的程序有四个条件:A1、B=0、A=2、X1为了达到“条件覆盖”标准,需要执行足够的测试用例使得在 a 点有A1、AW1、B=0、BHO等各种结果出现,以及在 b 点有:A=2、AH2、X1、XW1等各种结果出现。现在只需设计以下两个测试用例就可满足这一标准:A=2, B=0, X=4 (沿路径ace执行);A=l, B=1, X=1 (沿路径abd执行)。NNffle. ix-x/aX=X+1“条件覆盖”通常比“判定覆盖”强,因为它使一个判定中的每一个条件都取到了两个不 同的结果,而判定覆盖则不保证这一点。但如对语句 IF(A AND B)THEN S 设计测试用例使其满 足条件覆盖,即使A为真并使B为假,以及使A为假而且B为真,但是它们都未能使语句S得以 执行。四、判定/条件覆盖(Decision/Condition coverage)针对上面的问题引出了另一种覆盖标准“判定条件覆盖”,它的含义是:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。对图 6.4 的程序,上一节中的两个例子A=2, B=0,X=4 (沿 ace 路径)A=l, B=l, X=1 (沿 abd 路径)NNffle. 4X-X/AX=X+1是满足这一标准的。“判定条件覆盖”似乎是比较合理的,但事实并非如此,因为大多数计算机不能用一条指令对多个条件作出判定,而必须将源程序中对多个条件的判定分解成几个简单判定,所以较彻底的测试应使每一个简单判定都真正取到各种可能的结果。图 6.5 是由编译系统产生的图6.4 的目标程序。上面的两个例子未B S-5Z IX=X/AT能使目标程序中的每一个简单判定 取到各种可能的结果;它们不能使 判定I为“假”也不能使判定K为“真”,其原因在于:含有AND或 OR的逻辑表达式中,某些条件将抑 制其他条件,例如逻辑表达式A AND B,如果A为“假”,目标程序就不再检查条件B 了,这样B中的错误就发现不了。上面的讨论说明了,尽管“判定条件覆盖”看起来能使各种条件取到所有可能的值,但 实际上并不一定能检查到这样的程度。五、条件组合覆盖(branch condition combination)针对上述问题又提出了另一种标准“条件组合覆盖”。它的含义是:执行足够的例子, 使得每个判定中条件的各种可能组合都至少出现一次。显然,满足“条件组合覆盖”的测试用例 是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。再看图6.4的程序,我们需要选择适当的例子,使得下面 8种条件组合都能够出现1) A1, B=02) A1, B 03) AW1, B=04)AW1, B#08)A#2, XW15)A=2, X16)A=2,XW17)A#2, X1必须注意到,5)、6)、7)、8)四种情况是第二个IF语句的条件组合,而X的值在该语句之 前是要经过计算的,所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么。 下面四个例子可以使上述 8 种条件组合至少出现一次:A=2, B=0,X=4使1)、5)两种情况出现;A=2, B=l, X=1使2)、6)两种情况出现;A=1,B=0,X=2使3)、7)两种情况出现;A=1,B=1,X=1使4)、8)两种情况出现。上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,例如路径 acd 就没有执行,因此,条件组合覆盖标准仍然是不彻底。判定覆盖只关心判定表达式的值(真/假),而条件覆盖涉及到判定表达式的 每个条件的值(真/假)。举个最简单的例子,方便理解:判定表达式:a1 or b1用判定覆盖设计的测试数据:a=5 (判定表达式的值为“真”)a=0 (判定表达式的值为“假”)这里不需要管b的取值,就已经满足判定覆盖的条件了。用条件覆盖设计的测试数据:a = 5(条件 a1 的值为“真”)a = 0(条件 a1 的值为“假”)b = 5(条件 b1 的值为“真”)b = 0(条件 b1 的值为“假”)这里不考虑 a1 or b1 这个表达式的取值的情况,但必须把 a1 和 b1 这两个条件的取值考虑全。二、设计题:1.如图显示某程序的逻辑结构。试为它设计足够的测试用例,分别实现对程序的判定覆盖、条件覆盖和条件组合覆盖。覆盖种 类需满足的条件测试数据期望结果判定覆 盖A0, B=0A=2, B=0执行siA0, BhO 或A0, B=0 或A0B=0A=2, B=0执行siA0, B=0A=2, B=0执行siA0, BhOA=2, B=1执行S2A0, B=0A=0, B=0执行S2A0, BhOA=0, B=1执行S2
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!