呂靜賢,韓 維,吳子辰,王晨飛,徐 胤
(1.國(guó)家電網(wǎng)有限公司客戶服務(wù)中心信息運(yùn)維中心,天津 300300;2.國(guó)網(wǎng)江蘇省電力有限公司信息通信分公司,江蘇 南京 210009)
針對(duì)軟件運(yùn)行缺陷檢測(cè)方法的研究,傳統(tǒng)方法采用一種基于秩和檢驗(yàn)的算法,該算法首先收集訓(xùn)練集和檢測(cè)樣本集的特征信息,分析出不同特征間的差異,并在開放源碼系統(tǒng)中進(jìn)行實(shí)驗(yàn),由分布特征得到的相似性權(quán)重與不對(duì)稱誤分類的代價(jià)密切相關(guān)[1]。通過效應(yīng)值A(chǔ)-統(tǒng)計(jì)檢驗(yàn)來評(píng)價(jià)檢測(cè)程度,評(píng)價(jià)顯著性檢驗(yàn)采用Wilcoxon 秩和檢驗(yàn)方法,由檢驗(yàn)結(jié)果可知,該方法檢測(cè)變量在目標(biāo)工程上的分布差異較大,無法達(dá)到較高的檢測(cè)精度[2]。使用靜態(tài)軟件缺陷檢測(cè)方法時(shí),先根據(jù)不同實(shí)際應(yīng)用場(chǎng)景設(shè)定軟件模塊的粒度,并從已標(biāo)記的軟件歷史倉(cāng)庫(kù)中提取出相應(yīng)的實(shí)例;其次,基于相關(guān)信息提取并分析軟件開發(fā)過程和軟件源代碼的特征,設(shè)計(jì)一種能有效反映軟件缺陷屬性的缺陷測(cè)量?jī)x,利用缺陷測(cè)量?jī)x設(shè)計(jì)一組軟件,并構(gòu)造一組軟件缺陷檢測(cè)數(shù)據(jù);最后,利用預(yù)處理方法構(gòu)造缺陷檢測(cè)數(shù)據(jù)集,并在應(yīng)用階段進(jìn)行測(cè)試。
針對(duì)不同的應(yīng)用場(chǎng)景,上述方法受數(shù)據(jù)集噪聲影響較大,檢測(cè)精度較低。為解決傳統(tǒng)方法中存在的問題,提出了一種基于機(jī)器學(xué)習(xí)的軟件運(yùn)行缺陷檢測(cè)方法。
軟件運(yùn)行缺陷聯(lián)合表示分類需先對(duì)無缺陷訓(xùn)練數(shù)據(jù)集進(jìn)行采樣,以構(gòu)建類別平衡訓(xùn)練數(shù)據(jù)[3];然后通過聯(lián)合表示法構(gòu)建基于聯(lián)合表示分類的學(xué)習(xí)器,獲取樣本數(shù)據(jù);最后,設(shè)計(jì)分類流程[4]。
1)采樣
構(gòu)建不同度量元特征向量最近鄰圖,在兩個(gè)度量元特征向量中增加一條結(jié)點(diǎn)變換曲線,計(jì)算鄰圖中的權(quán)重矩陣:
式(1)中,ai、aj分別表示兩個(gè)度量元特征向量;λ表示常量[5]。通過權(quán)重矩陣可構(gòu)建一個(gè)數(shù)據(jù)空間局部結(jié)構(gòu),利用該權(quán)重估計(jì)無缺陷訓(xùn)練數(shù)據(jù)集中候選軟件局部保留能力,只有少量度量元特征選入新構(gòu)建的平衡訓(xùn)練集中,使采集樣本平衡化[6]。
2)分類
式(2)中,‖y-Fg‖2表示類殘差[7-8]。令:
式(3)表示聯(lián)合投影矩陣,由于D獨(dú)立于y,所以可將其作為一個(gè)投影矩陣計(jì)算出來[9]。由于類殘差具有一定的鑒別能力,因此可計(jì)算每個(gè)類的正則化殘差值:
根據(jù)不同類的正則化殘差值,可將軟件缺陷樣本分配到最小正則化殘差值所對(duì)應(yīng)的類[10-12]。
采用施瓦茨信息準(zhǔn)則:
聚類是在全局范圍內(nèi)搜索的,具有良好性能,但對(duì)數(shù)據(jù)噪聲較敏感,如果數(shù)據(jù)存在噪聲,則將導(dǎo)致聚類不合理[16]。
數(shù)據(jù)集中所有樣本都是0~1 之間的模糊數(shù)值,屬于不同聚類形式,最終優(yōu)化目標(biāo)函數(shù)為:
其賦值計(jì)算公式為:
更新計(jì)算公式為:
為了消除依賴,將所有有缺陷模塊作為異常情況進(jìn)行處理,如果所有屬性都小于其相對(duì)應(yīng)的閾值,則該軟件模塊是無缺陷的;反之,如果所有屬性都大于相對(duì)應(yīng)閾值,那么該軟件模塊是有缺陷的[17-18]。
為了驗(yàn)證所提方法的有效性,進(jìn)行了對(duì)比實(shí)驗(yàn)。所研究的基于機(jī)器學(xué)習(xí)的軟件運(yùn)行缺陷檢測(cè)方法使用Python 語言來實(shí)現(xiàn),方法中涉及的來源包括baksmali.jar、androguard。在檢測(cè)方法有效性時(shí),對(duì)現(xiàn)實(shí)軟件中收到的800 個(gè)非惡意程序進(jìn)行檢測(cè)。實(shí)驗(yàn)系統(tǒng)主機(jī)內(nèi)存為4 GB,處理器型號(hào)為Intel Core i5-2400,開發(fā)環(huán)境為Ubuntu 15.10。
以表1 所示分類檢測(cè)結(jié)果作為評(píng)價(jià)指標(biāo)。
表1 評(píng)價(jià)指標(biāo)
真正例與總例的比值即為查準(zhǔn)率,計(jì)算公式為:
檢測(cè)總例與正例比值為查全率,計(jì)算公式為:
使用10 個(gè)開源數(shù)據(jù)集,分別為Ar1~5、JEdit4.0、JEdit4.2、JEdit4.3、Ant1.7、Tomcat6.0。這些數(shù)據(jù)來自于某家白色家電制造商嵌入式軟件,其中包含了30維向量,數(shù)據(jù)集中的軟件實(shí)體是否存在缺陷類別是已知的。在對(duì)這些數(shù)據(jù)集分析的基礎(chǔ)上,降低軟件實(shí)體特征集維數(shù),確定相關(guān)軟件度量。表2 描述了實(shí)驗(yàn)過程中使用的數(shù)據(jù)集。
表2 實(shí)驗(yàn)過程中使用的數(shù)據(jù)集
數(shù)據(jù)集困難程度是衡量數(shù)據(jù)集分類任務(wù)的一個(gè)指標(biāo),當(dāng)缺陷數(shù)據(jù)集分類難度高時(shí),區(qū)分存在缺陷和無缺陷軟件實(shí)體更難。由表2 可看出,所有數(shù)據(jù)集都是不平衡的,存在缺陷實(shí)例數(shù)量要小于無缺陷實(shí)體數(shù)量。從缺陷分類角度分析,JEdit4.3 和Tomcat6.0 是分類最難的數(shù)據(jù)集,由于其難度較高,因此,在數(shù)據(jù)集中所占比例較小。
對(duì)包含所有數(shù)據(jù)集的每一對(duì)特征進(jìn)行檢查,檢查結(jié)果如圖1 所示。
圖1 AUC曲線
該曲線經(jīng)過(0,0)、(1,1)這兩個(gè)點(diǎn)時(shí),AUC 值是被曲線包圍的下方面積,AUC 值越大,數(shù)據(jù)屬性就越穩(wěn)定。由曲線可確定軟件度量之間的依賴關(guān)系,得到p-values(1%×1%)都小于0.000 1,從而在顯著性水平為0.01(檢驗(yàn)要求較高時(shí),要求顯著性水平小于0.01)時(shí),確定不同缺陷特征統(tǒng)計(jì)的依賴關(guān)系。
對(duì)于真正例、假正例、假負(fù)例、真負(fù)例、查準(zhǔn)率、查全率進(jìn)行分析,結(jié)果如表3 所示。
表3 10個(gè)數(shù)據(jù)集檢測(cè)
在10 個(gè)數(shù)據(jù)集中,查準(zhǔn)率和查全率均高于0.95,這說明基于機(jī)器學(xué)習(xí)的軟件運(yùn)行缺陷檢測(cè)方法性能較好。
基于機(jī)器學(xué)習(xí)的軟件運(yùn)行缺陷檢測(cè)通過分析歷史數(shù)據(jù)、提取軟件特征建立缺陷檢測(cè)模型,進(jìn)而挖掘軟件中隱藏的缺陷。軟件運(yùn)行缺陷檢測(cè)主要分為兩個(gè)部分,首先是數(shù)據(jù)的處理,該方法主要通過對(duì)數(shù)據(jù)集中影響訓(xùn)練結(jié)果的特征進(jìn)行提取,去除不相關(guān)和冗余特征,減少噪聲數(shù)據(jù)對(duì)訓(xùn)練結(jié)果的影響;其次是模型的訓(xùn)練,在待測(cè)測(cè)試數(shù)據(jù)集上應(yīng)用訓(xùn)練好的模型,使模型能夠根據(jù)測(cè)試數(shù)據(jù)集檢測(cè)軟件系統(tǒng)中的缺陷。