軟件測試工具研究論文

時間:2022-09-06 08:02:00

導語:軟件測試工具研究論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

軟件測試工具研究論文

引言

在國內,目前大型的軟件工程中大都使用國外的軟件測試平臺,我們在測試工程中使用法國的LOGISCOPE測試平臺對C語言開發的實時嵌入式軟件進行測試。

由于實時嵌入式軟件主要是對外部接口設備進行控制,而被送檢的軟件需要大量不同的硬件環境,在進行測試時,由于無法建立大量不同的接口設備的硬件仿真環境,每當執行輸入輸出指令時,程序便無法繼續運行,因此,測試軟件無法完整地覆蓋整個程序的各個分支和語句。同時,被測試軟件常常需要多個模塊同時對某個外設進行共同測試,需要通過網絡環境進行集中測試。

為了完成對各種實時嵌入式軟件的測試工作,我們研制開發了基于網絡的接口設備的軟件仿真環境,使得用戶程序運行時不再需要真正的接口硬件設備,而是與仿真軟件進行通訊,交換數據,從而使得被測程序在脫離硬件的環境中順利運行。本課題主要解決C語言和匯編語言混合編程中,把所有原來控制外設的輸入輸出指令都修改成與仿真軟件進行通信的函數,同時,把原來由硬件觸發的中斷處理功能轉由軟件觸發,以及通過網絡環境完成多模塊的集中測試。

本課題的意義在于建成一種通用的方法,使得不同軟件開發的程序都能夠使用這些功能模塊與接口仿真軟件進行通信,從而順利地進行軟件測試。

被測軟件的運行環境絕大多數是基于DOS的,在仿真環境下進行測試時,由于原來的硬件環境不再存在,因此要求對被測軟件進行相應的修改,使其在一個新的系統模型當中運行:原來與硬件進行I/O的指令,變成對仿真軟件通訊動態鏈接庫中函數的調用;由硬件觸發的中斷信號變成來自仿真軟件的消息;更重要的是,原來由CPU負責調度的中斷服務函數必須由新的模型來負責(因為不再有硬件中斷信號),而由于DOS是一個單任務的操作系統,系統模型需要解決以下的問題:系統如何在程序運行的時刻檢測到通過網絡發過來的“中斷信號”,如何中斷當前的程序,去執行相應的中斷服務函數,如何具有中斷嵌套的功能。

基于以上要求,系統模型采用以下兩種:

基于DOS的多任務調度系統模型

基于Windows多線程環境的系統模型

2.基于DOS環境的多任務調度模型

2.1實現原理

想要在DOS環境下實現多任務調度,必須使每個任務具有自己的堆棧。首先,棧用來實現任務切換,其次,它用來存貯任務的局部變量。

任務的切換是通過調用一個子程序來實現的,該子程序將堆棧指針由原來指向老任務的堆棧置為指向新任務的堆棧。程序返回時,新的任務指令指針(IP)就從棧中彈出。新任務就開始自動開始執行。

這個負責調度的子程序是通過時鐘中斷來定期觸發的。當產生時鐘中斷時,需要做兩件事情。首先,將標志(Flags)寄存器的內容壓入棧中,其次,緊跟在指令指針(IP)之后,將CS(代碼段)也壓入棧中。最后,將中斷服務子程序的段地址裝入CS寄存器中,將偏址裝入IP寄存器中.這樣可以使ISR開始運行.中斷返回時,CS,IP和Flags寄存器的內容自動彈出。為了實現任務的調度,新的時鐘中斷服務函數要完成兩項工作。首先,它將除了棧指針(SP)和棧段(SS)寄存器之外的所有寄存器的值都存到棧中。(SP和SS的值存在另外的位置)。其次,它改變SS和SP寄存器的值,使它們指向另一個任務的堆棧。因此,當ISR返回時,新的任務的堆棧被彈出到各寄存器中,這使得機器的狀態是針對新的任務的。由于IP中也是彈出的寄存器的值,因此新任務就開始執行。

在任務運行前,它必須按一定方式使堆棧初始化,這樣使得當第一個時間片到來時,從棧中彈出的值能夠使該任務從頭開始運行。因此,任務的堆棧必須初始化并存放正確的寄存器值,同時指令指針也必須指向程序中的第一條指令。

2.2調度內核實現所用到的數據結構

interrupt類型

當說明一個函數為interrupt類型時,它告訴編譯器自動保存所有寄存器(sp和ss除外)的值,并且IRET指令終止該函數。每當進入到interrupt函數時,執行下列指令:

pushax,pushbx,pushcx,

p

ushdx,pushes,pushds

pushsi,pushdi,pushbp

發生中斷時,CPU自動將Flags,cs和IP寄存器壓棧。因此,在interrupt函數入口處,堆棧如圖2.2.1.2所示。我們將利用interrupt函數的棧的安排方式對要執行的任務的堆棧進行初始化。

Bp<-topofstack

DI

SI

DS

ES

DX

CX

BX

AX

IP

CS

PLAGS

任務中使用的寄存器的數據結構

typedefstructint_regs{

unsignedbp;

unsigneddi;

unsignedsi;

unsignedds;

unsignedes;

unsigneddx;

unsignedcx;

unsignedbx;

unsignedax;

unsignedip;

unsignedcs;

unsignedflags;

};

此結構嚴格按照interrupt函數入口處堆棧的結構定義,初始化時,將結構中的代碼段(CS),指令指針(IP)設置成構成此任務的函數的段地址和偏移地址。

用于任務管理的數據結構

structtask_struct{

unsignedsp;

unsignedss;

unsignedchar*stck;

unsignedLastTask;

unsignedIntNum;

unsignedStatus;

}

當執行任務切換時,sp和ss保存當前棧指針和堆棧段地址,而任務調度程序將當前棧指針(_SP)和棧地址(_SS)設置成下一個將要執行的任務的棧指針和棧地址,當調度程序結束運行時,由于從棧中彈出的各個寄存器,包括代碼段和指令指針都是指向新任務的,因此,新任務將自動運行,從而達到任務切換的目的。

2.3應用多任務調度功能實現對中斷的仿真處理

由于被測試的用戶源程序是工作在仿真環境下,無法接收硬件產生的中斷信號從而自動執行相應的中斷服務程序。因此,改編后的程序應該能夠定期檢查是否有從仿真軟件發過來的中斷信號,若有,則中斷當前程序的執行,轉入相應的中斷服務函數執行。

因為用戶的程序當中顯式地設置中斷向量,在改寫用戶的程序時,將每個中斷服務函數入口都置于一個向量數組當中,此數組即為全局中斷向量表,將任務號與相應的中斷號一一對應。

當時鐘中斷觸發任務調度程序時,調度程序首先檢測由仿真軟件發來的中斷信號,如果有,則調度程序在當前運行的任務的數據結構中保存堆棧段段地址寄存器(_SS)、棧指針寄存器(_SP)、當前任務號,并將堆棧段段地址寄存器和棧指針寄存器設置成新的中斷服務程序所在的任務的相應的值,使得當調度程序返回時,能夠從新的任務開始運行。然后生成一個新的任務,在此任務當中調度對應于此中斷號的中斷服務程序這樣就可以實現中斷功能。

3.基于Windows多線程環境的系統模型

3.1實現原理

考慮部分由C語言編寫的實時嵌入式程序經過適當的修改可以由VC編譯后,在Windows環境中運行。因此可以利用Windows的多線程特性構造系統模型:把用戶的主函數放在系統初始化時生成的一個主線程當中運行,同時,系統主函數監測由Socket端口發來的數據,如果是一個中斷產生信號,系統主函數掛起當前正在執行的線程,新生成一個新的線程,并在新線程中執行相應的中斷服務函數。

3.2系統的結構

由于CSocket類不能夠由各個線程之間共享,而各個線程內部又要通過Socket端口接收和發送數據,因此應建立高效而又防止各線程之

當線程需要通過Socket接口收發數據時,首先檢測/設置相應函數的信號量,若此資源不能使用,則線程被自動掛起。系統的主調函數負責輪詢來自Socket接口的數據以及各個信號量資源,當資源可用時,喚醒相應的線程,完成其請求的操作。如果接收到中斷產生信號,則生成新的線程,并掛起當前的線程,從而完成對中斷請求的響應。

4.結束語

本文介紹了針對實時嵌入式軟件的測試工具研究與完善工作,根據不同的軟件特點,

構造了兩種系統模型。通過實際的使用,都達到了比較滿意的結果。

這兩種系統模型經過適當的修改,可以應用在其它語言編寫的軟件上,從而可以實現通用的模塊功能。

參考文獻

呂強楊季文等C語言的DOS系統程序設計清華大學出版社

李沐孫TURBOC常駐內存實用程序及窗口式軟件編程技術北京科海

陳宗海基于C/S體系的工業過程仿真模型調試環境.計算機應用.1999,4

張海藩軟件工程導論.清華大學出版社,1995

朱利群軟件測試模型及其實現。湖南師范大學自然科學學報19989

王璞基于覆蓋的軟件測試技術在實時嵌入式軟件中的應用研究.計算機工程與設計199812