摘 要: 針對(duì)傳統(tǒng)軟件測(cè)試成本高及測(cè)試過程依賴于軟件用例的設(shè)置等問題,設(shè)計(jì)了基于BP,JCUDA_BP和JCUDASA_BP的軟件缺陷預(yù)測(cè)模型,并通過調(diào)研、實(shí)驗(yàn)的方式對(duì)基于改進(jìn)BP算法的軟件缺陷預(yù)測(cè)算法進(jìn)行了相關(guān)的研究分析,探討了JCUDA技術(shù)對(duì)于BP算法的影響,證明了模擬退火算法與JCUDA技術(shù)相結(jié)合的方式具有改進(jìn)軟件缺陷預(yù)測(cè)模型的可能性。
關(guān)鍵詞: 缺陷預(yù)測(cè)模型; 模擬退火算法; JCUDA技術(shù); BP算法
中圖分類號(hào): TN915?34; TQ028.1 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2016)11?0136?05
Abstract: Since the cost of traditional software testing is high, and the test process relies on the set of software use case, a software defect prediction model based on BP, JCUDA_BP and JCUDASA_BP was designed. The software defect prediction algorithm based on improved BP algorithm is relevantly researched and analyzed by means of survey and experiment. The influence of JCUDA technology on BP algorithm is discussed, which proved that the combination of simulated annealing algorithm and JCUDA technology can improve the software defect prediction model.
Keywords: defect prediction model; simulated annealing algorithm; JCUDA technology; BP algorithm
隨著軟件應(yīng)用領(lǐng)域的不斷延伸,軟件系統(tǒng)安全日益受到研究人員的重視,軟件測(cè)試等方法已經(jīng)越來越受到工程人員的重視。伴隨著IT行業(yè)人工成本的不斷上漲,軟件測(cè)試的成本更是水漲船高[1]。因此,如何便捷、快速、優(yōu)質(zhì)地進(jìn)行軟件測(cè)試或發(fā)現(xiàn)軟件缺陷已經(jīng)成為一個(gè)難以避免的問題,如何通過機(jī)器快速、準(zhǔn)確地進(jìn)行軟件缺陷預(yù)測(cè)也就成為研究的一個(gè)熱點(diǎn)[2]。所以,如何建立合理的軟件缺陷預(yù)測(cè)模型成為近年來的研究重點(diǎn)。本文以通過一系列的實(shí)驗(yàn),研究驗(yàn)證了將BP算法運(yùn)用于軟件缺陷預(yù)測(cè)模型的可行性,分析其存在的缺陷,提出基于JCUDA的BP算法的預(yù)測(cè)模型和基于改進(jìn)BP算法的預(yù)測(cè)模型,并通過實(shí)驗(yàn)分析,證明了模擬退火算法與JCUDA技術(shù)結(jié)合的方式具有改進(jìn)軟件缺陷預(yù)測(cè)模型的可能性。
1 BP算法運(yùn)用于軟件缺陷預(yù)測(cè)模型的可行性研究
BP算法是一個(gè)前向傳播與后向反饋相互結(jié)合的過程,前向過程用于求出當(dāng)前神經(jīng)網(wǎng)絡(luò)權(quán)值情況下的輸出值,利用誤差行程反饋信息[3?4]。然后利用反饋信息對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行進(jìn)一步的修正以獲得新的求解結(jié)果。多次反復(fù),直至前向神經(jīng)網(wǎng)絡(luò)計(jì)算的誤差值能夠被用戶接受,這時(shí)BP神經(jīng)網(wǎng)絡(luò)處于當(dāng)前最優(yōu)解的情況,也就是BP神經(jīng)網(wǎng)絡(luò)完成了反饋操作。該算法流程圖如圖1所示。
基于BP算法的軟件缺陷預(yù)測(cè)模型包含一個(gè)輸入層、一個(gè)隱含層和一個(gè)輸出層[5]。將軟件缺陷模型的相關(guān)數(shù)據(jù)作為BP算法的學(xué)習(xí)樣本,利用BP神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)進(jìn)行學(xué)習(xí),從而對(duì)未知的軟件數(shù)據(jù)進(jìn)行預(yù)測(cè)以獲得較好的預(yù)測(cè)效果。采用MDP數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù),采用對(duì)比實(shí)驗(yàn)的方式對(duì)基于BP的軟件缺陷模型的預(yù)測(cè)效果進(jìn)行分析。實(shí)驗(yàn)表明,BP算法能夠有效地對(duì)軟件缺陷進(jìn)行預(yù)測(cè)。但是基于BP算法的軟件缺陷預(yù)測(cè)模型仍然存在易陷入局部最小值、BP網(wǎng)絡(luò)基本參數(shù)較難確認(rèn)、計(jì)算時(shí)間過長(zhǎng)和訓(xùn)練結(jié)果依賴學(xué)習(xí)樣本等不足。
2 基于JCUDA_BP算法的軟件缺陷預(yù)測(cè)模型研究
利用JCUDA進(jìn)行BP算法優(yōu)化設(shè)計(jì)時(shí),采用CPU與GPU都承擔(dān)部分計(jì)算工作的協(xié)同方式,即具有較強(qiáng)并行性的計(jì)算交由GPU進(jìn)行處理,CPU既負(fù)責(zé)管理GPU也進(jìn)行部分的非并行性計(jì)算。有效地激發(fā)GPU/CPU的計(jì)算能力,從而使基于JCUDA_BP算法的軟件缺陷模型具有更高的計(jì)算效率,具體實(shí)現(xiàn)過程如下:
其中:表示第個(gè)樣本組合計(jì)算完的誤差值;表示全部樣本集計(jì)算的平均誤差值。
(2) 基于JCUDA_BP算法利用BP算法的反向誤差對(duì)BP神經(jīng)網(wǎng)絡(luò)內(nèi)的權(quán)值進(jìn)行調(diào)整。調(diào)整完成后,驗(yàn)證誤差值范圍是否滿足需求。如果誤差仍然無法滿足BP算法的準(zhǔn)確性要求,則反復(fù)進(jìn)行迭代,直至獲得最佳的學(xué)習(xí)效果。結(jié)合JCUDA_BP算法的軟件缺陷,預(yù)測(cè)算法利用多線程、數(shù)據(jù)分組的方式加快BP算法效果。軟件缺陷預(yù)測(cè)模型是采用與BP網(wǎng)絡(luò)相似的網(wǎng)絡(luò)結(jié)構(gòu),利用JCUDA算法對(duì)軟件缺陷預(yù)測(cè)的運(yùn)行時(shí)間進(jìn)行優(yōu)化、模擬。CPU承擔(dān)誤差求解與驗(yàn)證的任務(wù),同時(shí)實(shí)現(xiàn)GPU運(yùn)行監(jiān)測(cè)的工作。
基于JCUDA_BP算法對(duì)軟件缺陷信息學(xué)習(xí)的學(xué)習(xí)過程如下:
① CPU、GPU內(nèi)完成BP神經(jīng)網(wǎng)絡(luò)初始化;
② 利用JCUDA編程技術(shù)實(shí)現(xiàn)BP算法在JCUDA上的學(xué)習(xí)過程;
③ 采用CPU存儲(chǔ)BP算法的計(jì)算結(jié)果;
④ 利用CPU對(duì)GPU內(nèi)數(shù)據(jù)計(jì)算的效果進(jìn)行分析與監(jiān)控。
BP算法采用JCUDA實(shí)現(xiàn)是將BP計(jì)算迭代的過程置于GPU內(nèi)進(jìn)行計(jì)算,利用CPU對(duì)學(xué)習(xí)過程誤差進(jìn)行分析,調(diào)整GPU內(nèi)神經(jīng)網(wǎng)絡(luò)拓?fù)鋱D內(nèi)邊的權(quán)值。其中BP算法的相關(guān)處理流程如圖2所示。
3 基于改進(jìn)BP算法的軟件缺陷預(yù)測(cè)模型研究
4 實(shí)驗(yàn)分析
4.1 基于JCUDA_BP算法的軟件缺陷預(yù)測(cè)模型實(shí)驗(yàn)分析
基于BP與基于JCUDA_BP的軟件缺陷預(yù)測(cè)模型的評(píng)估實(shí)驗(yàn)采用MDP數(shù)據(jù)集作為實(shí)驗(yàn)數(shù)據(jù),如表1所示。實(shí)驗(yàn)采用Eclipse作為編程環(huán)境,使用基于Java的JCUDA技術(shù)實(shí)現(xiàn)GPU與CPU下的編程操作。
本試驗(yàn)結(jié)果與分析從“基于BP的軟件缺陷預(yù)測(cè)與基于JCUDA_BP算法的軟件缺陷預(yù)測(cè)對(duì)比分析”和“基于不同隱含節(jié)點(diǎn)個(gè)數(shù)JCUDA_BP對(duì)軟件缺陷預(yù)測(cè)的影響的分析”兩方面入手,說明基于JCUDA_BP的軟件缺陷預(yù)測(cè)算法與基于BP的軟件缺陷算法的差異和JCUDA_BP可能會(huì)在實(shí)際使用中產(chǎn)生的問題與影響。
(1) 速率改進(jìn)實(shí)驗(yàn)結(jié)果與分析
在實(shí)驗(yàn)數(shù)據(jù)相同的情況下,不同數(shù)據(jù)集用JCUDA優(yōu)化的軟件缺陷預(yù)測(cè)模型和基于BP算法的軟件缺陷預(yù)測(cè)模型進(jìn)行計(jì)算,計(jì)算GPU學(xué)習(xí)過程與CPU學(xué)習(xí)過程消耗時(shí)間的差值,計(jì)算該差值與CPU計(jì)算時(shí)間求得優(yōu)化率,具體結(jié)果見表2。
分析實(shí)驗(yàn)結(jié)果可知,針對(duì)MDP軟件模塊信息數(shù)據(jù)集,基于JCUDA技術(shù)改進(jìn)的BP算法一定程度上能夠?qū)W(xué)習(xí)過程進(jìn)行優(yōu)化,獲得較好的優(yōu)化效果。但是,該優(yōu)化過程在軟件缺陷模型學(xué)習(xí)樣本較多時(shí)優(yōu)化效果明顯;如果學(xué)習(xí)樣本較少則優(yōu)化效果不理想。
(2) 隱含節(jié)點(diǎn)實(shí)驗(yàn)結(jié)果與分析
PC5隱含節(jié)點(diǎn)數(shù)與GPU\CPU處理時(shí)間對(duì)照:
實(shí)驗(yàn)結(jié)果表明:當(dāng)隱含節(jié)點(diǎn)個(gè)數(shù)增加時(shí),GPU與CPU運(yùn)行BP軟件缺陷模擬算法的時(shí)間都會(huì)增加,但是隨著隱含節(jié)點(diǎn)個(gè)數(shù)的增加GPU計(jì)算的時(shí)間會(huì)優(yōu)于CPU計(jì)算時(shí)間,即當(dāng)隱含節(jié)點(diǎn)個(gè)數(shù)達(dá)到一個(gè)數(shù)量級(jí)以后,GPU的優(yōu)化后的BP算法效果遠(yuǎn)好于CPU下的BP算法,學(xué)習(xí)效果會(huì)得到提升。當(dāng)隱含節(jié)點(diǎn)較少時(shí),軟件缺陷預(yù)測(cè)速度、CPU的處理時(shí)間更短。
4.2 基于改進(jìn)BP算法的軟件缺陷預(yù)測(cè)模型實(shí)驗(yàn)分析
本實(shí)驗(yàn)使用的數(shù)據(jù)集及實(shí)驗(yàn)環(huán)境同第4.1節(jié)。在基于JCUDASA_BP算法的軟件缺陷預(yù)測(cè)研究的實(shí)驗(yàn)過程中,BP算法的輸入?yún)?shù)設(shè)置為37個(gè),輸出參數(shù)設(shè)置為1個(gè),學(xué)習(xí)率設(shè)置為0.01,訓(xùn)練次數(shù)設(shè)置為10 000次,誤差允許值設(shè)置為0.001。該實(shí)驗(yàn)主要從準(zhǔn)確性和效率兩個(gè)方面進(jìn)行分析。
(1) 改進(jìn)算法準(zhǔn)確性分析
改進(jìn)算法準(zhǔn)確性實(shí)驗(yàn)主要說明“基于JCUDASA_BP的軟件缺陷預(yù)測(cè)的準(zhǔn)確性分析的實(shí)驗(yàn)結(jié)果”。利用該實(shí)驗(yàn)結(jié)果與基于BP算法的軟件缺陷預(yù)測(cè)結(jié)果進(jìn)行對(duì)比,分析基于模擬退火算法改進(jìn)的軟件缺陷預(yù)測(cè)模型的預(yù)測(cè)效果,具體對(duì)比結(jié)果如表4所示。
由表4對(duì)比可知,基于JCUDASA_BP算法對(duì)于軟件缺陷預(yù)測(cè)的準(zhǔn)確性優(yōu)于基于BP算法的軟件缺陷預(yù)測(cè),并且能夠較好地避免局部最優(yōu)解的出現(xiàn)。
(2) 改進(jìn)算法效率分析
改進(jìn)算法效率實(shí)驗(yàn)對(duì)比分析基于BP算法的軟件缺陷預(yù)測(cè)模型、基于JCUDA_BP算法的軟件缺陷預(yù)測(cè)模型、基于JCUDASA_BP算法軟件缺陷預(yù)測(cè)模型針對(duì)MDP軟件信息數(shù)據(jù)集中軟件模塊信息學(xué)習(xí)過程時(shí)間的長(zhǎng)短,其實(shí)驗(yàn)結(jié)果如表5所示。
分析實(shí)驗(yàn)結(jié)果可知:當(dāng)數(shù)據(jù)集較少時(shí),由于基于JCUDA改進(jìn)的BP算法需耗費(fèi)一定時(shí)間進(jìn)行GPU啟動(dòng),基于JCUDASA_BP算法需要消耗較多時(shí)間進(jìn)行模擬退火算法計(jì)算。因此,數(shù)據(jù)集較少時(shí),傳統(tǒng)BP算法的軟件缺陷預(yù)測(cè)模型對(duì)于軟件缺陷數(shù)據(jù)的預(yù)測(cè)速率較高;當(dāng)數(shù)據(jù)集較多時(shí),利用傳統(tǒng)BP算法對(duì)于軟件缺陷信息的學(xué)習(xí)時(shí)間長(zhǎng)于基于JCUDA技術(shù)改進(jìn)的BP算法的學(xué)習(xí)時(shí)間。其主要原因是JCUDA技術(shù)對(duì)計(jì)算量進(jìn)行了分解,加速了運(yùn)行速度。基于JCUDASA_BP算法進(jìn)行的軟件缺陷預(yù)測(cè)學(xué)習(xí)過程消耗的時(shí)間較長(zhǎng),其主要原因是由于模擬退火算法對(duì)原始算法的影響較大,其迭代計(jì)算的過程消耗了較多的計(jì)算時(shí)間。
5 結(jié) 論
本文對(duì)基于BP的軟件缺陷預(yù)測(cè)模型、基于JCUDA_BP的軟件缺陷預(yù)測(cè)模型和基于JCUDASA_BP的軟件缺陷預(yù)測(cè)模型進(jìn)行了相關(guān)研究,驗(yàn)證了BP算法在軟件缺陷預(yù)測(cè)模型中使用的可行性。分析上述算法的不足,證明了JCUDA技術(shù)能夠幫助BP算法進(jìn)行處理優(yōu)化,但是不能有效地解決陷入局部最小值的情況,基于改進(jìn)的BP算法的軟件缺陷預(yù)測(cè)模型通過結(jié)合模擬退火算法可以實(shí)現(xiàn)防止陷入局部最小值的情況,能夠獲得較好的處理效果。然而本文所提出軟件缺陷預(yù)測(cè)模型算法仍未對(duì)數(shù)據(jù)做出更好的預(yù)處理,在未來的工作中,后期需要對(duì)預(yù)處理進(jìn)行深入的總結(jié),通過優(yōu)化學(xué)習(xí)樣本獲得更高效的學(xué)習(xí)樣本。
參考文獻(xiàn)
[1] 韓璐,荊曉遠(yuǎn).一種新型軟件缺陷預(yù)測(cè)模型研究[J].南京郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2015, 35(1):95?101.
[2] 尹然,丁曉明,李小亮,等.基于SA?BP神經(jīng)網(wǎng)絡(luò)的軟件缺陷預(yù)測(cè)模型的研究[J].西南師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,38(8):147?152.
[3] 張麗紅,王艷.基于回歸神經(jīng)網(wǎng)絡(luò)自適應(yīng)快速BP算法[J].計(jì)算機(jī)測(cè)量與控制,2015,12(5):480?482.
[4] 侯彥東,方惠敏,楊國(guó)勝,等.一種改進(jìn)的可變學(xué)習(xí)速率的BP神經(jīng)網(wǎng)絡(luò)算法[J].河南大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,38(3):309?312.
[5] YIN R, DING X M, LI X L, et al. Research on software defect prediction model based on SA?BP [J]. Journal of Southwest China Normal University, 2013(8): 120?139.
[6] FAN Xiujuan, LI Chenguo. The research in yarn quality prediction model based on an improved BP algorithm [C]// Procee?dings of 2009 WRI World Congress on Computer Science and Information Engineering. US: IEEE, 2009: 167?172.
[7] 張少迪.基于PSO?BP神經(jīng)網(wǎng)絡(luò)的短期負(fù)荷預(yù)測(cè)算法[J].現(xiàn)代電子技術(shù),2013,36(12):155?158.
[8] 朱旭東,梁光明,馮雁.基于改進(jìn)SFS特征選擇BP識(shí)別算法[J].現(xiàn)代電子技術(shù),2015,38(12):1?4.