專利名稱:C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種C語(yǔ)言嵌入式軟件測(cè)試方法,適用于運(yùn)行在DSP環(huán)境的C語(yǔ)言嵌入式軟件的動(dòng)態(tài)白盒測(cè)試。
背景技術(shù):
軟件插樁和動(dòng)態(tài)測(cè)試覆蓋率信息提取技術(shù)是動(dòng)態(tài)白盒測(cè)試的核心技術(shù),已經(jīng)被廣泛研究,并且有多種測(cè)試工具。在航天、航空等對(duì)可靠性要求較高的領(lǐng)域,對(duì)軟件動(dòng)態(tài)白盒測(cè)試的覆蓋率也提出了較高的指標(biāo)要求。目前測(cè)試工具所提供的通用插樁方法主要有2種,一種方法是向外部文件輸出覆蓋率信息,由于嵌入式軟件一般不支持文件操作,因此這種方法只適用于非嵌入式軟件;另一種方法是在第一種方法基礎(chǔ)上進(jìn)行了修改,把其中的文件輸出操作替換為向外部接口的輸出操作,這種方法能夠適用于嵌入式系統(tǒng),但是仍然具有插樁原理復(fù)雜(在分支點(diǎn)處需根據(jù)不同分支類型增加向外部輸出表征不同類型分支是否被執(zhí)行的語(yǔ)句,每個(gè)分支點(diǎn)至少包括2條語(yǔ)句),因此導(dǎo)致插樁代碼膨脹率較大(一般大于50% ),且覆蓋率信息提取需要占用硬件資源等缺陷,不能滿足于嵌入式軟件測(cè)試對(duì)插樁后代碼的低膨脹率、插樁所使用的內(nèi)存空間盡可能小、覆蓋率信息提取過(guò)程不受硬件資源限制等諸多要求。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問(wèn)題是克服現(xiàn)有技術(shù)的不足,提供了一種針對(duì)C語(yǔ)言程序的軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法,能夠滿足嵌入式系統(tǒng)對(duì)軟件插樁所提出的低膨脹率、內(nèi)存空間限制、覆蓋率信息提取限制等方面的要求,可應(yīng)用于運(yùn)行在DSP環(huán)境的嵌入式C語(yǔ)言軟件的動(dòng)態(tài)白盒測(cè)試。本發(fā)明的技術(shù)解決方案是C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法,步驟如下(1)把C語(yǔ)言程序看做一個(gè)由各分支點(diǎn)組成的數(shù)組,每一個(gè)分支點(diǎn)均對(duì)應(yīng)數(shù)組中的一個(gè)元素,并把數(shù)組中每個(gè)元素定義為兩種狀態(tài),“ 1”表示執(zhí)行過(guò),“0”表示未執(zhí)行過(guò);其中數(shù)組的維數(shù)與分支點(diǎn)的數(shù)量相同,分支點(diǎn)為C語(yǔ)言程序的各種邏輯分支的第一條語(yǔ)句;(2)將數(shù)組定義在專用存儲(chǔ)區(qū)進(jìn)行存儲(chǔ);(3)在C語(yǔ)言程序各分支點(diǎn)處,增加向定義在專用存儲(chǔ)區(qū)的分支點(diǎn)信息數(shù)組輸出該分支點(diǎn)是否被執(zhí)行信息的操作代碼;所述分支點(diǎn)是否被執(zhí)行信息的操作代碼內(nèi)容為向分支點(diǎn)信息數(shù)組中該分支點(diǎn)對(duì)應(yīng)的bit位執(zhí)行“或” 1的操作;(4)在C語(yǔ)言程序main函數(shù)的第一條語(yǔ)句處增加對(duì)數(shù)組進(jìn)行初始化的操作代碼;(5)執(zhí)行增加操作代碼以后的C語(yǔ)言程序,執(zhí)行完畢后從專用存儲(chǔ)區(qū)提取分支點(diǎn)信息數(shù)組,根據(jù)分支點(diǎn)信息數(shù)組中各元素的狀態(tài)即可確定C語(yǔ)言程序中各分支點(diǎn)的執(zhí)行情況,由此得到C語(yǔ)言程序的動(dòng)態(tài)測(cè)試覆蓋率。所述的專用存儲(chǔ)區(qū)為DSP內(nèi)部RAM的未使用區(qū)。
所述的分支點(diǎn)信息數(shù)組中每個(gè)元素用Ibit來(lái)表示,將分支點(diǎn)信息數(shù)組變?yōu)?b>分支點(diǎn)個(gè)數(shù)/8+1個(gè)unsigned char類型數(shù)值的集合。本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于本發(fā)明具有對(duì)插樁后程序的代碼膨脹率小、 執(zhí)行插樁后程序所產(chǎn)生的分支點(diǎn)信息所占存儲(chǔ)空間小、覆蓋率信息提取方便等特點(diǎn),為在 DSP運(yùn)行環(huán)境下進(jìn)行C語(yǔ)言嵌入式軟件動(dòng)態(tài)測(cè)試覆蓋率統(tǒng)計(jì)提供了簡(jiǎn)便實(shí)用的方法。(1)插樁模板原理簡(jiǎn)單,容易實(shí)現(xiàn)。本發(fā)明所采用的插樁策略基于“把源程序看做分支點(diǎn)集合,分析覆蓋率只需要記錄所有分支點(diǎn)是否被執(zhí)行”的思想,基于該思想的插樁模板原理也很簡(jiǎn)單,且容易實(shí)現(xiàn);(2)本發(fā)明方法只在分支點(diǎn)處增加向分支點(diǎn)信息數(shù)組相應(yīng)bit “或” 1的操作(對(duì)應(yīng)1條C語(yǔ)句),沒(méi)有增加文件操作或者其他復(fù)雜的操作,這使得插樁后的代碼膨脹率較小 (小于30% ),從而對(duì)插樁后軟件執(zhí)行的性能影響較?。?3)本發(fā)明方法進(jìn)行插樁所產(chǎn)生的分支點(diǎn)信息數(shù)組所占用的存儲(chǔ)空間很小(一般小于IK字節(jié)),能夠適應(yīng)嵌入式系統(tǒng)內(nèi)存空間使用受限的情況。(4)本發(fā)明方法所確定的覆蓋率信息提取是通過(guò)存取內(nèi)存區(qū)進(jìn)行的,不占用硬件資源,且提取方便。
圖1為本發(fā)明方法的流程圖。
具體實(shí)施例方式如圖1所示,本發(fā)明C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息的提取方法,由軟件插樁策略和使用該策略進(jìn)行軟件插樁和動(dòng)態(tài)測(cè)試覆蓋率信息提取的過(guò)程組成。本發(fā)明中的軟件插樁過(guò)程是指在被測(cè)源程序的各個(gè)分支點(diǎn)之后加入一些代碼,這些代碼在軟件執(zhí)行過(guò)程中向外部輸出這些分支點(diǎn)的覆蓋率信息。軟件插樁過(guò)程可以借助工具和插樁模板自動(dòng)完成,也可以手動(dòng)完成。軟件插樁策略從程序邏輯角度而言,C語(yǔ)言程序是由各種邏輯分支組成,這些分支條件的真分支被滿足或假分支被滿足決定了各分支語(yǔ)句是否能被執(zhí)行。因此將這些分支條件的真分支的第1條語(yǔ)句和假分支的第1條語(yǔ)句所在的點(diǎn)稱作分支點(diǎn)。如果僅考慮統(tǒng)計(jì)測(cè)試的語(yǔ)句和分支覆蓋率的話,可以把C語(yǔ)言源程序看做一個(gè)由各分支點(diǎn)組成的集合。如能夠把這些分支點(diǎn)是否被執(zhí)行過(guò)的信息記錄下來(lái),就可以分析出其所在分支點(diǎn)對(duì)應(yīng)的語(yǔ)句和分支的執(zhí)行情況,而記錄得到的分支點(diǎn)是否被執(zhí)行的信息稱為分支點(diǎn)信息或者覆蓋率信息。由于每個(gè)分支點(diǎn)只有“執(zhí)行過(guò)”或者“未執(zhí)行過(guò)”兩種狀態(tài),因此考慮建立一個(gè)分支點(diǎn)信息數(shù)組,該數(shù)組的維數(shù)即為分支點(diǎn)個(gè)數(shù),并把數(shù)組中每個(gè)元素只定義2種狀態(tài),“ 1”表示執(zhí)行過(guò),“0”表示未執(zhí)行過(guò)。分支點(diǎn)信息數(shù)組是軟件插樁所產(chǎn)生的額外開(kāi)銷,其大小必須受到所在嵌入式系統(tǒng)的存儲(chǔ)空間的限制。由于每個(gè)元素只能表示2個(gè)狀態(tài),因此按照該方法定義這個(gè)分支點(diǎn)信息數(shù)組的話,其額外增加的存儲(chǔ)區(qū)占用量會(huì)比較大,可能會(huì)導(dǎo)致超出嵌入式系統(tǒng)的存儲(chǔ)空間范圍(如10000行左右的源程序,其分支點(diǎn)約2000個(gè),增加的占用量約為IK字節(jié))。為了進(jìn)一步減少輸出分支點(diǎn)信息占用的數(shù)據(jù)量,把分支點(diǎn)信息數(shù)組中每個(gè)元素用 Ibit來(lái)表示,分支點(diǎn)信息數(shù)組變成了由C語(yǔ)言中unsigned char類型數(shù)值組成的數(shù)組,其數(shù)組大小為(分支點(diǎn)個(gè)數(shù)/8+1),新數(shù)組中每個(gè)元素對(duì)應(yīng)著8個(gè)分支點(diǎn)是否執(zhí)行的狀態(tài)。下面需要解決的是這些分支點(diǎn)信息數(shù)組輸出到哪里的問(wèn)題,S卩如何能夠方便提取到這些信息。嵌入式系統(tǒng)一般可以使用的外部接口資源較少,因此信息從哪里輸出及如何提取也是一個(gè)關(guān)鍵問(wèn)題。本發(fā)明中針對(duì)DSP運(yùn)行環(huán)境所采用的策略是把分支點(diǎn)信息數(shù)組定義在DSP內(nèi)部RAM的未使用區(qū),這樣可以在測(cè)試結(jié)束后通過(guò)DSP運(yùn)行環(huán)境所提供的讀取內(nèi)存區(qū)指令來(lái)提取分支點(diǎn)信息。由于該數(shù)組的大小為(分支點(diǎn)個(gè)數(shù)/8+1),即占用RAM區(qū)的大小為(分支點(diǎn)個(gè)數(shù)/8+1)字節(jié),針對(duì)有1000個(gè)分支的源程序(對(duì)應(yīng)源程序行數(shù)約4000-5000 行)占用RAM區(qū)為1 字節(jié)。因此該策略占用存儲(chǔ)資源很小,可以適用于絕大多數(shù)嵌入式軟件。這樣軟件插樁過(guò)程就是在源程序的各分支點(diǎn)處,增加向定義在DSP內(nèi)部RAM未使用區(qū)的分支點(diǎn)信息數(shù)組輸出該分支點(diǎn)是否被執(zhí)行信息的操作代碼的過(guò)程。而插樁后程序就是在源程序的基礎(chǔ)上,在每個(gè)分支點(diǎn)處增加了輸出上述分支點(diǎn)信息操作代碼之后的程序。通過(guò)執(zhí)行插樁后程序,得到定義在DSP內(nèi)部RAM未使用區(qū)的分支點(diǎn)信息數(shù)組。提取該分支點(diǎn)信息數(shù)組,并對(duì)其進(jìn)行分析,即可得到需要的軟件語(yǔ)句和分支覆蓋率信息。專用插樁模板插樁模板是指一段C語(yǔ)言程序,該程序中針對(duì)不同類型的分支點(diǎn)情況定義了不同的宏,這些宏的作用是輸出這些分支點(diǎn)是否被執(zhí)行的信息。自動(dòng)插樁過(guò)程是指測(cè)試工具根據(jù)被插樁源程序的分支點(diǎn)情況,自動(dòng)在分支點(diǎn)處加入輸出分支點(diǎn)信息的代碼的過(guò)程。根據(jù)上文確定的插樁策略,可以定制專用的插樁模板。在制定專用插樁模板時(shí)應(yīng)考慮如下類型的分支點(diǎn),包括if、else、elseif、case、default、for循環(huán)、while循環(huán)、 do while循環(huán)、return、end、邏輯表達(dá)式的“與”判斷、邏輯表達(dá)式的“或”判斷。其中邏輯表達(dá)式是指用邏輯運(yùn)算符連接起來(lái)的關(guān)系表達(dá)式。如if((a[2] ==0xaa)&&(a[3]== Oxaa)) I I ((a[2] = = 0x55)&&(a[3] ==0x55)))實(shí)際上是由2個(gè)條件組成的“或”判斷, 而其中每個(gè)條件又分別是由關(guān)系表達(dá)式組成的“與”判斷。針對(duì)上述類型的分支點(diǎn)均需進(jìn)行插樁操作,即在分支點(diǎn)被執(zhí)行時(shí)向分支點(diǎn)信息數(shù)組中該分支點(diǎn)對(duì)應(yīng)bit執(zhí)行“或” 1的操作。而針對(duì)程序入口點(diǎn)(main函數(shù)的第1條語(yǔ)句處)需增加針對(duì)分支點(diǎn)信息數(shù)組的初始化操作。插樁模板是依賴于測(cè)試工具的,并與測(cè)試工具配合使用。例如通過(guò)使用LDRA TESTBED提供的自主定制插樁模板功能,定制適用于LDRA TESTBED所使用的針對(duì)DSP運(yùn)行環(huán)境的C語(yǔ)言嵌入式軟件動(dòng)態(tài)測(cè)試專用插樁模板。覆蓋率信息提取在制定插樁策略時(shí)已經(jīng)說(shuō)明,程序執(zhí)行所得到的分支點(diǎn)信息數(shù)組存儲(chǔ)在一段DSP 內(nèi)部RAM的未使用區(qū)中。在測(cè)試結(jié)束后,可以通過(guò)DSP運(yùn)行環(huán)境所提供的讀取內(nèi)存區(qū)指令 (GEL_MemorySave)把指定位置和大小的內(nèi)存區(qū)讀入到覆蓋率文件中,供后續(xù)的覆蓋率信息分析使用。覆蓋率信息分析
覆蓋率信息分析過(guò)程是針對(duì)提取得到的覆蓋率文件進(jìn)行分析,得到最終的被測(cè)軟件語(yǔ)句覆蓋率和分支覆蓋率。覆蓋率信息分析時(shí)需要分別建立語(yǔ)句、分支與分支點(diǎn)之間的對(duì)應(yīng)關(guān)系。通過(guò)分支點(diǎn)是否被執(zhí)行來(lái)反推出語(yǔ)句、分支(真分支和假分支)是否被執(zhí)行過(guò),統(tǒng)計(jì)所有執(zhí)行過(guò)的語(yǔ)句數(shù)和分支數(shù),并計(jì)算最終的語(yǔ)句和分支覆蓋率。本發(fā)明說(shuō)明書中未作詳細(xì)描述的內(nèi)容屬本領(lǐng)域技術(shù)人員的公知技術(shù)。
權(quán)利要求
1.C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法,其特征在于步驟如下(1)把C語(yǔ)言程序看做一個(gè)由各分支點(diǎn)組成的數(shù)組,每一個(gè)分支點(diǎn)均對(duì)應(yīng)數(shù)組中的一個(gè)元素,并把數(shù)組中每個(gè)元素定義為兩種狀態(tài),“ 1”表示執(zhí)行過(guò),“0”表示未執(zhí)行過(guò);其中數(shù)組的維數(shù)與分支點(diǎn)的數(shù)量相同,分支點(diǎn)為C語(yǔ)言程序的各種邏輯分支的第一條語(yǔ)句;(2)將數(shù)組定義在專用存儲(chǔ)區(qū)進(jìn)行存儲(chǔ);(3)在C語(yǔ)言程序各分支點(diǎn)處,增加向定義在專用存儲(chǔ)區(qū)的分支點(diǎn)信息數(shù)組輸出該分支點(diǎn)是否被執(zhí)行信息的操作代碼;所述分支點(diǎn)是否被執(zhí)行信息的操作代碼內(nèi)容為向分支點(diǎn)信息數(shù)組中該分支點(diǎn)對(duì)應(yīng)的bit位執(zhí)行“或” 1的操作;(4)在C語(yǔ)言程序main函數(shù)的第一條語(yǔ)句處增加對(duì)數(shù)組進(jìn)行初始化的操作代碼;(5)執(zhí)行增加操作代碼以后的C語(yǔ)言程序,執(zhí)行完畢后從專用存儲(chǔ)區(qū)提取分支點(diǎn)信息數(shù)組,根據(jù)分支點(diǎn)信息數(shù)組中各元素的狀態(tài)即可確定C語(yǔ)言程序中各分支點(diǎn)的執(zhí)行情況, 由此得到C語(yǔ)言程序的動(dòng)態(tài)測(cè)試覆蓋率。
2.根據(jù)權(quán)利要求1所述的C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法,其特征在于所述的專用存儲(chǔ)區(qū)為DSP內(nèi)部RAM的未使用區(qū)。
3.根據(jù)權(quán)利要求1或2所述的C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法,其特征在于所述的分支點(diǎn)信息數(shù)組中每個(gè)元素用Ibit來(lái)表示,將分支點(diǎn)信息數(shù)組變?yōu)?b>分支點(diǎn)個(gè)數(shù)/8+1個(gè)unsigned char類型數(shù)值的集合。
全文摘要
C語(yǔ)言嵌入式軟件插樁及動(dòng)態(tài)測(cè)試覆蓋率信息提取方法,把C語(yǔ)言程序看做一個(gè)由各分支點(diǎn)組成的數(shù)組,每一個(gè)分支點(diǎn)對(duì)應(yīng)數(shù)組中的一個(gè)元素,每個(gè)元素定義為兩種狀態(tài),“1”表示執(zhí)行過(guò),“0”表示未執(zhí)行過(guò)。然后將數(shù)組定義在專用存儲(chǔ)區(qū)。隨后在C語(yǔ)言程序各分支點(diǎn)處,增加向定義在專用存儲(chǔ)區(qū)的分支點(diǎn)信息數(shù)組輸出該分支點(diǎn)是否被執(zhí)行信息的操作代碼。執(zhí)行增加操作代碼以后的C語(yǔ)言程序,執(zhí)行完畢后從專用存儲(chǔ)區(qū)提取分支點(diǎn)信息數(shù)組,根據(jù)分支點(diǎn)信息數(shù)組中各元素的狀態(tài)即可確定C語(yǔ)言程序中各分支點(diǎn)的執(zhí)行情況,由此得到C語(yǔ)言程序的動(dòng)態(tài)測(cè)試覆蓋率。本發(fā)明方法具有代碼膨脹率小,分支點(diǎn)信息所占存儲(chǔ)空間小,覆蓋率信息提取方便的特點(diǎn)。
文檔編號(hào)G06F11/36GK102419731SQ20111041248
公開(kāi)日2012年4月18日 申請(qǐng)日期2011年12月8日 優(yōu)先權(quán)日2011年12月8日
發(fā)明者侯成杰, 吳瑾, 王翼山, 董燕, 郝偉, 郭華 申請(qǐng)人:北京控制工程研究所