本發(fā)明涉及軟件工程和軟件測試領(lǐng)域,特別是涉及一種針對多層次中間表示mlir編譯器的測試方法。
背景技術(shù):
1、mlir(多層次中間表示)是llvm推出的創(chuàng)新性程序中間表示,旨在解決特定領(lǐng)域編譯器開發(fā)的問題。
2、作為編譯器開發(fā)的基礎(chǔ)架構(gòu),mlir編譯器的缺陷可能會影響到基于其構(gòu)建的領(lǐng)域特定編譯器。而作為高級語言和低級語言的橋梁,編譯器在如今的軟件生態(tài)中占據(jù)重要地位,其缺陷的危害已經(jīng)在很多研究中被證實(shí)。也因此,確保mlir編譯器的質(zhì)量至關(guān)重要。
3、由于mlir豐富的語法語義,以及語言特性,使得已有的編譯器測試工作無法使用于mlir編譯器的測試。已有的mlir編譯器測試工作mlirsmith通過隨機(jī)生成mlir測試程序來檢測mlir編譯器基礎(chǔ)設(shè)施中的缺陷。具體來說,mlirsmith將隨機(jī)程序的生成過程分為兩個階段:1)測試程序模版生成:mlirsmith使用mlir文法生成程序模版,以確保最終生成的mlir程序符合mlir的語法正確性;2)測試程序?qū)嵗簃lirsmith按照mlir的語義約束對第一步生成的mlir程序模版進(jìn)行填充,以確保生成的mlir程序符合mlir的語義合法性。
4、mlirsmith雖然在一定程度上提高了對mlir編譯器缺陷的檢測能力,但其還存在一定缺陷。具體來說,mlirsmith采用隨機(jī)策略生成mlir測試程序,導(dǎo)致其對測試輸入空間的探索不夠高效和充分,從而限制了其缺陷檢測能力。同時,mlirsmith支持的方言和操作數(shù)量有限,而支持新的方言和操作需要龐大的工作量,也非常容易出錯。
5、因此,現(xiàn)有技術(shù)的缺點(diǎn)包括:1)現(xiàn)有方法mlirsmith采用隨機(jī)方式生成測試程序,導(dǎo)致其對測試輸入空間的探索不夠高效充分,2)mlirsmith支持的方言和操作數(shù)量有限,并且難以手動進(jìn)行擴(kuò)展。
技術(shù)實(shí)現(xiàn)思路
1、解決現(xiàn)有mlir編譯器測試方法mlirsmith面臨的測試輸入空間探索缺乏指導(dǎo)問題以及突破現(xiàn)有方法的技術(shù)局限性,本發(fā)明提出一種基于依賴分析的mlir編譯器測試方法,首次提出對測試程序的程序依賴進(jìn)行分析,通過收集測試程序中程序依賴的模式,以此來指導(dǎo)mlir編譯器測試的方法。
2、為了達(dá)成上述發(fā)明目的,本發(fā)明利用以下技術(shù)方案實(shí)現(xiàn):
3、本發(fā)明提出了一種基于依賴分析的mlir編譯器測試方法,包括:
4、執(zhí)行初始化階段的處理,包括進(jìn)行種子池初始化,生成待測mlir程序,進(jìn)行待測mlir程序的操作依賴覆蓋初始化,使得種子池中的待測mlir程序的操作依賴覆蓋滿足測試過程中檢測到新增的mlir程序的操作依賴覆蓋;所述操作依賴覆蓋為參與測試的所有操作依賴模式的數(shù)量和所有可能的測試程序集合中的操作依賴模式數(shù)量的比值,
5、執(zhí)行種子選取和變異階段的處理,包括從種子池中選擇一個種子即隨機(jī)的待測試mlir程序,對所述的待測試mlir程序進(jìn)行變異,利用變異算子進(jìn)行測試程序中操作依賴關(guān)系修改,達(dá)到操作依賴覆蓋期望值,從而得到變異后的測試程序;
6、執(zhí)行編譯器測試和種子入庫階段的處理,包括將所述種子選取和變異階段得到的變異的待測試mlir程序作為mlir編譯器的輸入,利用所述待測試mlir程序進(jìn)行指定pass序列編譯,進(jìn)行mlir編譯器測試;評估m(xù)lir程序的操作依賴覆蓋,以確定是否將新的mlir程序加入種子池,進(jìn)行種子入庫。
7、給定測試用例集t的操作依賴覆蓋表示為:
8、
9、其中,gt表示mlir程序t的操作依賴圖,表示在gt中所有d步可達(dá)性下的程序操作依賴模式,表示所有可能的測試程序的集合,表示給定用例集t下所有程序t對應(yīng)的操作依賴圖的操作依賴模式的集合,表示所有可能的mlir測試程序t'對應(yīng)的操作依賴圖的操作依賴模式的集合。
10、操作依賴覆蓋包括操作數(shù)據(jù)依賴和操作控制依賴,操作依賴模式為一個子圖。
11、利用四種變異算子中的任一種算法進(jìn)行測試程序中操作依賴關(guān)系修改,其中的四種變異算子包括:
12、添加操作:向mlir程序的操作依賴圖中添加一個操作實(shí)例,構(gòu)建和該實(shí)例相關(guān)的操作控制依賴和操作數(shù)據(jù)依賴;
13、刪除操作:刪除mlir程序的操作依賴圖中的一個操作實(shí)例,刪除該操作實(shí)例提供的數(shù)據(jù)依賴和控制依賴,并修復(fù)刪除操作破壞的數(shù)據(jù)依賴;
14、修改數(shù)據(jù)依賴:修改mlir程序的操作依賴圖中的數(shù)據(jù)依賴邊,維持控制依賴邊不變;
15、修改控制依賴:修改mlir程序的操作依賴圖中的控制依賴邊,并維持?jǐn)?shù)據(jù)依賴邊不變。
16、若mlir編譯器發(fā)生崩潰,則檢測到了一個編譯器缺陷,將復(fù)現(xiàn)該缺陷的必要信息記錄下來,同時返回種子選取和變異階段步驟;若沒有發(fā)生編譯器缺陷,則得到一組mlir編譯測試程序。
17、與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和所達(dá)成的積極技術(shù)效果如下:
18、1)提高了覆蓋收集和編譯器編譯程序的效率,同時能夠有效檢測mlir編譯器中的缺陷;
19、2)提升了測試的效率。
1.一種基于依賴分析的mlir編譯器測試方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的一種基于依賴分析的mlir編譯器測試方法,其特征在于,給定測試用例集t的操作依賴覆蓋表示為:
3.根據(jù)權(quán)利要求1所述的一種基于依賴分析的mlir編譯器測試方法,其特征在于,所述操作依賴覆蓋包括操作數(shù)據(jù)依賴和操作控制依賴,操作依賴模式為一個子圖。
4.根據(jù)權(quán)利要求1所述的一種基于依賴分析的mlir編譯器測試方法,其特征在于,利用四種變異算子中的任一種算法進(jìn)行測試程序中操作依賴關(guān)系修改,其中的四種變異算子包括:
5.根據(jù)權(quán)利要求1所述的一種基于依賴分析的mlir編譯器測試方法,其特征在于,若mlir編譯器發(fā)生崩潰,則檢測到了一個編譯器缺陷,將復(fù)現(xiàn)該缺陷的必要信息記錄下來,同時返回種子選取和變異階段步驟;若沒有發(fā)生編譯器缺陷,則得到一組mlir編譯測試程序。