白首華 胡天彤
摘? 要: 軟件靜態(tài)缺陷預(yù)測系統(tǒng)經(jīng)過常規(guī)的優(yōu)化設(shè)計后,泛化能力較差,容易將低缺陷率軟件模塊誤判為高缺陷率軟件模塊。為此,提出微型嵌入式軟件靜態(tài)缺陷預(yù)測系統(tǒng)優(yōu)化設(shè)計。在優(yōu)化設(shè)計中硬件部分使用原有的硬件結(jié)構(gòu),分析軟件靜態(tài)缺陷預(yù)測中的問題,建立軟件靜態(tài)缺陷預(yù)測模型,得到的學(xué)習(xí)目標(biāo)用來訓(xùn)練樣本,利用分類函數(shù)和訓(xùn)練樣本通過多次迭代實現(xiàn)缺陷預(yù)測,完成缺陷系統(tǒng)的優(yōu)化設(shè)計。測試結(jié)果表明,在數(shù)據(jù)集和模塊數(shù)相同的情況下,與經(jīng)過常規(guī)優(yōu)化設(shè)計的系統(tǒng)相比,所提系統(tǒng)測試結(jié)果未發(fā)生誤判情況,與實際數(shù)據(jù)相符,泛化能力較強,適合應(yīng)用在實際項目中。
關(guān)鍵詞: 微型嵌入式軟件; 缺陷預(yù)測; 預(yù)測模型; 優(yōu)化設(shè)計; 樣本訓(xùn)練; 系統(tǒng)測試
中圖分類號: TN911.23?34; TP311? ? ? ? ? ? ? ? 文獻標(biāo)識碼: A? ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2020)10?0097?03
Optimization design of static defect prediction system for miniature embedded software
BAI Shouhua, HU Tiantong
(Zhengzhou University of Aeronautics, Zhengzhou 450046, China)
Abstract: The software static defect prediction system achieved by the conventional optimization design has poor generalization ability, and is easy to misjudge the software module with low defect rate as the one with high defect rate. Therefore, an optimization design of static defect prediction system for miniature embedded software is proposed. In the optimization design, the original hardware structure in the hardware part is still used, the problems in the software static defect prediction are analyzed, the software static defect prediction model is established, the obtained learning objectives are used to training sample, and the classification function and training samples are adopted to realize the defect prediction by multiple iterations. In this way, the optimization design of the defect prediction system is completed. The testing results show that, under the condition of the same number of data sets and modules, in comparison with the system designed by the conventional optimization, the proposed system has no misjudgment, is consistent with the actual data, and has strong generalization ability, which is suitable for the application in the actual project.
Keywords: miniature embedded software; defect prediction; prediction model; optimization design; sample training; system testing
0? 引? 言
微型嵌入式軟件已經(jīng)被廣泛應(yīng)用到各行各業(yè)中,其自身具有內(nèi)核小、實時性以及專用性強的特點,一般工作在空間及時間資源嚴(yán)重被限制環(huán)境中,對軟件質(zhì)量要求比較高,預(yù)測軟件缺陷問題難度較大[1]。在微型嵌入式軟件靜態(tài)缺陷預(yù)測系統(tǒng)中,靜態(tài)缺陷是一個研究熱點。預(yù)測程序模塊中是否存在靜態(tài)缺陷,若存在靜態(tài)缺陷,及時發(fā)現(xiàn)并解決,可達到加速軟件測試過程、降低軟件測試成本以及提高系統(tǒng)質(zhì)量的目的[2]。軟件靜態(tài)缺陷存在很多種,如程序缺陷、文檔缺陷和設(shè)計缺陷等。常規(guī)的微型嵌入式軟件靜態(tài)缺陷預(yù)測系統(tǒng)優(yōu)化設(shè)計,只優(yōu)化了預(yù)測系統(tǒng)對缺陷分布的預(yù)測范圍,但是由于其泛化能力較差,容易出現(xiàn)將低缺陷率模塊誤判為高缺陷率模塊的情況,造成測試成本投入增加[3]。為了解決上述問題,提出微型嵌入式軟件靜態(tài)缺陷預(yù)測系統(tǒng)優(yōu)化設(shè)計。
1? 微型嵌入式軟件靜態(tài)缺陷預(yù)測系統(tǒng)優(yōu)化設(shè)計
1.1? 建立軟件靜態(tài)缺陷預(yù)測模型
微型嵌入式軟件靜態(tài)缺陷預(yù)測系統(tǒng)中標(biāo)記缺陷數(shù)據(jù)較少,在建立預(yù)測模型過程中,沒有足夠軟件靜態(tài)缺陷數(shù)據(jù)支撐,但未標(biāo)記的樣本數(shù)據(jù)能增加建立模型所需樣本數(shù)據(jù)[4]。如圖1所示,半監(jiān)督學(xué)習(xí)方法不只是利用已有的標(biāo)記缺陷的樣本來訓(xùn)練預(yù)測模型,同時也利用未標(biāo)記的樣本來增強學(xué)習(xí)過程[5]。
通過生成式模型參數(shù)的估計解釋了半監(jiān)督學(xué)習(xí)的有效性。在該方法中,缺陷數(shù)據(jù)類分布[Kαt]用預(yù)測模型集合[Kαt,ε]來表示,更深層的數(shù)據(jù)類別概率[Kpt]用[λt=Ktλ]表示,其中[t]為標(biāo)記向量,[ε]表示協(xié)方差矩陣,[λ]為混合系數(shù)。根據(jù)聯(lián)合密度模型,[Kαt]可以用[λtKαt,ε]表示,通過在概率[λt=Ktλ]上平均化[λtKαt,ε],得貝葉斯預(yù)測分布[6][Ktα,ε],則[Kα]邊緣分布為:
[Kαε,λ=t=1λλtKαt,ε]? ? ?(1)
式中:[α]為缺陷數(shù)據(jù);[ε]為協(xié)方差矩陣;[λ]為混合系數(shù);[t]為標(biāo)記向量。在獲得標(biāo)記缺陷數(shù)據(jù)樣本和未標(biāo)記的缺陷數(shù)據(jù)樣本的情況下,式(1)經(jīng)最大化處理,得到學(xué)習(xí)目標(biāo)就是用來訓(xùn)練樣本,達到預(yù)測軟件靜態(tài)缺陷的目的[7]。在預(yù)測模型建立完成后,計算分類函數(shù),預(yù)測更多未知測試樣本數(shù)據(jù)[8]。
1.2? 計算分類函數(shù)
常規(guī)預(yù)測系統(tǒng)優(yōu)化設(shè)計中存在誤判的情況,可將決策平面向少數(shù)類方向移動閾值,使訓(xùn)練得到的分類器以及分類函數(shù)對于某類數(shù)據(jù)具有傾向性,解決誤判問題[2]。假設(shè)[H=H1,H2,…,Hn]表示n維特征,計算每一維特征的特征均值[argi],根據(jù)第i維特征均值,將訓(xùn)練集劃分為大于等于均值和小于均值的兩部分?jǐn)?shù)據(jù),分別訓(xùn)練兩個數(shù)據(jù)集,共同構(gòu)建成一個強分類器,也就是分類函數(shù)[9],即:
[Fx=argmaxdfix,tr] (2)
式中:[fix]表示第i個分類器的分類結(jié)果;[tr]表示第r類的軟件模塊標(biāo)記;[dfix,tr]表示指示函數(shù)。
通過setFilter函數(shù)設(shè)置過濾器,再利用if語句和setClassifier函數(shù)建立不同的分類器[10]。實現(xiàn)分類器構(gòu)建的部分程序代碼如圖2所示。
通過上述方式構(gòu)建多個強分類器,確定分類函數(shù),提高軟件缺陷預(yù)測系統(tǒng)的整體表現(xiàn)能力,再利用相應(yīng)的算法實現(xiàn)軟件靜態(tài)缺陷的預(yù)測。
1.3? 優(yōu)化預(yù)測算法
為了解決常規(guī)的預(yù)測系統(tǒng)優(yōu)化中存在的誤判問題,對該系統(tǒng)中的預(yù)測算法進行優(yōu)化[11]。在軟件缺陷預(yù)測的半監(jiān)督模型中,假設(shè)未標(biāo)記的缺陷數(shù)據(jù)樣本集合為Q,大小為q,系統(tǒng)中各個軟件模塊的標(biāo)記為W,存在缺陷的軟件模塊標(biāo)記為“true”,無缺陷的軟件模塊標(biāo)記為“false”。令帶有標(biāo)記的數(shù)據(jù)樣本集合大小[12]為t。假設(shè)Q的分布為R,最終的分類函數(shù)[F:Q→W],[fi]表示集成的分裂期,i為常數(shù)。在預(yù)測算法中,通過T數(shù)據(jù)集使分類函數(shù)初始化,與之對應(yīng)的訓(xùn)練數(shù)據(jù)集隨著不同的分類函數(shù)的初始化結(jié)果更新。若出現(xiàn)未標(biāo)記的分類數(shù)據(jù)集,通過分類函數(shù)的分類結(jié)果存在與之相同的結(jié)果,則確定對應(yīng)分類函數(shù)后,將其加入到該分類結(jié)果對應(yīng)分類器訓(xùn)練數(shù)據(jù)集中[13]??紤]未標(biāo)記的數(shù)據(jù)集與帶標(biāo)記的數(shù)據(jù)集有相同分布,即:
[1qi=τ+1τ+qwi=1τi=1τwi] (3)
使用分類器對未標(biāo)記樣本數(shù)據(jù)集標(biāo)記時,數(shù)據(jù)集中主要包括多數(shù)類樣本,更新每個分類器訓(xùn)練數(shù)據(jù)集時,新的可信度高,被標(biāo)記的數(shù)據(jù)仍然偏向多數(shù)類[14]。在每次迭代中,訓(xùn)練樣本集中增加正樣本個數(shù)遠遠少于負樣本個數(shù),使用多數(shù)表決的方法更新每個分類器對應(yīng)的數(shù)據(jù)集,實現(xiàn)軟件靜態(tài)缺陷預(yù)測。
2? 軟件靜態(tài)缺陷預(yù)測系統(tǒng)優(yōu)化測試
2.1? 測試環(huán)境與數(shù)據(jù)
本次測試軟件運行在操作系統(tǒng)為Windows 10,CPU為Intel Pentium Dual,運行內(nèi)存為4 GB,硬盤內(nèi)存為500 GB的機器平臺上。測試數(shù)據(jù)選擇MDP數(shù)據(jù)包,包含數(shù)據(jù)如表1所示。本次測試根據(jù)數(shù)據(jù)集模塊缺陷率,使用軟件靜態(tài)缺陷測試平臺測試軟件模塊缺陷情況,為了體現(xiàn)明顯的對比效果,在測試平臺中新建兩個預(yù)測任務(wù),上傳待預(yù)測的數(shù)據(jù)集,分別用不同的預(yù)測系統(tǒng)統(tǒng)一進行預(yù)測,任務(wù)創(chuàng)建成功后,初始狀態(tài)為“等待測試”。新建預(yù)測任務(wù)界面如圖3所示。
2.2? 測試結(jié)果及分析
使用不同的方法優(yōu)化后的預(yù)測系統(tǒng),預(yù)測模塊缺陷情況,如圖4所示。觀察圖4,在數(shù)據(jù)集和模塊數(shù)相同的情況下,使用提出的優(yōu)化方法優(yōu)化后的預(yù)測系統(tǒng)測試結(jié)果與實際數(shù)據(jù)基本相符,對于軟件靜態(tài)缺陷等級判斷,未出現(xiàn)誤判情況。而使用常規(guī)優(yōu)化方法優(yōu)化后的預(yù)測系統(tǒng),其測試結(jié)果整體趨勢偏高,缺陷等級高的數(shù)據(jù),預(yù)測結(jié)果與實際數(shù)據(jù)相似,但是對于缺陷等級低的數(shù)據(jù),預(yù)測結(jié)果過高,出現(xiàn)將低缺陷率模塊誤判為高缺陷率模塊情況,泛化能力較差。兩者相比,提出使用半監(jiān)督學(xué)習(xí)方法優(yōu)化的預(yù)測系統(tǒng)有效改善了常規(guī)優(yōu)化系統(tǒng)中的問題,泛化能力得到提高。
3? 結(jié)? 語
由于微型嵌入式軟件預(yù)測系統(tǒng)的硬件部分具有較高的安全性,對軟件靜態(tài)缺陷預(yù)測影響較小,所以在優(yōu)化設(shè)計中默認(rèn)使用常規(guī)的硬件結(jié)構(gòu)。以此為基礎(chǔ),設(shè)計軟件缺陷預(yù)測模型,計算分類函數(shù),優(yōu)化預(yù)測算法,實現(xiàn)微型嵌入式軟件靜態(tài)缺陷預(yù)測。
參考文獻
[1] 楊穎,周志飛,鐘理,等.嵌入式軟件靜態(tài)測試技術(shù)[J].機車電傳動,2017(1):61?64.
[2] 朱朝陽,陳相舟,閆龍,等.基于主成分分析法的人工免疫識別軟件缺陷預(yù)測模型研究[J].計算機科學(xué),2017,44(z1):493?495.
[3] 周末,徐玲,楊夢寧,等.基于深度自編碼網(wǎng)絡(luò)的軟件缺陷預(yù)測方法[J].計算機工程與科學(xué),2018,40(10):84?92.
[4] 崔軍,劉亞娜,郭新峰,等.基于最大信息系數(shù)的軟件缺陷預(yù)測模型[J].應(yīng)用概率統(tǒng)計,2019,35(1):90?112.
[5] 哈清華,劉大有,陳媛,等.基于遷移學(xué)習(xí)的跨公司航天軟件缺陷預(yù)測[J].光學(xué)精密工程,2019,27(2):48?55.
[6] 劉愷,包月青,趙先鋒.改進的軟件缺陷預(yù)測模型研究[J].浙江工業(yè)大學(xué)學(xué)報,2019,47(2):111?115.
[7] 張肖,王黎明.一種半監(jiān)督集成學(xué)習(xí)軟件缺陷預(yù)測方法[J].小型微型計算機系統(tǒng),2018,39(10):12?19.
[8] 王鐵建,吳飛,荊曉遠.基于半監(jiān)督集成學(xué)習(xí)的軟件缺陷預(yù)測[J].模式識別與人工智能,2017,30(7):646?652.
[9] 楊杰,燕雪峰,張德平,等.考慮KL散度的多源軟件缺陷預(yù)測方法[J].小型微型計算機系統(tǒng),2017,38(11):2494?2498.
[10] 胡蕓,胡國祥,胡世港,等.嵌入式軟件缺陷的自動定位技術(shù)實現(xiàn)[J].現(xiàn)代電子技術(shù),2017,40(18):79?82.
[11] 王海林,于倩,李彤,等.基于CS?ANN的軟件缺陷預(yù)測模型研究[J].計算機應(yīng)用研究,2017,34(2):467?472.
[12] 李冉,周麗娟,王華.面向類不平衡數(shù)據(jù)集的軟件缺陷預(yù)測模型[J].計算機應(yīng)用研究,2018,35(9):252?256.
[13] 李勇,黃志球,王勇,等.數(shù)據(jù)驅(qū)動的軟件缺陷預(yù)測研究綜述[J].電子學(xué)報,2017,45(4):982?988.
[14] 廖勝平,徐玲,鄢萌.基于采樣的半監(jiān)督支持向量機軟件缺陷預(yù)測方法[J].計算機工程與應(yīng)用,2017,53(14):161?166.