馬云云 張 弛 王金波 瞿躍龍
中國(guó)科學(xué)院空間應(yīng)用工程與技術(shù)中心,北京100094
嵌入式航天軟件匯編代碼覆蓋測(cè)試方案*
馬云云 張 弛 王金波 瞿躍龍
中國(guó)科學(xué)院空間應(yīng)用工程與技術(shù)中心,北京100094
從插樁策略、覆蓋率收集方法2個(gè)方面設(shè)計(jì)實(shí)現(xiàn)了一種匯編代碼覆蓋測(cè)試方案,解決了嵌入式航天軟件匯編代碼覆蓋測(cè)試沒有工具支持的問題。針對(duì)嵌入式系統(tǒng)資源緊張、時(shí)序相關(guān)性強(qiáng)的特點(diǎn),在研究匯編語言指令結(jié)構(gòu)的基礎(chǔ)上,制定了一套基于比特位表征方式的匯編插樁策略;提出了一種基于JTAG接口的通用覆蓋率數(shù)據(jù)收集方案,解決了覆蓋信息輸出通道受限問題。實(shí)驗(yàn)結(jié)果及工程應(yīng)用實(shí)例證明了方案的有效性和可行性。
覆蓋測(cè)試;軟件測(cè)試;嵌入式軟件;代碼插裝
覆蓋測(cè)試是軟件白盒測(cè)試的主要方法,覆蓋測(cè)試不僅能發(fā)現(xiàn)被測(cè)程序的邏輯結(jié)構(gòu)異常等缺陷信息,更是檢驗(yàn)軟件測(cè)試充分性,保證測(cè)試質(zhì)量的有效方法之一。在高可靠軟件應(yīng)用領(lǐng)域,DO-178B和EN50128 等安全性標(biāo)準(zhǔn)對(duì)軟件測(cè)試的覆蓋率進(jìn)行了詳細(xì)的要求;在國(guó)內(nèi)航空航天、軌道交通等高可靠領(lǐng)域,對(duì)軟件代碼覆蓋率也有明確要求,通常至少應(yīng)達(dá)到代碼語句、分支100%覆蓋的要求。
嵌入式航天軟件中,匯編與C語言混合編程的方式較為普遍,但目前大多數(shù)覆蓋率測(cè)試工具針對(duì)的是C/C++等高級(jí)語言,針對(duì)匯編語言的工具相當(dāng)少見[1],因而在實(shí)際評(píng)測(cè)過程中,經(jīng)常導(dǎo)致沒有商業(yè)測(cè)試工具支持而無法對(duì)匯編代碼進(jìn)行覆蓋測(cè)試。因此,設(shè)計(jì)一套通用的匯編代碼覆蓋測(cè)試方案,解決現(xiàn)有測(cè)試平臺(tái)對(duì)匯編覆蓋測(cè)試支撐不足的問題,已成為當(dāng)前航天軟件評(píng)測(cè)亟需解決的問題。
本文在研究匯編語言指令結(jié)構(gòu)的基礎(chǔ)上,結(jié)合嵌入式航天軟件特點(diǎn),設(shè)計(jì)實(shí)現(xiàn)了一種嵌入式匯編軟件覆蓋測(cè)試方案。
匯編語言是一種結(jié)構(gòu)化較弱的程序設(shè)計(jì)語言,可能出現(xiàn)多入口和多出口的情況,這些特點(diǎn)決定了對(duì)其進(jìn)行覆蓋測(cè)試相當(dāng)困難。雖然在我國(guó)航天型號(hào)嵌入式軟件覆蓋測(cè)試方面取得了一定的成績(jī)[2],但對(duì)于匯編代碼覆蓋測(cè)試仍常出現(xiàn)沒有商業(yè)工具支持,導(dǎo)致測(cè)試工作充分性沒有客觀評(píng)價(jià)和必要質(zhì)量保證的情況。
目前,商業(yè)覆蓋率收集測(cè)試平臺(tái)主要有Testbed, Logiscope,CodeTest,Cantata,CuttleITE,BullseyeCoverage,PureCoverage和GCOV等,上述測(cè)試平臺(tái)支持對(duì)象主要集中在C/C++語言代碼編程的軟件系統(tǒng)。而對(duì)于匯編代碼,由于其與硬件具有極高的耦合度,不同的嵌入式平臺(tái)匯編指令集各不相同等原因,工具可支持的匯編指令集非常稀少。
針對(duì)匯編代碼覆蓋測(cè)試少有工具支持的現(xiàn)狀,文獻(xiàn)[3]提出一種基于主機(jī)的嵌入式匯編插樁技術(shù),以序列塊為基本插樁單元,一定程度上降低了代碼的膨脹率;文獻(xiàn)[4]基于Intel8051指令系統(tǒng),設(shè)計(jì)實(shí)現(xiàn)了一種虛擬插樁方案,利用仿真器斷點(diǎn)機(jī)制拋出程序樁點(diǎn)信息,解決某些嵌入式軟件中不易進(jìn)行程序插樁的問題,這一方案主要適用于實(shí)時(shí)性要求不高的被測(cè)系統(tǒng),對(duì)于實(shí)時(shí)性要求苛刻的高可靠控制領(lǐng)域,如航空、航天領(lǐng)域控制軟件,由于斷點(diǎn)處理過程耗時(shí)長(zhǎng),易破壞被測(cè)系統(tǒng)接口時(shí)序關(guān)系,導(dǎo)致功能行為失真,甚至無法進(jìn)入預(yù)期功能分支。文獻(xiàn)[5]提出了一種利用Gcov工具進(jìn)行匯編覆蓋測(cè)試的方案,并在X86平臺(tái)進(jìn)行了原型驗(yàn)證,這一方案的適用場(chǎng)景并未考慮嵌入式系統(tǒng)平臺(tái)資源緊張(內(nèi)存不豐富、可用IO通道少)、時(shí)序相關(guān)性強(qiáng)的特點(diǎn)[6],且對(duì)于沒有文件系統(tǒng)的嵌入式系統(tǒng)生成覆蓋數(shù)據(jù)文件是非常困難。
在實(shí)時(shí)性要求高的嵌入式航天軟件領(lǐng)域,需要一個(gè)資源、時(shí)序開銷小且相對(duì)通用的匯編代碼覆蓋測(cè)試方案,解決嵌入式匯編軟件難于插樁、覆蓋率數(shù)據(jù)輸出通道受限等問題。
在研究匯編語言指令結(jié)構(gòu)的基礎(chǔ)上,針對(duì)嵌入式平臺(tái)資源緊張、時(shí)序相關(guān)性強(qiáng)的特點(diǎn),從插樁策略和覆蓋率收集方法兩方面設(shè)計(jì)實(shí)現(xiàn)了一套匯編覆蓋測(cè)試方案,具體實(shí)施框架如圖1所示。
圖1 嵌入式匯編代碼覆蓋測(cè)試框架
在上位機(jī)中,采用基于比特位表征方式的匯編插樁策略完成代碼插樁;在被測(cè)系統(tǒng)上運(yùn)行插樁后的代碼,并對(duì)產(chǎn)生的樁點(diǎn)數(shù)據(jù)進(jìn)行暫存;利用硬件仿真器JTAG接口建立集成開發(fā)環(huán)境與目標(biāo)CPU之間的硬件實(shí)時(shí)通信通道,進(jìn)行覆蓋率信息收集,在集成開發(fā)環(huán)境中接收查看覆蓋率信息,進(jìn)行覆蓋分析。
2.1 程序插樁策略
程序插樁是實(shí)現(xiàn)覆蓋測(cè)試的關(guān)鍵技術(shù)之一,目前大多數(shù)覆蓋測(cè)試工具均采用代碼插樁技術(shù)。傳統(tǒng)的插樁策略是在所有需要插樁的位置插入探針,在程序運(yùn)行過程中收集所有可能用到的程序信息,但這種策略插樁開銷過大,無法滿足嵌入式系統(tǒng)覆蓋測(cè)試需要。針對(duì)上述問題,許多研究學(xué)者提出了一些插樁策略及改進(jìn)方法來降低插樁開銷[7-10],但這些方法的研究對(duì)象主要針對(duì)高級(jí)語言代碼,并未考慮嵌入式匯編代碼的特殊性。
針對(duì)匯編程序語句、分支覆蓋測(cè)試實(shí)際情況,本文從樁點(diǎn)信息表征方式、樁點(diǎn)插入規(guī)則和樁點(diǎn)輸出函數(shù)實(shí)現(xiàn)3個(gè)方面對(duì)插樁策略進(jìn)行具體介紹。
2.1.1 樁點(diǎn)信息表征方式
對(duì)于樁點(diǎn)數(shù)據(jù)采用按比特位表征的方式,使得樁點(diǎn)數(shù)據(jù)在存儲(chǔ)空間、數(shù)據(jù)輸出時(shí)間方面開銷盡可能小,以適應(yīng)嵌入式系統(tǒng)存儲(chǔ)資源匱乏、時(shí)序緊張的特點(diǎn)。
具體的,每個(gè)樁點(diǎn)以{樁點(diǎn)ID、樁點(diǎn)狀態(tài)}方式唯一表征,其中:
樁點(diǎn)ID:代表被覆蓋語句分支在代碼中的具體位置。樁點(diǎn)ID編號(hào)時(shí),考慮到匯編程序中往往采用很多條件和無條件跳轉(zhuǎn)指令,結(jié)構(gòu)復(fù)雜,若按照?qǐng)?zhí)行順行對(duì)樁點(diǎn)ID進(jìn)行編號(hào),易出現(xiàn)插樁遺漏情況。本文以源代碼行號(hào)前后次序進(jìn)行編號(hào),假設(shè)源代碼共需插樁n個(gè),則樁點(diǎn)ID按照0,1,2,…,n-1進(jìn)行編號(hào)。對(duì)于收集語句覆蓋率的情況,同一源文件中樁點(diǎn)直接按照源代碼先后順序進(jìn)行編號(hào);對(duì)于需要收集分支的情況,按照真分支樁點(diǎn)編號(hào)為X,假分支編號(hào)為X+1的規(guī)則進(jìn)行編號(hào)。
樁點(diǎn)狀態(tài):代表樁點(diǎn)的覆蓋情況,采用基于比特位方式表征,0代表未覆蓋,1代表已覆蓋。每個(gè)樁點(diǎn)在內(nèi)存空間中僅占用1比特,對(duì)于同一樁點(diǎn)信息多次被執(zhí)行的情況,不會(huì)額外增加存儲(chǔ)空間,均可通過對(duì)應(yīng)比特位取值表征該樁點(diǎn)是否在測(cè)試過程中運(yùn)行到。采用這種設(shè)計(jì)思路,可以大大降低覆蓋率信息對(duì)存儲(chǔ)空間的占用以及樁點(diǎn)數(shù)據(jù)傳輸對(duì)接口時(shí)序造成的不良影響。例如,對(duì)于語句分支樁點(diǎn)個(gè)數(shù)為200的匯編代碼,僅需要25個(gè)字節(jié)即可存儲(chǔ)全部樁點(diǎn)的覆蓋信息。
2.1.2 樁點(diǎn)插入規(guī)則
通過分析匯編代碼結(jié)構(gòu)特征,應(yīng)在以下幾個(gè)特征位置進(jìn)行插裝:條件判斷語句、直接跳轉(zhuǎn)語句、條件跳轉(zhuǎn)、宏定義和標(biāo)號(hào)內(nèi)代碼。
在樁點(diǎn)插入過程中,以源代碼行號(hào)前后次序在上述位置按照具體插樁策略進(jìn)行,保證在順序執(zhí)行的語句塊的第一條語句前和最后一條語句前均進(jìn)行插樁,且每一個(gè)條件判斷的真假分支均有唯一樁點(diǎn)信息對(duì)應(yīng)。具體樁點(diǎn)插入過程可利用程序自動(dòng)完成,對(duì)于代碼量少的情況也可手動(dòng)插入,具體方式可視實(shí)際情況而定。下面具體介紹插樁規(guī)則。
1)條件判斷語句
對(duì)于條件判斷語句,應(yīng)在該語句之前對(duì)條件真假分支分別插入樁點(diǎn),見表1。
表1 條件判斷語句插樁
表1中,樁點(diǎn)(x)反映該條件判斷的TRUE分支覆蓋情況;樁點(diǎn)(x+1)反映該條件判斷的FALSE分支覆蓋情況。
此外,由于樁點(diǎn)(x)及(x+1)插入位置也是條件判斷語句之前的上一程序基本塊的結(jié)束位置,因此樁點(diǎn)(x)及(x+1)也同時(shí)反映了上一程序基本塊的覆蓋情況。
2)無條件轉(zhuǎn)移指令
無條件轉(zhuǎn)移指令包含直接跳轉(zhuǎn)語句、子程序調(diào)用指令等,對(duì)于這類指令應(yīng)在無條件轉(zhuǎn)移指令前、后分別設(shè)置樁點(diǎn)。
表2 無條件轉(zhuǎn)移指令插樁
表2中,樁點(diǎn)(x)反映轉(zhuǎn)移語句之前順序執(zhí)行的代碼段的語句覆蓋情況,樁點(diǎn)(x+1)反映插入點(diǎn)后的下一個(gè)順序執(zhí)行的代碼段的語句覆蓋情況。
3)條件轉(zhuǎn)移指令
條件轉(zhuǎn)移語句應(yīng)在條件跳轉(zhuǎn)前后分別設(shè)置反映條件判斷真、假分支覆蓋情況的樁點(diǎn),插樁方式如表3。
表3 條件轉(zhuǎn)移指令插樁
表3中,樁點(diǎn)(x)反映該條件判斷的TRUE分支覆蓋及上一樁點(diǎn)至條件判斷之間語句覆蓋情況;樁點(diǎn)(x+1)反映該條件判斷的FALSE分支以及后續(xù)語句的覆蓋情況。
4)宏定義
宏定義代碼,需要在宏定義代碼開始處、結(jié)束處插樁,內(nèi)部語句插樁方式與外部匯編代碼插樁方式類似。
5)標(biāo)號(hào)
由于標(biāo)號(hào)內(nèi)代碼可能是順序執(zhí)行地址或跳轉(zhuǎn)后執(zhí)行地址,也可能是子程序入口地址或宏調(diào)用入口。因此對(duì)于標(biāo)號(hào)內(nèi)代碼需在標(biāo)號(hào)內(nèi)代碼執(zhí)行開始位置、結(jié)束位置設(shè)置樁點(diǎn)。對(duì)于標(biāo)號(hào)是子程序入口地址的情況,結(jié)束位置為子程序返回指令前;標(biāo)號(hào)不是子程序入口地址的情況,結(jié)束位置為下一個(gè)標(biāo)號(hào)開始前。標(biāo)號(hào)內(nèi)代碼與基本匯編代碼插樁方式類似,需在條件判斷處、跳轉(zhuǎn)處設(shè)置樁點(diǎn)。
2.1.3 樁點(diǎn)輸出函數(shù)實(shí)現(xiàn)
嵌入式航天軟件的匯編代碼具有體量小但安全關(guān)鍵程度較高的特點(diǎn)。因此,樁點(diǎn)數(shù)量與高級(jí)語言編寫的代碼相比非常少,樁點(diǎn)覆蓋信息采用按比特位方式表示后,樁點(diǎn)覆蓋信息所需占用存儲(chǔ)空間則更少。
鑒于以上特點(diǎn),在樁點(diǎn)輸出函數(shù)設(shè)計(jì)時(shí),將樁點(diǎn)覆蓋數(shù)據(jù)輸出至被測(cè)系統(tǒng)內(nèi)部空閑存儲(chǔ)空間存儲(chǔ),當(dāng)接收到覆蓋數(shù)據(jù)回傳控制命令時(shí),才將覆蓋數(shù)據(jù)輸出至系統(tǒng)外。此外,還應(yīng)盡可能降低樁點(diǎn)輸出對(duì)被測(cè)軟件時(shí)間特性、時(shí)序關(guān)系的影響。樁點(diǎn)輸出函數(shù)實(shí)現(xiàn)流程分為如下5步:
Step1:為樁點(diǎn)信息分配內(nèi)存空間,并初始化為未覆蓋狀態(tài);
Step2:寄存器壓棧處理;
Step3:根據(jù)樁點(diǎn)編號(hào)計(jì)算樁點(diǎn)存儲(chǔ)位置;
Step4:將存儲(chǔ)位置對(duì)應(yīng)的比特位置為已覆蓋狀態(tài);
Step5:寄存器出棧處理。
以TMS320C6000系列DSP運(yùn)行平臺(tái)為例,給出插樁函數(shù)實(shí)現(xiàn)示例如下:
OUT_PUT .macro ID;也可定義為子程序
……;寄存器壓棧處理
mvkl OUTPUT_ADDR,a7
mvkh OUTPUT_ADDR,a7
mv ID,a3
nop 5
shr a3, 0x03, b0
clr a3,3,15, a2
add a7, b0, a7
nop 5
mvk 0x01,a8
shl a8, a2, a8
ldb *a7,b8
nop 5
or b8,a8,b8
stb b8,*a7
nop 5
……;寄存器出棧處理
.endm
其中,OUTPUT_ADDR為事先定義的覆蓋率數(shù)據(jù)信息存儲(chǔ)起始地址,ID號(hào)為樁點(diǎn)ID。
2.2 覆蓋率信息收集
目前,嵌入式系統(tǒng)覆蓋率數(shù)據(jù)收集過程中常遇到以下難題:1)被測(cè)系統(tǒng)上既有接口類型受限;2)覆蓋率數(shù)據(jù)接收設(shè)備的接收處理能力不足。實(shí)時(shí)嵌入式軟件樁點(diǎn)輸出量大,若采用低速通信方式,常無法滿足時(shí)序要求,導(dǎo)致系統(tǒng)功能行為失真;若采用高速接口,則需要專用高速覆蓋率接收設(shè)備。
為了擺脫對(duì)覆蓋率數(shù)據(jù)專用接收設(shè)備的依賴,并克服被測(cè)系統(tǒng)常無可用輸出通道的問題,需要采用一種相對(duì)通用的覆蓋率數(shù)據(jù)輸出方式,并減輕高速、大數(shù)據(jù)量樁點(diǎn)傳輸對(duì)被測(cè)系統(tǒng)功能行為的影響。通過對(duì)主流嵌入式系統(tǒng)平臺(tái)調(diào)研,目前多數(shù)高級(jí)器件都支持JTAG協(xié)議,如DSP,F(xiàn)PGA,ARM和部分單片機(jī)器件等, 并且JTAG在測(cè)試信號(hào)完整性和嵌入式在線仿真方面都有很好的應(yīng)用。
本文利用嵌入式在線仿真器與被測(cè)目標(biāo)板JTAG口連接,建立集成開發(fā)環(huán)境與目標(biāo)CPU的硬件實(shí)時(shí)通信通道,將被測(cè)系統(tǒng)動(dòng)態(tài)運(yùn)行過程中產(chǎn)生的樁點(diǎn)數(shù)據(jù)通過JTAG接口輸出至系統(tǒng)外部,由集成開發(fā)環(huán)境所在上位機(jī)接收。
下面以TI公司的DSP處理器為例,給出具體的覆蓋率數(shù)據(jù)收集方案,見圖2。
圖2 覆蓋率數(shù)據(jù)收集方案
被測(cè)代碼插樁后,下載至嵌入式平臺(tái)運(yùn)行;產(chǎn)生的樁點(diǎn)數(shù)據(jù)直接存儲(chǔ)在被測(cè)系統(tǒng)內(nèi)部;在CCS(Code Composer Studio)集成開發(fā)環(huán)境中進(jìn)行覆蓋率信息回傳控制,需要回傳覆蓋率數(shù)據(jù)時(shí)暫停或停止被測(cè)件運(yùn)行,利用GEL(General Extended Language,即通用擴(kuò)展語言)函數(shù)GEL_MemorySave()訪問被測(cè)系統(tǒng)內(nèi)部存儲(chǔ)空間,將暫存的覆蓋率數(shù)據(jù)通過JTAG接口傳回至集成開發(fā)環(huán)境所在上位機(jī),并將覆蓋率數(shù)據(jù)保存為數(shù)據(jù)文件。
在TMS320C6000系統(tǒng)嵌入式運(yùn)行平臺(tái)上,以某星載軟件匯編代碼為實(shí)驗(yàn)對(duì)象,搭建實(shí)驗(yàn)平臺(tái)如圖3所示。
圖3 匯編代碼覆蓋測(cè)試實(shí)驗(yàn)平臺(tái)
(1)運(yùn)行時(shí)間開銷
為了驗(yàn)證本文方案在運(yùn)行時(shí)間開銷方面性能,分別對(duì)未插樁星載軟件運(yùn)行時(shí)間、插樁后軟件采用傳統(tǒng)樁點(diǎn)數(shù)據(jù)傳輸方案運(yùn)行時(shí)間、本文方案運(yùn)行時(shí)間進(jìn)行對(duì)比測(cè)試。其中,傳統(tǒng)樁點(diǎn)數(shù)據(jù)傳輸方案使用被測(cè)目標(biāo)板上SPI接口將樁點(diǎn)數(shù)據(jù)逐一輸出。
本實(shí)驗(yàn)中程序運(yùn)行時(shí)間統(tǒng)計(jì)方法為:使用DSP芯片定時(shí)器Timer0的計(jì)數(shù)器值(CNT)對(duì)程序運(yùn)行時(shí)間進(jìn)行計(jì)時(shí),計(jì)時(shí)精度為0.02μs。在程序開始時(shí),設(shè)置計(jì)數(shù)器周期寄存器為上限值,以保證統(tǒng)計(jì)期間不會(huì)發(fā)生溢出,通過在程序運(yùn)行開始處設(shè)置控制寄存器來啟動(dòng)計(jì)時(shí),在程序運(yùn)行結(jié)束處讀取計(jì)數(shù)器值,得出代碼運(yùn)行的時(shí)間。
實(shí)驗(yàn)過程中,選取相同測(cè)試用例(均使被測(cè)軟件執(zhí)行201984個(gè)樁點(diǎn)函數(shù)),得到運(yùn)行時(shí)間結(jié)果如表4。
表4 運(yùn)行時(shí)間開銷對(duì)比
(2)動(dòng)態(tài)樁點(diǎn)數(shù)據(jù)存儲(chǔ)開銷
為了驗(yàn)證本文方案在存儲(chǔ)資源開銷方面性能,選取以下3段程序進(jìn)行實(shí)驗(yàn):
程序1:有限次循環(huán)程序;
程序2:?jiǎn)未螆?zhí)行程序;
程序3:無限循環(huán)程序。
為了便于定量對(duì)比,上述程序中均僅保留一個(gè)樁點(diǎn),分別采用本文方案、傳統(tǒng)方案執(zhí)行相同測(cè)試用例,產(chǎn)生的動(dòng)態(tài)樁點(diǎn)數(shù)據(jù)量統(tǒng)計(jì)如表5。
表5 動(dòng)態(tài)樁點(diǎn)數(shù)據(jù)存儲(chǔ)開銷對(duì)比
通過上述實(shí)驗(yàn)數(shù)據(jù)可知,本文方案相對(duì)于樁點(diǎn)數(shù)據(jù)直接傳輸方案,在程序運(yùn)行時(shí)間開銷方面下降97.5%;在動(dòng)態(tài)樁點(diǎn)數(shù)據(jù)存儲(chǔ)開銷方面下降幅度超過96.8%,且樁點(diǎn)數(shù)量越多時(shí),存儲(chǔ)開銷下降幅度越大。
實(shí)驗(yàn)結(jié)果表明,本文的插樁策略和覆蓋率收集方法相對(duì)傳統(tǒng)方案在降低對(duì)嵌入式軟件時(shí)序影響和減少資源開銷方面的性能大大提升。
此外,本文方案已成功應(yīng)用于某星載軟件評(píng)測(cè)工程項(xiàng)目,取得良好應(yīng)用效果:在沒有商業(yè)工具支持的情況下,完成了覆蓋測(cè)試,且被測(cè)代碼語句、分支覆蓋率均達(dá)到100%。
設(shè)計(jì)實(shí)現(xiàn)了一種嵌入式匯編代碼覆蓋測(cè)試方案,提出了基于比特位表征方式的匯編插樁策略和基于JTAG接口的通用覆蓋率數(shù)據(jù)收集方案,解決了匯編覆蓋測(cè)試中插樁開銷大、覆蓋信息輸出通道受限等問題。實(shí)驗(yàn)結(jié)果及工程應(yīng)用效果表明本文方案在時(shí)間性能、存儲(chǔ)開銷及通用性等方面相對(duì)傳統(tǒng)方案均有顯著優(yōu)勢(shì)。為嵌入式匯編代碼覆蓋測(cè)試常無法開展的問題提供了一種新的解決方法,下一步還需要對(duì)不同匯編指令集的通用自動(dòng)插樁方法進(jìn)行研究。
[1] 唐科,向渝,羅光春.匯編程序覆蓋測(cè)試中分支路徑數(shù)的計(jì)算[J].電子科技大學(xué)學(xué)報(bào),2005,34(2): 235-239.(Tang Ke, Xiang Yu, Luo Guangchun, et al. An Algorithm for Calculating the Branch Routes of an Assembly Program in Software Coverage Testing [J]. Journal of UEST of China, 2005, 34(2): 235-239.)
[2] 張波.基于測(cè)試覆蓋的安全關(guān)鍵軟件測(cè)試策略研究[D]. 長(zhǎng)春:中國(guó)科學(xué)院長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,2012.(Zhang Bo. A Study of Strategies about Testing Safety Critical Software Based on Testing Coverage [D]. Changchun: Changchun Institute of Optics, Fine Mechanics and Physics, Chinese Academy of Sciences, China, 2012.)
[3] Dong Ting ,Wang Zhongmin. Research on Instrumentation Technology for the Embedded Assembly Software Testing Based on Host Computer [C]// 2011 International Conference on Computer Science and Network Technology, Harbin,China, 2011. IEEE Press, 2011,3:1906-1909.
[4] 王學(xué)東,汪文勇.匯編程序覆蓋測(cè)試中虛擬插樁的實(shí)現(xiàn)[J].計(jì)算機(jī)工程, 2007, 33(7): 87-88.(Wang Xuedong, Wang Wenyong. Implementation of Virtual Instrumentation in Coverage Test of Assembly Code [J]. Computer Engineering, 2007, 33(7): 87-88.)
[5] 費(fèi)訓(xùn),羅蕾. 利用GNU工具實(shí)現(xiàn)匯編程序覆蓋測(cè)試[J].計(jì)算機(jī)應(yīng)用, 2004, 24(12): 95-98.(Fei Xun, Luo Lei. Implementation of Assembler Program Coverage Testing with GNU Tool [J]. Computer Applications, 2004, 24(12): 95-98.)
[6] 丁旭,崔吉崗,劉春裕.軍用嵌入式軟件結(jié)構(gòu)覆蓋測(cè)試技術(shù)[J]. 指揮控制與仿真, 2008, 30(3): 120-122.(Ding Xu, Cui Jigang, Liu Chunyu. Test Technology of Procedure Structure Cover for Military Embedded Software [J]. Command Control & Simulation, 2008,30(3): 120-122.)
[7] Pankumhang T, Rutherford M J. Iterative Instrumentation for Code Coverage in Time-Sensitive Systems[C]//IEEE. International Conference on Software Testing, Verification and Validation.Graz,Austria,April,2015.IEEE Press,2015:1-10.
[8] 郭銳,李博,彭寶新. 用于覆蓋測(cè)試的代碼插樁程序設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程, 2013, 13(30): 9073-9077.(Guo Rui, Li Bo, Peng Baoxin. Design and Implementation of Instrumentor for Coverage Testing [J]. Science Technology and Engineering, 2013, 13(30): 9073-9077.)
[9] Fischmeister S, Lam P. Time-Aware Instrumentation of Embedded Software[J]. IEEE Transactions on Industrial Informatics, 2010, 6(4): 652-663.
[10] Arnold M, Ryder B G. A Framework for Reducing the Cost of Instrumented Code[J].Acm Sigplan Notices, 2003, 36(5): 168-179.
NovelAssembly-LanguageCodeCoverageTestingSchemeforEmbeddedAerospaceSoftware
Ma Yunyun, Zhang Chi, Wang Jinbo, Qu Yuelong
Technology and Engineering Center for Space Utilization, Chinese Academy of Science, Beijing 100094, China
Aneffectiveassembly-languagecodecoveragetestingschemeisdesignedandimplementedtosolvetheproblemthatthereisoftennoavailabletoolsupportsassembly-languagecodecoveragetestingintheaerospaceembeddedsystem.Thisschemeconsistsoftwopartsbycodeinstrumentationstrategyandcoveragedatacollectionmethod.Inviewofthecharacteristicsofembeddedsystem,suchasstricttimingrequirementandlimitedmemoryresources,acodeinstrumentationmethodwithbitbasedcoveragestateinformationexpressionstrategyisproposedonthebasisofresearchonassemblyinstructionstructure,andthenageneralassemblycoverageinformationcollectionmethodbyusingJTAGinterfaceisproposedtosolvetheproblemoflimitedcoverageoutputchannelinembeddedsystem.Theexperimentalresultsandengineeringpracticeshowsthattheschemegivenisfeasibleanduseful.
Coveragetesting;Softwaretesting;Embeddedsoftware;Codeinstrumentation
TP311
A
1006-3242(2017)05-0068-06
*載人航天國(guó)家重大專項(xiàng)(Y6140511RN)
2017-03-24
馬云云(1982-),女,山東人,碩士, 工程師,研究領(lǐng)域?yàn)楦呖煽寇浖?、嵌入式軟件評(píng)測(cè);張弛(1990-),男,山東人,碩士, 助理工程師,研究領(lǐng)域?yàn)楦呖煽寇浖?、嵌入式軟件評(píng)測(cè);王金波(1979-),男,江蘇人,博士,副研究員,研究領(lǐng)域?yàn)楦呖煽寇浖?;瞿躍龍(1972-),男,云南人,本科,高級(jí)工程師,研究領(lǐng)域?yàn)楦呖煽寇浖?、嵌入式軟件評(píng)測(cè)。