用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置制造方法
【專利摘要】本發(fā)明公開(kāi)了一種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置,為解決現(xiàn)有的單元測(cè)試中無(wú)法實(shí)現(xiàn)函數(shù)調(diào)用語(yǔ)句中函數(shù)錯(cuò)誤的測(cè)試而設(shè)計(jì)。所述方法包括構(gòu)建測(cè)試模塊,所述測(cè)試模塊包括兩個(gè)以上有調(diào)用關(guān)系的函數(shù);根據(jù)測(cè)試模塊內(nèi)程序的邏輯關(guān)系及函數(shù)間的調(diào)用關(guān)系形成若干條函數(shù)間路徑;為每一條所述函數(shù)間路徑選擇測(cè)試用例進(jìn)行測(cè)試。所述方法及裝置在單元測(cè)試階段即可及時(shí)的發(fā)現(xiàn)函數(shù)調(diào)用中的錯(cuò)誤,避免了將函數(shù)調(diào)用的錯(cuò)誤延遲到集成測(cè)試中,進(jìn)而及時(shí)的對(duì)軟件中函數(shù)調(diào)用的錯(cuò)誤進(jìn)行修正,達(dá)到了降低測(cè)試成本的目的。
【專利說(shuō)明】用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域的軟件測(cè)試技術(shù),尤其涉及ー種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置。
【背景技術(shù)】
[0002]軟件測(cè)試包括對(duì)軟件単元的単元測(cè)試以及多個(gè)單元的集成測(cè)試。
[0003]単元測(cè)試包括確定軟件程序測(cè)試的最小模塊,將所述最小模塊從軟件程序中分離出來(lái),并對(duì)分離出的模塊是否能按照預(yù)期運(yùn)行進(jìn)行測(cè)試。
[0004]集成測(cè)試是將多個(gè)単元按照軟件程序的邏輯形成ー個(gè)組件,且是對(duì)測(cè)試單元間接ロ是否能如預(yù)期相互關(guān)聯(lián)運(yùn)行進(jìn)行測(cè)試(即實(shí)現(xiàn)測(cè)試単元間耦合性的測(cè)試)。
[0005]模塊化的思想導(dǎo)致軟件程序中出現(xiàn)了越來(lái)越多的函數(shù)調(diào)用,研究表明現(xiàn)有的大多數(shù)軟件程序中每20個(gè)指令就有ー個(gè)函數(shù)調(diào)用?,F(xiàn)有的単元測(cè)試中往往ー個(gè)單元僅包括一個(gè)函數(shù),出現(xiàn)函數(shù)調(diào)用時(shí)往往使用打樁的方式進(jìn)行處理,導(dǎo)致函數(shù)調(diào)用的錯(cuò)誤延遲到集成測(cè)試時(shí)才被發(fā)現(xiàn),而集成測(cè)試中錯(cuò)誤修復(fù)的成本遠(yuǎn)遠(yuǎn)大于單元測(cè)試。造成現(xiàn)有技術(shù)中ー個(gè)単元僅能實(shí)現(xiàn)ー個(gè)函數(shù)的測(cè)試的原因有:
[0006]1、沒(méi)有ー種通用的方式處理各種格式的函數(shù)調(diào)用形式;
[0007]2、不能正確的處理函數(shù)的值參、引參以及返回值。
[0008]綜合上述,故如何在単元測(cè)試實(shí)現(xiàn)多個(gè)函數(shù)調(diào)用的測(cè)試,是現(xiàn)有的軟件單元測(cè)試方法中亟待解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0009]有鑒于此,本發(fā)明的主要目的在于提供一種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置,以實(shí)現(xiàn)在単元測(cè)試時(shí)測(cè)試出函數(shù)調(diào)用的錯(cuò)誤。
[0010]為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0011]本發(fā)明提供一種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,所述方法包括:
[0012]構(gòu)建測(cè)試模塊,所述測(cè)試模塊包括兩個(gè)以上有調(diào)用關(guān)系的函數(shù);
[0013]根據(jù)測(cè)試模塊內(nèi)程序的邏輯關(guān)系及函數(shù)間的調(diào)用關(guān)系形成若干條函數(shù)間路徑;
[0014]為每一條所述函數(shù)間路徑選擇測(cè)試用例進(jìn)行測(cè)試。
[0015]上述方案中,所述形成若干條函數(shù)間路徑包括:
[0016]構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖;
[0017]構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)的函數(shù)控制流圖;
[0018]根據(jù)函數(shù)調(diào)用關(guān)系,關(guān)聯(lián)所述語(yǔ)句控制流圖以及所述函數(shù)控制流圖形成模塊控制流圖;
[0019]在所述模塊控制流圖中確定待覆蓋節(jié)點(diǎn),根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的所述函數(shù)間路徑。
[0020]上述方案中,所述構(gòu)建語(yǔ)句控制流圖包括:[0021]步驟A:判斷函數(shù)調(diào)用語(yǔ)句調(diào)用中當(dāng)前運(yùn)算是否為原子運(yùn)算,若是則構(gòu)建結(jié)束,若否則進(jìn)行以下步驟;
[0022]步驟B:為當(dāng)前運(yùn)算構(gòu)建ー個(gè)語(yǔ)句控制流圖;
[0023]步驟C:構(gòu)建所述語(yǔ)句控制圖的入口節(jié)點(diǎn);
[0024]步驟D:在所述語(yǔ)句控制圖中創(chuàng)建對(duì)應(yīng)每個(gè)操作對(duì)象的操作對(duì)象節(jié)點(diǎn);
[0025]步驟E:根據(jù)當(dāng)前運(yùn)算的運(yùn)算先后順序確定操作對(duì)象節(jié)點(diǎn)之間的連接順序;
[0026]步驟F:創(chuàng)建ー個(gè)運(yùn)算節(jié)點(diǎn)對(duì)應(yīng)于當(dāng)前運(yùn)算的結(jié)果;
[0027]步驟G:設(shè)置所述語(yǔ)句控制流圖的出ロ節(jié)點(diǎn);
[0028]步驟H:按順序連接各節(jié)點(diǎn),保存操作對(duì)象節(jié)點(diǎn)與運(yùn)算節(jié)點(diǎn)之間的運(yùn)算關(guān)系;
[0029]步驟1:為包括函數(shù)調(diào)用的操作對(duì)象節(jié)點(diǎn)創(chuàng)建對(duì)應(yīng)的語(yǔ)句控制流圖,并替換所述操作對(duì)象節(jié)點(diǎn)。
[0030]上述方案中,所述步驟I包括步驟1.1至步驟1.4 ;
[0031]所述步驟1.1:獲取包括函數(shù)調(diào)用的操作對(duì)象節(jié)點(diǎn)的操作對(duì)象;所述操作對(duì)象分為操作數(shù)以及由2個(gè)以上操作數(shù)之間的運(yùn)算構(gòu)成的操作式;
[0032]所述步驟1.2:判斷所述對(duì)象中是否有操作式;
[0033]若有則進(jìn)入步驟1.3,若否則構(gòu)建結(jié)束;
[0034]所述步驟1.3:將所述運(yùn)算操作式視為當(dāng)前運(yùn)算,執(zhí)行所述步驟A至步驟I,以構(gòu)建所述操作式所對(duì)應(yīng)的語(yǔ)句控制流圖;
[0035]所述步驟1.4:將所述步驟1.3中所構(gòu)建的語(yǔ)句控制流圖,替換所述操作對(duì)象節(jié)點(diǎn),并返回所述步驟1.1。
[0036]上述方案中,所述根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的函數(shù)間路徑包括:
[0037]通過(guò)所述模塊控制流圖所對(duì)應(yīng)的控制樹(shù)和蘊(yùn)含樹(shù),得出形成函數(shù)間路徑必定經(jīng)過(guò)的必經(jīng)節(jié)點(diǎn);
[0038]根據(jù)最多覆蓋原則補(bǔ)全所述必經(jīng)節(jié)點(diǎn)之間的節(jié)點(diǎn),并同時(shí)確保經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn),進(jìn)而形成所述函數(shù)間路徑。
[0039]上述方案中,所述函數(shù)控制流圖包括主函數(shù)對(duì)應(yīng)的函數(shù)控制流圖以及被調(diào)用的子函數(shù)對(duì)應(yīng)的函數(shù)控制流圖;
[0040]形成模塊控制流圖包括:
[0041]將語(yǔ)句控制流圖替換主函數(shù)對(duì)應(yīng)的函數(shù)控制流圖中的函數(shù)調(diào)語(yǔ)句所對(duì)應(yīng)的節(jié)點(diǎn);
[0042]將子函數(shù)對(duì)應(yīng)的函數(shù)控制流圖替換語(yǔ)句控制流圖中調(diào)用函數(shù)節(jié)點(diǎn)。
[0043]上述方案中,所述根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的函數(shù)間路徑還包括:
[0044]判斷所選擇出的函數(shù)間路徑是否為不可達(dá)路徑,若否則函數(shù)間路徑選擇正確,若是則采用不可達(dá)前綴法進(jìn)行路徑重選。
[0045]上述方案中,所述不可達(dá)路徑的判定包括:
[0046]獲取節(jié)點(diǎn)的變量;所述變量包括對(duì)應(yīng)語(yǔ)句控制流圖的入口節(jié)點(diǎn)所對(duì)應(yīng)的值參和引參、返回節(jié)點(diǎn)所述對(duì)應(yīng)的返回值以及出ロ節(jié)點(diǎn)的值參和引參;[0047]使用符號(hào)化執(zhí)行技術(shù)表達(dá)變量之間的關(guān)聯(lián);
[0048]使用區(qū)間運(yùn)算技術(shù)處理路徑約束判定所選的函數(shù)路徑是否為不可達(dá)路徑。
[0049]本發(fā)明提供一種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試裝置,所述裝置包括:
[0050]測(cè)試模塊構(gòu)建単元,用以構(gòu)建測(cè)試模塊,所述測(cè)試模塊包括兩個(gè)以上有調(diào)用關(guān)系的函數(shù);
[0051]函數(shù)路徑形成単元,用以根據(jù)測(cè)試模塊內(nèi)程序的邏輯關(guān)系及函數(shù)間的調(diào)用關(guān)系形成若干條函數(shù)間路徑;
[0052]測(cè)試單元,用以為每一條所述函數(shù)間路徑選擇測(cè)試用例進(jìn)行測(cè)試。
[0053]進(jìn)ー步地,所述函數(shù)路徑形成単元包括:
[0054]語(yǔ)句控制流圖構(gòu)建子単元,用以構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖;
[0055]函數(shù)控制流圖構(gòu)建子単元,用以構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)的函數(shù)控制流圖;
[0056]模塊控制流圖構(gòu)建子単元,用以根據(jù)函數(shù)調(diào)用關(guān)系,關(guān)聯(lián)所述語(yǔ)句控制流圖以及所述函數(shù)控制流圖,從而形成模塊控制流圖;
[0057]路徑確定子單元,用以確定所述模塊控制流圖中待覆蓋節(jié)點(diǎn),根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的路徑,形成所述函數(shù)間路徑。本發(fā)明用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置的有益效果:
[0058]本發(fā)明所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法及裝置,在進(jìn)行單元測(cè)試時(shí),通過(guò)構(gòu)建由多個(gè)函數(shù)調(diào)用形成的測(cè)試模塊,選擇出函數(shù)間路徑進(jìn)行了単元測(cè)試,從而在単元測(cè)試階段即可及時(shí)發(fā)現(xiàn)函數(shù)調(diào)用中的錯(cuò)誤,避免了將函數(shù)調(diào)用的錯(cuò)誤延遲到集成測(cè)試中,進(jìn)而及時(shí)的對(duì)軟件中函數(shù)調(diào)用的錯(cuò)誤進(jìn)行修正,從而提高了軟件測(cè)試的有效效率,并降低了測(cè)試及軟件修正的成本。
【專利附圖】
【附圖說(shuō)明】
[0059]圖1為本發(fā)明實(shí)施例所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法的流程示意圖;
[0060]圖2為本發(fā)明實(shí)施例中所述的函數(shù)調(diào)用關(guān)系圖;
[0061]圖3為本發(fā)明實(shí)施例中所述的函數(shù)間路徑形成的流程示意圖;
[0062]圖4a為圖2中所述函數(shù)調(diào)用關(guān)系圖的主函數(shù)對(duì)應(yīng)的函數(shù)控制流圖;
[0063]圖4b為圖2中所述函數(shù)調(diào)用關(guān)系圖的函數(shù)調(diào)用語(yǔ)句對(duì)應(yīng)的語(yǔ)句控制流圖;
[0064]圖4c為圖2中所述函數(shù)調(diào)用關(guān)系圖的子函數(shù)所對(duì)應(yīng)的函數(shù)控制流圖;
[0065]圖4d為圖2中所述函數(shù)調(diào)用關(guān)系圖所對(duì)應(yīng)的測(cè)試模塊的模塊控制流圖;
[0066]圖5為本發(fā)明實(shí)施例中所述形成的函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖的流程示意圖之一;
[0067]圖6為本發(fā)明實(shí)施例中所述的形成函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖的流程示意圖之ニ ;
[0068]圖1為本發(fā)明實(shí)施例中所述的ー種函數(shù)間路徑的結(jié)構(gòu)示意圖;
[0069]圖8a為本發(fā)明實(shí)施例中所述的ー種函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖;
[0070]圖Sb為本發(fā)明實(shí)施例中所述的模塊控制流圖的形成示意圖;[0071]圖9a為在圖8b中所形成的模塊控制流圖中一條不可達(dá)的函數(shù)間路徑;
[0072]圖9b為在圖Sb中所形成的模塊控制流圖中一條可達(dá)的函數(shù)間路徑;
[0073]圖10為本發(fā)明實(shí)施例中所述裝置的結(jié)構(gòu)示意圖;
[0074]圖11為圖10中所述函數(shù)間路徑形成單元的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0075]以下結(jié)合實(shí)施例與附圖對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)的描述。
[0076]如圖1所示,本實(shí)施例用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法包括:
[0077]步驟S110:構(gòu)建測(cè)試模塊,所述測(cè)試模塊包括兩個(gè)以上有調(diào)用關(guān)系的函數(shù);
[0078]步驟S120:根據(jù)測(cè)試模塊內(nèi)程序的邏輯關(guān)系及函數(shù)間的調(diào)用關(guān)系形成若干條函數(shù)間路徑;
[0079]步驟S130:為每一條所述函數(shù)間路徑選擇測(cè)試用例進(jìn)行測(cè)試。
[0080]在本實(shí)施例中所述測(cè)試模塊包括了至少兩個(gè)有相互調(diào)用關(guān)系的函數(shù),相對(duì)于傳統(tǒng)的單元測(cè)試中僅包括ー個(gè)函數(shù)的測(cè)試模塊,測(cè)試模塊的構(gòu)建即不同。
[0081]在具體的實(shí)現(xiàn)過(guò)程中,所述測(cè)試模塊所對(duì)應(yīng)的數(shù)學(xué)表達(dá)式可為ニ元組〈caller, callees〉。其中,caller為入口函數(shù);callees為被調(diào)用的子函數(shù)列表。在子函數(shù)列表中包括了至少I(mǎi)個(gè)以上的函數(shù)。
[0082]具體的如圖2所示,對(duì)應(yīng)的程序中包括了函數(shù)H、f2、f3、f4以及f5,且函數(shù)之間的調(diào)用關(guān)系如圖中連接關(guān)系所示。根據(jù)本實(shí)施例所述的測(cè)試模塊的構(gòu)建方法,則fl和f2可以構(gòu)成測(cè)試模塊且fl為入口函數(shù);f 1、f4以及f2可以構(gòu)成測(cè)試模塊且fl為入口函數(shù);f2以及f4可以構(gòu)成測(cè)試模塊且4為入口函數(shù);f 3以及f4不能構(gòu)成模塊,因?yàn)闆](méi)有調(diào)用關(guān)系。
[0083]故在實(shí)施例所述測(cè)試模塊在運(yùn)行時(shí),不僅涉及了函數(shù)內(nèi)的邏輯關(guān)系,同樣的還包括了函數(shù)調(diào)用關(guān)系。從而進(jìn)行軟件的単元測(cè)試時(shí),軟件的運(yùn)行將從ー個(gè)函數(shù)進(jìn)入被調(diào)用的函數(shù)內(nèi)部進(jìn)行運(yùn)行。故在選擇函數(shù)間路徑時(shí),本實(shí)施例所述方法考慮了函數(shù)調(diào)用關(guān)系,從而能實(shí)現(xiàn)多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法。
[0084]所述步驟S130中所述的測(cè)試用例可以是現(xiàn)有方法中對(duì)應(yīng)的測(cè)試用例,測(cè)試方法也可以采用現(xiàn)有的方法實(shí)現(xiàn),具體的所述測(cè)試用例可以預(yù)先設(shè)置。
[0085]綜合上述,本實(shí)施例所述的單元測(cè)試方法,測(cè)試時(shí)不僅實(shí)現(xiàn)了對(duì)ー個(gè)函數(shù)的測(cè)試,同時(shí)還實(shí)現(xiàn)了對(duì)函數(shù)調(diào)用的測(cè)試,從而能在単元測(cè)試時(shí)及早的發(fā)現(xiàn)函數(shù)調(diào)用的錯(cuò)誤(具體的如接ロ錯(cuò)誤),以免所述錯(cuò)誤流入集成測(cè)試,從而節(jié)省了測(cè)試成本,提高了測(cè)試有效效率。
[0086]在具體的實(shí)現(xiàn)過(guò)程中,所述函數(shù)路徑的形成方法有多種,如圖3所示,本實(shí)施例提供如下優(yōu)選方法:
[0087]步驟S210:構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖;
[0088]步驟S220:構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)的函數(shù)控制流圖;
[0089]步驟S230:根據(jù)函數(shù)調(diào)用關(guān)系,關(guān)聯(lián)所述語(yǔ)句控制流圖以及所述函數(shù)控制流圖,從而形成模塊控制流圖;
[0090]步驟S240:確定所述模塊控制流圖中待覆蓋節(jié)點(diǎn),根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的路徑,形成所述函數(shù)間路徑。[0091]采用步驟S210至步驟S240形成函數(shù)間路徑,提供了ー種通用的方式處理各種格式的函數(shù)調(diào)用形式;且能正確的處理函數(shù)的值參、引參以及返回值。
[0092]所述函數(shù)控制流圖包括主函數(shù)以及子函數(shù)所對(duì)應(yīng)的函數(shù)控制流圖其;中,所述子函數(shù)為被調(diào)用的函數(shù)。
[0093]所述語(yǔ)句控制流圖的數(shù)學(xué)表達(dá)式有多種,在本實(shí)施例中提供一種優(yōu)選的數(shù)學(xué)表達(dá)式:所述語(yǔ)句控制流圖的數(shù)學(xué)表達(dá)式為五元組(N,E, Entry, Exit, R);
[0094]其中,所述N是節(jié)點(diǎn)的集合,所述節(jié)點(diǎn)包括操作對(duì)象節(jié)點(diǎn)以及運(yùn)算節(jié)點(diǎn);所述E是有向邊的集合;所述Entry是卩隹一入ロ節(jié)點(diǎn);所述Exit是卩隹一的退出節(jié)點(diǎn);所述R表示節(jié)點(diǎn)間的運(yùn)算關(guān)系。
[0095]所述函數(shù)控制流圖即可以采用現(xiàn)有單元測(cè)試中常用的控制流圖構(gòu)建方法來(lái)構(gòu)建。
[0096]所述函數(shù)控制流圖、語(yǔ)句控制流圖以及模塊控制流圖都是屬于控制流圖的ー種,區(qū)別在于對(duì)應(yīng)不同類(lèi)型的程序代碼。通??刂屏鲌D為ー個(gè)抽象的數(shù)據(jù)結(jié)構(gòu),由若干個(gè)節(jié)點(diǎn)構(gòu)成。節(jié)點(diǎn)之間通過(guò)箭頭表示節(jié)點(diǎn)之間的邏輯關(guān)系。所述控制流圖至少包括入口節(jié)點(diǎn)、出ロ節(jié)點(diǎn)以及真假分支結(jié)構(gòu)等。
[0097]
【權(quán)利要求】
1.一種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在于,所述方法包括: 構(gòu)建測(cè)試模塊,所述測(cè)試模塊包括兩個(gè)以上有調(diào)用關(guān)系的函數(shù); 根據(jù)測(cè)試模塊內(nèi)程序的邏輯關(guān)系及函數(shù)間的調(diào)用關(guān)系形成若干條函數(shù)間路徑; 為每一條所述函數(shù)間路徑選擇測(cè)試用例進(jìn)行測(cè)試。
2.根據(jù)權(quán)利要求1所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在干,所述形成若干條函數(shù)間路徑包括: 構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖; 構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)的函數(shù)控制流圖; 根據(jù)函數(shù)調(diào)用關(guān)系,關(guān)聯(lián)所述語(yǔ)句控制流圖以及所述函數(shù)控制流圖形成模塊控制流圖; 在所述模塊控制流圖中確定待覆蓋節(jié)點(diǎn),根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的所述函數(shù)間路徑。
3.根據(jù)權(quán)利要求2述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在于,所述構(gòu)建語(yǔ)句控制流圖包括: 步驟A:判斷函數(shù)調(diào)用語(yǔ)句調(diào)用中當(dāng)前運(yùn)算是否為原子運(yùn)算,若是則構(gòu)建結(jié)束,若否則進(jìn)行以下步驟; 步驟B:為當(dāng)前運(yùn)算構(gòu) 建ー個(gè)語(yǔ)句控制流圖; 步驟C:構(gòu)建所述語(yǔ)句控制圖的入口節(jié)點(diǎn); 步驟D:在所述語(yǔ)句控制圖中創(chuàng)建對(duì)應(yīng)每個(gè)操作對(duì)象的操作對(duì)象節(jié)點(diǎn); 步驟E:根據(jù)當(dāng)前運(yùn)算的運(yùn)算先后順序確定操作對(duì)象節(jié)點(diǎn)之間的連接順序; 步驟F:創(chuàng)建ー個(gè)運(yùn)算節(jié)點(diǎn)對(duì)應(yīng)于當(dāng)前運(yùn)算的結(jié)果; 步驟G:設(shè)置所述語(yǔ)句控制流圖的出ロ節(jié)點(diǎn); 步驟H:按順序連接各節(jié)點(diǎn),保存操作對(duì)象節(jié)點(diǎn)與運(yùn)算節(jié)點(diǎn)之間的運(yùn)算關(guān)系; 步驟1:為包括函數(shù)調(diào)用的操作對(duì)象節(jié)點(diǎn)創(chuàng)建對(duì)應(yīng)的語(yǔ)句控制流圖,并替換所述操作對(duì)象節(jié)點(diǎn)。
4.根據(jù)權(quán)利要求3所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在干,所述步驟I包括步驟1.1至步驟1.4 ; 所述步驟1.1:獲取包括函數(shù)調(diào)用的操作對(duì)象節(jié)點(diǎn)的操作對(duì)象;所述操作對(duì)象分為操作數(shù)以及由2個(gè)以上操作數(shù)之間的運(yùn)算構(gòu)成的操作式; 所述步驟1.2:判斷所述對(duì)象中是否有操作式; 若有則進(jìn)入步驟1.3,若否則構(gòu)建結(jié)束; 所述步驟1.3:將所述運(yùn)算操作式視為當(dāng)前運(yùn)算,執(zhí)行所述步驟A至步驟I,以構(gòu)建所述操作式所對(duì)應(yīng)的語(yǔ)句控制流圖; 所述步驟1.4:將所述步驟1.3中所構(gòu)建的語(yǔ)句控制流圖,替換所述操作對(duì)象節(jié)點(diǎn),并返回所述步驟1.1。
5.根據(jù)權(quán)利要求2、3或4所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在于,所述根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的函數(shù)間路徑包括: 通過(guò)所述模塊控制流圖所對(duì)應(yīng)的控制樹(shù)和蘊(yùn)含樹(shù),得出形成函數(shù)間路徑必定經(jīng)過(guò)的必經(jīng)節(jié)點(diǎn);根據(jù)最多覆蓋原則補(bǔ)全所述必經(jīng)節(jié)點(diǎn)之間的節(jié)點(diǎn),并同時(shí)確保經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn),進(jìn)而形成所述函數(shù)間路徑。
6.根據(jù)權(quán)利要求2-5任一項(xiàng)所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在于,所述函數(shù)控制流圖包括主函數(shù)對(duì)應(yīng)的函數(shù)控制流圖以及被調(diào)用的子函數(shù)對(duì)應(yīng)的函數(shù)控制流圖; 形成模塊控制流圖包括: 將語(yǔ)句控制流圖替換主函數(shù)對(duì)應(yīng)的函數(shù)控制流圖中的函數(shù)調(diào)語(yǔ)句所對(duì)應(yīng)的節(jié)點(diǎn); 將子函數(shù)對(duì)應(yīng)的函數(shù)控制流圖替換語(yǔ)句控制流圖中調(diào)用函數(shù)節(jié)點(diǎn)。
7.根據(jù)權(quán)利要求5所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在干,所述根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的函數(shù)間路徑還包括: 判斷所選擇出的函數(shù)間路徑是否為不可達(dá)路徑,若否則函數(shù)間路徑選擇正確,若是則采用不可達(dá)前綴法進(jìn)行路徑重選。
8.根據(jù)權(quán)利要求7所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試方法,其特征在干,所述不可達(dá)路徑的判定包括: 獲取節(jié)點(diǎn)的變量;所述變量包括對(duì)應(yīng)語(yǔ)句控制流圖的入口節(jié)點(diǎn)所對(duì)應(yīng)的值參和引參、返回節(jié)點(diǎn)所述對(duì)應(yīng)的返回值以及出ロ節(jié)點(diǎn)的值參和引參; 使用符號(hào)化執(zhí)行技術(shù)表達(dá)變量之間的關(guān)聯(lián); 使用區(qū)間運(yùn)算技術(shù)處理路徑約束判定所選的函數(shù)路徑是否為不可達(dá)路徑?!?br>
9.一種用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試裝置,其特征在于,所述裝置包括: 測(cè)試模塊構(gòu)建単元,用以構(gòu)建測(cè)試模塊,所述測(cè)試模塊包括兩個(gè)以上有調(diào)用關(guān)系的函數(shù); 函數(shù)路徑形成単元,用以根據(jù)測(cè)試模塊內(nèi)程序的邏輯關(guān)系及函數(shù)間的調(diào)用關(guān)系形成若干條函數(shù)間路徑; 測(cè)試單元,用以為每一條所述函數(shù)間路徑選擇測(cè)試用例進(jìn)行測(cè)試。
10.根據(jù)權(quán)利要求9所述的用于包括多個(gè)函數(shù)測(cè)試模塊的單元測(cè)試裝置,其特征在干,所述函數(shù)路徑形成單元包括: 語(yǔ)句控制流圖構(gòu)建子単元,用以構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)調(diào)用語(yǔ)句的語(yǔ)句控制流圖; 函數(shù)控制流圖構(gòu)建子単元,用以構(gòu)建對(duì)應(yīng)于測(cè)試模塊中各函數(shù)的函數(shù)控制流圖;模塊控制流圖構(gòu)建子単元,用以根據(jù)函數(shù)調(diào)用關(guān)系,關(guān)聯(lián)所述語(yǔ)句控制流圖以及所述函數(shù)控制流圖,從而形成模塊控制流圖; 路徑確定子單元,用以確定所述模塊控制流圖中待覆蓋節(jié)點(diǎn),根據(jù)預(yù)設(shè)的路徑選擇策略選出經(jīng)過(guò)所述待覆蓋節(jié)點(diǎn)的路徑,形成所述函數(shù)間路徑。
【文檔編號(hào)】G06F11/36GK103593291SQ201310581759
【公開(kāi)日】2014年2月19日 申請(qǐng)日期:2013年11月18日 優(yōu)先權(quán)日:2013年11月18日
【發(fā)明者】黃俊飛, 宮云戰(zhàn), 金大海, 王雅文, 李峰 申請(qǐng)人:北京郵電大學(xué)