李昱良,李均醫,陳磊
淮南師范學院,安徽,淮南,232038
數據挖掘技術在軟件工程領域的應用可以溯源至20世紀90年代中期,其在當時最主要的作用便是幫助工程師探尋可重復利用的代碼。但隨著軟件系統復雜程度的日益進步以及數據挖掘技術的更新換代,其在軟件工程領域中的應用范圍與應用方式也越發廣泛、復雜。軟件項目開發是一項較為復雜的工作,其中涉及了大量的應用及開發數據,并且這些數據需要做到不斷更新,數據挖掘技術在軟件工程中的應用,能夠實現對軟件工程相關數據的有效整合及處理,為具體開發工作的開展提供技術支持和數據保障。針對數據挖掘在軟件工程中的應用這一命題進行研究,旨在證明數據挖掘技術是實現低成本、高效率達成軟件工程建設目標的有效解決方案,從而充分發揚數據挖掘技術的應用價值,解決傳統軟件工程開發中存在的數據不可靠、不安全、不穩定問題,促進軟件工程技術的不斷進步。
數據技術誕生初期被稱為數據知識庫中的知識發現,基于本質出發,數據挖掘技術的基礎就是信息技術中所涵蓋的數據庫。軟件工程的概念誕生于20世紀60年代,其主要概念便是通過工程化的方法開展系列軟件建設與維護工作,進而在既定的成本與進度目標中,為客戶開發出符合其需求的高質量、高實用性的軟件。反觀數據挖掘技術在軟件工程中的應用這一概念,其興起于20世紀末期,是由Allen等相關研究者所共同提出“應用數據挖掘的方式找出代碼中的復用關系”,至此,數據挖掘技術在軟件工程中得以廣泛應用、不斷發展。數據挖掘技術現在已經成為軟件工程領域內較為關鍵的科學技術,但是學術界并沒有形成對該技術的統一定義。
目前,學術界認可度較高的據挖掘技術定義是由W.J.Frawley等人提出的,他們認為數據挖掘技術指的是在海量數據中提取出具備顯著應用價值、運用效率更高、應用形式更為新穎的關鍵數據,目的是實現對軟件工程數據模式的非平凡處理[1]。基于上述定義,總結出數據挖掘技術應用特點:需要確保數據來源的真實性和合理性;確保數據量的充足程度,并且不能出現不完全問題和噪聲問題;通過數據獲取的知識應當是實用的、具有潛在價值的;如果是用于特定問題分析處理,技術應用對于知識量沒有過多要求;能夠用來獲取終端客戶興趣較高的未知知識信息。
所謂的克隆代碼,就是一副以應用為主要目的而所復制、粘貼的代碼段,面向實際應用中的不同需求,有時也會做部分修改等特殊化處理。通常情況下,克隆代碼在軟件工程開發中會占到總代碼量的7%~25%,針對克隆代碼進行充分挖掘,有助于防止軟件工程開發項目中的拷貝性故障,同時有助于軟件測試過程中的安全維護[2]。針對克隆代碼的檢測工作是數據挖掘技術在軟件工程領域中最早的應用方式之一,隨著相關技術的不斷發展,現階段已經形成了多種應用方式,可歸納如下。
(1)基于標識符對比的應用方式。最為典型的應用方式便是對分詞所形成的標識符序列構造前綴樹進行分析與檢測,并以此為基礎,利用Dup、CCFinder等軟件對克隆代碼進行對比分析。
(2)基于程序結構的應用方法。主要運用抽象語法樹抑或是抽象語法前綴樹以及程序依賴圖等方式表達軟件工程中程序代碼的語法信息。以此為基礎,在相關前綴樹、程序依賴圖紙上進行深入挖掘,檢測重復代碼。現階段可使用的工具主要有CloneDR、GPLAG等。
(3)基于文本對比的應用方法。主要通過對比軟件工程程序代碼中的語句來判斷其重復率,而后采用Hash函數等技術提升程序代碼字符串的匹配效率,以達成有效挖掘克隆代碼、降低重復代碼的目標。
使用數據挖掘技術檢測軟件漏洞的重點,在于有效探尋軟件開發階段中已有的以及后續使用階段中可能出現的技術漏洞與錯誤,而后結合有效的技術手段,確保其能夠得到最高效的修復與完善,以提升軟件整體的運行質量以及運行可靠性。數據挖掘技術應用于漏洞檢測中通常可以依照如下步驟開展工作。
(1)確定漏洞檢測方案、開展漏洞數據收集工作。針對用戶的基本需求,確定軟件的測試項目以及相應的漏洞檢測方案與計劃。針對軟件全部信息進行大范圍檢測、分析、排查,而后結合分析結果探尋漏洞,確定軟件漏洞信息,開展數據清理與轉換。借助相關技術系統,對比軟件源信息以及開發目標,選取與軟件缺陷、漏洞相關聯的數據,充分清理將無價值、不重要的數據。而后,對已丟失的項目數據開展補充工作,將相關數據的屬性轉換為數值表示[3]。
(2)結合恰當的數據模型,開展軟件漏洞驗證與訓練工作。依照軟件開發項目的實際目標,選擇適宜的挖掘方式,促使其成為測試集、訓練集后,橫向對比所有結果,以探尋最合理、最高效的方式。而后結合上文所提及的方式,針對軟件漏洞進行重復的描述、定位與分類,同時在軟件數據庫中應用漏洞數據庫所收集到的信息,進一步探尋未知漏洞,并在結合相應規則描述其漏洞后完成分類,最后將挖掘出的漏洞數據知識應用到軟件項目測試環節中。
往往程序的多次崩潰、失效等都引發于同一個故障,因此無需在每次程序失效后都對其進行大規模的調試,僅需要對其故障進行定位以及聚類分析便可有效避免此類問題的再次發生。程序切片是最傳統、最有效的故障定位技術之一,但基于現階段愈發復雜的軟件工程開發工作,傳統的技術已經無法滿足當下大型、復雜系統的切片,從而導致難以準確定位故障。基于此,可以在切片結果抑或是切片程序、切片記錄上。進一步開展數據統計分析工作,從而有效縮小故障定位的范圍、降低故障定位的難度[4]。
所謂的程序執行記錄挖掘,亦可以稱為程序規約挖掘,便是指通過對程序執行跟蹤過程的分析,對程序代碼的協議進行挖掘。軟件工程開發過程中針對執行記錄的挖掘主要是對程序執行路徑開展分析后,挖掘出相應軟件程序代碼中所具有的關聯性。數據挖掘在檢測執行記錄中的應用,本質上便是通過跟蹤相應的執行路徑,利用逆向建模的方式檢測相關數據信息,以達成有效維護、驗證以及了解程序的目的。執行記錄挖掘的應用過程,首先需要針對被分析的系統進行初步插裝工序,而后針對挖掘軟件所對應的編程接口、基本系統、程序模塊等進行狀態變量處理,同時記錄相關數據。最后簡約、聚類、過濾目標跟蹤過程中所獲取的數據信息,進而構建起能夠表現系統全部功能的模型。其流程可參考圖1(流程圖中執行記錄表達為程序規約)。

圖1 執行記錄挖掘基本流程
開源軟件挖掘項目的具體開發環境往往具有全局性、靈活性、動態性、開放性的特征。基于此,需要有效區分并甄別此類軟件與其他傳統軟件,以防工作失誤。一般情況下,針對較為成熟的開源軟件項目,基于其所參與其中的錯誤報告、開發者程序以及相應軟件應用等皆具有較為完善、具備參考價值的記錄,參與開發的技術人員,能夠在挖掘技術的幫助下組成較為典型的社會網絡,但由于開源軟件開放性的特征,致使相關工作人員需在不斷變化的過程中完成開源軟件的挖掘工作。并且由于開源軟件中具有較為典型的動態性特征,由此可實現開源軟件的靈活挖掘、優質管理。以牛津大學科研組所開發的Sima系統為例,基于該系統、挖掘技術以及開源軟件的動態性、開放性特征,使得該系統可對開源項目的使用者以及跟蹤者進行系統性、精準性的跟蹤管理[5]。
挖掘技術在版本控制系統中的應用,主要目的便是充分保障項目參與者所共同編制檔案、文件以及程序數據庫之間的統一性,以方便于后期全局性的更新工作。通常情況下,現階段的軟件工程開發工作基本都會使用到版本控制系統,實施軟件工程開發的信息管理與保護工作。同時挖掘技術在版本控制信息中的應用,主要是對已變更歷史信息的挖掘,探尋歷史版本中不同模塊、子系統之間存在的聯系性與相互依存的關系。而后針對程序應用的實際使用效果以及未來變化、引入方式等進行持續性的檢測與挖掘,以獲取其中的漏洞、bug等。挖掘技術在版本控制信息中的應用,能夠有效提升系統后期維護的有效性,同時降低開發成本,在有效規避后期變更所引發漏洞的基礎上,充分發揮其對后期軟件的持續性維護、預警價值[6]。
因為數據挖掘技術所需要面對更為復雜、多樣且海量的數據信息,同時其所要解決的實際問題也是多種多樣的。由此,為滿足不同情境下軟件工程開發的不同需求,便需要應用到各種類型的數據挖掘算法以及應用方式。
所謂的遺傳算法,便是指對生物系統進行模擬后的一種計算機計算方式。該算法由三個算子組成,即為交叉、變異以及選擇,是一種類似于生物進化的“模擬器”。該算法最大的優勢在于,你解決問題的過程與初始條件并無過多關聯,同時探尋最優解的能力極強。奇跡是一種概率性的搜索算法,又可以歸納為一種自適應迭代尋優過程。因為該算法的整體搜索策略以及優化搜索方式在實際計算過程中并不依賴于梯度信息抑或是其他輔助信息,因此結合該算法開展挖掘工作時,只需要探索影響搜索方向的目標函數以及相應的適應度函數,即可為遺傳算法構建一種求解復雜系統問題的通用框架。遺傳算法并不依賴于軟件工程具體問題中的具體領域,其對于問題種類的探析具有極強的魯棒性,因此可以廣泛地應用于軟件工程中各個子項目的設計開發中。
所謂的神經網絡算法是指通過模擬人腦神經元結構,以Mp模型和Hebb學習規則為基礎所建立起來的計算模型,實際計算例圖可參考圖2。神經網絡計算法中較具代表性的模型如下。

圖2 神經網絡計算圖例
(1)前饋式神經網絡。該網絡系統中所包含的神經元之間存在相互聯系,能夠將輸出信號直接作用到輸入端。
(2)自組織神經網絡。該網絡計算中輸出節點可以與其所相鄰區間中其他節點進行廣泛性的連接。當輸入、輸出節點之間通過某種介質相串聯后,結合某種規則不斷優化其串聯強度,待到網絡穩定后,每一鄰近區間中的所有節點對某種輸出介質都有類似的輸出,例如Hopfield、Boltgmnn模型等。
數據挖掘技術中應用的分類方法指的是為某種預測分類標號的執行動作,具體需要事先構建特定的分析模型,隨后按照既定規則輸入相應的數據類集或概念集,數據類集或概念集便是分析模型展開分類操作的基礎。
現階段,在軟件工程中應用頻率較高的數據挖掘技術分類方法包括判定樹法、K-最臨近分類法等。判定樹法的分類計算邏輯基礎為貪心算法,具體需要按照自上而下遞歸的方式構建判定樹,判定樹上的每個子節點均代表了不同的軟件類別標號,標號顯示的便是軟件工程數據挖掘對象的具體分類結果。K-最臨近分類法是判定樹法的一個主要分支,該方法的分類計算邏輯基礎如下:假設分類對象在規定特征空間內有K個相似度最高的樣本,并且這些樣本能夠被歸到具體類別中,便能夠認定分類對象可以被歸到同一種類別中。K-最臨近分類法對判定樹法進行了進一步優化處理,適合應用在樣本容量較大的軟件工程數據挖掘對象分類中,不適合樣本容量較小的分類,否則可能會導致分類失誤問題。
關聯方法指的是在軟件工程數據挖掘對象中建立相關聯系,該方法規則具備如下特征。
數據挖掘技術在軟件工程中的應用對于支持度及置信度均有最低要求,強規則指的便是需要同時滿足支持度及置信度最低要求的規則。在事物集中,數據挖掘技術強規則具體指的是,數據挖掘技術應用支持度、置信度需要大于軟件終端用戶設置的最低支持度、最低置信度。

總而言之,隨著社會需求的變化,軟件工程領域整體也正向著更為復雜、多元且挑戰增多的方向發展。這導致在實際的軟件開發項目中,需要結合具備量化特征且足夠精準的技術,方能夠滿足不斷變化的軟件開發需求。得益于數據挖掘技術在軟件工程中的應用范圍較為廣泛、應用技術體系及流程較為成熟的優勢,使其成為適合應用在軟件工程開發中各項環節的主流技術之一,但是在實際軟件工程開發及應用過程中需要明確挖掘對象和挖掘技術。筆者謹以本文拋磚引玉,以期望能為相關研究者的研究工作提供一定理論參考,助力其更好地投入研究工作中,從而推動我國整體軟件工程領域的不斷發展。