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

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

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

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

源代碼插樁的概念與模型

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

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

源代碼插樁

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

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

 # include < stdio.h > 
 # define ASSERT(y) if (y) {
     printf("出錯文件:%s\n", __FILE__);\
     Printf("在第%d行:\n") __LINE__\);
 printf(” 提示: 除數(shù)不能為0!\ n ");\
}   //定義ASSERT(Y)
 int main(){
 int x, y;
 printf( "請輸入被除數(shù):");
 scanf("%d", & x);
 Printf( "請輸入除數(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ù)等信息提示。宏函數(shù)ASSERT(y)中使用了C語言標(biāo)準(zhǔn)庫的宏定義“▁FILE▁”提示出錯文件、“▁LINE▁”提示文件出錯位置。程序運(yùn)行后,提示輸入被除數(shù)和除數(shù)在輸入除數(shù)后,程序宏函數(shù)ASSERT(y)判斷除數(shù)是否為0,若除數(shù)為0則打印錯誤信息,程序運(yùn)行結(jié)束;若除數(shù)不為0,則進(jìn)行除法運(yùn)算并打印計算結(jié)果。根據(jù)除法運(yùn)算規(guī)則設(shè)計測試用例,如表下表所示。

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

小提示:HeisenBugs

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





猜你喜歡:

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

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

移動app性能測試的要點(diǎn)有哪些?

決策表如何使用?如何簡化決策表?

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

0 分享到:
和我們在線交談!