摘 要:數據挖掘是在海量數據集中發(fā)現有用信息或者知識的過程[1]。軟件工程數據挖掘技術作為數據挖掘技術的一個分支,其本身又具有自己的特殊性。本文首先分析了軟件工程數據挖掘技術的任務和面臨的挑戰(zhàn),然后著重闡述了在軟件開發(fā)階段所面臨的問題以及一些典型的解決方法。
關鍵詞:軟件工程;數據挖掘;研究進展
中圖分類號:TP311.52
軟件工程數據挖掘是數據挖掘技術在軟件工程領域的應用和發(fā)展,是指在海量的軟件工程數據中利用已有的技術或者開發(fā)新的數據挖掘技術和算法,經過提取、分析、表示等步驟,發(fā)現對軟件開發(fā)者有用的信息或者知識的過程[2]。軟件工程數據挖掘是傳統(tǒng)數據挖掘技術在軟件工程領域方面的一個分支,但是又有自己的特點,主要表現為:(1)軟件工程的數據提取和處理問題;(2)挖掘算法的選擇問題;(3)軟件開發(fā)者的數據選擇問題。本文就軟件工程數據挖掘所能挖掘到的信息和知識及其挖掘過程展開論述,對其研究進展進行了總結。
1 軟件工程數據挖掘的任務與挑戰(zhàn)
軟件工程數據挖掘作為數據挖掘技術的一種,其操作過程與傳統(tǒng)的數據挖掘大致相同,一般可分為三個主要階段:數據預處理,數據挖掘,結果評估。數據挖掘的常見的任務主要有:分類、估計預測、異常檢測、對復雜混合信息的提取等。
軟件工程數據挖掘與傳統(tǒng)數據挖掘相比,又有其自己的特殊性,主要表現為以下幾個方面:(1)數據更為復雜:軟件工程數據不但包括軟件報告和版本信息之類的結構化數據,還包括一些代碼,注釋之類的非結構化數據。兩種不同的數據結構不能用同一算法進行運算,但是兩類數據之間又有這非常重要的聯(lián)系,這就使得其數據更為復雜;(2)分析結果的呈現更為特殊:傳統(tǒng)的數據挖掘結果往往可以以多種結果進行呈現,如報表、文字等形式,而對于軟件工程數據的挖掘而言,需要的不僅僅是要給用戶一個統(tǒng)計結果,更需要的是給軟件開發(fā)者一些更具體的實例,缺陷定位,或者設計結構之類的信息。因此,它需要研究一些新型的結果提交手段和方法;(3)挖掘結果的評價難以統(tǒng)一:傳統(tǒng)的數據挖掘技術基本上已經形成了比較成熟的評價標準,但對于軟件工程數據挖掘而言,軟件開發(fā)者需要的信息非常具體而且復雜,相應的表示方法也是多種多樣的,彼此之間很難形成比較,所以就很難形成一個統(tǒng)一的評價結果。
所以,軟件工程數據挖掘的難點在于對對數據的預處理以及挖掘結果的表述上。下文對軟件開發(fā)階段所遇到的問題和解決方案進行總結。
2 在軟件開發(fā)階段所遇到的問題及解決方案
軟件開發(fā)階段的首要目的是編寫程序。本節(jié)主要闡述了軟件在代碼編寫和結果提交方面所面臨的問題以及典型的解決辦法。
2.1 代碼的編寫
軟件代碼的編寫要求軟件開發(fā)者對自己所要編寫的代碼的結構和功能了解后,按照自己的理解在大量的數據中找可復用的信息。一般來講,編程所需的信息可劃為三個部分:(1)開發(fā)者在已有代碼中尋找可重用的代碼;(2)開發(fā)者尋找可重用的靜態(tài)規(guī)則,如類的方法和繼承關系等;(3)開發(fā)者尋找可重用的動態(tài)規(guī)則,如應用程序接口調用的順序等。
這些信息的尋找一般是通過軟件的幫助文檔、查看代碼、求助他人實現的,這些方法的毫無疑問的會遇到許多問題,如幫助文檔的準確性和完整性難以保證、代碼量大、重用信息少等。
2.1.1 代碼重用
代碼的重用及最基本的問題就是開發(fā)者需要知道所需的類或者方法,然后瀏覽相關代碼進行重用。這種搜索方式必然會浪費開發(fā)者很多的時間。文獻[3]利用關鍵字從代碼庫中尋找可重用的代碼,并根據相關度進行排序,其利用的原理就是課重用的代碼必然模式是相似的,最終結果課通過上下文結構呈現出來,如類與類之間的關系。具體現實的步驟如下:
(1)構建具有例程及上下文架構的代碼庫;(2)開發(fā)者向代碼庫提交類的信息,并對反饋結果進行打分,共同組建代碼庫;(3)后來的開發(fā)者查詢時候例程將安得分高低進行排序,供開發(fā)者查詢。文獻[3]大大降低了開發(fā)者查找重用代碼的工作量,提供了一種描述重用模式的一種方法。
2.1.2 靜態(tài)規(guī)則的重用
開發(fā)者在得到相關的代碼之后,遇到的下個問題就是如何重用其靜態(tài)規(guī)則,如類的繼承關系等。文獻[4]闡述了一種自動識別和呈現靜態(tài)規(guī)則的方法?;痉椒ㄊ牵红o態(tài)規(guī)則一般會被開發(fā)者重復利用,這些關系將以類與類關系的形式保存在代碼庫中,這種規(guī)則可以用關聯(lián)規(guī)則進行發(fā)現。具體實現的步驟如下:(1)對代碼庫中類與類的關系進行搜索,并將其與其余類的關系存在代碼庫中;(2)對關聯(lián)規(guī)則進行挖掘。這種規(guī)則的挖掘細分為兩個問題:出現頻率高的規(guī)則的發(fā)現,文獻中使用的是Apriori算法;(3)對挖掘出的結果進行裁剪。對結果進行刷選,去掉一些無用的關聯(lián),向開發(fā)者提供更精煉的信息;(4)對不同的關聯(lián)關系根據其在代碼庫中出現的頻率進行排序,然后以列表形式呈現出來。
2.1.3 動態(tài)規(guī)則的重用
對于動態(tài)規(guī)則的重用已有很多研究,文獻[5]采用了在編譯器中安裝一個插件用來查看代碼是否符合某種動態(tài)規(guī)則,然后將不符合規(guī)則的以錯誤的形式告知開發(fā)者。
具體實現步驟如下:(1)開發(fā)者可對動態(tài)規(guī)則的順序進行規(guī)定,在調用某一函數之前不能調用另一函數;(2)利用隊列等簡單的數據數據結構對結果進行保存,然后再編譯器擴展中對其順序進行檢查;(3)對違反規(guī)則的代碼進行反饋。
但是在實際開發(fā)過程中,開發(fā)者很難對動態(tài)規(guī)則進行預先的設定。文獻[6]提出了一種自動發(fā)現這種規(guī)則的方式。主要利用人們的開發(fā)時習慣性遵循的規(guī)則,而違反此規(guī)則的可能出現問題。文獻[6]主要針對兩個事件發(fā)生的順序進行發(fā)現。例如對于A事件必須發(fā)生在B事件之后,對于此類規(guī)則的發(fā)現,首先將先后調用的相同函數都設為規(guī)則,對每個規(guī)則進行驗證,看每個規(guī)則是否成立。鑒于其得到的函數對可能非常之多,首先利用一些函數命名規(guī)則降低其數目,去除一些不可能的函數對,然后對剩下的函數對進行匹配。
3 結束語
目前對于軟件工程的數據挖掘還在起步階段,對于其研究還有很長的路要走。雖然有些公司已經發(fā)布了一些軟件工程數據挖掘系統(tǒng)的框架,但距離商業(yè)化的應用還有相當一段距離,還有很多的研究要做。單從軟件開發(fā)階段所面臨的挑戰(zhàn)就如此之多,另外還有對軟件工程數據的維護和修改方面的問題就更多。比如,對于檢索結果的表示就有很大的分歧。相信隨著以后研究的不斷發(fā)展,軟件工程數據挖掘的技術將會更加成熟,工具也會更加實用化,友好化,直至現實真正的數據自動挖掘系統(tǒng)。
參考文獻:
[1]毛澄映,盧炎生,胡小華.數據挖掘技術在軟件工程中的應用綜述[J].計算機科學,2009(05).
[2]李新,張曉靜,米燕濤.軟件開發(fā)過程中的數據挖掘[J].石家莊職業(yè)技術學院學報,2007(02).
[3]張增敏,謝嘉,李長河,隋連升.數據挖掘技術在變電站設備及缺陷管理系統(tǒng)中的應用[J].山東農業(yè)大學學報(自然科學版),2006(04).
[4]徐巍,覃俊.數據挖掘技術在電力負荷管理系統(tǒng)中的應用[J].現代電子技術,2008(10).
[5]趙志升,羅德林,李海英.數據挖掘技術與應用[J].河北北方學院學報(自然科學版),2006(06).
[6]郁抒思,周水庚,關佶紅.軟件工程數據挖掘研究進展[J].計算機科學與探索,2012(01):1-31.
作者簡介:王剛(1983.12-),男,河北黃驊人,本科,助教,研究方向:計算機應用技術;趙玥(1986.10-),男,河北保定人,本科,助教,研究方向:軟件工程。
作者單位:北京交通大學海濱學院,河北滄州 061100