一種基于全局超級(jí)塊支配圖的插樁位置獲取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬計(jì)算機(jī)軟件測(cè)試領(lǐng)域,特別涉及一種基于全局超級(jí)塊支配圖的插粧位置獲取方法。
【背景技術(shù)】
[0002]程序插粧是在被測(cè)程序的特定位置插入探針代碼,通過(guò)運(yùn)行含有探針代碼的程序來(lái)獲取被測(cè)程序運(yùn)行時(shí)數(shù)據(jù)的技術(shù)。該技術(shù)是軟件測(cè)試和程序分析中的關(guān)鍵技術(shù)之一。使用插粧技術(shù)可以收集被測(cè)程序在執(zhí)行過(guò)程的運(yùn)行數(shù)據(jù),如基本塊覆蓋信息、謂詞覆蓋信息、路徑覆蓋信息、函數(shù)調(diào)用信息等。目前在軟件覆蓋分析、測(cè)試用例自動(dòng)生成、測(cè)試用例約簡(jiǎn)、軟件性能分析、軟件性能優(yōu)化、程序不變量分析、軟件自動(dòng)調(diào)試、軟件缺陷檢測(cè)和軟件缺陷修復(fù)等方面得到了廣泛的關(guān)注。
[0003]但插入的探針會(huì)對(duì)被測(cè)程序產(chǎn)生負(fù)面影響,如使被測(cè)程序的代碼量增加、執(zhí)行效率降低等,因此如何設(shè)計(jì)合理的插粧策略、減少插入的探針對(duì)被測(cè)程序的影響,是軟件測(cè)試和程序分析工具設(shè)計(jì)的關(guān)鍵問(wèn)題之一。
[0004]現(xiàn)有技術(shù)中,減少插粧數(shù)量的方法主要有:(I)根據(jù)函數(shù)的控制流圖生成函數(shù)的決策到?jīng)Q策的有向圖,再分析該有向圖中節(jié)點(diǎn)的依賴(lài)關(guān)系,獲取需要插入探針的位置;但該方法中生成的決策到?jīng)Q策的有向圖丟失了控制流圖的部分信息,導(dǎo)致該有向圖無(wú)法表示復(fù)雜的程序流信息,所應(yīng)用的場(chǎng)景有限;(2)根據(jù)函數(shù)的控制流圖生成函數(shù)超級(jí)塊支配圖,再分析該函數(shù)超級(jí)塊支配圖的超級(jí)塊節(jié)點(diǎn)之間的依賴(lài)關(guān)系,以獲取需要插入探針的位置。雖然該方法可以在一定程度上減少插入探針的數(shù)量,但是該方法只考慮了函數(shù)內(nèi)部的控制流信息,忽略了函數(shù)之間的控制流信息,使得程序分析精度不高;而對(duì)超級(jí)塊支配圖的分析是基于對(duì)被測(cè)程序邏輯抽象出來(lái)的信息,如果抽象出來(lái)的信息丟失過(guò)多,會(huì)影響到超級(jí)塊支配圖的分析,從而通過(guò)分析超級(jí)塊支配圖獲得的插粧位置數(shù)量無(wú)法降到最低,從而導(dǎo)致被測(cè)程序的代碼規(guī)模大大增加。
【發(fā)明內(nèi)容】
[0005]本發(fā)明技術(shù)解決問(wèn)題:克服現(xiàn)有技術(shù)的不足,提供一種基于全局超級(jí)塊支配圖的插粧位置確定方法,用以解決現(xiàn)有插粧位置確定方法中獲取的插粧位置數(shù)量沒(méi)有降到最低以及丟失控制流信息導(dǎo)致程序分析精度不高的問(wèn)題。
[0006]本發(fā)明技術(shù)解決方案:一種基于全局超級(jí)塊支配圖的插粧位置確定方法,其核心思想是:通過(guò)增加函數(shù)之間的控制流信息以解決現(xiàn)有插粧位置確定方法中插粧位置數(shù)量無(wú)法降到最低和程序分析精度不高的問(wèn)題。步驟如下:
[0007]步驟1.由被測(cè)程序獲取函數(shù)調(diào)用關(guān)系圖,函數(shù)調(diào)用關(guān)系圖分為非循環(huán)圖和循環(huán)圖,對(duì)于非循環(huán)圖,對(duì)函數(shù)調(diào)用關(guān)系圖進(jìn)行拓?fù)渑判颍?
[0008]I)遍歷所述函數(shù)調(diào)用關(guān)系圖,根據(jù)所述函數(shù)調(diào)用關(guān)系圖中節(jié)點(diǎn)之間的關(guān)系計(jì)算每個(gè)節(jié)點(diǎn)的入度;
[0009]2)選取入度為O的節(jié)點(diǎn)輸出;
[0010]3)將所有從步驟2)中輸出的節(jié)點(diǎn)直接到達(dá)的節(jié)點(diǎn)的入度減I ;
[0011]4)重復(fù)2)和3)步驟,輸出節(jié)點(diǎn)的序列即為所述函數(shù)調(diào)用關(guān)系圖的有序序列。
[0012]通過(guò)連續(xù)合并排好序的局部超級(jí)塊支配圖生成全局超級(jí)塊支配圖,即根據(jù)排好序的局部超級(jí)塊支配圖,依次在所選局部超級(jí)塊支配圖中調(diào)用節(jié)點(diǎn)處添加到該節(jié)點(diǎn)所到目標(biāo)局部超級(jí)塊支配圖的入口節(jié)點(diǎn)的邊;對(duì)于循環(huán)圖,利用所述函數(shù)調(diào)用關(guān)系圖建立嵌套循環(huán)樹(shù),即對(duì)所有有出入弧的循環(huán)頭做一次深度搜索,然后以相反的順序檢驗(yàn)相對(duì)應(yīng)的循環(huán)來(lái)確定是否含有外部調(diào)用節(jié)點(diǎn),同樣自下而上的建立嵌套循環(huán)樹(shù);根據(jù)所述局部超級(jí)塊支配圖和所述嵌套循環(huán)樹(shù)建立循環(huán)樹(shù)支配圖,簡(jiǎn)化所述循環(huán)樹(shù)支配圖生成所述全局超級(jí)塊支配圖,即根據(jù)嵌套循環(huán)樹(shù)的節(jié)點(diǎn)之間的關(guān)系為所述局部超級(jí)塊支配圖添加其所到目標(biāo)局部超級(jí)塊支配圖的邊;
[0013]步驟2.遍歷步驟I所述全局超級(jí)塊支配圖,生成所述全局超級(jí)塊支配圖中超級(jí)塊節(jié)點(diǎn)與所述超級(jí)塊節(jié)點(diǎn)在所述全局超級(jí)塊支配圖中子節(jié)點(diǎn)數(shù)量的超級(jí)塊映射表,其中所述超級(jí)塊映射表是由所述全局超級(jí)塊支配圖的超級(jí)塊節(jié)點(diǎn)的唯一標(biāo)識(shí)號(hào)和所述超級(jí)塊節(jié)點(diǎn)在所述全局超級(jí)塊支配圖中的子節(jié)點(diǎn)個(gè)數(shù)組成,所述超級(jí)塊映射表中超級(jí)塊節(jié)點(diǎn)的唯一標(biāo)識(shí)號(hào)為所述超級(jí)塊映射表的鍵,而所述子節(jié)點(diǎn)個(gè)數(shù)為所述超級(jí)塊映射表的值;
[0014]步驟3.遍歷所述超級(jí)塊映射表,將超級(jí)塊映射表中映射值為空或一條目的超級(jí)塊節(jié)點(diǎn)添加到插粧位置集合中;
[0015]步驟4.遍歷所述超級(jí)塊映射表,獲得所述超級(jí)塊映射表中的超級(jí)塊節(jié)點(diǎn),在所述全局超級(jí)塊支配圖中標(biāo)記所述超級(jí)塊節(jié)點(diǎn)的子節(jié)點(diǎn)為已覆蓋;
[0016]步驟5.在所述全局超級(jí)塊支配圖中前向和后向遍歷,如果全局超級(jí)塊支配圖的入口節(jié)點(diǎn)和出口節(jié)點(diǎn)已覆蓋,則將所述超級(jí)塊節(jié)點(diǎn)添加到插粧位置集合中。
[0017]上述五個(gè)步驟中涉及到的術(shù)語(yǔ)的說(shuō)明如下:
[0018]所述超級(jí)塊支配圖是指由超級(jí)塊以及超級(jí)塊之間的關(guān)系構(gòu)成的圖,所述超級(jí)塊為基本塊支配圖的強(qiáng)連通分量;
[0019]所述局部超級(jí)塊支配圖是指所述被測(cè)程序中函數(shù)的超級(jí)塊支配圖,由函數(shù)中的語(yǔ)句塊以及語(yǔ)句塊之間的關(guān)系構(gòu)成的圖;
[0020]所述全局超級(jí)塊支配圖是指所述被測(cè)程序的超級(jí)塊支配圖,由所述局部超級(jí)塊支配圖以及所述局部超級(jí)塊支配圖之間的關(guān)系構(gòu)成的圖;
[0021]所述嵌套循環(huán)樹(shù)是指對(duì)所述函數(shù)調(diào)用關(guān)系圖中所有有出入弧的循環(huán)頭進(jìn)行搜索,然后以相反的順序檢驗(yàn)相對(duì)應(yīng)的循環(huán)確定是否含有外部調(diào)用節(jié)點(diǎn),自下而上建立的樹(shù)稱(chēng)為嵌套循環(huán)樹(shù);
[0022]所述循環(huán)樹(shù)支配圖是指根據(jù)嵌套循環(huán)樹(shù)合并局部超級(jí)塊支配圖而成的圖;
[0023]所述基本塊支配圖是指在支配樹(shù)中添加蘊(yùn)含樹(shù)里與支配樹(shù)相同節(jié)點(diǎn)的邊而成的圖;所述支配樹(shù)是指由語(yǔ)句塊以及語(yǔ)句塊之間的支配關(guān)系構(gòu)成的圖,所述支配關(guān)系是指在有向圖中入口節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)必須經(jīng)過(guò)另外一個(gè)中間節(jié)點(diǎn),則所述中間節(jié)點(diǎn)支配所述目標(biāo)節(jié)點(diǎn),如果所述中間節(jié)點(diǎn)是所有支配所述目標(biāo)節(jié)點(diǎn)中離所述目標(biāo)節(jié)點(diǎn)最近的節(jié)點(diǎn),則稱(chēng)所述中間節(jié)點(diǎn)為所述目標(biāo)節(jié)點(diǎn)的直接支配點(diǎn);
[0024]所述蘊(yùn)含樹(shù)是指由語(yǔ)句塊以及語(yǔ)句塊之間的蘊(yùn)含關(guān)系構(gòu)成的圖,其中蘊(yùn)含關(guān)系是指在有向圖中當(dāng)前節(jié)點(diǎn)到達(dá)出口節(jié)點(diǎn)必須經(jīng)過(guò)另外一個(gè)中間節(jié)點(diǎn),則所述當(dāng)前節(jié)點(diǎn)蘊(yùn)含所述中間節(jié)點(diǎn),如果所述當(dāng)前節(jié)點(diǎn)是所有蘊(yùn)含所述中間節(jié)點(diǎn)中離所述中間節(jié)點(diǎn)最近的節(jié)點(diǎn),則稱(chēng)所述當(dāng)前節(jié)點(diǎn)為所述中間節(jié)點(diǎn)的直接蘊(yùn)含點(diǎn)。
[0025]本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn):本發(fā)明公開(kāi)的基于全局超級(jí)塊支配圖的插粧位置獲取方法,根據(jù)被測(cè)程序的函數(shù)調(diào)用關(guān)系圖,生成全局超級(jí)塊支配圖,再分析該全局超級(jí)塊支配圖中超級(jí)塊節(jié)點(diǎn)的支配關(guān)系以獲取程序插粧位置,明顯減少了插粧位置數(shù)量,從而提高了插粧后被測(cè)程序的運(yùn)行效率。
【附圖說(shuō)明】
[0026]圖1是本發(fā)明的插粧位置獲取方法的總流程示意圖;
[0027]圖2是根據(jù)全局超級(jí)支配塊圖生成插粧位置的流程示意圖。
【具體實(shí)施方式】
[0028]為使本發(fā)明實(shí)施例的方法和優(yōu)點(diǎn)更加突出,下面將結(jié)合本發(fā)明實(shí)施例中的附圖1和附圖2,對(duì)本發(fā)明的插粧位置獲取方法進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅僅是本申請(qǐng)的一個(gè)實(shí)施例,而非全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明具體實(shí)施