為什么么需要因果圖
在黑盒測(cè)試中,等價(jià)類劃分或邊界值分析法只考慮了不同的輸入和不同的輸出之間的關(guān)系。但是如果是各個(gè)輸入條件之間有很復(fù)雜的組合,這二種設(shè)計(jì)方法都很難用一個(gè)系統(tǒng)的方法進(jìn)行描述,設(shè)計(jì)測(cè)試用例只能依靠測(cè)試人員主觀的猜測(cè)或者分析,具有很大的盲目性。
讓我們先來(lái)看一個(gè)簡(jiǎn)單的例子。
假設(shè)某個(gè)軟件需求文檔中有這樣的說(shuō)明:
第一列字符必須是A或B,第二列字符必須是一個(gè)數(shù)字,在此情況下進(jìn)行文件的修改。但如果第一列字符不正確,則給出信息L;如果第二列字符不是數(shù)字,則給出信息M。
先用等價(jià)類來(lái)分析,第一列會(huì)有三個(gè)輸入:A、B、非(A B)的字符。第二列字符有二個(gè)輸入:數(shù)字、非數(shù)字(為了簡(jiǎn)便起見(jiàn),有關(guān)數(shù)字再細(xì)化的問(wèn)題不做討論)。這是一個(gè)根據(jù)理論進(jìn)行分析的過(guò)程。但是做完了這一步,并不能得出輸出。也就是說(shuō)如何分析第一列和第二列的關(guān)系,沒(méi)有明確的理論指導(dǎo)。實(shí)際操作過(guò)程中,各個(gè)測(cè)試人員可能會(huì)設(shè)計(jì)出不同的測(cè)試用例。
這個(gè)例子還僅僅是一個(gè)2個(gè)輸入條件之間有關(guān)系,如果到更復(fù)雜的應(yīng)用中,可能會(huì)更多。如果沒(méi)有一種方法指導(dǎo)我們的思想,測(cè)試用例就會(huì)很不全面。
而因果圖正好彌補(bǔ)了上述缺點(diǎn)。我們先來(lái)看一下什么叫因果圖。因果圖是一種形式化的語(yǔ)言(以圖的形式表現(xiàn)),它不僅描述了原因和結(jié)果之間的關(guān)系,也描述了各個(gè)原因之間、各個(gè)結(jié)果之間復(fù)雜關(guān)系的組合。在這里,因就是程序的輸入條件,而果則是程序的輸出。正確的使用因果圖可以對(duì)很復(fù)雜的功能邏輯進(jìn)行分析,設(shè)計(jì)出高效而簡(jiǎn)潔的測(cè)試用例。
1.1.?因果圖概念介紹
學(xué)習(xí)因果圖需要的基本知識(shí)是:
1.1.1.? ???布爾邏輯運(yùn)算符
三種常用的運(yùn)算符是NOT、AND、OR。還有兩種比較少用的是NAND、NOR。再加上恒等,這六種符號(hào)是描述原因和結(jié)果之間的邏輯關(guān)系的。
下面以圖的形式詳細(xì)說(shuō)明6種因果邏輯。c表示原因,e表示結(jié)果。
n??恒等:如果原因?yàn)檎?,那么結(jié)果必定為真。

n??與:只有2個(gè)原因都為真,那么結(jié)果為真。

n??或:2個(gè)原因中有一個(gè)為真時(shí),結(jié)果就為真。

n??非:只有原因?yàn)榧?,結(jié)果才為真。

n??與非:先與后非。

n??或非:先或后非。

1.1.2.? ???因果圖的約束關(guān)系表示法
因果圖中有4種符號(hào)描述原因之間的約束關(guān)系,1種符號(hào)描述結(jié)果之間的約束關(guān)系。下面分別介紹:
n??排他性約束:各個(gè)原因之間不能同時(shí)為真,但可以同時(shí)為假。舉個(gè)例子,小明同學(xué)不可能同時(shí)屬于A班和B班,但可能既不是A班的,也不是B班的,而是C班的。

n??包含性約束:各個(gè)原因中總有一個(gè)為真。即可以同時(shí)為真,但不可以同時(shí)為假。舉個(gè)例子,支付寶買家付款時(shí),有個(gè)輸入條件(既原因)是余額支付、網(wǎng)銀支付,買家可以選擇單獨(dú)余額支付或者單獨(dú)網(wǎng)銀支付,也可以同時(shí)選擇余額支付和網(wǎng)銀支付2種方式。但是不可以選擇不支付。

n??必要性約束:當(dāng)原因a為真時(shí),原因b必須同時(shí)為真;但是原因b為真時(shí),原因a既可以為真,也可以為假。舉數(shù)字證書的例子:現(xiàn)有的業(yè)務(wù)規(guī)則下,如果申請(qǐng)了數(shù)字證書(原因a),那么該用戶必然通過(guò)了支付寶認(rèn)證(原因b)。反之,如果用戶通過(guò)了支付寶認(rèn)證,那么不一定申請(qǐng)了數(shù)字證書(a)。

n??唯一性約束:有且只有原因a和原因b中的一個(gè)為真。非此即彼,不存在第三種情況。舉例來(lái)說(shuō),人的性別不是男,就是女,不會(huì)存在既不是男也不是女的人。

n??掩碼標(biāo)記(結(jié)果約束):如果結(jié)果b為真,那么結(jié)果a一定為假,如果結(jié)果b為假,則結(jié)果a的狀態(tài)不定。還拿支付寶來(lái)舉例子,先給出兩個(gè)結(jié)果:安全控件運(yùn)行正常(a),無(wú)法輸入登陸密碼(b)。如果無(wú)法輸入登陸密碼,那么可以判斷是安全控件沒(méi)有正常運(yùn)行,反過(guò)來(lái),如果可以輸入登陸密碼,則不能確定安全控件一定工作正常,有可能是用了FireFox瀏覽器訪問(wèn)Alipay的。
