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