条件判定覆盖
一、定义:
程序中每个判定至少有一次为真值,有一次为假值,使得程序中每个分支至少执行一次,
且使得各判定中的每个条件获得各种可能的取值至少满足一次。
二、特点:
1、综合了条件覆盖和判定覆盖的特点
2、满足条件判定覆盖的用例一定满足语句覆盖
3、满足条件判定覆盖的用例一定满足条件覆盖
4、满足条件判定覆盖的用例一定满足判定覆盖
5、条件判定覆盖没有考虑各判定结果(真或假)组合情况,不满足路径覆盖
6、未考虑判定中各条件不同取值的组合情况,不满足条件组合覆盖
三、 程序流程图:
四、源码:
demo.py
#encoding:utf-8
A = int(input('请输入A的值'))
B = int(input('请输入B的值'))
X = int(input('请输入X的值'))
if A > 1 and B == 0:
X = X / A
if A == 2 or X > 1:
X = X + 1
print('结束')
五、测试用例设计
用例编号 | 测试用例 | 覆盖路径 | 覆盖条件 | 预期结果 |
---|---|---|---|---|
1 | A=2,B=0,X=4 | a-c-e | (A>1), (B== 0), (A==2), (X>1) | X = 3 |
2 | A=1,B=1,X=1 | a-b-d | (A<=1), (B!=0), (A!=2), (X<1) | X = 1 |
执行用例1 ,判定(A > 1 and B == 0)为真 ,执行 X = X / A, X=2;
判定(A == 2 or X > 1)为真,执行X = X + 1 ;
输出 X = 3 ;
程序结束
执行用例2 ,判定(A > 1 and B == 0)为假,不执行X = X / A ;
判定(A == 2 or X > 1)为假,不执行X = X + 1 ;
输出 X = 1 ;
程序结束
从上述用例可以得出:
1、 满足条件判定覆盖的测试用例满足语句覆盖
2、满足条件判定覆盖的测试用例满足条件覆盖,判定覆盖
3、上述用例未考虑每个判定的真假组合情况(路径覆盖)
六、使用Python Unittest 实现上述用例
# encoding:utf-8
import unittest
class TestDemo(unittest.TestCase):
def demo(self, A, B, X):
if A > 1 and B == 0:
X = X / A
if A == 2 or X > 1:
X = X + 1
return X
def test_demo_with_conditional_and_decision_coverage_1(self):
'''
使用条件判定覆盖测试 方法demo
A=2,B=0,X=4
'''
X = self.demo(A=2, B=0, X=4)
expected = 3
self.assertEqual(expected, X)
def test_demo_with_conditional_and_decision_coverage_2(self):
'''
使用条件判定覆盖测试 方法demo
A=-1,B=1,X=1
'''
X = self.demo(A=-1, B=1, X=1)
expected = 1
self.assertEqual(expected, X)
if __name__ == '__main__':
unittest.main()