王飛 于凱華
摘要:軟件單元測試是軟件測試的基礎,是保證軟件質量的一個重要階段,同時也是發(fā)現(xiàn)軟件缺陷的關鍵步驟;該文首先介紹軟件單元測試中白盒測試的方法;然后以核電DCS歷史數(shù)據(jù)庫軟件為案例,具體研究了歷史數(shù)據(jù)庫軟件白盒測試的測試用例的設計方法,詳細介紹了白盒測試用例的設計步驟,并對幾種邏輯覆蓋準則進行了比較。
關鍵詞:核電DCS;軟件測試;白盒測試
中圖分類號:TP31 文獻標識碼: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ù)字計算機應用于核電站控制系統(tǒng)以來,軟件在核電廠控制系統(tǒng)中起著日益重要的作用,而有缺陷的軟件的確存在。核電站控制系統(tǒng)軟件的工作情況復雜,一旦軟件出現(xiàn)問題,往往造成災難性后果。因此,核電廠對核電廠控制系統(tǒng)軟件部分提出了相當高的要求。
軟件測試的方法可以分為黑盒測試和白盒測試,其中白盒測試是保證并提高軟件質量的常規(guī)手段之一,是發(fā)現(xiàn)軟件缺陷的關鍵步驟,是軟件測試的基礎。本文涉及的編程語言均為C/C++語言。
1 白盒測試方法
白盒測試又稱結構、邏輯測試或程序測試。這種測試需要了解程序的內部情況,并依據(jù)內部構造設計和執(zhí)行測試用例。單元測試時一般采用白盒測試。白盒測試測試方法有邏輯覆蓋法和基本路徑法。
2 核電DCS歷史數(shù)據(jù)庫軟件測試白盒測試用例的設計
2.1 設計測試用例的步驟
通過對核電DCS歷史數(shù)據(jù)庫軟件的分析,得出相應白盒測試測試用例設計步驟如下:
1)首先采用等價類劃分、邊界值分析的方法進行用例設計,主要從以下幾個方面進行用例設計:
① 在數(shù)據(jù)允許范圍內;
② 在數(shù)據(jù)允許范圍外;
③ 數(shù)據(jù)的邊界;
④ 極限值;
⑤ 這些類型的綜合。
2)然后在語句覆蓋、組合條件方面進行考慮,檢查是否有沒有執(zhí)行到的語句、組合條件,然后采用回溯的方法,考慮相應的數(shù)據(jù)參數(shù)。
3)基于以上兩種用例設計方法,還可以靠經驗和直覺推測程序中可能存在的各種錯誤,進行錯誤推測,從而有針對性地編寫檢查這些錯誤的測試用例。
2.2 測試用例設計實例
下面以核電DCS歷史數(shù)據(jù)庫中基于斜率比較的旋轉門壓縮算法模塊中程序為例,流程圖如圖1所示,具體研究白盒測試用例的設計。
1) 對程序流程圖的說明:如圖1所示,英文字母A、B、C、D、E、G表示程序分支的判定,其中的某個判定可能是一系列條件的組合,圖1中英文字母T、F表示程序分支的判定結果的真、假,小寫英文字母表示程序的路徑。
2) 對覆蓋準則進行選取,選為修正條件/判定覆蓋(MC/DC)。
3) 分析流程圖中的程序分支點,對分支點的判定進行提取,如表1所示。
4) 根據(jù)選取的準則來確定需要覆蓋的路徑,并進行測試用例的設計,如表2所示。
通過表2中的測試用例可以看出:測試用例1和測試用例2使判定A取真、假各一次,測試用例3和測試用例4使判定C取真、假各一次,測試用例2、測試用例3、測試用例4、測試用例5使判定B取真、假各一次,測試用例5、測試用例6、測試用例7使分支結構中條件斜率的取值取得了所有的可能的結果,并進行了轉換一次和單條件的變化,同時程序模塊的入口以及出口點都被調用了。由此可見,表2中測試用例達到了判定準則修正條件/判定覆蓋的標準,滿足測試要求。
3 核電DCS歷史數(shù)據(jù)庫軟件測試白盒測試覆蓋準則
通過對單元測試中白盒測試方法的研究,設計測試用例時需要滿足的幾種覆蓋準則存在以下特點:
設計測試用例(a,b,x)=(2,0,4) 就可達到語句覆蓋標準。若第一個條件語句中的邏輯與被錯誤地編寫成邏輯或,上面設計的測試用例是不能發(fā)現(xiàn)這個錯誤的;又如若第三個條件語句中x>1誤寫成x>0,這個測試用例也是不能發(fā)現(xiàn)這個錯誤的。
2) 判定覆蓋:在判定覆蓋中,判定語句基本是由多個邏輯條件組合而成,若只是判斷其整個最終結果,而忽略單個條件的取值情況,必然會導致部分測試路徑無法覆蓋。這樣的判定覆蓋并不全面。
3) 條件覆蓋:條件覆蓋中需要保證使一個判定中的每一個條件都取到兩個不同的結果,而判定覆蓋中對這一點并無要求,由此可見條件覆蓋相較判定覆蓋,其發(fā)現(xiàn)錯誤的能力較強。
4) 條件判定覆蓋:條件判定覆蓋要求測試用例使得條件語句中每個條件的所有可能都至少出現(xiàn)一次,同時判定條件可能的結果都至少出現(xiàn)一次,每一個條件能獨立影響判定結果的變化都至少出現(xiàn)一次(即:其他條件不變,只改變這個條件時判定結果變化)。
4 結論
對于數(shù)據(jù)庫軟件來說,其執(zhí)行語句中可能包含布爾表達式,在進行軟件白盒測試用例設計時,其表達式的復雜性值得深入研究。由于數(shù)據(jù)庫軟件數(shù)據(jù)存儲的下一步動作受到多個條件的制約,在程序設計中分支判斷必然是一個多條件組合的布爾表達式,對于這樣的程序模塊,對其進行白盒測試,使用修正條件/判定覆蓋是一個比較有實效的折中辦法,這樣能有效的發(fā)現(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] 鄭人杰. 計算機軟件測試技術 [M]. 北京:清華大學出版社,1992.
[3] 徐宏革. 郭慶. 白盒測試之道C++test [M]. 北京:北京航空航天大學出版社,2010.
【通聯(lián)編輯:梁書】