日志分析法在一卡通系統(tǒng)測試中的應(yīng)用
文章出處:http://botanicstilllife.com 作者: 人氣: 發(fā)表時(shí)間:2011年09月10日
摘要:針對一卡通系統(tǒng)測試中因輸出結(jié)果數(shù)量大、系統(tǒng)關(guān)聯(lián)復(fù)雜、測試準(zhǔn)則構(gòu)造困難等因素而導(dǎo)致的難以判斷輸出結(jié)果正確性的問題, 提出了擴(kuò)展日志分析法。介紹了實(shí)現(xiàn)該方法的系統(tǒng)結(jié)構(gòu)和所使用的測試狀態(tài)機(jī), 引入了一種自行開發(fā)的支持層次化狀態(tài)機(jī)、具有執(zhí)行自定義函數(shù)功能的狀態(tài)機(jī)定義語言, 增強(qiáng)了擴(kuò)展日志分析法測試復(fù)雜大型系統(tǒng)的能力。該方法在一卡通系統(tǒng)測試中得到了應(yīng)用。
關(guān)鍵詞:軟件測試;日志分析法;狀態(tài)機(jī);狀態(tài)機(jī)定義語言
市政交通一卡通系統(tǒng)OCMS( One Card Multi-service System,以下簡稱“一卡通系統(tǒng)”) 是一套與人們?nèi)粘I铌P(guān)系密切的電子交易系統(tǒng)。該系統(tǒng)要求較高的安全性和可靠性, 需要進(jìn)行嚴(yán)格的測試。測試中遇到了輸出結(jié)果數(shù)據(jù)量大、系統(tǒng)關(guān)聯(lián)復(fù)雜、測試準(zhǔn)則( Test Oracle) 構(gòu)造困難等問題, 難以判斷輸出結(jié)果的正確性。手工測試方法效率低、易出錯(cuò); 使用基于測試準(zhǔn)則的方法如回歸測試法[ 1] 、斷言測試法[ 2 ] 等也具有一定的困難。日志分析法( Log File Analysis, LFA) [ 3] 使用狀態(tài)機(jī)分析被測系統(tǒng)的日志實(shí)現(xiàn)軟件測試, 具有構(gòu)造簡單、描述能力強(qiáng)等特點(diǎn), 較適合應(yīng)用于關(guān)聯(lián)復(fù)雜的系統(tǒng)測試中。本文針對一卡通系統(tǒng)的特點(diǎn), 提出了支持層次化狀態(tài)機(jī)的擴(kuò)展日志分析法, 增加了執(zhí)行自定義函數(shù)的功能, 使之更適用于一卡通系統(tǒng)的測試, 并基于該方法實(shí)現(xiàn)了測試系統(tǒng), 在一卡通系統(tǒng)測試中取得了良好的效果。
1 研究背景
1. 1 一卡通系統(tǒng)
一卡通系統(tǒng)是一個(gè)小金額電子交易系統(tǒng), 由消費(fèi)IC 卡、消費(fèi)機(jī)具( 出租車計(jì)價(jià)器、公交刷卡機(jī)等) 、客戶端( 出租客戶端,公交客戶端等) 、各級分中心、總中心以及數(shù)據(jù)傳輸網(wǎng)絡(luò)等組成。消費(fèi)者在進(jìn)行交易時(shí), 消費(fèi)機(jī)具對消費(fèi)IC 卡進(jìn)行讀寫, 產(chǎn)生交易數(shù)據(jù)。交易數(shù)據(jù)定期從消費(fèi)機(jī)具中采集到客戶端中, 通過計(jì)算機(jī)網(wǎng)絡(luò)逐級上傳, 最終匯總到總中心, 進(jìn)行結(jié)算劃賬。
一卡通系統(tǒng)內(nèi)部關(guān)聯(lián)復(fù)雜, 對可靠性和安全性的要求較高, 中間輸出和最終輸出與前期的運(yùn)行情況關(guān)系緊密、變化大。這些特點(diǎn)要求系統(tǒng)在開發(fā)、試運(yùn)行以及升級維護(hù)時(shí), 都需要進(jìn)行大量的測試, 要求使用的測試方法效率高, 能適應(yīng)復(fù)雜系統(tǒng)和輸出結(jié)果與前期關(guān)系緊密的情況。
1. 2 日志分析法
日志分析法是文獻(xiàn)[ 3] 中提出的一種用狀態(tài)機(jī)對被測系統(tǒng)的日志進(jìn)行分析實(shí)現(xiàn)軟件測試的方法。該方法要求被測系統(tǒng)產(chǎn)生文本日志, 記錄測試過程中的輸入、輸出、函數(shù)調(diào)用以及返回值等重要事件。日志被輸入狀態(tài)機(jī)進(jìn)行分析, 實(shí)現(xiàn)測試。狀態(tài)機(jī)由測試人員根據(jù)被測系統(tǒng)的需求轉(zhuǎn)換生成。當(dāng)狀態(tài)機(jī)在日志的驅(qū)動下終止于終態(tài)時(shí), 說明日志符合狀態(tài)機(jī)的要求,即被測系統(tǒng)符合需求; 否則, 不符合要求。
日志分析法與回歸測試法、斷言測試法等相比, 具有效率高、構(gòu)造簡單、依據(jù)狀態(tài)機(jī)判斷測試輸出的正確性等特點(diǎn)。但文獻(xiàn)[ 3] 中定義狀態(tài)機(jī)的LFAL 語言描述能力受限: 對狀態(tài)機(jī)不能進(jìn)行層次化的設(shè)計(jì), 不宜描述大型系統(tǒng); 沒有執(zhí)行自定義函數(shù)等功能, 對復(fù)雜系統(tǒng)描述困難。
2 基于日志分析法的一卡通測試系統(tǒng)
2. 1 總體結(jié)構(gòu)
基于日志分析法并針對一卡通系統(tǒng)的特點(diǎn)而提出了擴(kuò)展日志分析法, 同時(shí)實(shí)現(xiàn)了基于該方法的一卡通日志分析測試系統(tǒng)———OLFTS( OCMS Log File Testing System) 。系統(tǒng)總體結(jié)構(gòu)如圖1 所示。
圖 1 OLFTS 總體結(jié)構(gòu)
首先, 將一卡通系統(tǒng)的一個(gè)或一組相近的需求轉(zhuǎn)換為由函數(shù)調(diào)用、消息發(fā)送等描述的執(zhí)行過程, 并確定函數(shù)調(diào)用等發(fā)生的條件以及返回值等。然后, 用狀態(tài)機(jī)定義語言TSML( TestingState Machine Language) 定義一個(gè)描述該過程的狀態(tài)機(jī)( . tsm文件) , 并輸入狀態(tài)機(jī)編譯器, 將其編譯為某種語言源代碼( 以Java語言為例) , 作為中間結(jié)果。調(diào)用相應(yīng)語言的編譯器將中間結(jié)果編譯為可執(zhí)行文件, 最終得到可執(zhí)行的狀態(tài)機(jī)。測試時(shí), 先將狀態(tài)機(jī)可執(zhí)行文件輸入狀態(tài)機(jī)容器中, 再將被測系統(tǒng)的日志文件輸入狀態(tài)機(jī)容器。狀態(tài)機(jī)容器負(fù)責(zé)讀取日志、創(chuàng)建狀態(tài)機(jī), 廣播日志, 收集狀態(tài)機(jī)輸出和產(chǎn)生測試報(bào)告等工作。狀態(tài)機(jī)在日志驅(qū)動下進(jìn)行狀態(tài)轉(zhuǎn)移, 并向容器輸出信息。
2. 2 日志
測試需要的日志由被測系統(tǒng)產(chǎn)生。每一個(gè)日志行表示一個(gè)事件的發(fā)生, 例如函數(shù)調(diào)用、消息發(fā)送等。日志行由行單元組成, 行單元之間用空格分隔。每個(gè)日志行開頭的行單元稱為關(guān)鍵行單元, 必須是一個(gè)字符串, 通常是被調(diào)用函數(shù)的名稱、消息名等。緊挨關(guān)鍵行單元之后的行單元一般是被調(diào)用函數(shù)的返回值或消息參數(shù)等, 再后面是一些表示其他信息的行單元。狀態(tài)機(jī)通過日志行的關(guān)鍵行單元來判斷是否對其敏感。對敏感日志行, 通過判斷函數(shù)的返回值或消息參數(shù)以及其他信息決定如何進(jìn)行狀態(tài)轉(zhuǎn)移。出租客戶端數(shù)據(jù)采集過程的日志片斷如下:
2. 3 測試狀態(tài)機(jī)與狀態(tài)機(jī)定義語言
有限狀態(tài)機(jī)FSM( Finite State Machine, 以下簡稱狀態(tài)機(jī)) [ 4]被廣泛應(yīng)用于諸多領(lǐng)域, 如電路設(shè)計(jì)[ 5] 、通信協(xié)議測試[ 6] 等。普通的狀態(tài)機(jī)所提供的描述能力有限, 用來描述軟件的執(zhí)行過程能力尚顯不足。結(jié)合文獻(xiàn)[ 3] 中所使用的狀態(tài)機(jī)和文獻(xiàn)[ 7]中提出的PSM( Protocol State Machine) , OLFTS 中定義了一種新的狀態(tài)機(jī)———測試狀態(tài)機(jī)TSM( Testing State Machine) 。
定義1 TSM。一個(gè)TSM為一個(gè)11 元組:
與普通狀態(tài)機(jī)相比, TSM增加了謂詞集和動作集, 采用了更嚴(yán)格的轉(zhuǎn)移函數(shù), 描述能力更強(qiáng), 比普通狀態(tài)機(jī)更適合描述軟件的執(zhí)行過程、應(yīng)用于軟件測試。
雖然可采用普通的計(jì)算機(jī)語言實(shí)現(xiàn)TSM, 但為了方便TSM的設(shè)計(jì), OLFTS 中開發(fā)了一種支持層次化設(shè)計(jì)和自定義函數(shù)的狀態(tài)機(jī)定義語言TSML。其EBNF[ 8] 描述如下所示:
第1頁第2頁 |