国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法

      文檔序號:6437032閱讀:369來源:國知局
      專利名稱:基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及軟件測試技術(shù),尤其涉及一種基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,即利用代碼覆蓋率作為量化指標(biāo)來確定軟件測試中的測試是否充分。
      背景技術(shù)
      在軟件單元測試的各個(gè)階段中,人們總是期望用一個(gè)統(tǒng)一的量化指標(biāo)來確定測試過程和方法的充分性,并以此來指導(dǎo)何時(shí)結(jié)束測試。這里,覆蓋率是軟件單元測試中常見的量化評價(jià)標(biāo)準(zhǔn),常見的覆蓋準(zhǔn)則包括語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、修改的判定條件覆蓋、組合覆蓋以及路徑覆蓋等。但,現(xiàn)有的傳統(tǒng)覆蓋準(zhǔn)則,并不適用于軟件測試的各個(gè)階段。所述測試階段,包括單元測試、集成測試和系統(tǒng)測試。另外,傳統(tǒng)的覆蓋準(zhǔn)則也有待進(jìn)一步擴(kuò)展,以解決軟件測試技術(shù)發(fā)展過程中的新問題。

      發(fā)明內(nèi)容
      有鑒于此,本發(fā)明的主要目的在于提供一種基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,擴(kuò)展傳統(tǒng)覆蓋準(zhǔn)則的使用階段,以適用評估不同測試階段中的多種動態(tài)測試方法;并擴(kuò)展傳統(tǒng)單元測試的覆蓋準(zhǔn)則,提出文件覆蓋、方法覆蓋和類覆蓋等新的準(zhǔn)則;以及能夠按照給定的覆蓋準(zhǔn)則,對被測單元進(jìn)行靜態(tài)分析,得到待覆蓋元素集合,根據(jù)用戶測試需求,進(jìn)行動態(tài)測試執(zhí)行,統(tǒng)計(jì)被覆蓋元素,并計(jì)算覆蓋率,從而根據(jù)覆蓋率量化指標(biāo)來確定軟件測試過程和方法的充分性,使用多種覆蓋準(zhǔn)則統(tǒng)計(jì)的覆蓋率進(jìn)行衡量,提高評估測試的效率和準(zhǔn)確性。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的
      一種基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,該方法主要包括
      A、對被測程序進(jìn)行預(yù)編譯、詞法分析和語法分析,得到程序的抽象語法樹、控制流圖和函數(shù)之間的調(diào)用關(guān)系圖,并根據(jù)用戶測試需求,自動生成被測單元;
      B、根據(jù)覆蓋準(zhǔn)則,從所述抽象語法樹和控制流圖中提取被測單元中相應(yīng)的待覆蓋元素集合;
      C、根據(jù)所述的覆蓋準(zhǔn)則,在被測單元的程序中插入相應(yīng)的探針函數(shù);
      D、根據(jù)用戶測試需求,選擇系統(tǒng)自動執(zhí)行或用戶手動執(zhí)行的方式對插入探針函數(shù)的被測單元進(jìn)行動態(tài)測試;
      E、根據(jù)動態(tài)測試執(zhí)行的返回信息,得到測試單元的被覆蓋元素集合,并計(jì)算被測單元
      的覆蓋率。其中,所述步驟A包括
      根據(jù)被測程序中的函數(shù)調(diào)用關(guān)系,對被測程序進(jìn)行單元?jiǎng)澐?,得到被測單元;所述被測單元為根據(jù)用戶測試需求,將被測試程序劃分成的獨(dú)立的測試對象,其為一個(gè)或多個(gè)函數(shù)、 類、文件。所述步驟B包括對于語句覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中每一個(gè)可達(dá)語句塊作為語句覆蓋元素, 組成語句覆蓋元素集合;
      對于分支覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每一個(gè)可達(dá)分支作為分支覆蓋元素,組成分支覆蓋元素集合;
      對于C/DC覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每個(gè)覆蓋元素包括可被執(zhí)行的判定表達(dá)式;判定表達(dá)式中,所有取值既可以為真又可以為假的簡單條件,由此遍歷整個(gè)被測單元,組成C/DC覆蓋元素集合;
      對于MC/DC覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每個(gè)覆蓋元素包括可被執(zhí)行的判定表達(dá)式;判定表達(dá)式中,所有可以獨(dú)立影響判定表達(dá)式結(jié)果的簡單條件,由此遍歷整個(gè)被測單元,組成MC/DC覆蓋元素集合;
      對于路徑覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,所有可達(dá)路徑作為覆蓋元素,組成路徑覆蓋元素集合;
      對于函數(shù)覆蓋準(zhǔn)則,提取被測試單元的類(對于函數(shù)直接構(gòu)成類的情況)或者文件(對于函數(shù)直接構(gòu)成文件的情況)中,所有可被執(zhí)行的函數(shù)作為函數(shù)覆蓋元素,組成函數(shù)覆蓋元素集合;假設(shè)函數(shù)中只要有一條路徑可被執(zhí)行,就認(rèn)為該函數(shù)可被執(zhí)行;
      對于類覆蓋準(zhǔn)則,提取被測試單元的文件中所有可被執(zhí)行的類作為類覆蓋元素,構(gòu)成類覆蓋元素集合;
      對于文件覆蓋準(zhǔn)則,提取被測試單元中所有可被執(zhí)行的文件作為文件覆蓋元素,組成文件覆蓋元素集合;對于由類直接組成文件的情況,該文件中只要有一個(gè)類可被執(zhí)行,就認(rèn)為該文件可被執(zhí)行;對于由函數(shù)直接組成文件的情況,該文件中只要有一個(gè)函數(shù)可被執(zhí)行, 就認(rèn)為該文件可被執(zhí)行。所述步驟C包括
      對于語句覆蓋準(zhǔn)則,在語句覆蓋元素集合的每個(gè)元素中插入探針函數(shù),以便記錄執(zhí)行測試用例過程中語句塊的被覆蓋情況;
      對于分支覆蓋準(zhǔn)則,在分支覆蓋元素集合每個(gè)元素中插入分支探針函數(shù),以便記錄執(zhí)行測試用例過程中分支的被覆蓋情況;
      對于C/DC覆蓋準(zhǔn)則,在C/DC覆蓋元素集合的每個(gè)元素中插入探針函數(shù),即在每個(gè)可執(zhí)行判定中插入分支探針函數(shù),在對應(yīng)判定中所有取值既可以為真又可以為假的簡單條件處插入條件探針函數(shù),以便記錄執(zhí)行測試用例過程中C/DC元素的被覆蓋情況;
      對于MC/DC覆蓋準(zhǔn)則,在MC/DC覆蓋元素集合中的每個(gè)元素內(nèi)插入探針函數(shù);即在每個(gè)可執(zhí)行判定處插入分支探針函數(shù),在對應(yīng)判定中的所有可獨(dú)立影響判定的簡單條件處插入條件探針函數(shù),以便記錄執(zhí)行測試用例過程中MC/DC元素的被覆蓋情況;
      對于路徑覆蓋準(zhǔn)則,基于語句覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù); 對于函數(shù)覆蓋準(zhǔn)則,基于路徑覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù); 對于類覆蓋準(zhǔn)則,基于函數(shù)覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù); 對于文件覆蓋準(zhǔn)側(cè),基于類或者函數(shù)覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù)。所述步驟D包括
      對于系統(tǒng)自動執(zhí)行,系統(tǒng)自動生成被測單元的測試用例,生成驅(qū)動文件,逐個(gè)調(diào)用測試用例,將驅(qū)動文件和插入探針函數(shù)之后的被測單元所在文件鏈接生成可執(zhí)行文件,然后運(yùn)行可執(zhí)行文件,進(jìn)行測試執(zhí)行;
      對于用戶手動執(zhí)行,由用戶手動對預(yù)處理后的待測程序生成可能的樁函數(shù)、測試用例和驅(qū)動文件,并將驅(qū)動文件和所述的插入探針函數(shù)之后的被測單元所在文件進(jìn)行鏈接,生成可執(zhí)行文件并運(yùn)行,進(jìn)行測試執(zhí)行。所述步驟E具體包括
      E1、利用被測試程序的探針函數(shù)的返回信息,得到被覆蓋元素集合; E2、分析覆蓋結(jié)果,通過圖形界面的方式標(biāo)識出源代碼中已覆蓋元素和未覆蓋元素,并計(jì)算出被測單元的語句覆蓋率、分支覆蓋率、C/DC覆蓋率、MC/DC覆蓋率、路徑覆蓋率、函數(shù)覆蓋率、類覆蓋率、文件覆蓋率。進(jìn)一步地,所述步驟El包括
      E11、對于語句覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元語句覆蓋集合的所有被覆蓋語句塊對應(yīng)的數(shù)字;
      E12、對于分支覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元分支覆蓋集合的所有被覆蓋的分支對應(yīng)的數(shù)字;
      E13、對于C/DC覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元C/DC覆蓋集合的被覆蓋元素(所有被覆蓋的判定以及判定中所有被覆蓋的簡單條件)對應(yīng)的數(shù)字;
      E14、對于MC/DC覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元MC/DC覆蓋集合的被覆蓋元素(所有被覆蓋的判定,以及判定中所有被覆蓋的可獨(dú)立影響判定的簡單條件)對應(yīng)的數(shù)字;
      E15、對于路徑覆蓋準(zhǔn)則,根據(jù)步驟Ell中獲得的語句覆蓋集合的被覆蓋語句塊,按照一條路徑被覆蓋當(dāng)且僅當(dāng)此路徑上的所有語句塊被覆蓋的原則,提取出被測試單元的所有被覆蓋路徑;
      E16、對于函數(shù)覆蓋準(zhǔn)則,根據(jù)步驟E15中獲得的路徑覆蓋集合中被覆蓋路徑,按照一個(gè)函數(shù)被覆蓋當(dāng)且僅當(dāng)此函數(shù)中至少有一條路徑被覆蓋的原則,提取出被測試類的所有被覆蓋函數(shù)(對于文件直接由類構(gòu)成的情況)或文件中的所有被覆蓋函數(shù)(對于文件直接由函數(shù)構(gòu)成的情況);
      E17、對于類覆蓋準(zhǔn)則,根據(jù)步驟E16中獲得的被覆蓋函數(shù),按照一個(gè)類被覆蓋當(dāng)且僅當(dāng)此類中至少有一個(gè)函數(shù)被覆蓋的原則,提取出被測試文件的所有被覆蓋類;
      E18、對于文件覆蓋準(zhǔn)則,如果文件直接由類構(gòu)成,根據(jù)步驟E17中獲得的被覆蓋類,按照一個(gè)文件被覆蓋當(dāng)且僅當(dāng)此文件中至少有一個(gè)類被覆蓋的原則,或者根據(jù)E16中獲得的被覆蓋函數(shù),按照一個(gè)文件被覆蓋當(dāng)且僅當(dāng)此文件中至少有一個(gè)函數(shù)被覆蓋的原則,提取出被測試工程的所有被覆蓋文件。本發(fā)明所提供的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,具有以下優(yōu)點(diǎn)
      該方法一方面擴(kuò)展了傳統(tǒng)覆蓋率的使用階段,適用于評估不同測試階段中的多種動態(tài)測試方法,測試階段包括單元測試、集成測試和系統(tǒng)測試;另一方面擴(kuò)展了傳統(tǒng)單元測試的覆蓋準(zhǔn)則,提出文件覆蓋、方法覆蓋和類覆蓋等準(zhǔn)則。并能夠按照給定的覆蓋準(zhǔn)則,對被測單元進(jìn)行靜態(tài)分析,得到待覆蓋元素集合,也能夠根據(jù)用戶測試需求,進(jìn)行動態(tài)測試執(zhí)行, 統(tǒng)計(jì)被覆蓋元素,并計(jì)算覆蓋率,從而能夠根據(jù)覆蓋率量化指標(biāo)來確定軟件測試過程和方法的充分性,通過使用多種覆蓋準(zhǔn)則統(tǒng)計(jì)的覆蓋率進(jìn)行衡量,提高了評估測試的效率和準(zhǔn)確性。


      圖1為本發(fā)明基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法流程示意圖; 圖2為本發(fā)明軟件測試過程進(jìn)行自動單元?jiǎng)澐值姆椒鞒淌疽鈭D3為本發(fā)明軟件測試過程進(jìn)行自動測試執(zhí)行的方法流程示意圖。
      具體實(shí)施例方式下面結(jié)合附圖及本發(fā)明的實(shí)施例對本發(fā)明的方法作進(jìn)一步詳細(xì)的說明。白盒自動化軟件測試中多種覆蓋率的統(tǒng)一計(jì)算方法可以采用不同的測試工具及測試方法動態(tài)執(zhí)行被測程序,本發(fā)明提供的確定軟件測試過程充分性的方法,是一種借助自動化軟件測試的覆蓋率作為量化指標(biāo)來確定所進(jìn)行的軟件測試過程是否充分的手段,其基本思想是讀取待測程序,對其進(jìn)行靜態(tài)分析,根據(jù)用戶測試需求,將被測程序劃分成測試單元。其中,當(dāng)選擇系統(tǒng)自動執(zhí)行時(shí),系統(tǒng)將單個(gè)函數(shù)作為一個(gè)被測單元,當(dāng)選擇人工手動執(zhí)行時(shí),由用戶選擇需要測試的一個(gè)或多個(gè)函數(shù)、類或者文件,系統(tǒng)將其作為一個(gè)被測單元。然后由用戶選擇覆蓋準(zhǔn)則,根據(jù)生成的被測單元的抽象語法樹和控制流圖,提取待覆蓋的元素集合,對被測單元的程序插入相應(yīng)的探針函數(shù),可采用自動和人工兩種方式進(jìn)行動態(tài)測試執(zhí)行,根據(jù)執(zhí)行返回結(jié)果,得到被覆蓋元素,進(jìn)而計(jì)算出被測單元的覆蓋率。圖1為本發(fā)明基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法流程示意圖, 如圖1所示,主要包括如下步驟
      步驟1、對被測程序進(jìn)行預(yù)編譯、詞法分析和語法分析,得到程序的抽象語法樹、控制流圖和函數(shù)之間的調(diào)用關(guān)系圖,并根據(jù)用戶測試需求,自動生成被測單元。所述步驟1,具體包括
      步驟11、根據(jù)被測程序中的函數(shù)調(diào)用關(guān)系,對被測程序進(jìn)行單元?jiǎng)澐?,得到被測單元。所述被測單元是指根據(jù)用戶測試需求,將被測試程序劃分成的獨(dú)立的測試對象, 可以是一個(gè)或多個(gè)函數(shù)、類、文件等。被測工程以被測單元為單位進(jìn)行劃分,采用自動劃分時(shí),單個(gè)的函數(shù)作為一個(gè)被測單元,采用人工干預(yù)劃分時(shí),由用戶指定每個(gè)被測單元的組成,可以是若干個(gè)函數(shù)、類、文件,或者它們的任意組合。所述步驟11進(jìn)一步包括
      步驟111、自動劃分時(shí),系統(tǒng)將單個(gè)的函數(shù)作為一個(gè)被測單元。自動單元?jiǎng)澐值牧鞒淌疽鈭D,如圖2所示
      以被測程序S為例,其包含3個(gè)函數(shù)fl(typel vl),f2(type2 v2), f 3 (type3 v3), typel、type2、type3為參數(shù)類型,對其進(jìn)行靜態(tài)分析后,得到函數(shù)調(diào)用關(guān)系,提取每個(gè)函數(shù)的輸入和輸出,將每一個(gè)有輸入的函數(shù)作為一個(gè)被測單元,由此可知,自動劃分的被測單元有3個(gè),即爐11213},其中被測單元?1表示為< f Ktypel vl),f 1的輸入輸出信息〉,被測單元F2表示為< f2 (type2 v2),f2的輸入輸出信息 >,被測單元F3表示為< f3 (type3 v3),f3的輸入輸出信息〉。步驟112、人工干預(yù)劃分時(shí),由用戶指定每個(gè)被測單元包括的若干個(gè)函數(shù)、類、文件,或者它們的任意組合,并循環(huán)執(zhí)行,直到測試工程全部被劃分完畢,得到測試工程的被測單元集合。步驟2、根據(jù)覆蓋準(zhǔn)則(包括語句、分支、C/DC、MC/DC、路徑、函數(shù)、類、文件等),從抽象語法樹和控制流圖中提取被測單元中相應(yīng)的待覆蓋元素集合。其具體包括
      步驟21、對于語句覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中每一個(gè)可達(dá)語句塊作為語句覆蓋元素,組成語句覆蓋元素集合。屬于同一個(gè)塊的語句若其中的某一語句被覆蓋,則該塊所有的語句均能被執(zhí)行。步驟22、對于分支覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每一個(gè)可達(dá)分支(與可被執(zhí)行判定的結(jié)果一一對應(yīng))作為分支覆蓋元素,組成分支覆蓋元素集合。例如,對應(yīng)在被測單元的控制流圖上,所有有向邊即為分支覆蓋元素集合。步驟23、對于C/DC覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每個(gè)覆蓋元素包括
      1)可被執(zhí)行的判定表達(dá)式;
      2)判定表達(dá)式中,所有取值既可以為真又可以為假的簡單條件,由此遍歷整個(gè)被測單元,組成C/DC覆蓋元素集合。例如對應(yīng)在被測單元的控制流圖上,表示為
      1)有向邊E作為一個(gè)C/DC覆蓋元素;
      2)當(dāng)E為判斷節(jié)點(diǎn)N的一條分支時(shí),<v>為一個(gè)C/DC覆蓋元素,其中ν是N的判定表達(dá)式的一組謂詞取值,它是由判定表達(dá)式滿足C/DC覆蓋準(zhǔn)則的要求所確定的。步驟對、對于MC/DC覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每個(gè)覆蓋元素包括
      1)可被執(zhí)行的判定表達(dá)式;
      2)判定表達(dá)式中,所有可以獨(dú)立影響判定的簡單條件,由此遍歷整個(gè)被測單元,組成 MC/DC覆蓋元素集合。例如對應(yīng)在被測單元的控制流圖上,表示為取控制流圖上一條有向邊E
      1)當(dāng)E為非判斷節(jié)點(diǎn)的分支時(shí),E作為一個(gè)MC/DC覆蓋元素;
      2)當(dāng)E為判斷節(jié)點(diǎn)N的一條分支時(shí),<E,v>作為一個(gè)MC/DC覆蓋元素,其中ν是N的判定表達(dá)式的一組謂詞取值,它是由判定表達(dá)式滿足MC/DC覆蓋準(zhǔn)則的要求所確定的。步驟25、對于路徑覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,所有可達(dá)路徑作為覆蓋元素,組成路徑覆蓋元素集合。例如對應(yīng)在被測單元的控制流圖上,表示為提取控制流圖上一個(gè)有序節(jié)點(diǎn)序列和一個(gè)有序有向邊序列,使得該子圖具有唯一輸入節(jié)點(diǎn)和唯一輸出節(jié)點(diǎn),且輸入節(jié)點(diǎn)為函數(shù)入口,輸出節(jié)點(diǎn)為函數(shù)出口。步驟沈、對于函數(shù)覆蓋準(zhǔn)則,提取被測試單元的類(對于函數(shù)直接構(gòu)成類的情況) 或者文件(對于函數(shù)直接構(gòu)成文件的情況)中,所有可被執(zhí)行函數(shù)作為函數(shù)覆蓋元素,組成函數(shù)覆蓋元素集合。假設(shè)函數(shù)中只要有一條路徑可被執(zhí)行,就認(rèn)為該函數(shù)可被執(zhí)行。步驟27、對于類覆蓋準(zhǔn)則,提取被測試單元的文件中所有可被執(zhí)行的類作為元素, 構(gòu)成類覆蓋元素集合。假設(shè)類中只要有一個(gè)函數(shù)被執(zhí)行,就認(rèn)為該類被執(zhí)行。步驟觀、對于文件覆蓋準(zhǔn)則,提取被測試單元中所有可被執(zhí)行文件作為元素,組成文件覆蓋元素集合。對于由類直接組成文件的情況,假設(shè)文件中只要有一個(gè)類可被執(zhí)行,就認(rèn)為該文件可被執(zhí)行。對于由函數(shù)直接組成文件的情況,假設(shè)文件中只要有一個(gè)函數(shù)可被執(zhí)行,就認(rèn)為該文件可被執(zhí)行。步驟3、根據(jù)上述覆蓋準(zhǔn)則,在被測單元的程序中插入相應(yīng)的探針函數(shù)。下面以典型程序statistics, c具體說明如何根據(jù)不同覆蓋準(zhǔn)則插入探針函數(shù)。 程序功能為輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)。源程序如下
      #include 〃stdio. h〃
      void statistics(char c)
      {
      int Ietters=Ojspace=0,digit=0,others=0;
      if (c!=,V)
      {
      if (c>=,a,&&c〈=,z,I I c>=,A,&&c〈=,Z,)
      letters++; else if (c==,,)
      space++; else if(c>=,0,&&c〈=,9,) digit++; else
      others++;
      ι
      printf("all in all :char = %d space = %d digit = %d others=%d\
      η〃,letters, space, digit, others); }·
      該步驟3具體包括
      步驟31、對于語句覆蓋準(zhǔn)則,在語句覆蓋元素集合的每個(gè)元素(均為可達(dá)語句塊)中插入語句探針函數(shù)。語句采用以“塊”為單位的語句插裝,這里,所謂塊就是邏輯上連續(xù)執(zhí)行的相鄰最大的語句集?,F(xiàn)在在以下結(jié)點(diǎn)處插入語句探針函數(shù)函數(shù)的開始處、if語句塊、else語句塊、case語句塊、default語句塊、label語句塊、for語句塊、while語句塊、do-while語句塊、catch語句塊、finally語句塊、跳轉(zhuǎn)語句前。語句探針函數(shù)void _Block_Cov(int blockNum)表示在插裝點(diǎn)對應(yīng)的語句塊的所有語句得到執(zhí)行。其中blockNum唯一標(biāo)識一個(gè)語句塊的抽象語法樹根結(jié)點(diǎn),當(dāng)語句塊被執(zhí)行時(shí),語句塊對應(yīng)的標(biāo)識符被記錄。語句探針函數(shù)實(shí)現(xiàn)如下
      void_Block_Cov(int blockNum)
      {
      cppTestSendData(blockNum);
      ι
      源代碼為a=d+b ;
      10插裝后的代碼為 a=d+b;
      —Block—Cov(Num);
      由上述分析可得到被測程序statistics, c在語句覆蓋準(zhǔn)則下的探針函數(shù)插入結(jié)果 #include 〃stdio· h〃
      void statistics(char c)
      {
      int Ietters=O, space=0, digit=0, Others=O; _Block_Cov(0);
      if (c!=,\n')
      {
      _Block_Cov(l);{
      if (c>=' a,&&c<=' z' I I c>=,A,&&c<=' Z')
      {
      _Block_Cov(2);letters++;
      }
      else {
      _Block_Cov(3) ; if (c==',)
      {
      —Block—Cov(4);space++;
      ι
      else {
      _Block_Cov (5) ; if (c>=' O,&&c<=' 9,)
      {
      —Block—Cov(6);digit++;
      ι
      else {
      —Block—Cov(7);others++;
      ι ι ι ι ι
      printf("all in all :char = %d space = %d digit = %d others=%d\ η〃,letters, space, digit, others);
      ι
      記為instrumentjtatistics. c,其中探針函數(shù)的正負(fù)返回取值的上下限可人為設(shè)置。步驟32、對于分支覆蓋準(zhǔn)則,在分支覆蓋元素集合每個(gè)元素中插入分支探針函數(shù)。分支探針函數(shù) bool _Bran_Cov(bool exp, Int PositiveBranchId, intnegitiveBranchld)獲取運(yùn)行時(shí)分支情況,并且不改變源代碼的執(zhí)行邏輯。在運(yùn)行時(shí)根據(jù)接收到的數(shù)字是正數(shù)還是負(fù)數(shù),來判別相應(yīng)分支的取值。其中返回值PositiveBranchld和 negitiveBranchld分別表示分支取值為真和假。分支探針函數(shù)的實(shí)現(xiàn)如下
      bool _Bran_Cov(bool exp, Int PositiveBranchld, int negitiveBranchld)
      {
      if (exp)
      cppTestSendData (PositiveBranchld);
      else
      cppTestSendData (negitiveBranchld); return exp;//不改變程序的執(zhí)行邏輯
      }
      源代碼if(a&&b)
      插裝后代碼if (_Branch_Cov (a&&b, trueNum, FalseNum))
      由上述分析可得到被測程序statistics, c在分支覆蓋準(zhǔn)則下的探針函數(shù)插入結(jié)果
      void statistics(char c)
      {
      int Ietters=Ojspace=0,digit=0,others=0; —Block—Cov(O);
      if (—Bran—Co ν (c!=,\n,,-2147483647,1))
      {
      if(—Bran—Cov(c>=’a’&&c〈=’z’ | | c>=’ A’ &&c〈=’ Z’,-2147483646,2)) letters++;
      else if (_Bran_Cov(c== \-2147483645,3)) space++;
      else if (—Bran—Cov (c>=,O,&&c〈=,9,,-2147483644,4)) digit++;
      else
      others++;
      ι
      printf(〃all in all:char=%d space=%d digit=%d others=%d\n〃,letters, space, digit, others);
      ι
      記為instrumentjtatistics. c,其中探針函數(shù)的正負(fù)返回取值的上下限可人為設(shè)置。步驟33、對于C/DC覆蓋準(zhǔn)則,在C/DC覆蓋元素集合的每個(gè)元素中插入探針函數(shù), 即在每個(gè)可被執(zhí)行判定中插入分支探針函數(shù),在對應(yīng)判定中所有取值既可以為真又可以為假的簡單條件處插入條件探針函數(shù)。# ^ # 0 ^ bool _Cond_Cov(bool exp, int positiveCondld, int negitiveCondld)獲取運(yùn)行階段被執(zhí)行簡單條件的取值情況,并且不改變源代碼的執(zhí)行邏
      12輯。在運(yùn)行時(shí)根據(jù)接收到的數(shù)字是正數(shù)還是負(fù)數(shù),來判別相應(yīng)判定的取值。其中返回值 positiveCondld和negitiveCondld分別表示條件取值為真和假。條件探針的實(shí)現(xiàn)如下
      bool _Cond_Cov(bool exp, Int positiveCondld, int negitiveCondld)
      {
      if (exp)
      cppTestSendData (positiveCondld);
      else
      cppTestSendData (negitiveCondld); return exp;//不改變程序的執(zhí)行邏輯
      }
      在判定表達(dá)式上插入分支探針并為判定表達(dá)式內(nèi)的每個(gè)條件表達(dá)式插入條件探針。在動態(tài)運(yùn)行時(shí),根據(jù)接收到的插裝信息,得到分支取值真假和分支內(nèi)條件的取值真假。源代碼if(a&&b),
      插入分支探針和條件探針后的代碼
      if (_Branch_C0V(if(_Cond_Cov(a, trueNum,falseNum)&&—Cond_Cov(b,trueNum, falseNum)),trueNum, FalseNum))
      由上述分析可得到被測程序statistics, c在C/DC覆蓋準(zhǔn)則下的探針函數(shù)插入結(jié)果
      void statistics(char c)
      {
      int Ietters=O, space=0, digit=0, others=0; _Block_Cov(0);
      if(_Bran_Cov(_Cond_Cov(c!=,\n',-2147483647,1),-2147483646,2))
      {
      if(_Bran_Cov(_Cond_Cov(c> = ' a',-2 1 47483645, 3)&&_Cond_ Cov (c<=' z',-2147483644,4) | | _Cond_Cov (c>=,A,,-2147483643,5) &&_Cond_Cov (c<=' Z', -2147483642,6),-2147483641,7)) letters++;
      else if(_Bran_Cov(_Cond_Cov(c==',,-2147483640,8),-2147483639,9)) space++;
      else if(_Bran_Cov (_Cond_Cov(c>=' O,,-2147483638,10)&&_Cond_Cov(c<=' 9,,-2 147483637, 11),-2147483636, 12)) digit++;
      else
      others++;
      }
      printf("all in all :char = %d space = %d digit = %d others = %d\ η〃,letters, space, digit, others);
      ι
      13記為instrumentjtatistics. c,其中探針函數(shù)的正負(fù)返回取值的上下限可人為設(shè)置。步驟34、對于MC/DC覆蓋準(zhǔn)則,在MC/DC覆蓋元素集合中的每個(gè)元素內(nèi)插入探針函數(shù)。即在每個(gè)可被執(zhí)行判定處插入分支探針函數(shù),在對應(yīng)判定中的所有可獨(dú)立影響判定的簡單條件處插入條件探針函數(shù),方法同步驟32和步驟33。步驟35、對于路徑覆蓋準(zhǔn)則,基于語句覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù)。步驟36、對于函數(shù)覆蓋準(zhǔn)則,基于路徑覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù)。步驟37、對于類覆蓋準(zhǔn)則,基于函數(shù)覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù)。步驟38、對于文件覆蓋準(zhǔn)側(cè),基于類或者函數(shù)覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù)。步驟4、根據(jù)用戶測試需求,選擇采用系統(tǒng)自動執(zhí)行方式或用戶手動執(zhí)行方式對插入探針函數(shù)的被測單元進(jìn)行動態(tài)測試。 其中,所述步驟4具體包括
      步驟41、對于系統(tǒng)自動執(zhí)行,系統(tǒng)自動生成被測單元的測試用例,并將其生成可執(zhí)行文件,進(jìn)行測試執(zhí)行。自動測試執(zhí)行的過程如圖3所示,對于一個(gè)測試單元,生成對應(yīng)的測試用例庫,用來保存所有有效的測試用例。該步驟41進(jìn)一步包括
      步驟411、系統(tǒng)根據(jù)覆蓋準(zhǔn)則以及被測單元的輸入?yún)?shù)生成相應(yīng)的測試用例; 步驟412、生成驅(qū)動文件,用于逐個(gè)調(diào)用測試用例;
      步驟413、將驅(qū)動文件和步驟3中插入探針函數(shù)之后的被測單元所在文件鏈接生成可執(zhí)行文件;
      步驟414、運(yùn)行可執(zhí)行文件,同時(shí)測試結(jié)果將被記錄和分析,并最終生成一個(gè)結(jié)果分析報(bào)告,將所有有效的測試用例生成測試用例庫。例如對于被測程序statistics, c,系統(tǒng)根據(jù)其輸入?yún)?shù)類型和范圍生成一個(gè)測試用例(‘b,),并生成驅(qū)動文件 driverFile_statistics. c,將 driverFile_statistics. c 與插入探針函數(shù)之后的被測單元文件instrumentstatistics. c進(jìn)行鏈接,生成可執(zhí)行文件 test_statistics. exe,然后運(yùn)行可執(zhí)行文件,并得到測試用例庫testcase_statistics. mdb0步驟步驟42、對于用戶手動執(zhí)行,由用戶手動對預(yù)處理后的待測程序生成可能的樁函數(shù)、測試用例和驅(qū)動文件,并將驅(qū)動文件和步驟3中插入探針函數(shù)之后的被測單元所在文件進(jìn)行鏈接,生成可執(zhí)行文件并運(yùn)行,進(jìn)行測試執(zhí)行。以源程序statistics, c為例,預(yù)處理后用戶根據(jù)函數(shù)信息,生成樁函數(shù)_STUB_ statistics,進(jìn)而生成樁代碼,然后根據(jù)指定的測試用例(例如‘b’),生成驅(qū)動函數(shù)_ DRIVEILstatistics,調(diào)用測試用例,最后將樁代碼、驅(qū)動函數(shù)、插入探針函數(shù)之后的被測程序進(jìn)行鏈接,生成可執(zhí)行文件testjtatistics. exe,運(yùn)行可執(zhí)行文件,進(jìn)行測試執(zhí)行。步驟5、根據(jù)動態(tài)測試執(zhí)行的返回信息,得到測試單元的被覆蓋元素集合,并計(jì)算被測單元的覆蓋率。其具體包括
      步驟51、利用被測試程序的探針函數(shù)的返回信息,得到被覆蓋元素集合。其中步驟51進(jìn)一步包括步驟511、對于語句覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元語句覆蓋集合的所有被覆蓋語句塊對應(yīng)的數(shù)字。例如在步驟4中執(zhí)行的測試用例(‘b’),被測單元statistics, c的探針函數(shù)返回結(jié)果為0,1,2,由此可知探針函數(shù) _Block_Cov (0),_Block_Cov (1),_Block_Cov (2)所標(biāo)識的語句塊被覆蓋。步驟512、對于分支覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元分支覆蓋集合的所有被覆蓋的分支對應(yīng)的數(shù)字。例如在步驟4中執(zhí)行的測試用例(‘b’),被測單元statistics, c的探針函數(shù)返回結(jié)果為0,-2147483647,-2147483646,由此可知探針函數(shù) _Bran_Cov (0),_Bran_Cov (-2147483647), _Bran_Co ν (-2147483646)所標(biāo)識的分支被覆蓋。步驟513、對于C/DC覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元C/DC覆蓋集合的被覆蓋元素(所有被覆蓋的判定,以及判定中被覆蓋的所有簡單條件)對應(yīng)的數(shù)字。步驟514、對于MC/DC覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元MC/DC覆蓋集合的被覆蓋元素(所有被覆蓋的判定,以及判定中所有被覆蓋的可獨(dú)立影響判定的簡單條件)對應(yīng)的數(shù)字。步驟515、對于路徑覆蓋準(zhǔn)則,根據(jù)步驟Ell中獲得的語句覆蓋集合的被覆蓋語句塊,按照一條路徑被覆蓋當(dāng)且僅當(dāng)此路徑上的所有語句塊被覆蓋的原則,提取出被測試單元的所有被覆蓋路徑。步驟516、對于函數(shù)覆蓋準(zhǔn)則,根據(jù)步驟E15中獲得的路徑覆蓋集合中被覆蓋路徑,按照一個(gè)函數(shù)被覆蓋當(dāng)且僅當(dāng)此函數(shù)中至少有一條路徑被覆蓋的原則,提取出被測試類的所有被覆蓋函數(shù)(對于文件直接由類構(gòu)成的情況)或文件中的所有被覆蓋函數(shù)(對于文件直接由函數(shù)構(gòu)成的情況)。步驟517、對于類覆蓋準(zhǔn)則,根據(jù)步驟E16中獲得的被覆蓋函數(shù),按照一個(gè)類被覆蓋當(dāng)且僅當(dāng)此類中至少有一個(gè)函數(shù)被覆蓋的原則,提取出被測試文件的所有被覆蓋類。步驟518、對于文件覆蓋準(zhǔn)則,根據(jù)步驟E17中獲得的被覆蓋類(對于文件直接由類構(gòu)成的情況),按照一個(gè)文件被覆蓋當(dāng)且僅當(dāng)此文件中至少有一個(gè)類被覆蓋的原則,或者根據(jù)E16中獲得的被覆蓋函數(shù)(對于文件直接由函數(shù)構(gòu)成的情況),按照一個(gè)文件被覆蓋當(dāng)且僅當(dāng)此文件中至少有一個(gè)函數(shù)被覆蓋的原則,提取出被測試工程的所有被覆蓋文件。步驟52、分析覆蓋結(jié)果,通過圖形界面的方式標(biāo)識出源代碼中已覆蓋元素和未覆蓋元素,并計(jì)算出被測單元的語句覆蓋率、分支覆蓋率、C/DC覆蓋率、MC/DC覆蓋率、路徑覆蓋率、函數(shù)覆蓋率、類覆蓋率、文件覆蓋率。其中步驟52進(jìn)一步包括
      步驟521、統(tǒng)計(jì)語句覆蓋的覆蓋率,首先統(tǒng)計(jì)步驟511中得到的語句覆蓋元素集合被覆
      蓋的語句塊元素個(gè)數(shù)。通過圖形界面的方式標(biāo)識出源代碼中已被覆蓋的語句塊元素和未被
      覆蓋的語句塊元素。然后統(tǒng)計(jì)步驟21中提取出的語句覆蓋元素集合的元素總個(gè)數(shù),用被覆
      蓋的語句塊元素個(gè)數(shù)除以語句覆蓋元素集合的元素總個(gè)數(shù),即可計(jì)算出語句覆蓋率。
      _ , CoveredBIockEkmeniMim CoveredRate _ Block =-* 1 U0%
      ToialBlock EhmmtiNum上述公式中變量含義如下CoveredP^iie _Block .語句覆蓋率
      CoveredBlo ckEhmsniNum 語句覆蓋元素集合中被覆蓋的元素個(gè)數(shù) TotalBhck EkmentNum 語句覆蓋元素集合的元素總個(gè)數(shù)
      步驟522、統(tǒng)計(jì)分支覆蓋的覆蓋率,首先統(tǒng)計(jì)步驟512中得到的分支覆蓋元素集合被覆
      蓋的分支元素個(gè)數(shù)。通過圖形界面的方式標(biāo)識出源代碼中已被覆蓋的分支元素和未被覆蓋
      的分支元素。然后統(tǒng)計(jì)步驟22中提取出的分支覆蓋元素集合的元素總個(gè)數(shù),用已被覆蓋的
      分支元素個(gè)數(shù)除以分支覆蓋元素集合的總元素個(gè)數(shù),即可計(jì)算出分支覆蓋率。
      權(quán)利要求
      1.一種基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,其特征在于,該方法主要包括A、對被測程序進(jìn)行預(yù)編譯、詞法分析和語法分析,得到程序的抽象語法樹、控制流圖和函數(shù)之間的調(diào)用關(guān)系圖,并根據(jù)用戶測試需求,自動生成被測單元;B、根據(jù)覆蓋準(zhǔn)則,從所述抽象語法樹和控制流圖中提取被測單元中相應(yīng)的待覆蓋元素集合;C、根據(jù)所述的覆蓋準(zhǔn)則,在被測單元的程序中插入相應(yīng)的探針函數(shù);D、根據(jù)用戶測試需求,選擇系統(tǒng)自動執(zhí)行或用戶手動執(zhí)行的方式對插入探針函數(shù)的被測單元進(jìn)行動態(tài)測試;E、根據(jù)動態(tài)測試執(zhí)行的返回信息,得到測試單元的被覆蓋元素集合,并計(jì)算被測單元的覆蓋率。
      2.根據(jù)權(quán)利要求1所述的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,其特征在于,所述步驟A包括根據(jù)被測程序中的函數(shù)調(diào)用關(guān)系,對被測程序進(jìn)行單元?jiǎng)澐郑玫奖粶y單元;所述被測單元為根據(jù)用戶測試需求,將被測試程序劃分成的獨(dú)立的測試對象,其為一個(gè)或多個(gè)函數(shù)、 類、文件。
      3.根據(jù)權(quán)利要求1所述的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,其特征在于,所述步驟B包括對于語句覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中每一個(gè)可達(dá)語句塊作為語句覆蓋元素, 組成語句覆蓋元素集合;對于分支覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每一個(gè)可達(dá)分支作為分支覆蓋元素,組成分支覆蓋元素集合;對于C/DC覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每個(gè)覆蓋元素包括可被執(zhí)行的判定表達(dá)式;判定表達(dá)式中,所有取值既可以為真又可以為假的簡單條件,由此遍歷整個(gè)被測單元,組成C/DC覆蓋元素集合;對于MC/DC覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,每個(gè)覆蓋元素包括可被執(zhí)行的判定表達(dá)式;判定表達(dá)式中,所有可以獨(dú)立影響判定表達(dá)式結(jié)果的簡單條件,由此遍歷整個(gè)被測單元,組成MC/DC覆蓋元素集合;對于路徑覆蓋準(zhǔn)則,提取被測試單元的函數(shù)中,所有可達(dá)路徑作為覆蓋元素,組成路徑覆蓋元素集合;對于函數(shù)覆蓋準(zhǔn)則,提取被測試單元的類(對于函數(shù)直接構(gòu)成類的情況)或者文件(對于函數(shù)直接構(gòu)成文件的情況)中,所有可被執(zhí)行的函數(shù)作為函數(shù)覆蓋元素,組成函數(shù)覆蓋元素集合;假設(shè)函數(shù)中只要有一條路徑可被執(zhí)行,就認(rèn)為該函數(shù)可被執(zhí)行;對于類覆蓋準(zhǔn)則,提取被測試單元的文件中所有可被執(zhí)行的類作為類覆蓋元素,構(gòu)成類覆蓋元素集合;對于文件覆蓋準(zhǔn)則,提取被測試單元中所有可被執(zhí)行的文件作為文件覆蓋元素,組成文件覆蓋元素集合;對于由類直接組成文件的情況,該文件中只要有一個(gè)類可被執(zhí)行,就認(rèn)為該文件可被執(zhí)行;對于由函數(shù)直接組成文件的情況,該文件中只要有一個(gè)函數(shù)可被執(zhí)行, 就認(rèn)為該文件可被執(zhí)行。
      4.根據(jù)權(quán)利要求1所述的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,其特征在于,所述步驟C包括對于語句覆蓋準(zhǔn)則,在語句覆蓋元素集合的每個(gè)元素中插入探針函數(shù),以便記錄執(zhí)行測試用例過程中語句塊的被覆蓋情況;對于分支覆蓋準(zhǔn)則,在分支覆蓋元素集合每個(gè)元素中插入分支探針函數(shù),以便記錄執(zhí)行測試用例過程中分支的被覆蓋情況;對于C/DC覆蓋準(zhǔn)則,在C/DC覆蓋元素集合的每個(gè)元素中插入探針函數(shù),即在每個(gè)可執(zhí)行判定中插入分支探針函數(shù),在對應(yīng)判定中所有取值既可以為真又可以為假的簡單條件處插入條件探針函數(shù),以便記錄執(zhí)行測試用例過程中C/DC元素的被覆蓋情況;對于MC/DC覆蓋準(zhǔn)則,在MC/DC覆蓋元素集合中的每個(gè)元素內(nèi)插入探針函數(shù);即在每個(gè)可執(zhí)行判定處插入分支探針函數(shù),在對應(yīng)判定中的所有可獨(dú)立影響判定的簡單條件處插入條件探針函數(shù),以便記錄執(zhí)行測試用例過程中MC/DC元素的被覆蓋情況;對于路徑覆蓋準(zhǔn)則,基于語句覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù); 對于函數(shù)覆蓋準(zhǔn)則,基于路徑覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù); 對于類覆蓋準(zhǔn)則,基于函數(shù)覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù); 對于文件覆蓋準(zhǔn)側(cè),基于類或者函數(shù)覆蓋進(jìn)行統(tǒng)計(jì),所以不用額外插入探針函數(shù)。
      5.根據(jù)權(quán)利要求1或4所述的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法, 其特征在于,所述步驟D包括對于系統(tǒng)自動執(zhí)行,系統(tǒng)自動生成被測單元的測試用例,生成驅(qū)動文件,逐個(gè)調(diào)用測試用例,將驅(qū)動文件和插入探針函數(shù)之后的被測單元所在文件鏈接生成可執(zhí)行文件,然后運(yùn)行可執(zhí)行文件,進(jìn)行測試執(zhí)行;對于用戶手動執(zhí)行,由用戶手動對預(yù)處理后的待測程序生成可能的樁函數(shù)、測試用例和驅(qū)動文件,并將驅(qū)動文件和所述的插入探針函數(shù)之后的被測單元所在文件進(jìn)行鏈接,生成可執(zhí)行文件并運(yùn)行,進(jìn)行測試執(zhí)行。
      6.根據(jù)權(quán)利要求1所述的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,其特征在于,所述步驟E具體包括E1、利用被測試程序的探針函數(shù)的返回信息,得到被覆蓋元素集合; E2、分析覆蓋結(jié)果,通過圖形界面的方式標(biāo)識出源代碼中已覆蓋元素和未覆蓋元素,并計(jì)算出被測單元的語句覆蓋率、分支覆蓋率、C/DC覆蓋率、MC/DC覆蓋率、路徑覆蓋率、函數(shù)覆蓋率、類覆蓋率、文件覆蓋率。
      7.根據(jù)權(quán)利要求1所述的基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,其特征在于,所述步驟El包括E11、對于語句覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元語句覆蓋集合的所有被覆蓋語句塊對應(yīng)的數(shù)字;E12、對于分支覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元分支覆蓋集合的所有被覆蓋的分支對應(yīng)的數(shù)字;E13、對于C/DC覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元C/DC覆蓋集合的被覆蓋元素(所有被覆蓋的判定以及判定中所有被覆蓋的簡單條件)對應(yīng)的數(shù)字;E14、對于MC/DC覆蓋準(zhǔn)則,探針函數(shù)返回測試過程中被測單元MC/DC覆蓋集合的被覆蓋元素(所有被覆蓋的判定,以及判定中所有被覆蓋的可獨(dú)立影響判定的簡單條件)對應(yīng)的數(shù)字;E15、對于路徑覆蓋準(zhǔn)則,根據(jù)步驟Ell中獲得的語句覆蓋集合的被覆蓋語句塊,按照一條路徑被覆蓋當(dāng)且僅當(dāng)此路徑上的所有語句塊被覆蓋的原則,提取出被測試單元的所有被覆蓋路徑;E16、對于函數(shù)覆蓋準(zhǔn)則,根據(jù)步驟E15中獲得的路徑覆蓋集合中被覆蓋路徑,按照一個(gè)函數(shù)被覆蓋當(dāng)且僅當(dāng)此函數(shù)中至少有一條路徑被覆蓋的原則,提取出被測試類的所有被覆蓋函數(shù)(對于文件直接由類構(gòu)成的情況)或文件中的所有被覆蓋函數(shù)(對于文件直接由函數(shù)構(gòu)成的情況);E17、對于類覆蓋準(zhǔn)則,根據(jù)步驟E16中獲得的被覆蓋函數(shù),按照一個(gè)類被覆蓋當(dāng)且僅當(dāng)此類中至少有一個(gè)函數(shù)被覆蓋的原則,提取出被測試文件的所有被覆蓋類;E18、對于文件覆蓋準(zhǔn)則,如果文件直接由類構(gòu)成,根據(jù)步驟E17中獲得的被覆蓋類,按照一個(gè)文件被覆蓋當(dāng)且僅當(dāng)此文件中至少有一個(gè)類被覆蓋的原則,或者根據(jù)E16中獲得的被覆蓋函數(shù),按照一個(gè)文件被覆蓋當(dāng)且僅當(dāng)此文件中至少有一個(gè)函數(shù)被覆蓋的原則,提取出被測試工程的所有被覆蓋文件。
      全文摘要
      本發(fā)明提供一種基于覆蓋率量化指標(biāo)確定軟件測試過程充分性的方法,包括A、對被測程序進(jìn)行預(yù)編譯、詞法分析和語法分析,得到程序的抽象語法樹、控制流圖和函數(shù)之間的調(diào)用關(guān)系圖,并根據(jù)用戶測試需求,自動生成被測單元;B、根據(jù)覆蓋準(zhǔn)則,從所述抽象語法樹和控制流圖中提取被測單元中相應(yīng)的待覆蓋元素集合;C、根據(jù)所述的覆蓋準(zhǔn)則,在被測單元的程序中插入相應(yīng)的探針函數(shù);D、根據(jù)用戶測試需求,選擇系統(tǒng)自動執(zhí)行或用戶手動執(zhí)行的方式對插入探針函數(shù)的被測單元進(jìn)行動態(tài)測試;E、根據(jù)動態(tài)測試執(zhí)行的返回信息,得到測試單元的被覆蓋元素集合,并計(jì)算被測單元的覆蓋率。應(yīng)用該方法,能夠提高軟件評估測試的效率和準(zhǔn)確性。
      文檔編號G06F11/36GK102419728SQ20111033891
      公開日2012年4月18日 申請日期2011年11月1日 優(yōu)先權(quán)日2011年11月1日
      發(fā)明者周傲, 宮云戰(zhàn), 王思嵐, 王雅文, 譚立力, 賴思佳, 韓春曉 申請人:北京郵電大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1