摘 ?要:數據挖掘技術是當前發(fā)展速度最為迅猛的技術之一,為“互聯(lián)網+”相關大數據技術的發(fā)展提供了助力,其應用對于數據整理以及分析都有非常重要的影響。廣州華南商貿職業(yè)學院針對數據挖掘技術在軟件工程中的應用進行了分析研究,對數據挖掘技術進行了理論分析,并以軟件知識庫為例分析數據挖掘技術在軟件知識庫中的應用,深入分析當前數據挖掘技術具體應用,為數據挖掘技術在軟件工程領域發(fā)展提供參考。
關鍵詞:數據挖掘;軟件工程;挖掘類型;軟件知識庫
中圖分類號:TP311 ? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)21-0013-04
Discussion on the Application of Data Mining in the Field of Software Engineering
ZHANG Haixia
(Guangzhou South China Business Trade College,Guangzhou ?510650,China)
Abstract:Data mining technology is one of the most rapidly developing technologies at present,which provides a boost for the development of “internet plus” related big data technology,and its application has a very important impact on data collation and analysis. Guangzhou South China Business Trade College conducted analysis and research on the application of data mining technology in software engineering,and conducted theoretical analysis on data mining technology. The application of data mining technology in software knowledge base is analyzed by taking software knowledge base as an example. The specific application of current data mining technology is deeply analyzed to provide reference for the development of data mining technology in software engineering field.
Keywords:data mining;software engineering;mining type;software knowledge base
0 ?引 ?言
隨著用戶對軟件系統(tǒng)要求的不斷提升,越來越多大型軟件系統(tǒng)開發(fā)人員需要不斷地優(yōu)化軟件代碼設計,以滿足用戶日益增長的需求,但是在代碼優(yōu)化過程中需要面臨各種各樣的問題。例如,大型軟件開發(fā)人員必須使用一些有效的方法、工具去理解軟件系統(tǒng)的具體框架,之后對框架傳播源代碼進行優(yōu)化與變更,在這過程中良好的系統(tǒng)開發(fā)文檔,可以幫助開發(fā)人員更好地理解大型軟件系統(tǒng),但遺憾的是大多數軟件系統(tǒng)開發(fā)人員并沒有記錄自己工作的習慣,能夠留存下來的文件大多殘缺不全,因此一旦需要對大型系統(tǒng)進行修改或者完善時,便需要對系統(tǒng)源代碼進行查看,但是此種方式所需要耗費的時間往往比較長,很大程度上會出現難以遵守軟件交付周期的風險。因此為了應對在大型系統(tǒng)開發(fā)中相關文檔殘缺不全等問題,通過對Subversion(SVN)軟件中系統(tǒng)修改或者更新的歷史信息深度挖掘,加快對大型系統(tǒng)軟件框架理解的進程,便于開發(fā)人員在軟件更新前期快速實現新功能模塊添加與源代碼更新。針對此種情況通過將數據挖掘技術運用在知識庫中,以實現最終提升源代碼修改與新模塊更新效率的目的。廣州華南商貿職業(yè)學院針對上述情況,提出一種數據挖掘在軟件工程領域中的應用方法,為教學研究打下良好基礎。
1 ?數據挖掘技術的基本概述
當前,社會正處于信息化時代,信息數據是社會發(fā)展過程中的重要產物,對數據信息的有效處理,在一定程度上關系著社會發(fā)展的生產力,對于信息技術的應用也有非常重要的作用[1]。在信息技術應用的過程中,軟件開發(fā)應用是其重要組成部分,而在軟件開發(fā)應用的過程中,數據的分析和處理是其核心環(huán)節(jié),數據挖掘技術的應用可以提升軟件開發(fā)的效果,保證軟件開發(fā)應用更加精準[2]。
數據挖掘技術在具體應用的過程中也是一項復雜的技術應用,其主要包括信息收集、數據集成、數據規(guī)約、數據清理、數據變換、數據挖掘過程、功能模式測試及評估等不同部分組成,對數據能夠進行有效的處理[3]。
圖1為數據挖掘的具體流程,圖中反映不同流程分擔著不同的數據處理任務,信息收集任務可以將軟件系統(tǒng)中相關信息整合收集出來;數據集成在相應空間內,利用預先設定好的數據規(guī)約對數據進行篩選,將其中對軟件系統(tǒng)運行、更新等完全無作用的多余數據信息清除掉;根據軟件系統(tǒng)開發(fā)功能刪減、優(yōu)化等需要改變軟件系統(tǒng)部分代碼,重新構建軟件框架,改變原有軟件各子系統(tǒng)交互關系;軟件進行功能模式測試及評估,記錄優(yōu)化后系統(tǒng)源代碼。
2 ?分析數據挖掘技術在軟件知識庫中的應用
2.1 ?軟件解構
在軟件系統(tǒng)優(yōu)化過程中需要先對軟件系統(tǒng)本身框架進行分析與理解,便于掌握軟件總系統(tǒng)與各個子系統(tǒng)之間關系,及系統(tǒng)之間存在的交互關系等,便于將這些設計相關信息均存儲在軟件知識庫中。通常在對軟件系統(tǒng)框架理解中會從框架源代碼入手,采用假設-比較-調查-再研究這一循環(huán)研究方式對軟件框架進行解讀,最終達到完全理解框架的目的。在不同的框架解讀環(huán)節(jié),需要做的工作不同。
首先,假設階段需要對軟件系統(tǒng)總系統(tǒng)與子系統(tǒng)交互關系進行假設。軟件開發(fā)人員可以利用陳舊的系統(tǒng)文檔或者同高級技術人員進行交流,對相似軟件系統(tǒng)結構進行推測,并根據推測形成對軟件系統(tǒng)框架的初步假設與理解[4]。例如,在對操作系統(tǒng)分析中,技術開發(fā)人員會對系統(tǒng)可以實現的功能,對各個子系統(tǒng)之間交互關系進行驗證分析。其次,比較階段對已經提出的假設進行求證。這一環(huán)節(jié)需要對比系統(tǒng)框架建設與系統(tǒng)實際功能實現的統(tǒng)一性。再次,調查階段屬于軟件框架解構最為耗時的階段。此時開發(fā)人員以各子系統(tǒng)之間差異與關系分析為目的,對預測的子系統(tǒng)之間交互關系進行測試,并在測試中準確判斷兩個子系統(tǒng)或者多個子系統(tǒng)之間存在的關系的真實性,通常此階段主要運用的方式包括查看設計文檔、源代碼、向高級技術人員詢問等方式。為了節(jié)省開發(fā)人員在調查過程中所需要的時間,研究中使用的數據挖掘技術采用軟件反射框架方法,并在此基礎上增加源代碼啟發(fā)式方法,以實現快速幫助開發(fā)人員了解軟件系統(tǒng)框架的目的[5]。
2.2 ?反射框架分析
反射框架分析為軟件框架解構主要應用辦法,此處對數據挖掘與應用更為深入,具體如圖2所示。
圖2表明軟件開發(fā)技術人員可以利用從軟件中獲取的相關軟件系統(tǒng)認知,對軟件各子系統(tǒng)之間交互關系進行初步判斷,并建立實際系統(tǒng)的目錄中源代碼、系統(tǒng)文件的映射關系,后對形成的概念框架與圖實體框架進行對比,分析二者之間存在的差異,進而分析軟件各子系統(tǒng)之間已經被證實存在的交互關系、未預測的交互關系、缺失的交互關系等。通過這種反射框架有利于軟件技術開發(fā)人員更為深入掌握軟件系統(tǒng)框架實際情況,并不斷掌握軟件各子系統(tǒng)之間準確的交互關系[6]。在實際軟件設計過程中根據軟件系統(tǒng)各個功能的深入開發(fā),對當前軟件系統(tǒng)各子模塊交互關系進行調整,以使得子系統(tǒng)交互可以達到預定功能的目的。因此在子系統(tǒng)關系探究上,除了是對當前系統(tǒng)框架進行掌握外,也是對系統(tǒng)功能拓展開發(fā)的重要環(huán)節(jié)??梢酝ㄟ^刪除或者增加軟件各子系統(tǒng)的交互關系實現對整體軟件系統(tǒng)功能的進一步完善[7]。具體分析源代碼為:
// 真正的make方法,它直接調用了resolve繼續(xù)去實現make的功能
// $abstract = 'HelpSpot\API'
public function make($abstract, array $parameters = [])
{
// $abstract = 'HelpSpot\API'
return $this->resolve($abstract, $parameters);
}
…
protected function resolve($abstract, $parameters = [])
{
…
// 判斷是否可以合理反射
// $abstract = 'HelpSpot\API'
if ($this->isBuildable($concrete, $abstract)) {
// 實例化具體實例 (實際并不是實例化,而是通過反射“解刨”了)
$object = $this->build($concrete);
} else {
$object = $this->make($concrete);
}
…
}
public function build($concrete)
{
// $concrete = 'HelpSpot\API'
if ($concrete instanceof Closure) {
return $concrete($this, $this->getLastParameterOverride ());
}
// 實例化反射類
$reflector = new ReflectionClass($concrete);
// 檢查類是否可實例化
if (! $reflector->isInstantiable()) {
return $this->notInstantiable($concrete);
}
$this->buildStack[] = $concrete;
// 獲取類的構造函數
$constructor = $reflector->getConstructor();
if (is_null($constructor)) {
array_pop($this->buildStack);
return new $concrete;
}
$dependencies = $constructor->getParameters();
$instances = $this->resolveDependencies(
$dependencies
);
array_pop($this->buildStack);
// 從給出的參數創(chuàng)建一個新的類實例。
return $reflector->newInstanceArgs($instances);
}
2.3 ?靜態(tài)依賴圖(源代碼)應用
無論是計算機軟件亦或是手機APP等軟件,在開發(fā)過程中軟件系統(tǒng)是不斷演化的,以滿足不斷變化的用戶需求,保持軟件始終具有較強的競爭力,盡可能延長軟件的生命周期。因此,在軟件更新過程中軟件開發(fā)技術人員需要對軟件源代碼進行更新,而一般一款軟件在源代碼更新上并非是一人或者同一批技術人員可以完成的,往往需要諸多軟件開發(fā)技術人員參與,為了避免不同軟件開發(fā)技術人員在軟件開發(fā)中出現個體化差異而影響軟件代碼更新,在實際軟件工程中會運用SVN對軟件版本進行控制,以明確記錄軟件系統(tǒng)源代碼修改及更新的具體情況,這些記錄軟件系統(tǒng)更新、修改等信息會存儲在SVN庫中[8]。考慮到SVN存儲的文件信息并不能準確描述系統(tǒng)層次關系,因此使用相適宜的源代碼實體,可準確判斷是刪除依賴關系或者是添加依賴關系。之后將特征屬性關聯(lián)到相應的映射源代碼實體上,如此一來再對系統(tǒng)進行更新更加簡單易于操作[9]。
為了實現靜態(tài)依賴關系圖自動添加,對SVN庫中數據進行分析。主要分為兩個步驟:
(1)對源代碼文件不同歷史版本進行識別,并準確識別源代碼實體(已經定義),記錄已經定義源代碼實體的內容與名字。例如,在庫中存在兩個B版本的文件,初始版本中該文件有函數4個,第二個版本中函數增加了一個新的函數,有5個函數。進而通過這些源代碼實體,比對初始版本可以準確掌握軟件系統(tǒng)更新與修改情況。
(2)采用歷史符號標記表,對相同版本源代碼文件的不同歷史版本進行重新定義,進而實現對系統(tǒng)不同版本源代碼實體的多個歷史版本快照。通過對SVN庫中源代碼文件不同歷史版本記錄比對,將源代碼注解到某一個歷史版本刪除或者新增交互關系上,進而通過源代碼注解情況分析不同歷史版本之間交互關系,如圖3所示。再之后,逐漸分析不同歷史版本交互關系圖,獲得一個軟件工程項目周期內各系統(tǒng)歷史交互關系圖。借助軟件系統(tǒng)歷史交互關系圖,便于軟件技術開發(fā)人員掌握軟件各系統(tǒng)具體交互關系,并通過源代碼注解讀取,使得軟件技術開發(fā)人員可更為快速掌握軟件系統(tǒng)框架層次情況[10]。
3 ?GBOMC軟件系統(tǒng)簡化案例
3.1 ?GBOMC軟件靜態(tài)依賴圖應用過程
為了盡可能節(jié)省軟件系統(tǒng)代碼簡化過程中可能出現的重復工作等,提高軟件系統(tǒng)開發(fā)與優(yōu)化效率,對GBOMC軟件系統(tǒng)進行實驗,由于這個軟件此系統(tǒng)代碼庫數據繁多,利用如上靜態(tài)依賴圖自動添加流程逐漸構建歷史交互圖用時1.2小時,并將最終生成的歷史系統(tǒng)交互圖結果存儲在XML文件中。在對該GBOMC軟件系統(tǒng)交互關系調查中,一直重復使用XML文件,大大節(jié)省了系統(tǒng)層次結構所需要的時間。隨著軟件系統(tǒng)不斷地發(fā)展,為初始版XML文件添加相對應源代碼注解,并在XML文件SVN庫更新上,使用優(yōu)化的gSpan算法,有效降低重復圖出現的概率,確保依賴圖完全集,具體代碼為:
1:retrieve XMIL to sort the labels in by modify time
2: label dependent fie vertices and edges;
3: add the sourcenotes to edges;
4: s1-all link: 1-edge graphs in;
5: sortsl in DFS lexicographic order by time;
6: S←s1:
7: for each edge e∈1 do
8: ? ? initialize s with e,ets ?D by graphs which contains e
9: ? ? ? ?grapMining(D,S,s);
10: ? ? ? add the source notes to edges:
11: if S,contains(s)
12: ? ? ?remove sl;
13: ?graphMining(D,S, s);
14: ?if s≠min(S)
15: return;
16: S←SU{s):
17:enumerate s in each graph in and count its link class;
通過以上優(yōu)化的gSpan算法可以使得對軟件系統(tǒng)各子系統(tǒng)交互關系理解更簡便,同時通過一個系統(tǒng)源代碼實體的更改可以實現對多個子系統(tǒng)相關源代碼實體的更改,更為高效率更新軟件系統(tǒng)代碼。
3.2 ?GBOMC軟件應用靜態(tài)依賴圖后測試
測試環(huán)境為:
(1)軟件:Windows 10,Eclipse軟件平臺,Java編寫算法。
(2)硬件:1 GB內存、PM 1.6 GHZ CPU、80 GB硬盤、筆記本電腦。
測試結果如表1與表2所示,結果顯示此種方式算法性能較優(yōu)、修改歷史記錄完整,有一定深入研究與應用價值。
4 ?結 ?論
筆者以軟件知識庫為例分析數據挖掘技術在軟件知識庫中的應用,分析軟件解構、反射框架、靜態(tài)依賴圖(源代碼)應用等,并對使用的靜態(tài)依賴圖應用方式進行測試,此種方式算法性能優(yōu)越,準確性高,可以實現對系統(tǒng)的進一步開發(fā),應用價值較高。
參考文獻:
[1] 張勇.軟件工程行業(yè)中數據挖掘的應用探討 [J].中國新通信,2018,20(5):89.
[2] 段彬,魏巍.數據挖掘在軟件工程領域中的應用淺析 [J].信息系統(tǒng)工程,2018(4):89.
[3] 李喆.數據挖掘技術在軟件工程中的應用研究 [J].數碼設計(下),2019(11):216-217.
[4] 黃智聰.數據挖掘技術在軟件工程中的應用 [J].數字化用戶,2019,25(17):104.
[5] 錢曉軍,范冬萍,吉根林.物聯(lián)網差異數據庫中的故障數據快速挖掘仿真 [J].計算機仿真,2016,33(1):301-304.
[6] 黃煒.基于數據挖掘技術的計算機網絡病毒防御系統(tǒng)設計 [J].機電信息,2020(23):140-141.
[7] 鄭幸源,洪親,蔡堅勇,等.基于AJAX異步傳輸技術與Echarts3技術的動態(tài)數據繪圖實現 [J].軟件導刊,2017,16(3):143-145.
[8] 寧德軍,葉培根,劉琴,等.基于存儲庫數據挖掘的開源軟件成功度量方法 [J].電子學報,2018,46(12):2930-2935.
[9] 張波,李舸.基于改進聚類算法的Web異常數據挖掘軟件設計 [J].現代電子技術,2019,42(8):73-76+81.
[10] 梁藝瓊.基于數據挖掘技術的輿情分析系統(tǒng)的設計 [J].電腦知識與技術,2020,16(3):1-2.
作者簡介:張海霞(1979.12—),男,漢族,湖北荊州人,講師,碩士研究生,研究方向:軟件工程。