欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng)和方法

文檔序號:6460840閱讀:200來源:國知局

專利名稱::一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng)和方法
技術(shù)領(lǐng)域
:本發(fā)明涉及一種通訊領(lǐng)域的白盒測試技術(shù),尤其涉及的是,一種覆蓋率測試系統(tǒng)和方法。
背景技術(shù)
:白盒測試,也稱結(jié)構(gòu)測試或邏輯驅(qū)動(dòng)測試,是在軟件編碼階段,按照程序內(nèi)部的結(jié)構(gòu)測試程序,通過測試來檢測產(chǎn)品內(nèi)部動(dòng)作是否4安照設(shè)計(jì)規(guī)格說明書的規(guī)定正常進(jìn)行,檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作。白盒測試是軟件生存周期中一個(gè)獨(dú)立的,關(guān)鍵的階段,代表了規(guī)約、設(shè)計(jì)和編碼的最終檢查,也是保證軟件質(zhì)量的重要手段。覆蓋率統(tǒng)計(jì)是白盒測試中衡量測試用例以及代碼的關(guān)鍵指標(biāo)參數(shù),包括語句覆蓋率、分支覆蓋率、條件覆蓋率、函數(shù)覆蓋率,語句覆蓋率=至少被執(zhí)行一次的語句數(shù)量/可執(zhí)行的語句總數(shù),分支覆蓋率=分支結(jié)果被執(zhí)行的次數(shù)/分支結(jié)果總數(shù),條件覆蓋率=條件操作數(shù)值至少被評價(jià)一次的數(shù)量/條件操作數(shù)值的總數(shù);函數(shù)覆蓋率=已覆蓋的函數(shù)調(diào)用個(gè)數(shù)/全部函數(shù)調(diào)用個(gè)數(shù)。目前的覆蓋率統(tǒng)計(jì)的方法是在可執(zhí)行文件插入監(jiān)視代碼,即對不同的操作系統(tǒng)用不同的可執(zhí)行文件找到函數(shù)入口插入代碼,在重定位代碼位置后進(jìn)行統(tǒng)計(jì)。對可執(zhí)行文件植入代碼存在以下問題不同的操作系統(tǒng)必須使用不同的可執(zhí)行文件,例如,Windows4喿作系統(tǒng)的可執(zhí)行文件是PE文件(PortableExecutable,可移植的執(zhí)行體,是Windows操作系統(tǒng)自身所帶的執(zhí)行體文件格式),對其他系統(tǒng)不適用,如UNIX操作系統(tǒng)、XENIX操作系統(tǒng)、LINUX操作系統(tǒng)中就必須另做該系統(tǒng)相應(yīng)的可執(zhí)行文件;而且,可執(zhí)行文件的文件格式復(fù)雜,難以分析;代碼插入后需要重新定位,重新定位難度大。因此,現(xiàn)有技術(shù)還存在缺陷,有待于改進(jìn)和發(fā)展。
發(fā)明內(nèi)容本發(fā)明解決的技術(shù)問題是提供一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng)和方法,能夠應(yīng)用于多種操作系統(tǒng)的實(shí)現(xiàn)覆蓋率統(tǒng)計(jì)。為解決上述技術(shù)問題,本發(fā)明采用以下方案一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng),包括與被測模塊連接的源代碼分析器,用于對所述被測模塊進(jìn)行源代碼分析并統(tǒng)計(jì)所述被測模塊中需要測試的指令的總數(shù);與所述被測模塊連接的代碼植入器,用于對所述^L測模塊中需要測試的指令前插入代碼打點(diǎn)程序并對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;與所述被測模塊連接的代碼打點(diǎn)模塊,用于記錄代碼打點(diǎn)程序調(diào)用次數(shù);與所述源代碼分析器和代碼打點(diǎn)模塊連接的計(jì)算模塊,用于計(jì)算所述打點(diǎn)程序調(diào)用次^t與指令的總數(shù)之間的比值并輸出。所述的系統(tǒng),其中,所述源代碼分析器包括與被測模塊連接的源代碼解析模塊,用于解析源代碼結(jié)構(gòu);與所述源代碼解析模塊連接的指令分類模塊,用于對所述源代碼中的指令類型進(jìn)行識別;與所述指令分類模塊連接的指令統(tǒng)計(jì)模塊,用于分別統(tǒng)計(jì)和存儲每種類型的指令的總數(shù)。所述的系統(tǒng),其中,所述代碼打點(diǎn)模塊包括與所述^皮測才莫塊連接的統(tǒng)計(jì)代碼打點(diǎn)模塊,用于記錄所述代碼打點(diǎn)程序的調(diào)用次數(shù);與所述統(tǒng)計(jì)模塊連接的存儲模塊,用于存儲所述代碼打點(diǎn)程序的調(diào)用次數(shù)。所述的系統(tǒng),其中,所述需要測試的指令包括語句指令、分支指令、條件指令、函數(shù)指令、路徑指令。本發(fā)明還提供一種實(shí)現(xiàn)覆蓋率測試的方法,包括以下步驟Sl、分析源代碼、統(tǒng)計(jì)需要測試的指令的總數(shù);S2、在所述需要測試的指令前插入代碼打點(diǎn)程序;S3、對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;S4、運(yùn)行代碼打點(diǎn)程序插入后的源代碼,記錄代碼打點(diǎn)程序的調(diào)用次數(shù);S5、計(jì)算代碼打點(diǎn)程序的調(diào)用次數(shù)與需要測試的指令的總數(shù)的比值并輸出。所述的方法,其中,所述需要測試的指令包括語句指令、分支指令、條件指令、函數(shù)指令、路徑指令。所述的方法,其中,所述步驟S1包括Sll、解析源代碼結(jié)構(gòu);S12、對所述源代碼中的指令類型進(jìn)行識別;所述類型包括語句指令、分支指令、條件指令、函數(shù)指令、路徑指令;S13、按照所述指令的不同類型,分別統(tǒng)計(jì)每種類型的指令的總數(shù)。本發(fā)明所提供的一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng)和方法,與現(xiàn)有技術(shù)相比,由于是在分析源代碼的基礎(chǔ)上進(jìn)行覆蓋率的測試,因此可應(yīng)用于不同的操作系統(tǒng),提高了兼容性能和實(shí)用性能。圖l是本發(fā)明實(shí)現(xiàn)覆蓋率測試的系統(tǒng)的示意圖;圖2是本發(fā)明的系統(tǒng)中的源代碼分析器、代碼植入器和代碼打點(diǎn)模塊的示意圖3是本發(fā)明實(shí)現(xiàn)覆蓋率測試的方法的流程圖。具體實(shí)施例方式下面結(jié)合具體實(shí)施方式和附圖對本發(fā)明作進(jìn)一步詳細(xì)的描述。如圖1所示,本發(fā)明提供一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng)包括與被測模塊連接的源代碼分析器、代碼植入器和代碼打點(diǎn)模塊,以及與源代碼分析器和代碼打點(diǎn)模塊連接的計(jì)算模塊。所述源代碼分析器用于對所述被測模塊進(jìn)行源代碼分析并統(tǒng)計(jì)所述被測模塊中需要測試的指令的總數(shù);按照指令類型的不同,其中分為不同類型指令的分析子模塊,見圖2,其中包括賦值語句分析子模塊,用于分析和統(tǒng)計(jì)賦值語句指令的總數(shù);分支分析子模塊,用于分析和統(tǒng)計(jì)分支指令的總數(shù);條件分析子模塊,用于分析和統(tǒng)計(jì)條件指令的總數(shù);函數(shù)分析子模塊,用于分析和統(tǒng)計(jì)函數(shù)指令的總數(shù);路徑分析子模塊,用于分析和統(tǒng)計(jì)路徑指令的總數(shù)。所述每個(gè)分析子模塊包括與被測模塊連接用于解析源代碼結(jié)構(gòu)的源代碼解析模塊;與所述源代碼解析模塊連接用于對所述源代碼中的指令類型進(jìn)行識別的指令分類模塊;與所述指令分類模塊連接用于分別統(tǒng)計(jì)和存儲每種類型的指令的總數(shù)的指令統(tǒng)計(jì)模塊。與所述被測模塊連接的代碼植入器,用于對被測模塊中需要測試的指令前插入代碼打點(diǎn)程序并對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;其中插入代碼打點(diǎn)程序包括在賦值語句指令前插入賦值語句代碼打點(diǎn)子程序、在分支指令前插入分支代碼打點(diǎn)子程序、在條件指令前插入條件代碼打點(diǎn)子程序、在函數(shù)指令前插入函數(shù)代碼打點(diǎn)子程序。與所述被測模塊連接的代碼打點(diǎn)模塊,用于記錄代碼打點(diǎn)程序調(diào)用次數(shù);按照指令類型的不同,運(yùn)行重新編譯的源代碼,分別記錄賦值語句代碼打點(diǎn)子程序的調(diào)用次數(shù)、分支代碼打點(diǎn)子程序的調(diào)用次數(shù)、條件代碼打點(diǎn)子程序的調(diào)用次lt、函數(shù)代碼打點(diǎn)子程序的調(diào)用次數(shù)。所述代碼打點(diǎn)模塊包括與所述被測模塊連接的打點(diǎn)統(tǒng)計(jì)模塊,用于記錄所述代碼打點(diǎn)程序的調(diào)用次數(shù);與所述統(tǒng)計(jì)模塊連接的存儲模塊,用于存儲所述代碼打點(diǎn)程序的調(diào)用次數(shù)。與所述源代碼分析器和代碼打點(diǎn)模塊連接的計(jì)算模塊,用于計(jì)算所述打點(diǎn)程序調(diào)用次數(shù)與指令的總數(shù)之間的比值并輸出,按照指令類型的不同,分別進(jìn)行以下計(jì)算用賦值語句代碼打點(diǎn)子程序的調(diào)用次數(shù)與賦值語句指令的總數(shù)的相比計(jì)算語句覆蓋率;用分支代碼打點(diǎn)子程序的調(diào)用次數(shù)與分支指令的總數(shù)的相比計(jì)算分支覆蓋率;用條件代碼打點(diǎn)子程序的調(diào)用次數(shù)與條件指令的總數(shù)的相比計(jì)算條件覆蓋率;用函數(shù)代碼打點(diǎn)子程序的調(diào)用次數(shù)與函數(shù)指令的總數(shù)的相比計(jì)算函數(shù)覆蓋率。本發(fā)明還提供一種實(shí)現(xiàn)覆蓋率測試的方法,如圖3所示,有以下步驟100、分析原代碼、計(jì)算需要測試的指令的總數(shù);本步驟包括以下分步驟110、解析源代碼結(jié)構(gòu);120、對源代碼中的指令類型進(jìn)行識別;識別指令的類型作為后續(xù)步驟的依據(jù);類型包括賦值語句指令、分支指令、條件指令、函數(shù)指令、路徑指令。130、按照所述指令的不同類型,分別統(tǒng)計(jì)每種類型的指令的總數(shù)。包括賦值語句指令總數(shù)、分支指令總數(shù)、條件指令總數(shù)、函數(shù)指令總數(shù)、路徑指令總數(shù)。200、根據(jù)分析源代碼的分析結(jié)果,按照所述指令的不同類型,分別在每種類型的指令前插入代碼打點(diǎn)程序;包括在賦值語句指令前插入賦值語句代碼打點(diǎn)子程序、在分支指令前插入分支代碼打點(diǎn)子程序、在條件指令前插入條件代碼打點(diǎn)子程序、在函數(shù)指令前插入函數(shù)代碼打點(diǎn)子程序。300、對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;400、運(yùn)行插入代碼打點(diǎn)程序的源代碼,按照所述指令的不同類型,分別記錄每種類型的指令前插入代碼打點(diǎn)程序的調(diào)用次數(shù),例如,賦值語句代碼打點(diǎn)子程序、分支代碼打點(diǎn)子程序、條件代碼打點(diǎn)子程序、函數(shù)代碼打點(diǎn)子程序;并且在運(yùn)行過程中,記錄代碼當(dāng)前運(yùn)行文件和運(yùn)行行數(shù),記錄到日志文件。500、按照所述指令的不同類型,分別計(jì)算代碼打點(diǎn)程序的調(diào)用次數(shù)與需要測試的指令的總數(shù)的比值并輸出。步驟200、300、400可在C語言環(huán)境中的實(shí)現(xiàn),例如采用如下程序段:代碼插入原理如以下函數(shù)代碼inti=printf(,,Iamhere");void*ptr—&printf;源碼經(jīng)過插裝改造,變?yōu)閕nti=(TestCoverage(),printf)(,,Iamhere");void*ptr=&(TestCoverage(),printf);其中,TestCoverage()是插入的打點(diǎn)函數(shù)。借助C語言的逗號表達(dá)式實(shí)現(xiàn)插裝,跟據(jù)ANSIC規(guī)范,逗號表達(dá)式的結(jié)果值是最后一個(gè)表達(dá)式的計(jì)算值,比如"exprl,exprt2,expr3",這3個(gè)表達(dá)式依次運(yùn)算,最后返回值是expr3的計(jì)算值。所以,不難看出,運(yùn)行上述插裝代碼等效于插裝前代碼,只有一點(diǎn)差別,每次printf函數(shù)調(diào)用前插裝打點(diǎn)函數(shù)TestCoverage都被調(diào)用一次。借助C語言的宏替換功能可以讓插裝過程變得很簡單,比如#defineprintf(TestCoverage(),printf)inti=printf(,,Iamhere");void*ptr=&printf;這樣就完成函數(shù)的代碼植入。插入賦值語句代碼打點(diǎn)子程序根據(jù)代碼分析結(jié)果,對賦值語句的代碼植入和函數(shù)相同。如intavr=abs*8/numner;TestCoverage();插入分支代碼打點(diǎn)子程序同理,將if、while、for等控制語句也按如下方式植入改造#defmeif(expr)if((expr)if—TestCoveragel():if一TestCoverage0())植入改造后,插裝進(jìn)去的打點(diǎn)函數(shù)(如if—TestCoverage1、if—TestCoverage0)在相應(yīng)條件成立時(shí)就被執(zhí)行。插入條件代碼打點(diǎn)子程序?qū)τ跅l件覆蓋統(tǒng)計(jì),改造"&&,,與"||"連接的條件子句,比如下面代碼if(i>0&&i<100)printf(,,OK");改造成#defineCOND(expr)((expr)cond_TestCoveragel():cond一if(COND(i>0)&&COND(i<100))printf("OK");這樣不同條件都用調(diào)用的不同的代碼打點(diǎn)函數(shù)。步驟300:源代碼的重新編譯。步驟400:執(zhí)行測試程序,代碼打點(diǎn)函數(shù)執(zhí)行,自動(dòng)生成日志記錄。代碼打點(diǎn)函凄tTestCoverage()實(shí)現(xiàn)原理根據(jù)ANSIC規(guī)范宏—FILE—和—LINE—分別記錄當(dāng)前代碼的所在源代碼文件名和行數(shù),調(diào)用TestCovemge()函數(shù)時(shí)間獲取宏值記錄相關(guān)文件中。應(yīng)當(dāng)理解的是,以上所提供的具體實(shí)施方式只是對本發(fā)明的說明,而不應(yīng)當(dāng)理解為對本發(fā)明的限制,對本領(lǐng)域的普通技術(shù)人員來說,可以根據(jù)上述說明加以改進(jìn)或變換,而所有這些改進(jìn)和變換都應(yīng)為本發(fā)明所揭示的原理和特征,均屬本發(fā)明的保護(hù)范圍。權(quán)利要求1、一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng),其特征在于,包括與被測模塊連接的源代碼分析器,用于對所述被測模塊進(jìn)行源代碼分析并統(tǒng)計(jì)所述被測模塊中需要測試的指令的總數(shù);與所述被測模塊連接的代碼植入器,用于對所述被測模塊中需要測試的指令前插入代碼打點(diǎn)程序并對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;與所述被測模塊連接的代碼打點(diǎn)模塊,用于記錄代碼打點(diǎn)程序調(diào)用次數(shù);與所述源代碼分析器和代碼打點(diǎn)模塊連接的計(jì)算模塊,用于計(jì)算所述打點(diǎn)程序調(diào)用次數(shù)與指令的總數(shù)之間的比值并輸出。2、根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述源代碼分析器包括與被測模塊連接的源代碼解析模塊,用于解析源代碼結(jié)構(gòu);與所述源代碼解析模塊連接的指令分類模塊,用于對所述源代碼中的指令類型進(jìn)行識別;與所述指令分類模塊連接的指令統(tǒng)計(jì)模塊,用于分別統(tǒng)計(jì)和存儲每種類型的指令的總數(shù)。3、根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述代碼打點(diǎn)模塊包括與所述被測模塊連接的打點(diǎn)統(tǒng)計(jì)模塊,用于記錄所述代碼打點(diǎn)程序的調(diào)用次數(shù);與所述統(tǒng)計(jì)模塊連接的存儲模塊,用于存儲所述代碼打點(diǎn)程序的調(diào)用次數(shù)。4、根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述需要測試的指令包括語句指令、分支指令、條件指令、函數(shù)指令、路徑指令。5、一種實(shí)現(xiàn)覆蓋率測試的方法,包括以下步驟分析源代碼、統(tǒng)計(jì)需要測試的指令的總數(shù);、在所述需要測試的指令前插入代碼打點(diǎn)程序;、對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;、運(yùn)行代碼打點(diǎn)程序插入后的源代碼,記錄代碼打點(diǎn)程序的調(diào)用次數(shù);、計(jì)算代碼打點(diǎn)程序的調(diào)用次數(shù)與需要測試的指令的總數(shù)的比值并輸出。6、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述需要測試的指令包括語句指令、分支指令、條件指令、函數(shù)指令、路徑指令。7、根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1包括Sll、解析源代碼結(jié)構(gòu);.S12、對所述源代碼中的指令類型進(jìn)行識別;所述類型包括語句指令、分支指令、條件指令、函數(shù)指令、路徑指令;S13、按照所述指令的不同類型,分別統(tǒng)計(jì)每種類型的指令的總數(shù)。全文摘要本發(fā)明公開了一種實(shí)現(xiàn)覆蓋率測試的系統(tǒng)和方法,應(yīng)用于多種操作系統(tǒng)實(shí)現(xiàn)覆蓋率統(tǒng)計(jì)。其系統(tǒng)包括與被測模塊連接的源代碼分析器,用于對所述被測模塊進(jìn)行源代碼分析并統(tǒng)計(jì)所述被測模塊中需要測試的指令的總數(shù);與所述被測模塊連接的代碼植入器,用于對所述被測模塊中需要測試的指令前插入代碼打點(diǎn)程序并對插入代碼打點(diǎn)程序的源代碼進(jìn)行重新編譯;與所述被測模塊連接的代碼打點(diǎn)模塊,用于記錄代碼打點(diǎn)程序調(diào)用次數(shù);與所述源代碼分析器和代碼打點(diǎn)模塊連接的計(jì)算模塊,用于計(jì)算所述打點(diǎn)程序調(diào)用次數(shù)與指令的總數(shù)之間的比值并輸出。本發(fā)明是在分析源代碼的基礎(chǔ)上進(jìn)行覆蓋率的測試,因此可應(yīng)用于不同的操作系統(tǒng),提高了兼容性能和實(shí)用性能。文檔編號G06F11/36GK101561777SQ20081006659公開日2009年10月21日申請日期2008年4月14日優(yōu)先權(quán)日2008年4月14日發(fā)明者張若冰申請人:中興通訊股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
甘肃省| 文化| 无极县| 青岛市| 河东区| 翁牛特旗| 东安县| 南汇区| 四平市| 麻城市| 托里县| 年辖:市辖区| 个旧市| 五河县| 荆门市| 樟树市| 当阳市| 武穴市| 武陟县| 武夷山市| 衡南县| 连南| 东莞市| 建水县| 白山市| 台东市| 镶黄旗| 贡山| 理塘县| 台南县| 仁布县| 高唐县| 松阳县| 苏州市| 平泉县| 崇仁县| 当阳市| 卢氏县| 亳州市| 淮北市| 右玉县|