條件判定覆蓋
一、定義:
程序中每個判定至少有一次為真值,有一次為假值,使得程序中每個分支至少執行一次,
且使得各判定中的每個條件獲得各種可能的取值至少滿足一次。
二、特點:
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()