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