郭學品,鐘 聲,黃 成
(1.海南大學信息科學技術學院,海南???570228; 2.海南師范大學信息科學技術學院,海南???571158)
軟件測試用例設計分析
郭學品1,2,鐘 聲1,黃 成2
(1.海南大學信息科學技術學院,海南???570228; 2.海南師范大學信息科學技術學院,海南???571158)
軟件測試是軟件開發(fā)過程中的重要組成部分,是發(fā)現(xiàn)軟件缺陷的重要環(huán)節(jié),是保證軟件質量和可靠性的重要手段。而軟件測試的成效在某種程度上取決于采用的測試方法和測試用例的設計。因此,測試用例的設計是非常重要和關鍵的。文章就此對測試用例設計的基本原則、考慮要素、設計方法等進行了闡述和分析。
軟件測試;測試用例;設計方法;白盒測試;黑盒測試
隨著現(xiàn)代計算機在社會各行各業(yè)的廣泛應用,各種軟件走進了人們的日常工作和日常生活中,人們越來越多的依賴各種軟件,從而也對軟件品質保證提出了更高要求。在這樣的背景下,軟件測試在整個軟件開發(fā)活動中就擺在了特別突出的位置。
軟件測試是軟件生命周期中的一個重要階段,是保證軟件質量和可靠性的重要手段。如何對軟件進行全面、高效的測試成為軟件行業(yè)比較關注的問題。測試用例是軟件測試活動的核心部分,指導測試工作的開展,是軟件測試必須遵守的準則。軟件測試正是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序內部結構而精心設計了一批測試用例,并利用這些測試用例運行軟件,來發(fā)現(xiàn)軟件系統(tǒng)缺陷的。測試用例對測試工作的控制和指導作用相當于設計文檔對編碼的指導作用,尤其在大系統(tǒng)表現(xiàn)出對系統(tǒng)測試的權威性。
測試用例是對軟件運行過程中所有可能存在的目標、運動、環(huán)境和結果的描述,是對客觀世界的一種抽象。測試用例是為特定目標開發(fā)的測試輸入、執(zhí)行條件和預期結果的集合,是有效發(fā)現(xiàn)軟件缺陷的最小測試執(zhí)行單元。這些特定目標可以是驗證一個特定的程序路徑或核實是否符合特定需求。
測試用例體現(xiàn)了一定的測試方案、方法、技術和策略,內容包括測試目標、測試環(huán)境、輸入數(shù)據(jù)、測試步驟、預期結果、測試腳本等,并形成文檔。測試用例屬于軟件測試工作的指導性文件,測試用例的優(yōu)劣直接影響軟件測試的質量。
測試用例作為檢驗測試效果的重要參考因素,也從某種角度來衡量軟件質量的好壞。設計良好的測試用例具有可重復使用的功能,可以使軟件測試的成本降低,使測試效果事半功倍。
(一)有效性
不同測試人員使用相同測試用例得到的驗證結果是相同的,它是測試人員進行軟件測試的重要參考依據(jù)。
(二)易組織性
對于一個項目來說,測試用例有可能在數(shù)月或數(shù)年的測試過程中被創(chuàng)建、使用,測試計劃應組織好這些測試用例,提供給測試人員作為參考和使用。
(三)可復用性
軟件測試是不可能進行窮舉測試的,設計良好的測試用例應具有可重復使用的功能,減少編制測試用例的數(shù)量,提高測試效率。
(四)可評估性
在測試中,測試用例的通過率是檢驗代碼質量的保證。代碼質量的高低,可以通過測試用例的通過率和軟件錯誤的數(shù)量來衡量。
(五)可管理性
測試用例是檢驗測試人員工作進度和工作量,以及跟蹤管理測試人員的工作效率的一種依據(jù),從而合理做出測試計劃和測試安排。
(一)盡量避免設計含糊不清的測試用例
含糊不清的測試用例會給測試過程帶來困難,甚至影響測試結果。在測試過程中,測試用例一般有三種狀態(tài):通過、未通過和不能測試。如果測試未通過,一般會有測試的錯誤報告進行關聯(lián);如果不能測試,則需要找出原因,判斷是否是測試用例本身的錯誤,還是環(huán)境因素等其他問題。不能說這個測試用例部分通過,部分未通過,不允許出現(xiàn)模棱兩可的情況。含糊的測試用例會給測試人員的判斷帶來困難,也不利于測試過程的跟蹤。
(二)盡量避免設計復雜繁瑣的測試用例
復雜繁瑣的測試用例難于保證測試用例的準確性。因此,在測試過程中,如果測試用例包含很多不同類型的輸入或者輸出,或者測試過程的邏輯復雜而不連續(xù),此時就要對測試用例進行合理分解。
(三)盡量將類似功能的測試用例抽象并歸類
由于軟件測試是無法進行窮舉測試的,所以對類似功能的測試用例的抽象歸類顯得尤為重要,一個好的測試用例應該能夠代表一組或者一系列的測試過程。
(一)測試用例應具有代表性和典型性
一個測試用例應能基本涵蓋一組或多組情形,這也是測試用例設計的初衷。
(二)測試用例設計時,要濃縮系統(tǒng)設計
測試用例需要準確反映系統(tǒng)功能設計,當然也不能完全復制使用規(guī)格設計說明書。同時,測試用例還要結合多個規(guī)格說明書進行設計,將所有可能出現(xiàn)的情況結合起來考慮。
(三)用戶測試用例設計,要多考慮用戶實際使用場景
用戶測試用例基于用戶實際的可能場景,從用戶的角度模擬程序的輸入,從而針對程序來進行測試的用例,需要考慮用戶實際的環(huán)境因素。
(四)測試用例設計時,要考慮異常情況
測試用例不僅需要考慮正確的輸入情形,還要考慮錯誤或異常的輸入情況,以及需要分析如何使得這樣的錯誤和異常能夠發(fā)生。
測試用例設計方法,主要分為白盒設計方法和黑盒設計方法。白盒設計方法分為邏輯覆蓋法和基本路徑覆蓋法,其中邏輯覆蓋法包括語句覆蓋、判定覆蓋、條件覆蓋、判定-條件覆蓋、條件組合覆蓋法。黑盒設計方法分為等價類劃分法、邊界值劃分法、錯誤推測法、因果圖法等。在實際測試用例設計過程中,這些方法不僅單獨使用,常常根據(jù)需要場合綜合運用多個方法,使測試用例的測試效果更佳。
(一)白盒設計方法
白盒測試主要針對程序內部邏輯和數(shù)據(jù)流程的測試,因此白盒測試用例的設計需要了解程序的內部邏輯。根據(jù)程序的控制結構設計測試用例,主要用于軟件驗證。
白盒測試用例設計的目的是:
1.保證一個模塊中所有獨立路徑至少被執(zhí)行一次;
2.對所有邏輯值均需要測試真、假兩個分支;
3.在上下邊界及可操作范圍內檢查;
4.檢查內部數(shù)據(jù)結構的有效性。
白盒測試用例設計方法的設計思想:
1.語句覆蓋:設計若干測試用例,使被測程序中的每個語句至少都能執(zhí)行一次。
2.判定覆蓋:設計若干測試用例,使被測程序中的每個判斷至少都能獲得一次“真”值和“假”值,或者說使得程序中的每個分支至少都執(zhí)行一次。
3.條件覆蓋:設計若干測試用例,使每個判斷中的每個條件的可能取值至少滿足一次,即使得判定中的每個條件獲得各種可能的結果。
4.判定-條件覆蓋:設計若干測試用例,使判斷條件中的所有條件至少執(zhí)行一次取值,同時,所有判斷的可能結果至少都執(zhí)行一次。
5.條件組合覆蓋:設計足夠測試用例,使每個判斷中的條件的各種組合都至少出現(xiàn)一次。
6.基本路徑覆蓋:設計足夠測試用例,確?;韭窂郊械拿恳粭l路徑都執(zhí)行。
上述的幾種邏輯覆蓋法中,它們的邏輯覆蓋程度的強弱如圖1所示。圖中,連線上方的覆蓋程度比連線下方的覆蓋程度要強。其中,條件組合覆蓋法覆蓋程度最高,判定覆蓋和條件覆蓋不能比較覆蓋程度強弱。
(二)黑盒設計方法
黑盒測試主要是基于功能規(guī)格說明進行的測試,黑盒測試用例的設計不需要考慮程序內部的邏輯結構和特性。黑盒測試主要根據(jù)輸入條件和輸出條件確定測試數(shù)據(jù),檢查程序是否能產生正確的輸出。
黑盒測試用例設計的目的主要是:
1.檢查功能是否實現(xiàn)或遺漏;
2.檢查人機界面是否錯誤;
3.是否有數(shù)據(jù)結構錯誤或外部數(shù)據(jù)庫訪問錯誤;
4.性能等其他特性要求是否滿足。
黑盒測試用例設計方法的設計思想:
1.等價類劃分法:把程序的輸入域劃分為若干子集,從每一個子集選取少數(shù)具有代表性的數(shù)據(jù)作為測試用例,既考慮有效等價類劃分,又要考慮無效等價類劃分。
2.邊界值劃分法:從一個等價類中選一個或幾個例子,測試等價類的邊界情況;不僅根據(jù)輸入條件,還可能根據(jù)輸出情況來設計測試用例。
3.錯誤推測法:憑測試者經(jīng)驗和直覺推測程序中可能存在的各種錯誤,從而有針對性的編寫檢查這些錯誤的測試用例。
4.因果圖法:著重檢查輸入條件的各種組合情況,找出因果關系,通過畫因果圖將功能說明轉換成一張判定表,然后為判定表的每一列設計測試用例數(shù)據(jù)。
在實際應用中,采用黑盒法設計測試用例的策略為:首先使用邊界值劃分法,必要時用等價類劃分法,必要時再用錯誤推測法;如果在程序中含有輸入條件的組合,則先采用因果圖法,再按上述策略進行。
通過上面論述,我們發(fā)現(xiàn),白盒測試是一種驗證技術,主要回答“我們在正確地構造一個系統(tǒng)嗎?”;而黑盒測試是一種確認技術,主要回答“我們在構造一個正確的系統(tǒng)嗎?”。兩者的方法分析比較,我們知道各有千秋,每種方法提供的測試用例可能比較容易發(fā)現(xiàn)某種類型的錯誤,但不易發(fā)現(xiàn)其他類型的缺陷。因此,對于一個具體的待測系統(tǒng),應該將各種設計方法結合起來,選擇最佳的幾種方法組合進行綜合測試。
總之,在實際的測試用例設計中,還應將設計的基本原則和各種考慮因素結合起來,遵循基本書寫規(guī)范,按照實際需求靈活組織設計測試用例。選擇合適的設計方法和策略,使得設計出來的測試用例能夠達到這樣的要求:
1.可以最大程度地滿足測試覆蓋要求
2.可以最大程度地找出軟件隱藏的缺陷
3.可以最高效率地找出軟件錯誤
4.測試用例既不過分復雜、也不能過分簡單
5.使軟件缺陷的表現(xiàn)可以清楚的判定
6.測試用例包含期望的正確結果
7.待查的輸出結果或文件必須盡量簡單明了
8.測試用例內容清晰、格式一致、分類組織
9.不包含重復的測試用例
軟件測試是軟件研發(fā)過程的重要組成部分,是保證軟件質量和可靠性的重要環(huán)節(jié),軟件測試的成效直接關系到軟件系統(tǒng)的優(yōu)劣。因此一個軟件系統(tǒng)在發(fā)布上市前,都必須經(jīng)過嚴格的測試過程。當然,由于軟件系統(tǒng)的復雜性,軟件測試不可能找到系統(tǒng)中的所有錯誤,也不能證明系統(tǒng)程序的正確性,只能最大程度的發(fā)現(xiàn)系統(tǒng)中隱藏的錯誤和缺陷。
測試用例設計是軟件測試的核心,測試用例設計得當,在某種程度上決定著軟件測試的成效。因此在軟件測試中,測試用例的設計是非常重要和關鍵的。當然,對于一個比較復雜的系統(tǒng)測試來說,如何設計正確、高效的測試用例是非常困難的,需要軟件測試人員具備較高的專業(yè)素質和豐富的測試經(jīng)驗。
[1]鄭人杰.實用軟件工程[M].北京:清華大學出版社,2002.
[2]張海藩.軟件工程[M].北京:人民郵電出版社.2007.
[3]陳松喬,任勝兵,王國軍.現(xiàn)代軟件工程[M].北京:清華大學出版社,2005.
[4]肖漢等.軟件工程理論與實踐[M].北京:科學出版社,2006.
[5]朱少民.軟件測試方法和技術[M].北京:清華大學出版社,2005.
[6]W illiam E.Lewis,Gunasekaran Veerapilla著,陳紹英等譯.軟件測試與持續(xù)質量改進[M].北京:人民郵電出版社, 2008.
[7]李寧,李戰(zhàn)懷.基于黑盒測試的軟件測試策略研究與實踐[J].計算機應用研究,2009(3).
[8]崔天意.軟件測試分析方法研究[J].信息化研究,2010(6).
(責任編輯:王 玨)
TP 311.5
A
1009-9743(2010)04-0136-04
2010-09-20
1、2.郭學品(1973-),男,漢族,海南昌江人。海南大學信息科學技術學院通信與信息系統(tǒng)專業(yè)2005級在職碩士研究生,海南師范大學信息科學技術學院講師。主要研究方向:軟件測試,軟件工程;1.鐘聲(1962-),男,漢族,江西人。海南大學信息科學技術學院教授。主要研究方向:計算機算法,軟件工程;2.黃成(1970-),男,漢族,海南文昌人。海南師范大學信息科學技術學院副教授。主要研究方向:教育技術。
海南省自然科學基金項目(項目編號:808154)