覆蓋測(cè)試中高效代碼插樁技術(shù)的研究
摘要:代碼插樁是實(shí)現(xiàn)覆蓋測(cè)試的關(guān)鍵技術(shù)之一,而高效的插樁技術(shù)對(duì)于嵌入式軟件的測(cè)試來(lái)說(shuō)又是至關(guān)重要的。文章在對(duì)CodeTeST 中插樁技術(shù)研究的基礎(chǔ)上,以GCC 作為開(kāi)發(fā)平臺(tái),應(yīng)用并實(shí)現(xiàn)了新的插裝器,采用增加一個(gè)詞法語(yǔ)法分析器的方法,提高了插樁的效率。經(jīng)過(guò)實(shí)驗(yàn)證明新的插裝器具有代碼膨脹率小,插樁速度塊的優(yōu)點(diǎn),在一定程度上做到了高效插樁。
引言
在實(shí)現(xiàn)覆蓋測(cè)試的過(guò)程中,往往需要知道某些信息,如:程序中可執(zhí)行語(yǔ)句被執(zhí)行(即被覆蓋)的情況,程序執(zhí)行的路徑,變量的引用、定義等。要想獲取這類(lèi)信息,需要跟蹤被測(cè)程序的執(zhí)行過(guò)程,或者是由計(jì)算機(jī)在被測(cè)程序執(zhí)行的過(guò)程中自動(dòng)記錄。前者需要人工進(jìn)行,效率低下且枯燥乏味;后者則需要在被測(cè)程序中插入完成相應(yīng)工作的代碼,即代碼插樁技術(shù)。如今大多數(shù)的覆蓋測(cè)試工具均采用代碼插樁技術(shù)。
在對(duì)普通應(yīng)用的軟件進(jìn)行測(cè)試時(shí),由于現(xiàn)在電腦的配置越來(lái)越高,電腦的運(yùn)行速度越來(lái)越快,代碼插樁所引起的問(wèn)題還不是很明顯或者說(shuō)是在可以接受的范圍之內(nèi)。但是對(duì)于嵌入式軟件來(lái)說(shuō)這卻是致命的問(wèn)題。因?yàn)榍度胧杰浖南到y(tǒng)資源有限(內(nèi)存較小、I/O 通道較少等),過(guò)大的代碼膨脹率將使得程序不能在嵌入式系統(tǒng)中運(yùn)行;同時(shí)嵌入式軟件通常具有很強(qiáng)的實(shí)時(shí)性,程序的輸出只在有限的時(shí)間內(nèi)有效,遲到的“正確的”結(jié)果是無(wú)用的甚至?xí)兂慑e(cuò)誤的、有害的。
代碼插樁技術(shù)會(huì)破壞程序的時(shí)間特性等,導(dǎo)致軟件執(zhí)行的錯(cuò)誤。因此我們需要更高效的代碼插樁技術(shù)來(lái)完成覆蓋測(cè)試,尤其是嵌入式軟件的覆蓋測(cè)試。
1 插樁技術(shù)概述
程序插樁技術(shù)最早是由J.C. Huang 教授提出的, 它是在保證被測(cè)程序原有邏輯完整性的基礎(chǔ)上在程序中插入一些探針(又稱(chēng)為“探測(cè)儀”),通過(guò)探針的執(zhí)行并拋出程序運(yùn)行的特征數(shù)據(jù),通過(guò)對(duì)這些數(shù)據(jù)的分析,可以獲得程序的控制流和數(shù)據(jù)流信息,進(jìn)而得到邏輯覆蓋等動(dòng)態(tài)信息,從而實(shí)現(xiàn)測(cè)試目的的方法。
1.1 插樁方式比較
由于程序插樁技術(shù)是在被測(cè)程序中插入探針,然后通過(guò)探針的執(zhí)行來(lái)獲得程序的控制流和數(shù)據(jù)流信息,以此來(lái)實(shí)現(xiàn)測(cè)試的目的。因此,根據(jù)探針插入的時(shí)間可以分為目標(biāo)代碼插樁和源代碼插樁。
(1)目標(biāo)代碼插樁的前提是對(duì)目標(biāo)代碼進(jìn):
行必要的分析以確定需要插樁的地點(diǎn)和內(nèi)容。由于目標(biāo)代碼的格式主要和操作系統(tǒng)相關(guān),和具體的編程語(yǔ)言及版本無(wú)關(guān),所以得到了廣泛的應(yīng)用,尤其是在需要對(duì)內(nèi)存進(jìn)行監(jiān)控的軟件中。但是由于目標(biāo)代碼中語(yǔ)法、語(yǔ)義信息不完整,而插樁技術(shù)需要對(duì)代碼詞法語(yǔ)法的分析有較高的要求,故在覆蓋測(cè)試工具中多采用源代碼插樁。
(2)源代碼插樁是在對(duì)源文件進(jìn)行完整的:
詞法分析和語(yǔ)法分析的基礎(chǔ)上進(jìn)行的,這就保證對(duì)源文件的插樁能夠達(dá)到很高的準(zhǔn)確度和針對(duì)性。但是源代碼插樁需要接觸到源代碼,使得工作量較大,而且隨著編碼語(yǔ)言和版本的不同需要做一定的修改。在后面我們所提到的程序插樁均指源代碼插樁。
2 程序插樁技術(shù)的研究
眾多的覆蓋測(cè)試工具中都采用了程序插樁技術(shù),但是各有各的優(yōu)缺點(diǎn),而市場(chǎng)上認(rèn)為比較好的嵌入式測(cè)試工具有CodeTest,使用CodeTest工具插裝進(jìn)行測(cè)試對(duì)目標(biāo)程序的影響在1%到15%之間。下面對(duì)CodeTest 的插樁技術(shù)進(jìn)行的分析。
評(píng)論