<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > 代碼覆蓋分析工具在嵌入式軟件測試中的應用

代碼覆蓋分析工具在嵌入式軟件測試中的應用

作者:蘇華龍 陸松年 時(shí)間:2008-05-13 來(lái)源:?jiǎn)纹瑱C及嵌入式系統應用 收藏

  的重要性是毋庸置疑的。如何以最少的人力和資源投入,在最短的時(shí)間內完成測試,發(fā)現軟件系統的缺陷,保證軟件的優(yōu)良品質(zhì),是軟件公司探索和追求的目標。然而大家都知道,從理論上講測試是永無(wú)止境的,只要不斷測試就一定能不斷發(fā)現問(wèn)題.那么究竟如何度量測試的進(jìn)度,如何判斷測試可以完結呢?這些,可以依靠測試覆蓋率的分析來(lái)實(shí)現。軟件系統也不例外。

本文引用地址:http://dyxdggzs.com/article/82478.htm

  l

  過(guò)程包含以下幾個(gè)方面:

  通過(guò)一組覆蓋測試數據發(fā)現和分析那些沒(méi)有被運行到的代碼;
  為了提高代碼覆蓋率而設計新的測試用例;
  確定代碼覆蓋的定量標準,這XXX數據也間接地反映測試質(zhì)量;
  識別那些冗余的測試用例。
  
  是一種白盒測試方法,因為覆蓋分析需要訪(fǎng)問(wèn)測試代碼本身,且經(jīng)常需要重新編澤程序,以程序的內部結構為基礎來(lái)設計測試案例。其基本準則是測試案例要盡可能多地覆蓋程序的內部邏輯結構,發(fā)現其中的錯誤和問(wèn)題。另外要注意的是,覆蓋分析并不是為了提高程序本身的質(zhì)量而是為了確保測試用例的質(zhì)量。一般來(lái)說(shuō),覆蓋分析通常應用在的早期,即單元測試階段。在軟件發(fā)布版本階段是不需要運行軟件覆蓋分析的。

  2 覆蓋分析在系統上的問(wèn)題

  軟件的開(kāi)發(fā)與通用軟件的開(kāi)發(fā)很大的不同點(diǎn)在于:嵌入式系統需要采用交叉開(kāi)發(fā)的方式,即開(kāi)發(fā)工具運行在軟硬件配置豐富的宿主機上,而嵌入式應用程序則運行在軟硬件資源相對缺乏的目標機上。所以針對覆蓋分析測試,嵌入式系統的困難之一就是如何獲取測試產(chǎn)生的覆蓋數據。犬多數的覆蓋分析測試工具都需要對代碼捅裝,而當在目標環(huán)境下運行經(jīng)過(guò)代碼插裝的可執行程序時(shí),就會(huì )有覆蓋分析數據產(chǎn)牛。這些數據是分析覆蓋數據報告的重要輸入條件,所以要順利實(shí)現嵌入式系統覆蓋分析的一個(gè)關(guān)鍵點(diǎn)是如何建立宿主機與目標機之間的物理/邏輯連接,解決覆蓋分析數據信息的傳輸問(wèn)題。

  3 BullseyeCoverage的實(shí)現方式

  BullseyeCoverage是Bllseye公司提供的一款C/C++代碼覆蓋率測試工具。相對于Rational公司的Pure Coverage,BullseyeCoverage支持的C/C++編譯器更多,除了支持各種Unix下的編譯器之外,在Windows下還支持VC、Borland C++、GNU C++和Intel C++。其提供的代碼覆蓋率是基于條件/判斷的分支覆蓋率,而不是一般的代碼行覆蓋率。

  BuuseyeCoverage采用的是先對代碼進(jìn)行插裝,然后收集覆蓋數據,最后分析覆蓋率原理的技術(shù)。其工作原理是:針對不同的編澤器,設計一個(gè)和真實(shí)編譯器名字相同的攔截器,這些攔截器文件存放在BullseyeCoverage的bin目錄下。當覆蓋編譯開(kāi)關(guān)打開(kāi)時(shí),文件在編譯過(guò)程中將首先被這些攔截器所攔截,而不是由真實(shí)的編譯器去編譯源代碼。在這個(gè)攔截過(guò)程中,攔截器將一系列探針代碼插入到C/C++源代碼中,然后文件再次通過(guò)真實(shí)的編譯器生成二進(jìn)制代碼。當覆蓋編譯開(kāi)關(guān)關(guān)閉時(shí),這些攔截器將直接調用真實(shí)的編譯器而不進(jìn)行代碼插裝的過(guò)程。兩者的區別及調用關(guān)系如圖1所示。

       

  當完成了代碼插裝并且將編譯好的運行文件下載到嵌入式系統后,開(kāi)始代碼覆蓋分析另外一個(gè)重要的工作過(guò)程——覆蓋分析數據更新過(guò)程。由于BullseyeCoverage需要在運行時(shí)態(tài)對經(jīng)過(guò)覆蓋攔截器生成的覆蓋分析文件(大小一般是運行代碼的1.2~1.5倍)進(jìn)行讀寫(xiě)操作,所以可以對覆蓋文件的大小進(jìn)行簡(jiǎn)單的估計,以便設計系統。在數據更新過(guò)程中,BullseyeCoverage的每次讀寫(xiě)操作范圍為l字節~4 KB。另外,BullseyeCoverage只有在測試程序觸發(fā)了cov_write函數時(shí)才會(huì )對覆蓋分析文件進(jìn)行更新。如果覆蓋沒(méi)有更新,那么相應地也沒(méi)有I/O動(dòng)作發(fā)生。針對嵌入式系統,BullseyeCoverage有兩種實(shí)現的方式:

 ?、倮米x取內存區數據的原理。首先,通過(guò)串口、以太網(wǎng)或者USB將覆蓋分析文件下載到嵌入式系統的某個(gè)未用內存區域;然后,修改測試工具的I/O庫函數,將對覆蓋分析文件操作的更新數據直接寫(xiě)入那塊內存區域中。這樣在測試開(kāi)始后,分析程序會(huì )自動(dòng)更新位于內存中的覆蓋分析文件。由于覆蓋分析文件在內存中,所以這種讀寫(xiě)操作的速度會(huì )非???。測試完成后,通過(guò)串口、網(wǎng)絡(luò )或者USB再次將覆蓋分析文件讀回到PC機中,然后利用工具對覆蓋結果進(jìn)行分析。

 ?、诶脤?shí)際物理通道的原理。系統需要對覆蓋分析文件的I/O操作進(jìn)行封裝,將需要更新的操作命令和更新內容通過(guò)串口、網(wǎng)絡(luò )或者USB傳遞給宿主系統,而宿主系統需要實(shí)現一個(gè)簡(jiǎn)單的接收更新程序對覆蓋文件進(jìn)行更新。在這種實(shí)現方式中,最困難的是對每次數據傳輸的緩沖區大小進(jìn)行估計。由于BullseyeCoverage每次對覆蓋分析文件的讀寫(xiě)操作的范圍是1字節~4 KB,而通常情況下,更新數據會(huì )是4~8字節的小數據塊(在較頻繁的操作中也會(huì )有100字節~4KB數據的更新塊),所以Bullseye-Coverage會(huì )采取減少數據傳遞次數、增大數據塊的做法,一次性傳遞完更新數據。如何保證數據的低延時(shí)是這種方式的關(guān)鍵點(diǎn)。

  4 嵌入式操作系統的具體應用

   PLUS嵌入式操作系統是目前最受歡迎的操作系統。 PLUS是為實(shí)時(shí)嵌入式應用而設計的一個(gè)搶先式多任務(wù)操作系統內核,其95%的代碼是用ANSIC寫(xiě)成的,因此非常便于移植,并能夠支持大多數類(lèi)型的處理器。Nucleus PLUS最大的優(yōu)勢在于提供注釋嚴格的C源代碼給每一個(gè)用戶(hù)。這樣,用戶(hù)能夠深入地了解底層內核的運作方式,并可根據自己的特殊要求刪減或改動(dòng)系統軟件,這對軟件的規范化管理及系統軟件的測試都有極大的幫助。

  基于時(shí)間效率的要求,在Nucleus嵌入式系統中實(shí)現代碼覆蓋分析采用的足內存存取操作的方式。具體實(shí)現過(guò)程如下:

 ?、侔惭bBullseyeCoverage,選擇合適的編譯器。由于使用PXA270作為開(kāi)發(fā)平臺,所以也選用了Intel C++編譯器。安裝完成后,從命令行輸入命令“SET COVFILE="XXX"”來(lái)設定覆蓋分析文件的輸出地點(diǎn)和具體名稱(chēng)。默認的名稱(chēng)是test.cov。

 ?、谛薷腗akefile,將編譯器的路徑設置到Bullseye-Coverage的bin目錄下。

 ?、凼褂妹?ldquo;cov01-1”打開(kāi)覆蓋編譯選項。然后編譯代碼,需要在編譯過(guò)程中確定調用了BullseycCoverage的攔截器,可以通過(guò)查看編澤記錄中是否含有“BullseyeCoverage Compile C++version platform”的信息確定。通常會(huì )在編譯結束時(shí)發(fā)現鏈接錯誤,這是由于需要調用的函數實(shí)現體并沒(méi)有編譯、鏈接進(jìn)來(lái)。

 ?、苓M(jìn)入到BullseyeCoverage的run目錄下,根據系統平臺要求修改libcov-user.h、atomic-user.h和Makefik文件,用-DSYS_user區編譯BullseyeCoverage運行庫文件。通過(guò)這個(gè)選項可以使編譯器選擇用戶(hù)自定義的平臺文件,在這些文件中就含有需要封裝的一些函數,如write、read、open等。編譯完的庫文件可以命名為libeov-user.a(chǎn)或libcov-user.lib。

 ?、菪薷囊獪y試系統的編譯文件,在Makefile的鏈接過(guò)程中加入libcov-user.a(chǎn)或libcov-user.lib。再次重新編譯,應該沒(méi)有任何錯誤。

 ?、薷鶕﨎ullseyeCoverage的要求,將libcov-user.h中帶有REQUIRED標識的函數根據具體情況實(shí)現。在這個(gè)過(guò)程中,建議首先實(shí)現error_write_screen,這樣在后續過(guò)程中可以將錯誤信息打印到屏幕或者輸出到測試日志中,然后逐步實(shí)現其他函數。

 ?、邔?shí)現了所有必需的函數后,重新編譯一遍確定沒(méi)有任何編譯、鏈接問(wèn)題。最終會(huì )生成2個(gè)文件,一個(gè)是要運行的二進(jìn)制文件(如rfs.bin),另外一個(gè)是覆蓋分析文件test.cov。

 ?、鄬fs.bin和覆蓋文件文件分別下載到系統中。其中,將ffs.bin下載到Flash存儲器中,通過(guò)Nucleus的調試命令download將test.cov下載到系統內存中。

 ?、徇\行二進(jìn)制代碼,在這個(gè)過(guò)程中,系統內存結構如圖2所示。

       

 ?、舛M(jìn)制代碼運行完畢后,用Nucleus的調試命令upload將test.cov上載到PC機中。

 ?、嫌肅overage Brozrset打開(kāi)test.cov,覆蓋分析結果就得到了。

  通過(guò)實(shí)驗,在投有使用BullseyeCoverage時(shí),一般測試方式的測試覆蓋率大致是55%~70%;而通過(guò)使用BullseyeCoverage重新設計測試用例,測試覆蓋率提高到了85%~90%,其中7%的測試用例直接影響到產(chǎn)品的質(zhì)量。使用測試覆蓋分析工具BullseyeCoverage可以使測試更有針對性,減少冗余測試用例測試,提高測試團隊的工作效率,能夠在開(kāi)發(fā)過(guò)程中盡早地發(fā)現Bug。

  5 總 結

  測試覆蓋分析是一種對測試階段度量及測試工作情況進(jìn)行分析的很好的方法,可以使測試程度更為明確,階段進(jìn)度一目了然,其統計值也便于管理部門(mén)對當前測試狀態(tài)進(jìn)行了解與把握。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>