(大連醫科大學(xué)現代教育技術(shù)部,遼寧 大連 116044)郭欣,戴冶
郭欣(1980-)女,遼寧大連人,實(shí)驗師,碩士研究生,主要研究方向為網(wǎng)絡(luò )工程。
摘要:軟件內嵌探針測試是在探針函數模板的框架內編寫(xiě)被測對象,并對被測對象進(jìn)行面向對象軟件的常規測試,在觀(guān)察預期結果與實(shí)際結果是否一致的同時(shí),還要察看探針函數輸出的信息,以確定對象的狀態(tài)是否正確。本論文研究的重點(diǎn)在于探針函數的構成、探針函數的實(shí)現及內嵌探針測試方法的應用研究,意在構筑一個(gè)基本的應用框架,提供一種實(shí)用的測試方法。
關(guān)鍵詞:軟件內嵌探針;探針函數;測試
Abstract: Built-in-self-probe-test in software (BISPT for software) compiles the object to be tested in the template of the probe function and conducts the regular
test for the OO testing. While observing the consistency between the expected results and the actual results, the output information of the probe function has to be checked in order to confirm the validity of the object to be tested.The keystone of this paper is to compose the probe function, to implement some kinds of probe functions and to make a research about the application of BISPT for software, which is intended to construct a fundamental application framework and provide a practical testing method.
Key words: BISPT for Software; Probe Function; Testing
1 引言
軟件內建自測試是軟件測試和可測性設計研究領(lǐng)域中提出的一種新方法[1],將其改稱(chēng)為軟件內嵌探針測試更為貼切。軟件內嵌探針測試是在被測對象內插入探針,在不破壞被測對象原有特性的基礎上輸出測試所需要的信息,便于測試人員確定被測對象的狀態(tài)和查找故障的原因,從而保證測試順利進(jìn)行,主要應用于類(lèi)測試、集成測試和異常測試[2]。
軟件內嵌探針測試的基本構成是探針模板部分和常規測試部分。本文研究的重點(diǎn)在于探針模板部分的設計,主要體現在類(lèi)內方法測試的探針設計和類(lèi)測試的探針設計兩個(gè)過(guò)程。
2 探針模板的設計
2.1 類(lèi)內方法測試的探針設計
類(lèi)內方法測試的探針設計流程如圖1所示。操作步驟如下:
圖1 類(lèi)內方法測試的探針設計流程
(1)分析流程圖,確定測試點(diǎn)的類(lèi)型
測試點(diǎn)可根據其插入位置不同分為四類(lèi):檢查前置條件和后置條件的測試點(diǎn)、檢查分支語(yǔ)句的測試點(diǎn)、檢查循環(huán)不變式的測試點(diǎn)、檢查路徑的測試點(diǎn)。
(2)插裝探針函數
根據測試點(diǎn)類(lèi)型的不同插入不同類(lèi)型和數量的探針函數,見(jiàn)表1。
用于檢查前置條件和后置條件的測試點(diǎn)通常使用斷言探針函數。探針函數的數量由類(lèi)不變式?jīng)Q定,一般來(lái)說(shuō),一條斷言只對應一個(gè)探針函數。檢查前置條件的探針函數插在類(lèi)內方法的入口,檢查后置條件的探針函數插在類(lèi)內方法的出口。
用于檢查分支語(yǔ)句的測試點(diǎn)分別使用兩種探針函數:若檢查分支被執行的次數,可以插入分支覆蓋探針函數;若判斷每次進(jìn)入分支時(shí)相應的變量是否符合條件,則可以插入斷言探針函數。
無(wú)論是哪種探針函數,都是在每一個(gè)分支末尾插入,因此,探針函數的插入數量與分支數相等。
用于檢查循環(huán)不變式的測試點(diǎn)分別使用兩種探針函數:若對邊界進(jìn)行檢查,可以使用斷言探針函數;若對循環(huán)次數進(jìn)行檢查,則使用分支覆蓋探針函數。無(wú)論是哪種探針函數,其插入的位置均在循環(huán)體的末尾,數量均為一個(gè)。
用于檢查路徑的測試點(diǎn)采用路徑探針函數,插入方法是在路徑的每一個(gè)連續執行塊中插入一個(gè)路徑探針函數的一個(gè)分探針,當程序被執行時(shí),探針函數記錄測試用例所測試的路徑。
(3)生成測試用例
最常用的方法是采用值域矩陣的形式,見(jiàn)表2。值域矩陣是變量、邊界條件、上點(diǎn)/離點(diǎn)及測試實(shí)例的一種表格表示。表格第一行記錄項目號、模塊號、測試者姓名和測試日期。表格第二行記錄測試號。表格的列的基本構成是:條件部分、動(dòng)作部分和結果部分。條件部分記錄變量和邊界條件的上點(diǎn)/離點(diǎn),動(dòng)作部分記錄這些變量在不同條件下所引發(fā)的動(dòng)作,結果部分記錄期望的測試結果和實(shí)際的測試結果。表格體內用“○”標示不同變量值的排列組合及對應的動(dòng)作。
表2 測試用例
(4)運行測試用例
根據值域矩陣運行測試用例。在測試結果一欄,若實(shí)際結果與期望結果一致,則在相應的單元格內以“√”標示,表示測試通過(guò),否則以“╳”標示,表示測試沒(méi)有通過(guò)。
(5)生成測試報告
對于通過(guò)測試的被測對象可以進(jìn)入下一階段的測試。對于沒(méi)有通過(guò)測試的被測對象需要返還給開(kāi)發(fā)組進(jìn)行修改,并重新生成測試用例,對修改后的被測對象進(jìn)行測試。這一過(guò)程將一直循環(huán)執行,直至測試用例通過(guò)為止。
2.2 類(lèi)測試的探針設計
類(lèi)測試的探針設計流程如圖2所示。操作步驟如下:
圖2
類(lèi)測試的探針設計流程
(1)繪制狀態(tài)轉換圖,確定狀態(tài)不變式
狀態(tài)轉換圖類(lèi)似于流程圖,將對象的狀態(tài)之間的轉換關(guān)系用圖的形式表示出來(lái)。狀態(tài)轉換圖包括狀態(tài)、觸發(fā)狀態(tài)轉變的事件,以及該事件引發(fā)的動(dòng)作,如圖3所示。
圖3 狀態(tài)轉換圖
(2)插裝探針函數
由狀態(tài)圖分析得到轉換樹(shù),如圖4所示。在觸發(fā)狀態(tài)轉變的事件的末尾插入檢查狀態(tài)不變式的斷言探針函數,每一條斷言只對應一條斷言探針語(yǔ)句。
圖4 轉換樹(shù)
(3)繪制響應矩陣
由轉換樹(shù)繪制響應矩陣。響應矩陣將所有的狀態(tài)和事件繪制到一個(gè)表里,見(jiàn)表3。每個(gè)受監視的事件均為一行,每個(gè)受監視事件對其監視的每個(gè)真值組合均有一列,且對其監視中的每個(gè)謂詞均有一個(gè)附加列。分別考慮矩陣中行與列交叉的單元格,若在某一狀態(tài)可以接受一個(gè)事件,在此單元格內以“√”標示,代表正確路徑。若不能接受,有兩種情況:其一,在此狀態(tài)不可能引發(fā)該事件,則在單元格內以“╳”標示,表示排除這種組合。除此以外,單元格內均填入數字“1”或“2”,表示應拒絕或應激發(fā)非正常終端服務(wù)并使過(guò)程停止,這些單元格表示可能的潛行路徑。
表3 響應矩陣
(4)設計測試用例包
由響應矩陣分析得到一致性測試包和潛行路徑測試包。由響應矩陣中標有“√”的元素組成一致性測試包,由有數字的元素組成潛行路徑測試包。
(5)運行測試用例
根據一致性測試包和潛行路徑測試包對被測對象進(jìn)行測試,并將測試結果記入實(shí)際結果一欄。
(6)生成測試報告
通過(guò)測試的被測對象可以進(jìn)入下一階段的測試。沒(méi)有通過(guò)測試的被測對象需要返還給開(kāi)發(fā)組進(jìn)行修改,再對修改后的被測對象重新測試,直至通過(guò)為止。
3 結論
軟件內嵌探針測試是面向對象軟件測試的有效方法。面向對象軟件的測試要求是基于狀態(tài)的測試,軟件內嵌探針測試方法恰是基于狀態(tài)的測試方法。它采用比較成熟的黑盒測試和白盒測試[3]對被測對象進(jìn)行測試,同時(shí),使用探針函數檢查被測對象,將測試相關(guān)信息輸出到指定的文件中。通過(guò)構建探針函數使測試人員對程序內部工作流程一目了然,而且既不會(huì )破壞面向對象軟件的封裝機制,也不會(huì )影響測試的進(jìn)行。
其他作者:戴冶(1982-),男,遼寧鐵嶺人,助理實(shí)驗師,學(xué)士,主要研究方向為網(wǎng)絡(luò )工程及一卡通技術(shù)。
參考文獻:
[1] 彭成寒, 徐拾義. 軟件內建自測試中模板內容的研究和實(shí)現[J]. 計算機應用研究, 2006, (10): 78-81.
[2] 譚建勇, 徐拾義. 軟件內嵌探針測試及其面向對象模板的設計[J]. 計算機工程與應用, 2003, 39 (18): 124-126.
[3] 賀平. 軟件測試教程[M]. 北京: 電子工業(yè)出版社, 2005.
摘自《自動(dòng)化博覽》2010年第十期