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