![](https://lstatic.shangxueba.com/sxbzda/h5/images/m_q_title.png)
请教:2017年计算机四级软件测试工程师模拟题三第1大题第10小题如何解答?
【题目描述】
设有一段程序如下: if((a==b)and((c==d)or(e==f)))do S1 else if((p==q)or(s==t))do S2 else do S3 满足判定/条件覆盖的要求下,最少的测试用例数目是______。
A.6
B.8
C.3
D.4
【我提交的答案】: A |
【参考答案与解析】: 正确答案:C |
解析:判定/条件覆盖,就是设计足够的测试用例,使得判定语句中每个条件的所有可能取值至少评价一次,同时每个判定语句本身所有可能分支也至少评价一次。
本程序一共有两个判定语句,三条路径。
若以1代表某一个条件为真,O代表为假,则对于(a==b)、(c==d)、(e==f)、(p==q)、(s==t)这五个条件,取不同的真值组合,即可设计出相应的测试用例,达到判定/条件覆盖的要求。在这里,先取(a==b)、(c==d)、(e==f) 为101,(p==q)、(s==t) 为任意值,然后取全部五个条件为010 11和010 00,即能达到判定/条件覆盖的要求。
【我的疑问】
在C语言的逻辑与运算中,“”左边为0则不看右边运算;在其逻辑或运算中 “||”左边为1不看右边~那么其条件覆盖会不会有影响?例如:当条件(a==b)为0时,后面的条件((c==d)or(e==f))还会判断么,不判断的话,还算条件覆盖么。
![](https://lstatic.shangxueba.com/sxbzda/h5/images/tips_org.png)