<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 覆蓋測(cè)試中高效代碼插樁技術(shù)的研究

          覆蓋測(cè)試中高效代碼插樁技術(shù)的研究

          作者: 時(shí)間:2010-12-21 來源:網(wǎng)絡(luò) 收藏


          由于插樁技術(shù)中插樁點(diǎn)識(shí)別過程中的詞法、語法分析只需要識(shí)別有限的程序結(jié)構(gòu)特征即可,而對(duì)程序中所有的詞法語法進(jìn)行分析是因?yàn)橛芍虚g生成匯編時(shí),需要以詞法語法分析作為基礎(chǔ),識(shí)別出所有的程序結(jié)構(gòu)特征。由此可以知道滿足插樁技術(shù)要求的詞法語法分析器可以比中間代碼生成的詞法語法分析器簡(jiǎn)單。生成滿足插樁點(diǎn)識(shí)別的詞法語法分析器的詞法語法分析程序的輸入為預(yù)處理后的源代碼文件,輸出是插樁后的源代碼文件(如圖1 所示的灰色部分)。由于新增加的詞法語法分析程序僅僅是針對(duì)插樁所需識(shí)別的詞法、語法進(jìn)行分析,故而需要植入的探針比較少,代碼膨脹率自然減小,插樁速度加快,進(jìn)而整個(gè)編譯過程就會(huì)加快。

          2.3 插樁程序的設(shè)計(jì)

          探針的設(shè)計(jì)解決了插樁內(nèi)容的問題,而插樁程序的設(shè)計(jì)是用來確定插樁位置和插樁策略的,即回答“在哪插”和“如何插”的問題。

          (1)插樁位置:

          探針的植入要做到緊湊精干,才能保證在做到收集的信息全面而無冗余,減少代碼的膨脹率。因此,在確定插樁位置時(shí),要將程序劃分,基本的劃分方法是基于“塊”結(jié)構(gòu)。

          按照塊結(jié)構(gòu)的劃分,探針的植入位置有以下幾種情況:

          a. 程序的第一條語句;b. 分支語句的開始;c. 循環(huán)語句的開始;d. 下一個(gè)入口語句之前的語句;e. 程序的結(jié)束語句;f. 分支語句的結(jié)束;g. 循環(huán)語句的結(jié)束;除此之外,根據(jù)覆蓋要求的不同,插樁的位置除了上面所說的幾種情況外,也會(huì)隨著覆蓋要求的不同有所變化。

          (2)插樁策略:

          插樁策略是解決“如何插”的問題。傳統(tǒng)的插樁策略是在所有需要插樁的位置插入探針,在程序運(yùn)行過程收集所有可能用到得程序信息,將其寫入數(shù)據(jù)庫(kù)進(jìn)行分析和處理。這種方法對(duì)于大型的程序來說,將會(huì)造成相當(dāng)大的工作量,效率很低,且會(huì)造成很大的代碼膨脹率。而我們會(huì)根據(jù)不同的要求,每次插入不同的探針,采用相應(yīng)的插樁策略,這樣就減少了代碼的膨脹率,保證了程序執(zhí)行的效率。下面簡(jiǎn)單介紹幾種探針的插樁策略。

          語句覆蓋探針(基本塊探針):在基本塊的入口和出口處,分別植入相應(yīng)的探針,以確定程序執(zhí)行時(shí)該基本塊是否被覆蓋。

          分支覆蓋探針:C/C++語言中,分支由分支點(diǎn)確定。對(duì)于每個(gè)分支,在其開始處植入一個(gè)相應(yīng)的探針,以確定程序執(zhí)行時(shí)該分支是否被覆蓋。

          條件覆蓋探針:C/C++語言中,if, swich,while, do-while, for 幾種語法結(jié)構(gòu)都支持條件判定,在每個(gè)條件表達(dá)式的布爾表達(dá)式處植入探針,進(jìn)行變量跟蹤取值,以確定其被覆蓋情況。

          根據(jù)不同測(cè)試要求采用不用的插樁策略,每次在不同的位置植入相應(yīng)的探針,使得每次只是植入有限的探針,這就更大大減少了代碼的膨脹率和插樁的速度。

          3 實(shí)驗(yàn)

          本文采用了一個(gè) 1000 行的程序作為被測(cè)程序,分別采用使用整體插樁的工具和我們自己開發(fā)的工具進(jìn)行測(cè)試,結(jié)果發(fā)現(xiàn)前者插樁的時(shí)間和代碼膨脹率分別為3s 和35%,后者插樁的平均時(shí)間和平均的代碼膨脹率為1s 和8%,插樁時(shí)間得到明顯提升,代碼膨脹率明顯減少。

          采用以上的程序插樁技術(shù),除了常用的覆蓋測(cè)試策略外,我們還可以實(shí)現(xiàn)MC/DC 和LCSAJ 測(cè)試。

          4 結(jié)束語

          本文詳細(xì)介紹了覆蓋測(cè)試中的高效代碼插樁技術(shù),由此可以看出在實(shí)際中覆蓋測(cè)試分析采用的覆蓋策略的多樣性決定了程序插樁時(shí)需要識(shí)別程序的特征的復(fù)雜性。同時(shí)在軟件覆蓋測(cè)試工具的開發(fā)中,如果從軟件的分析開始,就有合理的程序劃分、適當(dāng)?shù)倪x定插樁位置和插樁策略,就可以滿足多種測(cè)試要求,使得測(cè)試能夠合理又快速的實(shí)現(xiàn)。如果再加上自動(dòng)化測(cè)試工具的支持,那就可以大大提高測(cè)試的效率。

          本文引用地址:http://www.ex-cimer.com/article/202489.htm

          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: 測(cè)試 代碼

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();