教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

什么是源代碼插樁?怎樣執(zhí)行這一操作?

更新時(shí)間:2021年12月24日15時(shí)15分 來源:傳智教育 瀏覽次數(shù):

源代碼插樁的概念與模型

源代碼插樁是指對(duì)源文件進(jìn)行完整的詞法、語法分析后,確認(rèn)插樁的位置,植入探針代相比于目標(biāo)代碼插樁,源代碼插樁具有針對(duì)性和精確性。源代碼插樁模型如圖3-4所示。

源代碼插樁模型
圖3-4 源代碼插樁模型

源代碼插樁

從圖3-4可以看出,源代碼插樁是在程序執(zhí)行之前完成的,因此源代碼插樁在程序運(yùn)行過程中會(huì)產(chǎn)生探針代碼的開銷。相比于目標(biāo)代碼插樁,源代碼插樁實(shí)現(xiàn)復(fù)雜程度低。源代碼插樁是源代碼級(jí)別的測(cè)試技術(shù),探針代碼程序具有較好的通用性,使用同一種編程語言編寫的程序可以使用一個(gè)探針代碼程序來完成測(cè)試。

上面講解了源代碼插樁的概念與模型,為了讓讀者理解源代碼插樁的使用,下面通過一小案例來講解源代碼插樁。該案例是一個(gè)除法運(yùn)算,代碼如下所示。

 # include < stdio.h > 
 # define ASSERT(y) if (y) {
     printf("出錯(cuò)文件:%s\n", __FILE__);\
     Printf("在第%d行:\n") __LINE__\);
 printf(” 提示: 除數(shù)不能為0!\ n ");\
}   //定義ASSERT(Y)
 int main(){
 int x, y;
 printf( "請(qǐng)輸入被除數(shù):");
 scanf("%d", & x);
 Printf( "請(qǐng)輸入除數(shù):");
 scanf("%d", & y);
 ASSERT(y == 0); //插入的樁(即探針代碼)
 printf("%d", x / y);
 return 0;
 }

為了監(jiān)視除法運(yùn)算除數(shù)輸入是否正確,在代碼第13行插入宏函數(shù)ASSERT(y),當(dāng)除數(shù)為O時(shí)打印錯(cuò)誤原因、出錯(cuò)文件、出錯(cuò)行數(shù)等信息提示。宏函數(shù)ASSERT(y)中使用了C語言標(biāo)準(zhǔn)庫的宏定義“▁FILE▁”提示出錯(cuò)文件、“▁LINE▁”提示文件出錯(cuò)位置。程序運(yùn)行后,提示輸入被除數(shù)和除數(shù)在輸入除數(shù)后,程序宏函數(shù)ASSERT(y)判斷除數(shù)是否為0,若除數(shù)為0則打印錯(cuò)誤信息,程序運(yùn)行結(jié)束;若除數(shù)不為0,則進(jìn)行除法運(yùn)算并打印計(jì)算結(jié)果。根據(jù)除法運(yùn)算規(guī)則設(shè)計(jì)測(cè)試用例,如表下表所示。

對(duì)插樁后的C源程序進(jìn)行編譯、鏈接,生成可執(zhí)行文件并運(yùn)行,然后輸入表3-8中的測(cè)試用例數(shù)據(jù),讀者可觀察測(cè)試用例的實(shí)際執(zhí)行結(jié)果與預(yù)期結(jié)果是否一致。程序插樁測(cè)試方法有效地提高了代碼測(cè)試覆蓋率,但是插樁測(cè)試方法會(huì)帶來代碼膨脹、執(zhí)行效率低下和HeisenBugs,在一般情況下插樁后的代碼膨脹率在20%~40%,甚至能達(dá)到100%導(dǎo)致插樁測(cè)試失敗。

小提示:HeisenBugs

HeisenBugs即海森堡Bug,它是一種軟件缺陷,這種缺陷的重現(xiàn)率很低,當(dāng)人們?cè)噲D研究時(shí)Bug會(huì)消失或改變行為。實(shí)際開發(fā)軟件測(cè)試中,這種缺陷也比較常見,例如,測(cè)試人員測(cè)試到一個(gè)缺陷提交給開發(fā)人員后,開發(fā)人員執(zhí)行缺陷重現(xiàn)步驟卻得不到報(bào)告的缺陷,因?yàn)槿毕菀呀?jīng)消失或者出現(xiàn)了其他缺陷。





猜你喜歡:

目標(biāo)代碼插樁的三種執(zhí)行模式

怎樣下載和搭建AirTest測(cè)試環(huán)境?

移動(dòng)app性能測(cè)試的要點(diǎn)有哪些?

決策表如何使用?如何簡(jiǎn)化決策表?

傳智教育軟件測(cè)試開發(fā)培訓(xùn)

0 分享到:
和我們?cè)诰€交談!