孫鵬飛
(洛陽職業(yè)技術(shù)學(xué)院,河南 洛陽 471099)
軟件工程在很多領(lǐng)域都有良好的應(yīng)用,為人們生產(chǎn)、生活、學(xué)習(xí)和教育等方面提供了便利條件,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,現(xiàn)有的軟件工程管理技術(shù),已經(jīng)難以滿足資源管理的需求。數(shù)據(jù)挖掘技術(shù)的出現(xiàn),可有效解決這一問題。通過數(shù)據(jù)挖掘技術(shù)可大幅度提升數(shù)據(jù)采集、數(shù)據(jù)分析、數(shù)據(jù)匯總、數(shù)據(jù)處理以及數(shù)據(jù)管理的效率和質(zhì)量,從海量數(shù)據(jù)庫中,快速提取有利于軟件設(shè)計(jì)、開發(fā)、管理的數(shù)據(jù),既能降低軟件工程的研發(fā)成本,還能提升軟件工程質(zhì)量,對軟件事業(yè)的發(fā)展有良好的推動作用?;诖?,開展數(shù)據(jù)挖掘技術(shù)在軟件工程中的應(yīng)用研究具有非常重要的意義。
在軟件工程應(yīng)用數(shù)據(jù)挖掘技術(shù)時(shí),其應(yīng)用過程可細(xì)分為三個(gè)步驟:數(shù)據(jù)準(zhǔn)備、規(guī)律發(fā)現(xiàn)和表示規(guī)律。
在數(shù)據(jù)準(zhǔn)備環(huán)節(jié),其主要的目標(biāo)是對原始數(shù)據(jù)庫中的各項(xiàng)數(shù)據(jù)進(jìn)行處理,確定挖掘的目標(biāo)或者對象,對有效的數(shù)據(jù)進(jìn)行分離,而且在數(shù)據(jù)準(zhǔn)備階段,還涉及到對原始數(shù)據(jù)庫中數(shù)據(jù)的清理,要清除那些無用的數(shù)據(jù),并對缺失的數(shù)據(jù)進(jìn)行補(bǔ)充,以便能夠形成相對完整的數(shù)據(jù)鏈條,為軟件的研發(fā)、設(shè)計(jì)、運(yùn)行、評測和管理等提供必要的數(shù)據(jù)支持。
在規(guī)律發(fā)現(xiàn)環(huán)節(jié),為更好地保證數(shù)據(jù)挖掘質(zhì)量,需要準(zhǔn)備環(huán)節(jié)提供的數(shù)據(jù)進(jìn)行科學(xué)合理的分類、歸納和總結(jié),選擇出有針對性的挖掘方法,并結(jié)合數(shù)據(jù)的特點(diǎn)以及軟件工程的實(shí)際要求,合理調(diào)整數(shù)據(jù)挖掘方法,保證數(shù)據(jù)挖掘的有效性。
在表示規(guī)律環(huán)節(jié),為保證數(shù)據(jù)挖掘結(jié)果表達(dá)的完整性,可通過知識表示方式,或者是模型評價(jià)方法,將挖掘到的數(shù)據(jù)展示出來,以便軟件工程工作人員能夠在數(shù)據(jù)結(jié)構(gòu)的支持和引導(dǎo)下,有針對性地開展軟件研發(fā)、設(shè)計(jì)、測評和管理等工作,促使后期各道工序能夠有序開展。
軟件工程的性能不同,對數(shù)據(jù)的要求不同,適用的數(shù)據(jù)挖掘技術(shù)也不相同,需要根據(jù)實(shí)際情況,合理選擇數(shù)據(jù)挖掘技術(shù),才能獲得更加全面、完整的數(shù)據(jù)。
遺傳算法是數(shù)據(jù)挖掘技術(shù)的關(guān)鍵技術(shù),主要是以達(dá)爾文的進(jìn)化原理為背景,算法求解也是一個(gè)不同繁衍、遺傳、淘汰和進(jìn)化的過程.
生物自然選擇和遺傳激勵(lì)的隨機(jī)搜索算法,是數(shù)據(jù)挖掘中常用的方法之一,和其他方法相比,遺傳算法最顯著的優(yōu)勢是雖然一些數(shù)據(jù)從表面上毫無關(guān)系,但在模型建立之間具有相互聯(lián)系,具有共同發(fā)展的特點(diǎn)。隨著遺傳基因技術(shù)的發(fā)展,軟件工程領(lǐng)域愈發(fā)重視遺傳算法的應(yīng)用。
決策樹通常應(yīng)用在數(shù)據(jù)分類和數(shù)據(jù)整合等方面,軟件工程從設(shè)計(jì)研發(fā)到后期運(yùn)行,會形成海量的數(shù)據(jù),數(shù)據(jù)量非常大,難以快速找到有價(jià)值的數(shù)據(jù)。而采用決策樹算法,可在極短的時(shí)間內(nèi)就找到關(guān)鍵信息,使信息的分類更加簡單,同時(shí)保證各項(xiàng)信息數(shù)據(jù)的準(zhǔn)確性。但也存在一定的缺點(diǎn),就是決策樹算法的抗噪性比較差,難以對復(fù)雜的數(shù)據(jù)進(jìn)行全面挖掘。
利用統(tǒng)計(jì)學(xué)和分析學(xué)相互結(jié)合的方法,來分析數(shù)據(jù)庫各字段之間存在的聯(lián)系,數(shù)據(jù)庫字段之間,既存在相關(guān)關(guān)系,也存在函數(shù)關(guān)系。函數(shù)關(guān)系主要是通過不同的函數(shù)來表示,相關(guān)關(guān)系則不能用函數(shù)表示。通過統(tǒng)計(jì)分析算法,可促使字段之間的關(guān)系更加清楚,從而提升數(shù)據(jù)挖掘的效率。
可視化技術(shù)的主要作用是將看不見的數(shù)據(jù),通過其他圖表或者是符號將其顯示出來,以便更好地理解數(shù)據(jù),一目了然地分析數(shù)據(jù),讓原本抽象的數(shù)據(jù),更加形象化、具體化[1]。常用的可視化方式包括尺寸可視化、顏色可視化、圖形可視化、空間可視化和概念可視化等。實(shí)現(xiàn)數(shù)據(jù)可視化常用的工具有Echart、FineBI 和PowerBI 等。
設(shè)計(jì)網(wǎng)絡(luò)技術(shù)也是數(shù)據(jù)挖掘技術(shù)的關(guān)鍵技術(shù),類似于人腦神經(jīng)元,以MP 模型和Hebb 學(xué)習(xí)規(guī)則為基礎(chǔ),通過一些具體的權(quán)值來表示數(shù)據(jù)。
一個(gè)完整的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)由三部分共同組成,紅色的是輸入層,綠色的是輸出層,紫色的是中間層(也叫隱藏層)。輸入層有3 個(gè)輸入單元,隱藏層有4個(gè)單元,輸出層有2 個(gè)單元。連接是神經(jīng)網(wǎng)絡(luò)的重中之重,每個(gè)連接之上都有一個(gè)權(quán)重,在數(shù)據(jù)挖掘中可通過訓(xùn)練算法,將權(quán)重值調(diào)整到最佳位置,從而快速檢索出有價(jià)值的數(shù)據(jù)。例如:如果用a 來表示輸入層,w 來表示權(quán)值,那么一個(gè)表示連接的有向箭頭,就可以解釋為,在初始端所傳遞的信號大小是a,中間權(quán)重值為w,經(jīng)過加權(quán)之后,此信號就會轉(zhuǎn)變?yōu)閍和w 的乘積,末端信號大小就是a×w。在神經(jīng)網(wǎng)絡(luò)中,每一個(gè)有向箭頭都表示權(quán)值的加權(quán)傳遞。
編碼是軟件工程的核心環(huán)節(jié),為給后期運(yùn)行提供必要的數(shù)據(jù)支持,需要對編碼的全過程進(jìn)行詳細(xì)記錄,以便能夠快速找到軟件程序代碼之間的相互關(guān)聯(lián)。在軟件編碼中會形成大量數(shù)據(jù),且都是有價(jià)值的數(shù)據(jù),可采用基于迭代模式挖掘算法來對編碼數(shù)據(jù)進(jìn)行全面挖掘,通過提前設(shè)定好的數(shù)據(jù)挖掘程序,對運(yùn)行軌跡數(shù)據(jù)進(jìn)行充分挖掘,從而獲得軟件程序運(yùn)行的時(shí)序模式。對軟件工程而言,運(yùn)行模式多為利用關(guān)聯(lián)規(guī)則中面向Aprior 的特性挖掘頻繁閉合時(shí)序項(xiàng)集模式[2]。如果將軟件編碼程序中每個(gè)調(diào)用定義為a1,i 為所有事項(xiàng)的組合集合,則Si=(a1,a2,a3,a4…),a就是程序一次運(yùn)行軌跡模式。除此算法之外,在軟件編碼中還有很多可用的數(shù)據(jù)挖掘技術(shù),如:復(fù)用模式算法、檢測API 潛在調(diào)用順序的算法等。這些算法都能對軟件編碼形成的數(shù)據(jù)進(jìn)行充分挖掘,需要結(jié)合軟件工程的實(shí)際情況,選擇有針對性的算法技術(shù)。
軟件調(diào)試也是軟件工程的主要環(huán)節(jié),整個(gè)調(diào)試過程由專業(yè)的軟件開發(fā)人員來完成,開展軟件調(diào)試的主要目的是發(fā)現(xiàn)軟件存在的問題和不足,然后及時(shí)調(diào)整,以全面提升軟件系統(tǒng)的實(shí)用價(jià)值,達(dá)到預(yù)期設(shè)計(jì)的要求。軟件調(diào)試是一項(xiàng)非常復(fù)雜且耗時(shí)非常長的工作,需要對代碼進(jìn)行逐行調(diào)試。如果軟件系統(tǒng)功能強(qiáng)大、結(jié)構(gòu)復(fù)雜,則軟件調(diào)試的難度和工作量也會成倍提升。軟件調(diào)試不僅僅需要分析軟件系統(tǒng)存在的問題,還要對形成的錯(cuò)誤報(bào)告進(jìn)行分析,定位軟件的錯(cuò)誤信息,并采取一定的方法和措施來糾正錯(cuò)誤信息。
將數(shù)據(jù)挖掘技術(shù)應(yīng)用到軟件調(diào)試中,可大幅度提升調(diào)試的效率,降低調(diào)試的難度,減少軟件調(diào)試的工作量。例如:在軟件系統(tǒng)漏洞調(diào)試中,應(yīng)用數(shù)據(jù)挖掘技術(shù)可快速定位漏洞的位置,并明確漏洞的種類。在具體應(yīng)用中,要先確定軟件工程調(diào)試的對象,然后再結(jié)合用戶對軟件的需求,確定調(diào)試方法,制定調(diào)試方案和計(jì)劃。在軟件系統(tǒng)漏洞調(diào)試中可選擇的數(shù)據(jù)挖掘技術(shù)比較多,如:自動分類方法、半自動分類方法和bug 報(bào)告篩選等[3]。每種方法都有其獨(dú)特的優(yōu)勢和不足,可選擇其中的一種進(jìn)行檢測,也可以選擇兩種或者兩種以上的方法同時(shí)使用。選擇好檢測調(diào)試方法之后,再用數(shù)據(jù)挖掘技術(shù)來采集軟件工程的相關(guān)數(shù)據(jù),按照既定的方案和計(jì)劃,對挖掘到的數(shù)據(jù)進(jìn)行全面清理和轉(zhuǎn)移,清除掉多余的數(shù)據(jù),補(bǔ)充丟失的數(shù)據(jù),再選擇出和軟件漏洞檢測調(diào)試相適宜的數(shù)據(jù)模型,進(jìn)行分析檢驗(yàn),就能快速完成軟件漏洞的檢測調(diào)試,如果存在漏洞,還能對漏洞進(jìn)行定位,分析漏洞的種類,為修復(fù)漏洞提供數(shù)據(jù)支持。
由于開發(fā)人員的局限性,開發(fā)的軟件難免會存在一定的漏洞或者錯(cuò)誤,如果不能及時(shí)檢測出來,就會對用戶造成嚴(yán)重影響,甚至是無法挽回的損失。1996 年,因軟件漏洞未被檢測出來,致使美國一艘航天飛船直接墜毀,對美國航天事業(yè)造成了巨大打擊。錯(cuò)誤檢測是每款軟件在投入應(yīng)用前,必須進(jìn)行檢測的內(nèi)容,耗時(shí)非常長,錯(cuò)誤檢測耗時(shí)占軟件工程研發(fā)總時(shí)長的30%以上[4]。將數(shù)據(jù)挖掘技術(shù)應(yīng)用到軟件工程錯(cuò)誤檢測中,可大幅度提升錯(cuò)誤檢測的效率,縮短檢測時(shí)長,促使軟件工程能夠盡快投入使用,形成經(jīng)濟(jì)效益。數(shù)據(jù)挖掘技術(shù)在軟件錯(cuò)誤檢測中的應(yīng)用方式主要有三種,一是從源代碼中推演錯(cuò)誤;二是對存在的錯(cuò)誤粘貼,再進(jìn)行檢測;三是函數(shù)匹配檢測。這三種應(yīng)用方法各有優(yōu)勢,其中源代碼錯(cuò)誤檢測的應(yīng)用次數(shù)最多。
先通過頻繁項(xiàng)集挖掘算法從軟件源代碼中找到頻繁項(xiàng)集,以及滿足最小支持度的程序規(guī)則,再按照軟件程序?qū)σ?guī)則的遵守程度進(jìn)行推演,如果發(fā)現(xiàn)只有少部分不遵循程序,則可能的錯(cuò)誤是該軟件系統(tǒng)中存在錯(cuò)誤的bug 規(guī)則,如在規(guī)則中,sosi-host-alloc-scsi-add-host 和scsi-scan-hostg 函數(shù)共計(jì)出現(xiàn)了27 次,scsi-host-alloc-scsi-add-host 只有2 個(gè)函數(shù)出現(xiàn),則這兩個(gè)函數(shù)就是錯(cuò)誤的bug。
軟件工程涉及范圍非常廣,影響因素比較多,從研發(fā)設(shè)計(jì)、投入使用以及后期運(yùn)行,會形成大量數(shù)據(jù),這些數(shù)據(jù)對軟件工程性能的提升,后期拓展升級等有非常重要的意義。但這些數(shù)據(jù)有的是有價(jià)值、有用的數(shù)據(jù),而有的則是毫無用處的數(shù)據(jù),如何放棄無用數(shù)據(jù),快速提取出有價(jià)值的數(shù)據(jù),是軟件工程領(lǐng)域亟待解決的問題。將數(shù)據(jù)挖掘技術(shù)應(yīng)用到軟件工程中,可大幅度提升數(shù)據(jù)采集、處理和分析的速度,提升數(shù)據(jù)使用質(zhì)量,從而不斷優(yōu)化軟件的性能,提供一個(gè)更加安全、便捷的軟件服務(wù)。