王飛 于凱華
摘要:軟件單元測試是軟件測試的基礎(chǔ),是保證軟件質(zhì)量的一個(gè)重要階段,同時(shí)也是發(fā)現(xiàn)軟件缺陷的關(guān)鍵步驟;該文首先介紹軟件單元測試中白盒測試的方法;然后以核電DCS歷史數(shù)據(jù)庫軟件為案例,具體研究了歷史數(shù)據(jù)庫軟件白盒測試的測試用例的設(shè)計(jì)方法,詳細(xì)介紹了白盒測試用例的設(shè)計(jì)步驟,并對幾種邏輯覆蓋準(zhǔn)則進(jìn)行了比較。
關(guān)鍵詞:核電DCS;軟件測試;白盒測試
中圖分類號:TP31 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)11-0095-02
Abstract: Software unit testing is the foundation of software testing and an important stage of software quality assurance. The white-box-testing method in the software testing is introduced; then it takes some history database software used in DCS of nuclear power plant as the case and studies the white-box-testing test cases design method. The design procedure of the white-box-testing test cases is summarized and several kinds of cover criteria are compared. At last the merits of MC/DC coverage and the white-box-testing coverage criterion of history database used in DCS of nuclear power plant are studied.
Key words: DCS of nuclear power plant; software testing; White-box-testing
自從數(shù)字計(jì)算機(jī)應(yīng)用于核電站控制系統(tǒng)以來,軟件在核電廠控制系統(tǒng)中起著日益重要的作用,而有缺陷的軟件的確存在。核電站控制系統(tǒng)軟件的工作情況復(fù)雜,一旦軟件出現(xiàn)問題,往往造成災(zāi)難性后果。因此,核電廠對核電廠控制系統(tǒng)軟件部分提出了相當(dāng)高的要求。
軟件測試的方法可以分為黑盒測試和白盒測試,其中白盒測試是保證并提高軟件質(zhì)量的常規(guī)手段之一,是發(fā)現(xiàn)軟件缺陷的關(guān)鍵步驟,是軟件測試的基礎(chǔ)。本文涉及的編程語言均為C/C++語言。
1 白盒測試方法
白盒測試又稱結(jié)構(gòu)、邏輯測試或程序測試。這種測試需要了解程序的內(nèi)部情況,并依據(jù)內(nèi)部構(gòu)造設(shè)計(jì)和執(zhí)行測試用例。單元測試時(shí)一般采用白盒測試。白盒測試測試方法有邏輯覆蓋法和基本路徑法。
2 核電DCS歷史數(shù)據(jù)庫軟件測試白盒測試用例的設(shè)計(jì)
2.1 設(shè)計(jì)測試用例的步驟
通過對核電DCS歷史數(shù)據(jù)庫軟件的分析,得出相應(yīng)白盒測試測試用例設(shè)計(jì)步驟如下:
1)首先采用等價(jià)類劃分、邊界值分析的方法進(jìn)行用例設(shè)計(jì),主要從以下幾個(gè)方面進(jìn)行用例設(shè)計(jì):
① 在數(shù)據(jù)允許范圍內(nèi);
② 在數(shù)據(jù)允許范圍外;
③ 數(shù)據(jù)的邊界;
④ 極限值;
⑤ 這些類型的綜合。
2)然后在語句覆蓋、組合條件方面進(jìn)行考慮,檢查是否有沒有執(zhí)行到的語句、組合條件,然后采用回溯的方法,考慮相應(yīng)的數(shù)據(jù)參數(shù)。
3)基于以上兩種用例設(shè)計(jì)方法,還可以靠經(jīng)驗(yàn)和直覺推測程序中可能存在的各種錯(cuò)誤,進(jìn)行錯(cuò)誤推測,從而有針對性地編寫檢查這些錯(cuò)誤的測試用例。
2.2 測試用例設(shè)計(jì)實(shí)例
下面以核電DCS歷史數(shù)據(jù)庫中基于斜率比較的旋轉(zhuǎn)門壓縮算法模塊中程序?yàn)槔鞒虉D如圖1所示,具體研究白盒測試用例的設(shè)計(jì)。
1) 對程序流程圖的說明:如圖1所示,英文字母A、B、C、D、E、G表示程序分支的判定,其中的某個(gè)判定可能是一系列條件的組合,圖1中英文字母T、F表示程序分支的判定結(jié)果的真、假,小寫英文字母表示程序的路徑。
2) 對覆蓋準(zhǔn)則進(jìn)行選取,選為修正條件/判定覆蓋(MC/DC)。
3) 分析流程圖中的程序分支點(diǎn),對分支點(diǎn)的判定進(jìn)行提取,如表1所示。
4) 根據(jù)選取的準(zhǔn)則來確定需要覆蓋的路徑,并進(jìn)行測試用例的設(shè)計(jì),如表2所示。
通過表2中的測試用例可以看出:測試用例1和測試用例2使判定A取真、假各一次,測試用例3和測試用例4使判定C取真、假各一次,測試用例2、測試用例3、測試用例4、測試用例5使判定B取真、假各一次,測試用例5、測試用例6、測試用例7使分支結(jié)構(gòu)中條件斜率的取值取得了所有的可能的結(jié)果,并進(jìn)行了轉(zhuǎn)換一次和單條件的變化,同時(shí)程序模塊的入口以及出口點(diǎn)都被調(diào)用了。由此可見,表2中測試用例達(dá)到了判定準(zhǔn)則修正條件/判定覆蓋的標(biāo)準(zhǔn),滿足測試要求。
3 核電DCS歷史數(shù)據(jù)庫軟件測試白盒測試覆蓋準(zhǔn)則
通過對單元測試中白盒測試方法的研究,設(shè)計(jì)測試用例時(shí)需要滿足的幾種覆蓋準(zhǔn)則存在以下特點(diǎn):
設(shè)計(jì)測試用例(a,b,x)=(2,0,4) 就可達(dá)到語句覆蓋標(biāo)準(zhǔn)。若第一個(gè)條件語句中的邏輯與被錯(cuò)誤地編寫成邏輯或,上面設(shè)計(jì)的測試用例是不能發(fā)現(xiàn)這個(gè)錯(cuò)誤的;又如若第三個(gè)條件語句中x>1誤寫成x>0,這個(gè)測試用例也是不能發(fā)現(xiàn)這個(gè)錯(cuò)誤的。
2) 判定覆蓋:在判定覆蓋中,判定語句基本是由多個(gè)邏輯條件組合而成,若只是判斷其整個(gè)最終結(jié)果,而忽略單個(gè)條件的取值情況,必然會導(dǎo)致部分測試路徑無法覆蓋。這樣的判定覆蓋并不全面。
3) 條件覆蓋:條件覆蓋中需要保證使一個(gè)判定中的每一個(gè)條件都取到兩個(gè)不同的結(jié)果,而判定覆蓋中對這一點(diǎn)并無要求,由此可見條件覆蓋相較判定覆蓋,其發(fā)現(xiàn)錯(cuò)誤的能力較強(qiáng)。
4) 條件判定覆蓋:條件判定覆蓋要求測試用例使得條件語句中每個(gè)條件的所有可能都至少出現(xiàn)一次,同時(shí)判定條件可能的結(jié)果都至少出現(xiàn)一次,每一個(gè)條件能獨(dú)立影響判定結(jié)果的變化都至少出現(xiàn)一次(即:其他條件不變,只改變這個(gè)條件時(shí)判定結(jié)果變化)。
4 結(jié)論
對于數(shù)據(jù)庫軟件來說,其執(zhí)行語句中可能包含布爾表達(dá)式,在進(jìn)行軟件白盒測試用例設(shè)計(jì)時(shí),其表達(dá)式的復(fù)雜性值得深入研究。由于數(shù)據(jù)庫軟件數(shù)據(jù)存儲的下一步動作受到多個(gè)條件的制約,在程序設(shè)計(jì)中分支判斷必然是一個(gè)多條件組合的布爾表達(dá)式,對于這樣的程序模塊,對其進(jìn)行白盒測試,使用修正條件/判定覆蓋是一個(gè)比較有實(shí)效的折中辦法,這樣能有效的發(fā)現(xiàn)程序中的錯(cuò)誤,又可以避免陷入煩瑣的用例設(shè)計(jì)中。
參考文獻(xiàn):
[1] RTCA DO-178B Software Considerations in Airborne Systems and equipment certification [S]. Prepared by RTCA SC-167/EURO-CAE WG-12. 1,1992
[2] 鄭人杰. 計(jì)算機(jī)軟件測試技術(shù) [M]. 北京:清華大學(xué)出版社,1992.
[3] 徐宏革. 郭慶. 白盒測試之道C++test [M]. 北京:北京航空航天大學(xué)出版社,2010.
【通聯(lián)編輯:梁書】