本發明涉及編譯優化、編譯器測試領域,主要涉及編譯器中端的優化故障測試方法及系統。
背景技術:
1、編譯器在現代軟件開發中扮演著至關重要的角色,其作用不僅在于將高級程序設計語言轉換為機器代碼,更在于生成優化的代碼以提高程序執行效率。然而,由于編譯優化的復雜性,編譯器優化是最容易出現故障的部分之一。這些故障嚴重影響了編譯器的易用性,并在安全關鍵領域可能導致災難性后果。因此,針對編譯器優化引起的故障,有效的測試技術至關重要。
2、近年來,盡管針對編譯器故障檢測的研究不斷涌現,但檢測由于編譯優化所導致的編譯器故障仍然缺乏系統性研究。編譯器優化種類繁多,互相之間的影響錯綜復雜,因此,設計并實現高效的編譯器優化故障檢測機制成為迫切需要的任務。該發明旨在探討基于測試用例與優化序列關聯模型的編譯器優化故障檢測機制,通過理解和利用測試用例與編譯器優化序列之間的關系,提高檢測效率,從而解決編譯器優化引起的故障問題。
技術實現思路
1、發明目的:針對上述背景技術中存在的問題,本發明提出了一種基于關聯模型的編譯器優化故障檢測方法及系統,旨在通過機器學習方法提高優化故障的檢測效率和準確性。
2、技術方案:為實現上述目的,本發明采用如下技術方案:
3、第一方面,本發明提供一種基于關聯模型的編譯器優化故障檢測方法,包括以下步驟:
4、(1)基于變異的測試程序生成方法,通過在種子程序中插入代碼片段生成新的測試程序;
5、(2)通過隨機選擇優化級別和處理差異集構建多樣化的優化序列;
6、(3)構建訓練樣本,將測試程序和優化序列進行關聯,并將其輸入到編譯器中進行差分測試,標記輸出的測試結果,從而構建帶有標簽的訓練樣本;
7、(4)將訓練樣本中的測試程序和優化序列轉換為統一的向量表示形式輸入到svm支持向量機算法中構建關聯模型,通過采用序列最小優化算法對svm模型進行訓練;
8、(5)使用訓練好的svm模型預測新的測試程序在某一優化序列下觸發優化故障的概率,根據預測的概率對優化序列降序排序,使用新的測試程序和排序在top-k的優化序列對編譯器進行差分測試。
9、進一步地,步驟(1)中,所述基于變異的測試程序生成方法,通過程序結構提取的方式提取所有設定結構的代碼片段,然后在種子程序中隨機插入這些代碼片段從而形成若干個新的測試程序。
10、進一步地,步驟(2)中,所述優化序列構建方法,首先在-o0、-o1、-o2、-o3、-os中隨機選擇兩個優化級別,構成一個優化級別對,并識別出這一對優化級別之間的優化選項的差異集;然后隨機刪除這個差異集中的一個或多個優化選項,優化序列中的所有元素由差異集中剩下的優化選項與這個優化級別對中較低水平的優化級別構成;最后,隨機排列這些元素以生成介于兩個優化級別之間的若干個優化序列。
11、進一步地,步驟(3)中,所述測試程序和優化序列關聯方法中假設測試程序集合為p={pi}(1≤i≤n),優化序列集合為s={sj}(1≤j≤m),則構建的關聯對表示為r={<pi,sj>}(1≤i≤n,1≤j≤m),其中n和m分別為測試程序數量和優化序列數量。
12、進一步地,步驟(3)中,所述訓練樣本的標簽為數值型標簽0或者1,當構建的關聯對<pi,sj>在編譯器差分測試中檢測出優化故障,該關聯對的標簽設置為1,否則,該關聯對的標簽設置為0。
13、進一步地,步驟(4)中采用codebert模型將測試程序和優化序列轉換為統一的向量表示形式,以便于后續的機器學習模型處理。
14、進一步地,步驟(4)中,所述svm支持向量機算法用于構建測試程序與優化序列之間的關聯模型,采用序列最小優化算法訓練svm模型;在訓練過程中,svm會自動選擇一部分樣本向量作為支持向量,這些支持向量決定了分類邊界的位置;所述優化問題表示為:
15、
16、其中αi是拉格朗日乘子,每個樣本向量對應一個αi,支持向量是αi>0的訓練樣本向量,n′為訓練集中支持向量的個數,‖.‖表示向量的2范數,b是偏置,δi是松弛變量,c是正則化參數,n是訓練樣本的個數,xi是第i個關聯對中測試程序和優化序列的向量,yi是第i個關聯對的真實標簽0或者1,φ(xi)是通過核函數映射后的特征向量,subject?to表示在優化過程中,模型在尋找最優解時必須遵守的約束條件。
17、進一步地,步驟(5)中,使用訓練好的svm模型預測優化故障是,對于每個需要預測的關聯對中測試程序和優化序列的向量x,模型計算其在特征空間中的位置,并根據支持向量和決策函數確定其預測標簽,決策函數形式為:
18、
19、其中,k(xi,x)是高斯核函數。
20、第二方面,本發明提供一種基于關聯模型的編譯器優化故障檢測系統,包括:
21、測試程序生成模塊,用于基于變異的測試程序生成方法,通過在種子程序中插入代碼片段生成新的測試程序;
22、優化序列生成模塊,用于通過隨機選擇優化級別和處理差異集構建多樣化的優化序列;
23、訓練樣本構建模塊,用于構建訓練樣本,將測試程序和優化序列進行關聯,并將其輸入到編譯器中進行差分測試,標記輸出的測試結果,從而構建帶有標簽的訓練樣本;
24、關聯模型訓練模塊,用于將訓練樣本中的測試程序和優化序列轉換為統一的向量表示形式輸入到svm支持向量機算法中構建關聯模型,通過采用序列最小優化算法對svm模型進行訓練;
25、以及預測與檢測模塊,用于使用訓練好的svm模型預測新的測試程序在某一優化序列下觸發優化故障的概率,根據預測的概率對優化序列降序排序,使用新的測試程序和排序在top-k的優化序列對編譯器進行差分測試。
26、第三方面,本發明提供一種計算機程序產品,包括計算機程序/指令,所述計算機程序/指令被處理器執行時實現所述的一種基于關聯模型的編譯器優化故障檢測方法的步驟。
27、有益效果:本發明與現有技術相比,其效果如下:1、本發明通過基于變異的測試程序生成方法,并提出優化序列生成方法,構建了關聯測試程序和優化序列的樣本,并基于svm支持向量機算法中構建關聯模型,能夠在gcc和llvm編譯器上的優化故障檢測具有較高的命中率和準確率。2.本發明基于關聯模型的檢測方法提高了編譯器優化故障的檢測效率和準確性,為編譯器優化的可靠性提供了保障。
1.一種基于關聯模型的編譯器優化故障檢測方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(1)中,所述基于變異的測試程序生成方法,通過程序結構提取的方式提取所有設定結構的代碼片段,然后在種子程序中隨機插入這些代碼片段從而形成若干個新的測試程序。
3.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(2)中,所述優化序列構建方法,首先在-o0、-o1、-o2、-o3、-os中隨機選擇兩個優化級別,構成一個優化級別對,并識別出這一對優化級別之間的優化選項的差異集;然后隨機刪除這個差異集中的一個或多個優化選項,優化序列中的所有元素由差異集中剩下的優化選項與這個優化級別對中較低水平的優化級別構成;最后,隨機排列這些元素以生成介于兩個優化級別之間的若干個優化序列。
4.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(3)中,所述測試程序和優化序列關聯方法中假設測試程序集合為p={pi}(1≤i≤n),優化序列集合為s={sj}(1≤j≤m),則構建的關聯對表示為r={<pi,sj>}(1≤i≤n,1≤j≤m),其中n和m分別為測試程序數量和優化序列數量。
5.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(3)中,所述訓練樣本的標簽為數值型標簽0或者1,當構建的關聯對<pi,sj>在編譯器差分測試中檢測出優化故障,該關聯對的標簽設置為1,否則,該關聯對的標簽設置為0。
6.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(4)中采用codebert模型將測試程序和優化序列轉換為統一的向量表示形式,以便于后續的機器學習模型處理。
7.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(4)中,所述svm支持向量機算法用于構建測試程序與優化序列之間的關聯模型,采用序列最小優化算法訓練svm模型;在訓練過程中,svm會自動選擇一部分樣本向量作為支持向量,這些支持向量決定了分類邊界的位置;所述優化問題表示為:
8.根據權利要求1所述的基于關聯模型的編譯器優化故障檢測方法,其特征在于,步驟(5)中,使用訓練好的svm模型預測優化故障是,對于每個需要預測的關聯對中測試程序和優化序列的向量x,模型計算其在特征空間中的位置,并根據支持向量和決策函數確定其預測標簽,決策函數形式為:
9.一種基于關聯模型的編譯器優化故障檢測系統,其特征在于,包括:
10.一種計算機程序產品,包括計算機程序/指令,其特征在于,所述計算機程序/指令被處理器執行時實現根據權利要求1-8任一項所述的一種基于關聯模型的編譯器優化故障檢測方法的步驟。