条件测试是检查程序模块中所包含逻辑条件的测试用例设计方法,注重于测试程序中的条件。BRO(Branch and Relational Operator)测试保证能发现布尔变量和关系操作符只出现一次且没有公共变量的条件中的分支和条件操作符错误。考虑条件C1:(E1>E2)&(E3<E4),其中E1,E2,E3,E4是数学表达式,“&”表示逻辑“与”,“>”和“=”是关系运算符,则C1的条件约束至少为 (6) 时,就可以检查C1中的关系操作符错误。
A.(>,=),(>,>),(>,<),(<,<),(=,<)
B.(<,<),(<,=),(<,>),(=,<),(=,=),(=,>),(>,<),(>,=),(>,>)
C.(>,<),(=,<),(>,=)
D.(>,<),(=,<),(>,=),(<,<)
参考答案:A
解析:
[分析]: BRO测试保证能发现布尔变量和关系操作符只出现一次而且没有公共变量的条件中的分支和条件操作符错误。BRO策略利用条件C的条件约束。有n个简单条件的条件C的条件约束定义为(D1,D2,…,Dn),其中Di(0<f≤n)表示条件C中第i个简单条件的输出约束。如果C的执行过程中其每个简单条件的输出都满足D中对应的约束,则称条件C的条件约束D由C的执行所覆盖。
对于布尔变量B,B输出的约束说明B必须是真(t)或假(f)。类似地,对于关系表达式,符号<、=、>用于指定表达式输出的约束。
作为简单的例子,考虑条件C0:B1&B2,其中B1和B2是布尔变量。C0的条件约束式如(D1,D2),其中D1和D2是“t”或“f”,值(t,f)是C0的条件约束,由使B1为真B2为假的测试所覆盖。BRO测试策略要求约束集{(t,t),(f,t),(t,f)}由C0的执行所覆盖,如果C0由于布尔算子的错误而不正确,至少有一个约束强制C0失败。
作为第二个例子,考虑C2:B1&(E3=E4),其中B1是布尔表达式,而E3和E4是算术表达式。C2的条件约束形式如(D1,D2),其中D1是“t”或“f”,D2是<、=或>。除了C2的第二个简单条件是关系表达式以外,C2和C0相同,所以可以修改C0的约束集{(t,t),(f,t),(t,f)},得到C2的约束集,注意(E3=E4)的“t”意味着“=”,而(E3=E4)的“f”意味着“>”或“<”。分别用(t,=)和(f,=)替换(t,t)和(f,t),并用(t,<)和(t,>)替换(t,f),就得到C2的约束集{(t,=),(f,=),(t,<),(t,>)}。上述条件约束集的覆盖率将保证检测C2的布尔和关系算子的错误。
我们再来看试题中的例子,考虑C1:(E1>E2)&(E3<E4),其中E1,E2,E3,E4是数学(算术)表达式。C1的条件约束形式如(D1,D2),其中D1和D2是<、=或>。我们可以直接从C0的约束集推导出C1的约束集。(E1>E2)的“t”意味着“>”,“f”意味着“=”或“<”。首先,根据(E1>E2)把((t,t),(f,t),(t,f))替换为{(>,t),(=,t),(<,t),(>,f)}。而(E3<E4)的“t”意味着“<”,“f”意味着“=”或“>”,然后,我们再把{(>,t),(=,t),(<,t),(>,f))替换为{(>,<),(=,<),(<,<),(>,=),(>,>)},这就是C1的约束集,能够保证检测C1的关系操作符的错误。