摘 ?要:數(shù)據(jù)挖掘技術(shù)是當(dāng)前發(fā)展速度最為迅猛的技術(shù)之一,為“互聯(lián)網(wǎng)+”相關(guān)大數(shù)據(jù)技術(shù)的發(fā)展提供了助力,其應(yīng)用對(duì)于數(shù)據(jù)整理以及分析都有非常重要的影響。廣州華南商貿(mào)職業(yè)學(xué)院針對(duì)數(shù)據(jù)挖掘技術(shù)在軟件工程中的應(yīng)用進(jìn)行了分析研究,對(duì)數(shù)據(jù)挖掘技術(shù)進(jìn)行了理論分析,并以軟件知識(shí)庫(kù)為例分析數(shù)據(jù)挖掘技術(shù)在軟件知識(shí)庫(kù)中的應(yīng)用,深入分析當(dāng)前數(shù)據(jù)挖掘技術(shù)具體應(yīng)用,為數(shù)據(jù)挖掘技術(shù)在軟件工程領(lǐng)域發(fā)展提供參考。
關(guān)鍵詞:數(shù)據(jù)挖掘;軟件工程;挖掘類型;軟件知識(shí)庫(kù)
中圖分類號(hào):TP311 ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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 ?引 ?言
隨著用戶對(duì)軟件系統(tǒng)要求的不斷提升,越來(lái)越多大型軟件系統(tǒng)開發(fā)人員需要不斷地優(yōu)化軟件代碼設(shè)計(jì),以滿足用戶日益增長(zhǎng)的需求,但是在代碼優(yōu)化過(guò)程中需要面臨各種各樣的問(wèn)題。例如,大型軟件開發(fā)人員必須使用一些有效的方法、工具去理解軟件系統(tǒng)的具體框架,之后對(duì)框架傳播源代碼進(jìn)行優(yōu)化與變更,在這過(guò)程中良好的系統(tǒng)開發(fā)文檔,可以幫助開發(fā)人員更好地理解大型軟件系統(tǒng),但遺憾的是大多數(shù)軟件系統(tǒng)開發(fā)人員并沒(méi)有記錄自己工作的習(xí)慣,能夠留存下來(lái)的文件大多殘缺不全,因此一旦需要對(duì)大型系統(tǒng)進(jìn)行修改或者完善時(shí),便需要對(duì)系統(tǒng)源代碼進(jìn)行查看,但是此種方式所需要耗費(fèi)的時(shí)間往往比較長(zhǎng),很大程度上會(huì)出現(xiàn)難以遵守軟件交付周期的風(fēng)險(xiǎn)。因此為了應(yīng)對(duì)在大型系統(tǒng)開發(fā)中相關(guān)文檔殘缺不全等問(wèn)題,通過(guò)對(duì)Subversion(SVN)軟件中系統(tǒng)修改或者更新的歷史信息深度挖掘,加快對(duì)大型系統(tǒng)軟件框架理解的進(jìn)程,便于開發(fā)人員在軟件更新前期快速實(shí)現(xiàn)新功能模塊添加與源代碼更新。針對(duì)此種情況通過(guò)將數(shù)據(jù)挖掘技術(shù)運(yùn)用在知識(shí)庫(kù)中,以實(shí)現(xiàn)最終提升源代碼修改與新模塊更新效率的目的。廣州華南商貿(mào)職業(yè)學(xué)院針對(duì)上述情況,提出一種數(shù)據(jù)挖掘在軟件工程領(lǐng)域中的應(yīng)用方法,為教學(xué)研究打下良好基礎(chǔ)。
1 ?數(shù)據(jù)挖掘技術(shù)的基本概述
當(dāng)前,社會(huì)正處于信息化時(shí)代,信息數(shù)據(jù)是社會(huì)發(fā)展過(guò)程中的重要產(chǎn)物,對(duì)數(shù)據(jù)信息的有效處理,在一定程度上關(guān)系著社會(huì)發(fā)展的生產(chǎn)力,對(duì)于信息技術(shù)的應(yīng)用也有非常重要的作用[1]。在信息技術(shù)應(yīng)用的過(guò)程中,軟件開發(fā)應(yīng)用是其重要組成部分,而在軟件開發(fā)應(yīng)用的過(guò)程中,數(shù)據(jù)的分析和處理是其核心環(huán)節(jié),數(shù)據(jù)挖掘技術(shù)的應(yīng)用可以提升軟件開發(fā)的效果,保證軟件開發(fā)應(yīng)用更加精準(zhǔn)[2]。
數(shù)據(jù)挖掘技術(shù)在具體應(yīng)用的過(guò)程中也是一項(xiàng)復(fù)雜的技術(shù)應(yīng)用,其主要包括信息收集、數(shù)據(jù)集成、數(shù)據(jù)規(guī)約、數(shù)據(jù)清理、數(shù)據(jù)變換、數(shù)據(jù)挖掘過(guò)程、功能模式測(cè)試及評(píng)估等不同部分組成,對(duì)數(shù)據(jù)能夠進(jìn)行有效的處理[3]。
圖1為數(shù)據(jù)挖掘的具體流程,圖中反映不同流程分擔(dān)著不同的數(shù)據(jù)處理任務(wù),信息收集任務(wù)可以將軟件系統(tǒng)中相關(guān)信息整合收集出來(lái);數(shù)據(jù)集成在相應(yīng)空間內(nèi),利用預(yù)先設(shè)定好的數(shù)據(jù)規(guī)約對(duì)數(shù)據(jù)進(jìn)行篩選,將其中對(duì)軟件系統(tǒng)運(yùn)行、更新等完全無(wú)作用的多余數(shù)據(jù)信息清除掉;根據(jù)軟件系統(tǒng)開發(fā)功能刪減、優(yōu)化等需要改變軟件系統(tǒng)部分代碼,重新構(gòu)建軟件框架,改變?cè)熊浖髯酉到y(tǒng)交互關(guān)系;軟件進(jìn)行功能模式測(cè)試及評(píng)估,記錄優(yōu)化后系統(tǒng)源代碼。
2 ?分析數(shù)據(jù)挖掘技術(shù)在軟件知識(shí)庫(kù)中的應(yīng)用
2.1 ?軟件解構(gòu)
在軟件系統(tǒng)優(yōu)化過(guò)程中需要先對(duì)軟件系統(tǒng)本身框架進(jìn)行分析與理解,便于掌握軟件總系統(tǒng)與各個(gè)子系統(tǒng)之間關(guān)系,及系統(tǒng)之間存在的交互關(guān)系等,便于將這些設(shè)計(jì)相關(guān)信息均存儲(chǔ)在軟件知識(shí)庫(kù)中。通常在對(duì)軟件系統(tǒng)框架理解中會(huì)從框架源代碼入手,采用假設(shè)-比較-調(diào)查-再研究這一循環(huán)研究方式對(duì)軟件框架進(jìn)行解讀,最終達(dá)到完全理解框架的目的。在不同的框架解讀環(huán)節(jié),需要做的工作不同。
首先,假設(shè)階段需要對(duì)軟件系統(tǒng)總系統(tǒng)與子系統(tǒng)交互關(guān)系進(jìn)行假設(shè)。軟件開發(fā)人員可以利用陳舊的系統(tǒng)文檔或者同高級(jí)技術(shù)人員進(jìn)行交流,對(duì)相似軟件系統(tǒng)結(jié)構(gòu)進(jìn)行推測(cè),并根據(jù)推測(cè)形成對(duì)軟件系統(tǒng)框架的初步假設(shè)與理解[4]。例如,在對(duì)操作系統(tǒng)分析中,技術(shù)開發(fā)人員會(huì)對(duì)系統(tǒng)可以實(shí)現(xiàn)的功能,對(duì)各個(gè)子系統(tǒng)之間交互關(guān)系進(jìn)行驗(yàn)證分析。其次,比較階段對(duì)已經(jīng)提出的假設(shè)進(jìn)行求證。這一環(huán)節(jié)需要對(duì)比系統(tǒng)框架建設(shè)與系統(tǒng)實(shí)際功能實(shí)現(xiàn)的統(tǒng)一性。再次,調(diào)查階段屬于軟件框架解構(gòu)最為耗時(shí)的階段。此時(shí)開發(fā)人員以各子系統(tǒng)之間差異與關(guān)系分析為目的,對(duì)預(yù)測(cè)的子系統(tǒng)之間交互關(guān)系進(jìn)行測(cè)試,并在測(cè)試中準(zhǔn)確判斷兩個(gè)子系統(tǒng)或者多個(gè)子系統(tǒng)之間存在的關(guān)系的真實(shí)性,通常此階段主要運(yùn)用的方式包括查看設(shè)計(jì)文檔、源代碼、向高級(jí)技術(shù)人員詢問(wèn)等方式。為了節(jié)省開發(fā)人員在調(diào)查過(guò)程中所需要的時(shí)間,研究中使用的數(shù)據(jù)挖掘技術(shù)采用軟件反射框架方法,并在此基礎(chǔ)上增加源代碼啟發(fā)式方法,以實(shí)現(xiàn)快速幫助開發(fā)人員了解軟件系統(tǒng)框架的目的[5]。
2.2 ?反射框架分析
反射框架分析為軟件框架解構(gòu)主要應(yīng)用辦法,此處對(duì)數(shù)據(jù)挖掘與應(yīng)用更為深入,具體如圖2所示。
圖2表明軟件開發(fā)技術(shù)人員可以利用從軟件中獲取的相關(guān)軟件系統(tǒng)認(rèn)知,對(duì)軟件各子系統(tǒng)之間交互關(guān)系進(jìn)行初步判斷,并建立實(shí)際系統(tǒng)的目錄中源代碼、系統(tǒng)文件的映射關(guān)系,后對(duì)形成的概念框架與圖實(shí)體框架進(jìn)行對(duì)比,分析二者之間存在的差異,進(jìn)而分析軟件各子系統(tǒng)之間已經(jīng)被證實(shí)存在的交互關(guān)系、未預(yù)測(cè)的交互關(guān)系、缺失的交互關(guān)系等。通過(guò)這種反射框架有利于軟件技術(shù)開發(fā)人員更為深入掌握軟件系統(tǒng)框架實(shí)際情況,并不斷掌握軟件各子系統(tǒng)之間準(zhǔn)確的交互關(guān)系[6]。在實(shí)際軟件設(shè)計(jì)過(guò)程中根據(jù)軟件系統(tǒng)各個(gè)功能的深入開發(fā),對(duì)當(dāng)前軟件系統(tǒng)各子模塊交互關(guān)系進(jìn)行調(diào)整,以使得子系統(tǒng)交互可以達(dá)到預(yù)定功能的目的。因此在子系統(tǒng)關(guān)系探究上,除了是對(duì)當(dāng)前系統(tǒng)框架進(jìn)行掌握外,也是對(duì)系統(tǒng)功能拓展開發(fā)的重要環(huán)節(jié)??梢酝ㄟ^(guò)刪除或者增加軟件各子系統(tǒng)的交互關(guān)系實(shí)現(xiàn)對(duì)整體軟件系統(tǒng)功能的進(jìn)一步完善[7]。具體分析源代碼為:
// 真正的make方法,它直接調(diào)用了resolve繼續(xù)去實(shí)現(xiàn)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)) {
// 實(shí)例化具體實(shí)例 (實(shí)際并不是實(shí)例化,而是通過(guò)反射“解刨”了)
$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 ());
}
// 實(shí)例化反射類
$reflector = new ReflectionClass($concrete);
// 檢查類是否可實(shí)例化
if (! $reflector->isInstantiable()) {
return $this->notInstantiable($concrete);
}
$this->buildStack[] = $concrete;
// 獲取類的構(gòu)造函數(shù)
$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);
// 從給出的參數(shù)創(chuàng)建一個(gè)新的類實(shí)例。
return $reflector->newInstanceArgs($instances);
}
2.3 ?靜態(tài)依賴圖(源代碼)應(yīng)用
無(wú)論是計(jì)算機(jī)軟件亦或是手機(jī)APP等軟件,在開發(fā)過(guò)程中軟件系統(tǒng)是不斷演化的,以滿足不斷變化的用戶需求,保持軟件始終具有較強(qiáng)的競(jìng)爭(zhēng)力,盡可能延長(zhǎng)軟件的生命周期。因此,在軟件更新過(guò)程中軟件開發(fā)技術(shù)人員需要對(duì)軟件源代碼進(jìn)行更新,而一般一款軟件在源代碼更新上并非是一人或者同一批技術(shù)人員可以完成的,往往需要諸多軟件開發(fā)技術(shù)人員參與,為了避免不同軟件開發(fā)技術(shù)人員在軟件開發(fā)中出現(xiàn)個(gè)體化差異而影響軟件代碼更新,在實(shí)際軟件工程中會(huì)運(yùn)用SVN對(duì)軟件版本進(jìn)行控制,以明確記錄軟件系統(tǒng)源代碼修改及更新的具體情況,這些記錄軟件系統(tǒng)更新、修改等信息會(huì)存儲(chǔ)在SVN庫(kù)中[8]??紤]到SVN存儲(chǔ)的文件信息并不能準(zhǔn)確描述系統(tǒng)層次關(guān)系,因此使用相適宜的源代碼實(shí)體,可準(zhǔn)確判斷是刪除依賴關(guān)系或者是添加依賴關(guān)系。之后將特征屬性關(guān)聯(lián)到相應(yīng)的映射源代碼實(shí)體上,如此一來(lái)再對(duì)系統(tǒng)進(jìn)行更新更加簡(jiǎn)單易于操作[9]。
為了實(shí)現(xiàn)靜態(tài)依賴關(guān)系圖自動(dòng)添加,對(duì)SVN庫(kù)中數(shù)據(jù)進(jìn)行分析。主要分為兩個(gè)步驟:
(1)對(duì)源代碼文件不同歷史版本進(jìn)行識(shí)別,并準(zhǔn)確識(shí)別源代碼實(shí)體(已經(jīng)定義),記錄已經(jīng)定義源代碼實(shí)體的內(nèi)容與名字。例如,在庫(kù)中存在兩個(gè)B版本的文件,初始版本中該文件有函數(shù)4個(gè),第二個(gè)版本中函數(shù)增加了一個(gè)新的函數(shù),有5個(gè)函數(shù)。進(jìn)而通過(guò)這些源代碼實(shí)體,比對(duì)初始版本可以準(zhǔn)確掌握軟件系統(tǒng)更新與修改情況。
(2)采用歷史符號(hào)標(biāo)記表,對(duì)相同版本源代碼文件的不同歷史版本進(jìn)行重新定義,進(jìn)而實(shí)現(xiàn)對(duì)系統(tǒng)不同版本源代碼實(shí)體的多個(gè)歷史版本快照。通過(guò)對(duì)SVN庫(kù)中源代碼文件不同歷史版本記錄比對(duì),將源代碼注解到某一個(gè)歷史版本刪除或者新增交互關(guān)系上,進(jìn)而通過(guò)源代碼注解情況分析不同歷史版本之間交互關(guān)系,如圖3所示。再之后,逐漸分析不同歷史版本交互關(guān)系圖,獲得一個(gè)軟件工程項(xiàng)目周期內(nèi)各系統(tǒng)歷史交互關(guān)系圖。借助軟件系統(tǒng)歷史交互關(guān)系圖,便于軟件技術(shù)開發(fā)人員掌握軟件各系統(tǒng)具體交互關(guān)系,并通過(guò)源代碼注解讀取,使得軟件技術(shù)開發(fā)人員可更為快速掌握軟件系統(tǒng)框架層次情況[10]。
3 ?GBOMC軟件系統(tǒng)簡(jiǎn)化案例
3.1 ?GBOMC軟件靜態(tài)依賴圖應(yīng)用過(guò)程
為了盡可能節(jié)省軟件系統(tǒng)代碼簡(jiǎn)化過(guò)程中可能出現(xiàn)的重復(fù)工作等,提高軟件系統(tǒng)開發(fā)與優(yōu)化效率,對(duì)GBOMC軟件系統(tǒng)進(jìn)行實(shí)驗(yàn),由于這個(gè)軟件此系統(tǒng)代碼庫(kù)數(shù)據(jù)繁多,利用如上靜態(tài)依賴圖自動(dòng)添加流程逐漸構(gòu)建歷史交互圖用時(shí)1.2小時(shí),并將最終生成的歷史系統(tǒng)交互圖結(jié)果存儲(chǔ)在XML文件中。在對(duì)該GBOMC軟件系統(tǒng)交互關(guān)系調(diào)查中,一直重復(fù)使用XML文件,大大節(jié)省了系統(tǒng)層次結(jié)構(gòu)所需要的時(shí)間。隨著軟件系統(tǒng)不斷地發(fā)展,為初始版XML文件添加相對(duì)應(yīng)源代碼注解,并在XML文件SVN庫(kù)更新上,使用優(yōu)化的gSpan算法,有效降低重復(fù)圖出現(xiàn)的概率,確保依賴圖完全集,具體代碼為:
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;
通過(guò)以上優(yōu)化的gSpan算法可以使得對(duì)軟件系統(tǒng)各子系統(tǒng)交互關(guān)系理解更簡(jiǎn)便,同時(shí)通過(guò)一個(gè)系統(tǒng)源代碼實(shí)體的更改可以實(shí)現(xiàn)對(duì)多個(gè)子系統(tǒng)相關(guān)源代碼實(shí)體的更改,更為高效率更新軟件系統(tǒng)代碼。
3.2 ?GBOMC軟件應(yīng)用靜態(tài)依賴圖后測(cè)試
測(cè)試環(huán)境為:
(1)軟件:Windows 10,Eclipse軟件平臺(tái),Java編寫算法。
(2)硬件:1 GB內(nèi)存、PM 1.6 GHZ CPU、80 GB硬盤、筆記本電腦。
測(cè)試結(jié)果如表1與表2所示,結(jié)果顯示此種方式算法性能較優(yōu)、修改歷史記錄完整,有一定深入研究與應(yīng)用價(jià)值。
4 ?結(jié) ?論
筆者以軟件知識(shí)庫(kù)為例分析數(shù)據(jù)挖掘技術(shù)在軟件知識(shí)庫(kù)中的應(yīng)用,分析軟件解構(gòu)、反射框架、靜態(tài)依賴圖(源代碼)應(yīng)用等,并對(duì)使用的靜態(tài)依賴圖應(yīng)用方式進(jìn)行測(cè)試,此種方式算法性能優(yōu)越,準(zhǔn)確性高,可以實(shí)現(xiàn)對(duì)系統(tǒng)的進(jìn)一步開發(fā),應(yīng)用價(jià)值較高。
參考文獻(xiàn):
[1] 張勇.軟件工程行業(yè)中數(shù)據(jù)挖掘的應(yīng)用探討 [J].中國(guó)新通信,2018,20(5):89.
[2] 段彬,魏巍.數(shù)據(jù)挖掘在軟件工程領(lǐng)域中的應(yīng)用淺析 [J].信息系統(tǒng)工程,2018(4):89.
[3] 李喆.數(shù)據(jù)挖掘技術(shù)在軟件工程中的應(yīng)用研究 [J].數(shù)碼設(shè)計(jì)(下),2019(11):216-217.
[4] 黃智聰.數(shù)據(jù)挖掘技術(shù)在軟件工程中的應(yīng)用 [J].數(shù)字化用戶,2019,25(17):104.
[5] 錢曉軍,范冬萍,吉根林.物聯(lián)網(wǎng)差異數(shù)據(jù)庫(kù)中的故障數(shù)據(jù)快速挖掘仿真 [J].計(jì)算機(jī)仿真,2016,33(1):301-304.
[6] 黃煒.基于數(shù)據(jù)挖掘技術(shù)的計(jì)算機(jī)網(wǎng)絡(luò)病毒防御系統(tǒng)設(shè)計(jì) [J].機(jī)電信息,2020(23):140-141.
[7] 鄭幸源,洪親,蔡堅(jiān)勇,等.基于AJAX異步傳輸技術(shù)與Echarts3技術(shù)的動(dòng)態(tài)數(shù)據(jù)繪圖實(shí)現(xiàn) [J].軟件導(dǎo)刊,2017,16(3):143-145.
[8] 寧德軍,葉培根,劉琴,等.基于存儲(chǔ)庫(kù)數(shù)據(jù)挖掘的開源軟件成功度量方法 [J].電子學(xué)報(bào),2018,46(12):2930-2935.
[9] 張波,李舸.基于改進(jìn)聚類算法的Web異常數(shù)據(jù)挖掘軟件設(shè)計(jì) [J].現(xiàn)代電子技術(shù),2019,42(8):73-76+81.
[10] 梁藝瓊.基于數(shù)據(jù)挖掘技術(shù)的輿情分析系統(tǒng)的設(shè)計(jì) [J].電腦知識(shí)與技術(shù),2020,16(3):1-2.
作者簡(jiǎn)介:張海霞(1979.12—),男,漢族,湖北荊州人,講師,碩士研究生,研究方向:軟件工程。