張 欣
(北京控制工程研究所,北京 100190)
第三方獨立測試是保證星上軟件質(zhì)量的重要方法,而動態(tài)測試是第三方獨立測試過程中最重要的環(huán)節(jié)之一。軟件的動態(tài)測試是指通過人工或使用工具對運行的被測軟件進行檢查、分析程序的執(zhí)行狀態(tài)和外部表現(xiàn)的活動[1]。動態(tài)測試過程包括測試需求分析、測試設(shè)計、測試環(huán)境開發(fā)、測試用例執(zhí)行以及測試結(jié)果分析。簡單概括,動態(tài)測試過程就是根據(jù)測試需求對測試數(shù)據(jù)進行分析并得到測試結(jié)論的過程。
目前,型號軟件測試任務(wù)成倍增長,單一軟件配置項復(fù)雜度不斷提高,不同型號軟件功能與對外接口千差萬別,在此情況下,如何在保證測試質(zhì)量的前提下,提高測試效率,按進度要求完成任務(wù)節(jié)點,是第三方獨立測試所面臨的重要挑戰(zhàn)。而根據(jù)測試需求和設(shè)計,快速地搭建測試環(huán)境,使測試人員能夠簡單、有效地實施動態(tài)測試,并幫助他們高效地分析測試數(shù)據(jù)恰恰是關(guān)鍵所在。
傳統(tǒng)的測試環(huán)境開發(fā)做法是針對被測軟件運行環(huán)境和測試數(shù)據(jù)的差異性,定制不同軟件專用的測試環(huán)境,包括I/O接口驅(qū)動、通信協(xié)議模擬、輸入數(shù)據(jù)生成、輸出數(shù)據(jù)解析處理等。這樣的測試環(huán)境不僅通用性、可移植性差,調(diào)試難度大,而且功能擴展困難;即使功能只有微小差別的軟件,如果換了開發(fā)人員,也很難做到只需對現(xiàn)有的環(huán)境進行局部修改就能快速適應(yīng)測試需求,極大地延緩了測試項目的進度。
另外,測試人員對測試環(huán)境提出了許多新的需求,包括測試數(shù)據(jù)的實時顯示、自動比對、可篩選、在線與離線分析、測試過程的回放以及關(guān)鍵數(shù)據(jù)或狀態(tài)的監(jiān)控等。這些都要求我們開發(fā)一種可配置的軟件自動化動態(tài)測試系統(tǒng)。這里,可配置的概念是指針對不同軟件,提取測試環(huán)境的可重用部分,將其固定下來,形成通用的功能,利用配置的方法,將差異部分描述出來,提供給通用的處理,實現(xiàn)差異部分的自動識別和處理,從而實現(xiàn)一個通用的軟件動態(tài)測試系統(tǒng)。
本文提出了一個符合上述需求的自動化動態(tài)測試原型系統(tǒng)——CSTS(Configurable Software Testing System),并詳細描述了CSTS的系統(tǒng)框架和關(guān)鍵技術(shù)。
如圖1所示,CSTS系統(tǒng)主要由目標(biāo)機或目標(biāo)機模擬器、測試腳本驅(qū)動器、輸入數(shù)據(jù)流生成器、輸出數(shù)據(jù)流解析器以及數(shù)據(jù)綜合分析與應(yīng)用5個模塊構(gòu)成。
圖1 CSTS系統(tǒng)結(jié)構(gòu)圖
目標(biāo)機或目標(biāo)機模擬器模塊主要實現(xiàn)被測軟件的運行環(huán)境,可以是真正的硬件目標(biāo)機,主要應(yīng)用于硬平臺測試;也可以是目標(biāo)機的軟件模擬器,主要應(yīng)用于軟平臺測試。目標(biāo)機的軟件模擬器包括兩個部分,處理器芯片與內(nèi)存模擬器以及I/O接口模擬器。
針對處理器芯片與內(nèi)存模擬器,CSTS系統(tǒng)將特定的處理器芯片功能提取、封裝成模塊,并對外提供一致的軟件接口和操作界面。針對I/O接口模擬器,CSTS系統(tǒng)模擬了多種常用接口芯片的功能,并定義了處理器與各I/O接口之間連接關(guān)系的描述語言。這樣只需根據(jù)被測軟件選取處理器芯片和I/O接口模擬器,并描述它們之間的連接關(guān)系,就可以迅速地搭建起被測軟件的運行環(huán)境。
動態(tài)測試的運行過程由測試腳本驅(qū)動和控制。傳統(tǒng)的做法是根據(jù)不同的被測軟件定制專門的腳本令和腳本解析程序,這樣做的缺點是由于腳本的語法和詞法千差萬別,使得腳本解析程序僅僅適應(yīng)當(dāng)前被測軟件,不具備通用性、可移植性和可擴展性。
CSTS系統(tǒng)借鑒了文獻[2]中提到的多腳本語言的測試數(shù)據(jù)分離方法,首先定義了腳本令的標(biāo)準(zhǔn)語法,使得解析程序的語法解析部分可以實現(xiàn)通用化。然后采用描述的方法定義腳本令的詞法,解析程序結(jié)合描述文件可以得到它的詞法含義。這樣針對不同軟件的測試腳本驅(qū)動部分,僅需要生成詞法描述文件,不需要對腳本解析程序做任何修改,就能大幅度地提高測試環(huán)境的通用性、可移植性和可擴展性,縮減開發(fā)的工作量。
輸入數(shù)據(jù)流生成與輸出數(shù)據(jù)流解析兩個模塊實現(xiàn)測試數(shù)據(jù)的生成與解析功能。
這里測試數(shù)據(jù)的概念涵蓋了被測軟件輸入輸出數(shù)據(jù)和各種中間結(jié)果數(shù)據(jù),包括被測軟件的注入數(shù)據(jù)、其它軟件發(fā)送給被測軟件的數(shù)據(jù)、被測軟件的遙測數(shù)據(jù)、被測軟件通過各硬件端口發(fā)送給其他軟件的數(shù)據(jù)、測試過程中測試環(huán)境產(chǎn)生的數(shù)據(jù)以及被測軟件的內(nèi)部變量值等。
目前,針對不同被測軟件,要開發(fā)其專用的測試數(shù)據(jù)生成、解析程序。由于被測軟件的測試數(shù)據(jù)格式定義不一致,數(shù)據(jù)源不統(tǒng)一,數(shù)據(jù)量不斷加大,這種專門開發(fā)的方法耗費了大量的人力資源,增加了測試環(huán)境的調(diào)試難度,延緩了測試項目的進度。那么是否可以采用增加配置的方法,由測試人員定義測試數(shù)據(jù),然后采取通用的方法生成或解析測試數(shù)據(jù),從而達到針對不同軟件采用通用方法生成或解析測試數(shù)據(jù)的目的呢?
輸入數(shù)據(jù)流生成器可實現(xiàn)測試數(shù)據(jù)輸入流的自動生成。CSTS系統(tǒng)針對測試數(shù)據(jù)流的輸入,開發(fā)了通用的數(shù)據(jù)流生成組件,并定義了專門的輸入數(shù)據(jù)流描述文件,測試人員在設(shè)計測試用例時,配置輸入數(shù)據(jù)流描述文件;運行測試用例時,將文件通過腳本驅(qū)動提交給數(shù)據(jù)流生成組件,實現(xiàn)測試數(shù)據(jù)流的輸入。
輸出數(shù)據(jù)流解析器可實現(xiàn)測試數(shù)據(jù)輸出流的自動解析。CSTS系統(tǒng)針對測試數(shù)據(jù)流的輸出,開發(fā)了通用的數(shù)據(jù)流解析組件,并定義了專門的輸出數(shù)據(jù)流描述文件,測試人員在完成測試需求分析后,根據(jù)被測軟件輸出數(shù)據(jù)的格式,配置數(shù)據(jù)流描述文件;測試運行時,CSTS調(diào)用數(shù)據(jù)流解析組件解析數(shù)據(jù)。
CSTS系統(tǒng)在測試數(shù)據(jù)的生成和解析中引入了通用組件結(jié)合配置文件的方式,極大地縮減了測試環(huán)境開發(fā)人員的工作量,大大提高了測試效率。
測試人員在獲得解析了的測試數(shù)據(jù)之后,還需要綜合地分析和應(yīng)用測試數(shù)據(jù),得出測試結(jié)論。 CSTS系統(tǒng)的數(shù)據(jù)流解析組件可以實現(xiàn)海量測試數(shù)據(jù)的篩選,關(guān)鍵數(shù)據(jù)或狀態(tài)的監(jiān)控和實時報告;測試數(shù)據(jù)顯示組件可以實現(xiàn)測試數(shù)據(jù)的實時顯示、報告以及測試過程的回放;獲得輸入和輸出數(shù)據(jù)流及其描述之后,實現(xiàn)測試數(shù)據(jù)的在線、離線分析與自動比對并不困難。這樣CSTS系統(tǒng)就為測試人員分析測試數(shù)據(jù),得出測試結(jié)論提供了強大的支持。
限于篇幅,這里僅針對測試數(shù)據(jù)的生成、解析、分析以及應(yīng)用模塊的總體框架和關(guān)鍵技術(shù)做詳細論述。
測試數(shù)據(jù)的生成、解析、分析以及應(yīng)用模塊的總體框架如圖2所示。
圖2 測試數(shù)據(jù)的生成、解析、分析與應(yīng)用的總體結(jié)構(gòu)圖
a.配置器:測試人員應(yīng)用配置器生成數(shù)據(jù)流描述文件,包括輸入數(shù)據(jù)流描述文件和輸出數(shù)據(jù)流描述文件。
b.數(shù)據(jù)流描述文件:對已確定類型的外部數(shù)據(jù)按照被測軟件要求以二進制字節(jié)流格式進行形式化描述。
c.數(shù)據(jù)流生成器:通過腳本驅(qū)動,在確定的時間、確定的條件下,根據(jù)數(shù)據(jù)流描述文件將外部數(shù)據(jù)轉(zhuǎn)換成二進制字節(jié)流。
d.輸入數(shù)據(jù)流:按照星上軟件數(shù)據(jù)流格式生成的二進制字節(jié)流。
e.輸出數(shù)據(jù)流:將被測軟件輸出的數(shù)據(jù)以及各種中間結(jié)果數(shù)據(jù)集合的二進制字節(jié)流。
f.數(shù)據(jù)流解析器:根據(jù)數(shù)據(jù)流描述文件,按照測試人員定義的特定篩選和存儲格式,實時解析和存儲數(shù)據(jù)流源碼,監(jiān)視數(shù)據(jù)的取值范圍和狀態(tài)變化,觸發(fā)事件報警。解析后的測試數(shù)據(jù)一邊通過網(wǎng)絡(luò)實時發(fā)送給數(shù)據(jù)流顯示器提供實時顯示功能,一邊存儲為數(shù)據(jù)表文件。
g.數(shù)據(jù)表文件:解析后的測試結(jié)果數(shù)據(jù)輸出到數(shù)據(jù)表文件。
h.數(shù)據(jù)流交換器:定義了解析器與顯示器之間的通信接口與協(xié)議。解析器采用通信服務(wù)的方式將解析結(jié)果實時發(fā)送給顯示器并顯示。
i.數(shù)據(jù)流顯示器:以多種視圖的方式顯示解析后的測試數(shù)據(jù),并顯示報警事件。
j.數(shù)據(jù)庫:存儲整個測試過程產(chǎn)生的測試數(shù)據(jù)。
k.數(shù)據(jù)流回放:從數(shù)據(jù)庫或數(shù)據(jù)表文件中篩選數(shù)據(jù),提供給數(shù)據(jù)流顯示器,完成測試過程的回放功能。
l.數(shù)據(jù)流視圖:將同一份測試數(shù)據(jù)以不同的視圖顯示,這里提供了4種視圖,即源碼視圖、數(shù)據(jù)表視圖、圖形視圖、報警事件視圖。
m.源碼視圖:按照字節(jié)顯示測試數(shù)據(jù)的源碼。
n.數(shù)據(jù)表視圖:將測試數(shù)據(jù)顯示成一張二維表,每收到一幀數(shù)據(jù)顯示一行。
o.X-T圖:以折線圖、散點圖、項平面圖等圖形顯示測試數(shù)據(jù)。
p.報告視圖:顯示重要的數(shù)據(jù)和狀態(tài)變化事件。
CSTS系統(tǒng)采用面向?qū)ο蟮姆椒ǘx了一套數(shù)據(jù)流描述規(guī)則,定義了5種主要的類,包括DataSet(數(shù)據(jù)集)類,Data(數(shù)據(jù))類,BitDefine(碼位)類,Value(數(shù)據(jù)值)類和Enum(枚舉)類,類之間的關(guān)系如圖3所示。
圖3 數(shù)據(jù)流描述各類之間的關(guān)系圖
DataSet類,代表一個二進制字節(jié)流,承載多個具體的數(shù)據(jù)。DataSet包含3個屬性,分別為數(shù)據(jù)流的標(biāo)識、名稱和長度。DataSet關(guān)聯(lián)一個或多個Data類。
Data類,代表一個具體的數(shù)據(jù)。Data包含7個屬性,其中屬性offset和length 主要描述數(shù)據(jù)在字節(jié)流中所處的范圍。Data關(guān)聯(lián)一個BitDeFine類。
BitDeFine類,定義一個具體數(shù)據(jù)在bit流上所處的范圍。BitDeFine關(guān)聯(lián)一個Value類。
Value類,定義具體數(shù)據(jù)的類型以及取值范圍。屬性type,表示數(shù)據(jù)的類型,可能的取值包括布爾型、整型、浮點型、枚舉型以及被測軟件采用的特殊數(shù)據(jù)類型,例如3字節(jié)浮點數(shù)、偏移二進制碼、二進制補碼等。
這里將枚舉類型抽象成單獨的類——Enum類,關(guān)聯(lián)到DataSet下,以供其他的數(shù)據(jù)復(fù)用。
為了實現(xiàn)測試數(shù)據(jù)的實時顯示、可篩選以及監(jiān)控重要事件或狀態(tài)等功能,這些類還定義了多個屬性以及特定的方法。
有了抽象的模型定義,還需要具體的文件格式來承載這些描述規(guī)則,這種文件格式要求生成器或解析器方便快速地獲取描述規(guī)則。CSTS系統(tǒng)采用XML(eXtensible Markup Language)技術(shù)定義數(shù)據(jù)流描述文件的格式。
XML技術(shù)目前被廣泛應(yīng)用在描述數(shù)據(jù)組織格式和內(nèi)容的領(lǐng)域。國際標(biāo)準(zhǔn)化組織W3C針對XML制定了標(biāo)準(zhǔn)的程序接口——DOM(Document Object Model)。DOM是一個對象的集合,通過操縱這些對象,程序員可以操縱XML數(shù)據(jù),對XML文檔進行讀取、遍歷、修改、添加以及刪除操作。Microsoft、IBM等大公司都提供了基于DOM的編程接口,供程序員操縱XML文檔[3]。
數(shù)據(jù)流描述規(guī)則的各個類對應(yīng)的是XML文檔的元素,它們的屬性定義為XML文檔的元素屬性。這樣通過DOM接口就可以任意訪問描述規(guī)則。CSTS系統(tǒng)還提供了編輯XML文檔的配置器,使得測試人員不需要了解XML文檔的具體結(jié)構(gòu)和文法規(guī)則,就能夠使用描述規(guī)則快速地配置數(shù)據(jù)流描述文件。
CSTS系統(tǒng)的數(shù)據(jù)流解析與顯示功能,是建立在數(shù)據(jù)流的描述基礎(chǔ)之上的。首先解析器注冊數(shù)據(jù)流描述文件,提取描述規(guī)則,建立相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。其次,在收到一幀字節(jié)流后,按照描述規(guī)則解析一幀數(shù)據(jù)。然后,應(yīng)用數(shù)據(jù)流交換器將解析的數(shù)據(jù)一邊保存成數(shù)據(jù)表文件,一邊發(fā)送給數(shù)據(jù)流顯示器,并保存到數(shù)據(jù)庫內(nèi)。最后,數(shù)據(jù)流顯示器將經(jīng)過分析和處理的測試數(shù)據(jù)通過采用多種視圖的方式顯示給測試人員。
從數(shù)據(jù)流的解析到顯示的主要問題是怎樣實現(xiàn)數(shù)據(jù)的交換。CSTS系統(tǒng)定義了解析器與顯示器之間通信的接口與協(xié)議,通過數(shù)據(jù)流交換組件實現(xiàn)數(shù)據(jù)的交換。
數(shù)據(jù)流交換組件采用網(wǎng)絡(luò)接口作為解析器與顯示器之間的通信接口。采用目前各操作系統(tǒng)均支持的網(wǎng)絡(luò)套接字技術(shù)實現(xiàn)網(wǎng)絡(luò)通信接口。解析器和顯示器構(gòu)成客戶端與服務(wù)器結(jié)構(gòu),解析器為客戶端,顯示器為服務(wù)器,結(jié)構(gòu)如圖4所示。
圖4 解析器與顯示器的接口結(jié)構(gòu)
數(shù)據(jù)流交換組件的通信協(xié)議定義了4種基本的通信服務(wù),包括目錄傳輸服務(wù)、數(shù)據(jù)傳輸服務(wù)、文件傳輸服務(wù)以及報告?zhèn)鬏敺?wù)。
目錄傳輸服務(wù)實現(xiàn)一個數(shù)據(jù)集所有數(shù)據(jù)名和數(shù)據(jù)類型的傳輸。解析器在注冊XML文件時調(diào)用該服務(wù)。顯示器在收到目錄傳輸服務(wù)報文之后,初始化各視圖(數(shù)據(jù)表視圖、圖形視圖等),為數(shù)據(jù)顯示做準(zhǔn)備。目錄傳輸服務(wù)是一種初始化服務(wù)。
數(shù)據(jù)傳輸服務(wù)實現(xiàn)某個數(shù)據(jù)集一幀數(shù)據(jù)的傳輸。解析器解析一幀數(shù)據(jù),將該幀數(shù)據(jù)的源碼字節(jié)流和解析后的數(shù)據(jù)發(fā)送給顯示器。顯示器在收到數(shù)據(jù)傳輸服務(wù)報文之后,采用各種視圖顯示該幀數(shù)據(jù)。
文件傳輸服務(wù)實現(xiàn)解析器生成的數(shù)據(jù)表文件的傳輸。解析器利用文件傳輸服務(wù)將數(shù)據(jù)表文件傳輸給顯示器,供顯示器的回放功能使用。
報告?zhèn)鬏敺?wù)實現(xiàn)報警事件的傳輸。解析器監(jiān)視到報警事件,利用該服務(wù)將報警事件傳輸給顯示器顯示。
有了通信服務(wù),還要采用一定的編碼規(guī)則,定義通信服務(wù)的報文格式。
ASN.1編碼標(biāo)準(zhǔn)是目前國際上比較通用的報文編碼標(biāo)準(zhǔn),廣泛應(yīng)用于工業(yè)過程控制領(lǐng)域的報文傳輸。CSTS系統(tǒng)以ASN.1編碼標(biāo)準(zhǔn)為基礎(chǔ),定義了通信服務(wù)報文的編碼規(guī)則[4,5]。
ASN.1標(biāo)準(zhǔn)采用可以嵌套的TLC結(jié)構(gòu)定義報文。其中T(type)代表報文的類型,C(content)代表報文的內(nèi)容,L(long)代表C的長度。C可以嵌套包含子TLC結(jié)構(gòu)。
T由1個字節(jié)構(gòu)成,當(dāng)高4位取值為a,則表明該TLC結(jié)構(gòu)中C的內(nèi)容嵌套包含其它的TLC結(jié)構(gòu);如果T的高4位取值為8,表明TLC結(jié)構(gòu)中C的內(nèi)容沒有嵌套。
T的低4位為結(jié)構(gòu)標(biāo)識,如果當(dāng)前TLC結(jié)構(gòu)描述通信服務(wù),則T的低4位為通信服務(wù)標(biāo)識號。表1給出了4種通信服務(wù)的標(biāo)識號。
表1 通信服務(wù)的標(biāo)識號
如果用當(dāng)前的TLC結(jié)構(gòu)傳輸數(shù)據(jù)值,則T的低4位為數(shù)據(jù)類型標(biāo)識號。表2給出了所用數(shù)據(jù)類型的標(biāo)識號。
表2 數(shù)據(jù)類型的標(biāo)識號
L所占的字節(jié)數(shù)根據(jù)C的內(nèi)容長度變化,如果C的長度在[0,127]內(nèi),那么L占1個字節(jié),格式為XX;如果C的長度在[128,255]內(nèi),那么L占2個字節(jié),格式為81,XX;如果C的長度在[256,65535]內(nèi),那么L占3個字節(jié),格式為82,XX,XX;以此類推。
根據(jù)CSTS系統(tǒng)設(shè)計的基本思想,實現(xiàn)了它的絕大部分功能,并將其應(yīng)用到實際的軟件測試中,取得了比較好的效果。
首先,CSTS大大縮短了測試環(huán)境的開發(fā)與調(diào)試時間,提高了測試效率。
其次,將配置的方法引入測試環(huán)境,大幅度地增加了測試環(huán)境的通用性、可移植性和可擴展性。
第三,測試數(shù)據(jù)的實時顯示,可篩選功能的實現(xiàn),使得測試結(jié)果數(shù)據(jù)更加直觀,便于測試人員及時發(fā)現(xiàn)被測軟件的問題。
第四,測試數(shù)據(jù)的在線或離線分析、測試過程的回放以及關(guān)鍵數(shù)據(jù)或狀態(tài)的監(jiān)控等功能的實現(xiàn),可以發(fā)現(xiàn)以往手工測試很難發(fā)現(xiàn)的軟件錯誤,提高測試水平。
另外,CSTS還改變了測試人員的某些工作方式。在測試初期,測試人員通過編寫數(shù)據(jù)流描述文件,使其能夠快速、深刻地理解被測軟件;在測試執(zhí)行過程中,測試人員可以編輯自動化測試腳本,利用休息時間,一次執(zhí)行多個測試用例,然后利用系統(tǒng)的回放功能,慢慢地分析測試結(jié)果。
這種可配置的軟件動態(tài)測試系統(tǒng)也適用于包括衛(wèi)星在內(nèi)的航天器搭載軟件的測試工作,是確保其搭載軟件質(zhì)量的重要方法之一。
當(dāng)然CSTS離成熟的自動化測試系統(tǒng)的目標(biāo)還比較遠,需要通過更多的實際測試項目的檢驗,使其功能不斷完善,而且測試人員對這種測試方法的熟練應(yīng)用還需要一個過程。