徐思婕
(哈爾濱工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 黑龍江省哈爾濱市 150001)
由于信息技術(shù)的不斷發(fā)展和進(jìn)步,每天都有大量的軟件問(wèn)世,軟件復(fù)雜程度也不斷提升,在互聯(lián)網(wǎng)技術(shù)的支持之下,基本上所有軟件都可以聯(lián)網(wǎng),網(wǎng)絡(luò)雖然給軟件的使用帶來(lái)了諸多便利,但是其弊端即軟件缺陷也逐漸暴露出來(lái)了,軟件缺陷對(duì)人們生活的方方面面都產(chǎn)生了極為深刻的影響。為了降低軟件缺陷對(duì)軟件使用效果產(chǎn)生的影響,為廣大用戶(hù)提供更加便捷優(yōu)質(zhì)的服務(wù),文章嘗試對(duì)一種基于關(guān)聯(lián)規(guī)則的網(wǎng)絡(luò)軟件缺陷預(yù)測(cè)方法進(jìn)行分析和論述。該研究是建立在前人理論與實(shí)踐分析基礎(chǔ)之上提出來(lái)的。據(jù)相關(guān)學(xué)者研究表明,當(dāng)前對(duì)軟件缺陷進(jìn)行研究的主要是基于統(tǒng)計(jì)分析學(xué)方法、神經(jīng)網(wǎng)絡(luò)的軟件缺陷預(yù)測(cè)模型、機(jī)器學(xué)習(xí)算法等。在具體的測(cè)試過(guò)程中不同的研究方法所產(chǎn)生的作用效果有著較大的差異。而本文在深入總結(jié)前人研究的基礎(chǔ)之上,認(rèn)為可以運(yùn)用關(guān)聯(lián)規(guī)則對(duì)網(wǎng)絡(luò)軟件缺陷進(jìn)行分析和預(yù)測(cè),當(dāng)前關(guān)聯(lián)規(guī)則廣泛應(yīng)用于商業(yè)、移動(dòng)通信以及網(wǎng)絡(luò)安全等領(lǐng)域,其以數(shù)據(jù)為基礎(chǔ),通過(guò)深入的分析和挖掘網(wǎng)絡(luò)數(shù)據(jù)之間潛在的聯(lián)系,對(duì)可能存在的缺陷進(jìn)行分析。
軟件缺陷預(yù)測(cè)技術(shù)對(duì)于提高軟件質(zhì)量,保證軟件可靠性有著重要的意義。從上述國(guó)內(nèi)外的研究現(xiàn)狀可以看出,目前研究者已經(jīng)在軟件缺陷預(yù)測(cè)領(lǐng)域取得了豐碩的研究成果,但是仍存在一些不足,主要體現(xiàn)在以下兩點(diǎn)。
(1)類(lèi)不平衡問(wèn)題和維度爆炸影響軟件缺陷預(yù)測(cè)模型的精度。特征選擇是解決維度爆炸問(wèn)題的一種有效手段,通過(guò)特征選擇篩除冗余特征和無(wú)關(guān)特征,選取最優(yōu)特征子集,提高軟件缺陷預(yù)測(cè)模型的效果。但當(dāng)前的研究方法中在特征選擇階段未考慮到軟件缺陷數(shù)據(jù)集中的類(lèi)不平衡問(wèn)題,類(lèi)不平衡問(wèn)題會(huì)導(dǎo)致預(yù)測(cè)模型在缺陷模塊的識(shí)別率較低,在一定程度上阻礙了軟件缺陷預(yù)測(cè)模型的效果。
(2)軟件漏洞是一種特殊的軟件缺陷,其成因與程序語(yǔ)義信息密切相關(guān)。傳統(tǒng)的軟件缺陷預(yù)測(cè)技術(shù)利用軟件度量等專(zhuān)家定義的特征來(lái)構(gòu)建機(jī)器學(xué)習(xí)模型實(shí)現(xiàn)軟件缺陷預(yù)測(cè),然而軟件度量?jī)H是對(duì)軟件規(guī)模和性質(zhì)的量化,未考慮源代碼中函數(shù)調(diào)用關(guān)系、數(shù)據(jù)流等語(yǔ)義信息,不能準(zhǔn)確的刻畫(huà)漏洞的行為模式,因此并不適用于軟件漏洞預(yù)測(cè)。深度學(xué)習(xí)算法在代碼的語(yǔ)義特征提取和表達(dá)方面表現(xiàn)優(yōu)越,但不擅長(zhǎng)分類(lèi)問(wèn)題,因此難以達(dá)到很好的漏洞預(yù)測(cè)效果。

圖1:網(wǎng)絡(luò)軟件缺陷預(yù)測(cè)架構(gòu)

圖2
網(wǎng)絡(luò)軟件缺陷預(yù)測(cè)過(guò)程中,由于數(shù)據(jù)分布、數(shù)據(jù)特征、軟件質(zhì)量等多種因素的影響,可能會(huì)導(dǎo)致預(yù)測(cè)算法或者是模型與實(shí)際預(yù)算存在顯著差異。在實(shí)際測(cè)試過(guò)程中,為了保證測(cè)試的準(zhǔn)確性,通常會(huì)將所選取的數(shù)據(jù)樣本分為有效數(shù)據(jù)樣本與失效數(shù)據(jù)樣本兩大類(lèi),而在測(cè)試過(guò)程中重點(diǎn)就在于分析失效數(shù)據(jù)樣本,明確數(shù)據(jù)失效的原因,是了解缺陷發(fā)生原因、特征以及規(guī)律的關(guān)鍵所在。
當(dāng)前在進(jìn)行軟件缺陷預(yù)測(cè)分析時(shí),主要有神經(jīng)網(wǎng)絡(luò)算法、貝葉斯網(wǎng)絡(luò)、機(jī)器學(xué)習(xí)法、遷移學(xué)習(xí)等。在該領(lǐng)域有所研究的學(xué)者和專(zhuān)家借助這些研究方法取得了諸多研究成果。但是,這些預(yù)測(cè)方法在應(yīng)用的時(shí)候卻并沒(méi)有充分的考慮到外部環(huán)境中影響軟件質(zhì)量、可靠性等不確定性因素,對(duì)于這些因素考慮少,勢(shì)必會(huì)降低缺陷預(yù)測(cè)結(jié)果的準(zhǔn)確性,如軟件的內(nèi)部缺陷就難以有效的被上述預(yù)測(cè)方法預(yù)測(cè)出來(lái)。基于關(guān)聯(lián)規(guī)則的網(wǎng)絡(luò)軟件預(yù)測(cè)缺陷方法,其運(yùn)用優(yōu)勢(shì)就在于其不再只是單獨(dú)的對(duì)有效數(shù)據(jù)樣本進(jìn)行預(yù)測(cè)分析,同時(shí)其也充分的考慮到了失效數(shù)據(jù)樣本,注重對(duì)兩種數(shù)據(jù)樣本同時(shí)進(jìn)行分析和預(yù)測(cè),這樣做的優(yōu)勢(shì)在于可以有效的降低預(yù)測(cè)偏差,優(yōu)化預(yù)測(cè)結(jié)果。
一般來(lái)說(shuō),網(wǎng)絡(luò)軟件缺陷預(yù)測(cè)模型的架構(gòu)可以分為缺陷數(shù)據(jù)采集、缺陷數(shù)據(jù)預(yù)處理、引入預(yù)測(cè)算法、預(yù)測(cè)模型構(gòu)建、預(yù)測(cè)模型測(cè)試與驗(yàn)證五個(gè)部分,其模型架構(gòu)如圖1 所示。
在對(duì)目標(biāo)軟件的源代碼或者是缺陷軟件數(shù)據(jù)庫(kù)中的樣本進(jìn)行采集、然后統(tǒng)一分析和處理,將關(guān)聯(lián)規(guī)則算法引入到數(shù)據(jù)樣本分析之中,對(duì)數(shù)據(jù)樣本內(nèi)容進(jìn)行有效的計(jì)算和分析,然后快速的生成預(yù)測(cè)模型。在具體的預(yù)測(cè)過(guò)程中可以嘗試多種參數(shù)值,反復(fù)預(yù)測(cè),以便獲得更加真實(shí)的數(shù)據(jù)結(jié)果,提高預(yù)測(cè)的準(zhǔn)確性,減少外界因素對(duì)預(yù)測(cè)產(chǎn)生的干擾。
分類(lèi)關(guān)聯(lián)規(guī)則可以全面真實(shí)的反映出數(shù)據(jù)的描述性關(guān)聯(lián)特性以及可以用于分類(lèi)的特征。如關(guān)聯(lián)規(guī)則X=>Y,其中X 為前置事件,表示數(shù)據(jù)描述性關(guān)聯(lián)規(guī)則,Y 為后置事件,表示分類(lèi)特征。如“respect>0.5127oravg>0.2563=>result=1”中,前置事件為“respect>0.5127oravg>0.2563”,后置事件為“result=1”。關(guān)聯(lián)分類(lèi)法應(yīng)用的基本過(guò)程中,可以分為以下幾個(gè)步驟,即對(duì)所收集到的數(shù)據(jù)進(jìn)行離散化處理;在離散化處理完畢之后,獲取關(guān)聯(lián)分類(lèi)規(guī)則;然后再采用分類(lèi)器構(gòu)建算法構(gòu)造分類(lèi)器;最后利用構(gòu)造的分類(lèi)器進(jìn)行更加深入的研究和實(shí)驗(yàn)。
在應(yīng)用關(guān)聯(lián)規(guī)則的生成算法時(shí),可以將Apriori 算法或者是FPTree 算法融入其中,借助該算法對(duì)可以生出更加具有規(guī)則性的集合,其中,置信度由c 表示、支持度由s 表示,前置的相關(guān)定理如下所示:
定理1 假設(shè)x 和y 是數(shù)據(jù)集中的項(xiàng)目集中的項(xiàng)目集,如果x∈y,同時(shí)y 為大項(xiàng)目集的情況下,那么就說(shuō)明X 也是大項(xiàng)目集,反之相關(guān)關(guān)系則不成立。
定理2 假設(shè)x=>y,那么對(duì)應(yīng)的項(xiàng)目集則是x∪y,這種情況下也一定是一個(gè)大項(xiàng)目集,反之則說(shuō)明大項(xiàng)目集不成立。
在缺陷預(yù)測(cè)期間,通過(guò)對(duì)數(shù)據(jù)的分析記錄,對(duì)各個(gè)激勵(lì)進(jìn)行關(guān)聯(lián)規(guī)則的計(jì)算,最終形成一個(gè)結(jié)論集,通過(guò)該結(jié)論集為后期的分類(lèi)關(guān)聯(lián)規(guī)則生成奠定良好的基礎(chǔ)。
為了更好的驗(yàn)證基于關(guān)聯(lián)規(guī)則的網(wǎng)絡(luò)軟件缺陷預(yù)測(cè)方法的有效性:文章嘗試以具體的案例作為實(shí)驗(yàn)研究對(duì)象,本案例研究由以下三個(gè)步驟組成。如圖2 為基于CAT 靜態(tài)分析工具的檢索結(jié)果。
(1)缺陷檢索。圖2 左上角顯示了一個(gè)C#的源代碼文件,包含了循環(huán)結(jié)構(gòu)和選擇結(jié)構(gòu)。通過(guò)靜態(tài)分析,可以注意到有四個(gè)缺陷,并且給出相關(guān)的語(yǔ)法規(guī)則。如果用戶(hù)選擇一個(gè)缺陷,該工具將顯示該缺陷的詳細(xì)信息。在這一部分中可以發(fā)現(xiàn)這個(gè)缺陷的一些屬性,如目標(biāo),身份,位置等。對(duì)用戶(hù)來(lái)說(shuō)更意外的是,該工具提供了這個(gè)缺陷的解決方案,以便于調(diào)試方便用戶(hù)。
(2)錯(cuò)誤分類(lèi),通過(guò)基于CAT 的靜態(tài)分析,發(fā)現(xiàn)了一些缺陷。為了調(diào)試這些缺陷,用戶(hù)需要知道缺陷屬于哪個(gè)類(lèi)型。因此,有必要進(jìn)行分類(lèi)過(guò)程,根據(jù)缺陷規(guī)則,這些缺陷被分類(lèi)。例如,缺陷“arg(字符串)”(缺陷的實(shí)名)被安排為類(lèi)型二,和類(lèi)型三(非可執(zhí)行節(jié)點(diǎn))。因?yàn)槠渌毕莶环先毕菀?guī)則,所以它們被歸類(lèi)為其他缺陷。
(3)反饋。為了提高缺陷檢索的準(zhǔn)確性,識(shí)別這些缺陷是很重要的。因此,需要邀請(qǐng)一些有經(jīng)驗(yàn)的開(kāi)發(fā)人員來(lái)決定這些缺陷的真相。當(dāng)開(kāi)發(fā)人員單擊按鈕(評(píng)級(jí))時(shí),就可以選擇相關(guān)的項(xiàng)目來(lái)判斷所選缺陷的真實(shí)性。
現(xiàn)如今,人們的生產(chǎn)生活可以說(shuō)已經(jīng)離不開(kāi)網(wǎng)絡(luò)軟件了,許多網(wǎng)絡(luò)軟件上還包含有用戶(hù)的各種隱私信息,如果軟件存在有多種缺陷,那么用戶(hù)的人身以及財(cái)產(chǎn)安全就將會(huì)因此而受到影響。所以說(shuō),對(duì)網(wǎng)絡(luò)軟件缺陷進(jìn)行預(yù)測(cè)就顯得極為有必要了。當(dāng)前,用于網(wǎng)絡(luò)軟件缺陷預(yù)測(cè)的方法多種多樣,而相較于其他的預(yù)測(cè)方法來(lái)說(shuō),關(guān)聯(lián)規(guī)則的優(yōu)勢(shì)就在于其使得預(yù)測(cè)的精確度更高,可以對(duì)軟件進(jìn)行全方面的分析和評(píng)估,在對(duì)缺陷進(jìn)行準(zhǔn)確預(yù)測(cè)之后,可以有針對(duì)性的對(duì)軟件存在的不足予以?xún)?yōu)化和調(diào)整,進(jìn)而給予用戶(hù)更好的軟件使用體驗(yàn)。