摘 ?要:針對(duì)現(xiàn)階段軟件缺陷預(yù)測(cè)模型研究少和準(zhǔn)確率低的問(wèn)題,提出了一種基于LSTM的軟件缺陷預(yù)測(cè)模型?;贚STM對(duì)輸入序列信息的相關(guān)性進(jìn)行了研究,通過(guò)Prophet和Ohba開源數(shù)據(jù)集對(duì)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練和測(cè)試。實(shí)驗(yàn)結(jié)果表明:在輸入序列為500時(shí),LSTM的檢測(cè)效果準(zhǔn)確率為99.12%,誤報(bào)率為0.91%,優(yōu)于RNN的93.58%的準(zhǔn)確率和5.76%的誤報(bào)率。
關(guān)鍵詞:深度學(xué)習(xí);長(zhǎng)短期記憶;軟件缺陷預(yù)測(cè);RNN
中圖分類號(hào):TP315.53 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)21-0017-04
Research on LSTM Software Defect Prediction Technology Based on Improved RNN
SU Zhitao
(School of Computer Science,Sichuan University,Chengdu ?610065,China)
Abstract:Aiming at the problem of little research and low accuracy of software defect prediction models at this stage,a software defect prediction model based on LSTM is proposed. The correlation of input sequence information is studied based on LSTM. The network model is trained and tested through Prophet and Ohba open source datasets. The experimental results show that:when the input sequence is 500,the detection accuracy of LSTM is 99.12%,and the false alarm rate is 0.91%,which is better than RNNs 93.58% accuracy rate and 5.76% false alarm rate.
Keywords:deep learning;LSTM;software defect prediction;RNN
0 ?引 ?言
早期的軟件測(cè)試基本等同于調(diào)試,最常見的測(cè)試方法是面向圖形和非圖形的用戶界面測(cè)試,實(shí)際上,一個(gè)軟件從需求分析、開發(fā)設(shè)計(jì)到最后上線交付誕生的過(guò)程中,離不開軟件缺陷的測(cè)試和預(yù)測(cè)技術(shù)的思想。導(dǎo)致軟件缺陷的主要因素有概念需求說(shuō)明的精細(xì)化,測(cè)試工具和數(shù)據(jù)的綜合化,模型的合理化以及測(cè)試人員的專業(yè)化[1]。目前,利用機(jī)器學(xué)習(xí)算法對(duì)軟件缺陷預(yù)測(cè)是當(dāng)下的研究熱點(diǎn),國(guó)內(nèi)外學(xué)者對(duì)軟件預(yù)測(cè)技術(shù)進(jìn)行了一些研究。文獻(xiàn)[2]通過(guò)LSTM和RNN簡(jiǎn)化語(yǔ)音識(shí)別技術(shù),可預(yù)測(cè)疾病、圖像分類和控制聊天機(jī)器人等任務(wù);文獻(xiàn)[3]利用RNN輸入文本的微小增改處理方法,對(duì)錯(cuò)誤文本分類。
筆者在軟件圖形用戶界面(GUI)測(cè)試中,發(fā)現(xiàn)自動(dòng)化測(cè)試工具在某些環(huán)節(jié)可以代替人工測(cè)試與應(yīng)用程序進(jìn)行交互,但自動(dòng)化測(cè)試工具在不同的GUI狀態(tài)下對(duì)于可接受的手勢(shì)識(shí)別存在限制和缺陷。不同測(cè)試生成器的主要區(qū)別在于生成測(cè)試用例時(shí)所采用的策略,常用的策略主要包括基于模型策略、隨機(jī)策略和針對(duì)性策略三種[4],本文利用機(jī)器學(xué)習(xí)算法LSTM構(gòu)建模型策略。測(cè)試生成器的模型策略通常使用RNN,主要是基于訓(xùn)練算法BPTT[5]。但是,單純地使用RNN會(huì)出現(xiàn)權(quán)重指數(shù)級(jí)爆炸和梯度消失的問(wèn)題,難以捕捉長(zhǎng)時(shí)間輸入序列的關(guān)聯(lián)性,使重要的信息可能不會(huì)被輸出[6]。因此,本文使用了RNN的改進(jìn)策略長(zhǎng)短期記憶模型(LSTM),可以更好地處理和預(yù)測(cè)時(shí)間序列的重要事件。
1 ?LSTM的網(wǎng)絡(luò)模型結(jié)構(gòu)
LSTM在語(yǔ)音識(shí)別、自然語(yǔ)言處理、圖像處理和視頻分類等方面表現(xiàn)出了很好的效果[7]。LSTM和RNN相比,主要解決了RNN長(zhǎng)期依賴的問(wèn)題。LSTM的網(wǎng)絡(luò)模型結(jié)構(gòu)如圖1所示,LSTM通過(guò)引入記憶單元、輸入門、遺忘門和輸出門解決梯度消失問(wèn)題。其中,t時(shí)刻的輸入信息為xt,yt為t時(shí)刻的輸出,Sigmoid激活函數(shù)為σ,?為元素相乘,⊕為元素相加,門結(jié)構(gòu)由σ和?組成。前一級(jí)記憶單元輸入的信息是否需要被保留由遺忘門決定,輸入門確定重要的信息加載到記憶單元,輸出門則決定了下一個(gè)隱藏狀態(tài)。
2 ?LSTM預(yù)測(cè)模型的建立
LSTM是一種具有很好學(xué)習(xí)性的神經(jīng)網(wǎng)絡(luò)算法模型[8]。在實(shí)際工程軟件測(cè)試過(guò)程中,測(cè)試人員依據(jù)測(cè)試需求說(shuō)明書和測(cè)試用例發(fā)現(xiàn)軟件缺陷。算法模型的輸入層包括日常測(cè)試用例、需求說(shuō)明書、測(cè)試用例數(shù)個(gè)被測(cè)對(duì)象,輸出層則是軟件缺陷個(gè)數(shù)及問(wèn)題描述。
2.1 ?LSTM的設(shè)計(jì)
RNN推導(dǎo)演進(jìn)后可得到LSTM,原始的RNN由于隱藏層只有一個(gè)狀態(tài)h,對(duì)于短期的輸入比較敏感。因此,在此RNN的基礎(chǔ)上增加一個(gè)狀態(tài)c,狀態(tài)c又稱為單元狀態(tài),按照時(shí)間維度展開如圖2所示,讓它保存長(zhǎng)期的狀態(tài),解決了原始RNN無(wú)法處理長(zhǎng)距離依賴的問(wèn)題。
從圖2可以看出,LSTM的輸入有三個(gè):xt為當(dāng)前時(shí)刻的輸入,ht-1為前一時(shí)刻的輸出,ct-1為前一時(shí)刻的單元狀態(tài),模型當(dāng)前時(shí)刻的兩個(gè)輸出為ht和ct。LSTM利用三個(gè)控制開關(guān)控制長(zhǎng)期狀態(tài),思路方法如下:前一個(gè)開關(guān)s1保存控制長(zhǎng)期狀態(tài)ct,中間的開關(guān)s3將輸入的數(shù)據(jù)傳輸?shù)介L(zhǎng)期狀態(tài)ct,最后一個(gè)開關(guān)s2控制是否將長(zhǎng)期狀態(tài)ct作為輸出,三個(gè)開關(guān)控制長(zhǎng)期狀態(tài)的模思路如圖3所示。
2.2 ?LSTM的前向計(jì)算
門是代替開關(guān)算法中的重要組成部分,是一層全連接層,輸入和輸出都是向量。在LSTM算法中,權(quán)重向量為W,偏置項(xiàng)為b,門的一般表達(dá)式可寫為:
g(x)=σ(Wx+b) ? ? ? ? ? ? ? ? ? ? ? ?(1)
其原理是通過(guò)輸出向量乘以控制向量,當(dāng)門輸出為0代表不通過(guò),門輸出為1時(shí),向量與1相乘則不會(huì)改變,表示通過(guò)。LSTM用輸入門和遺忘門來(lái)控制單元狀態(tài)c的內(nèi)容,遺忘門決定了前一時(shí)刻的單元狀態(tài)ct-1,輸入門決定了當(dāng)前時(shí)刻的網(wǎng)絡(luò)輸入xt保存到單元狀態(tài)的數(shù)量。遺忘門可表示為:
ft=σ(Wf ·[ht-1,xt]+bf) ? ? ? ? ? ? ? ? ? (2)
其中,Wf為遺忘門的權(quán)重矩陣,[ht-1,xt]為兩個(gè)向量的組合,bf為遺忘門的偏置項(xiàng),σ為激活函數(shù)。若輸入的維度為dh,單元狀態(tài)的維度為dc,則Wf維度為dc·(dh+dx)。實(shí)際上,權(quán)重矩陣Wf是兩個(gè)矩陣Wfx和Wfh拼接而成。Wf可以寫為:
(3)
輸入門可以表示為:
it=σ(Wi×[ht-1,xt]+bi) ? ? ? ? ? ? ? ? ? ? ? ?(4)
記憶單元的狀態(tài)可通過(guò)上一時(shí)刻的輸出和本次的輸入計(jì)算,即ct-1按元素乘遺忘門ft,當(dāng)前輸入的單元狀態(tài)乘輸入門it,兩個(gè)乘積項(xiàng)相加可得到ct,將LSTM的當(dāng)前記憶單元和前一時(shí)刻的狀態(tài)組合得到了新的單元狀態(tài)。而在數(shù)據(jù)傳輸過(guò)程中,輸入門可以避免當(dāng)前不重要的信息進(jìn)入記憶單元,遺忘門可以保存前一時(shí)刻的數(shù)據(jù)信息記憶,最終的輸出門控制當(dāng)前的記憶單元輸出數(shù)據(jù)信息,輸出門的計(jì)算可表示為:
ot=σ(Wo×[ht-1,xt]+bo) ? ? ? ? ? ? ? ? ? ? ?(5)
輸出門和記憶單元狀態(tài)最終決定了LSTM的輸出,可以寫為:
ht=ot×tanh(ct) ? ? ? ? ? ? ? ? ? ? ? ? ? (6)
LSTM最終數(shù)據(jù)輸出過(guò)程如圖4所示。
2.3 ?LSTM訓(xùn)練
由于輸入狀態(tài)是連續(xù)的時(shí)間序列,LSTM可以很好地解決時(shí)序問(wèn)題,根據(jù)前面的介紹訓(xùn)練模型,LSTM反向傳播算法的訓(xùn)練分為三個(gè)步驟:
Step1:求解前向計(jì)算的每個(gè)神經(jīng)元ft,it,ot,ht向量的輸出值。
Step2:分別計(jì)算每個(gè)神經(jīng)元兩個(gè)方向的誤差項(xiàng)δ值。即每個(gè)時(shí)刻和向上一層傳播的誤差項(xiàng)。
Step3:根據(jù)得到的誤差項(xiàng)計(jì)算權(quán)重的梯度。
LSTM的詳細(xì)計(jì)算過(guò)程和推導(dǎo)公式為:與RNN類似,LSTM誤差反向傳播的計(jì)算利用誤差項(xiàng)的δ值,采用梯度下降法更新權(quán)值,在LSTM的訓(xùn)練過(guò)程中,需要學(xué)習(xí)的參數(shù)共有8組,分別為輸入門的Wi和bi,輸出門的Wo和bo,以及記憶單元狀態(tài)的Wc和偏置項(xiàng)bc。在反向傳播時(shí)權(quán)重矩陣使用不同的公式,因此,權(quán)重矩陣Wf、Wi、Wc、Wo被分開為兩個(gè)矩陣:Wfh、Wfx、Wih、Wix、Woh、Wox、Wch、Wcx。誤差沿時(shí)間反向傳遞,E為損失函數(shù),在t時(shí)刻LSTM的輸出值為ht。我們定義t時(shí)刻的誤差項(xiàng)δt為:
(7)
通過(guò)式(7)可知,損失函數(shù)對(duì)輸出值的導(dǎo)數(shù)為誤差項(xiàng),建立的LSTM有四個(gè)加權(quán)輸入,而向上一層傳遞的只有一個(gè)誤差項(xiàng),因此,分別定義四個(gè)加權(quán)輸入對(duì)應(yīng)的誤差項(xiàng)為:
netf,t=Wf[ht-1,xt]+bf ? ? ? ? ? ? ? ? ? ? ? ? ? (8)
neti,t=Wi[ht-1,xt]+bi ? ? ? ? ? ? ? ? ? ? ? ? ? (9)
=Wc[ht-1,xt]+bc ? ? ? ? ? ? ? ? ? ? ? ?(10)
neto,t=Wo[ht-1,xt]+bo ? ? ? ? ? ? ? ? ? ? ? ?(11)
(12)
(13)
(14)
(15)
沿時(shí)間反向傳遞t-1時(shí)刻的誤差項(xiàng)δt-1可表示為:
(16)
以輸出門為例,根據(jù)得到的誤差項(xiàng),計(jì)算當(dāng)前時(shí)刻權(quán)重矩陣的梯度和偏置項(xiàng)梯度,計(jì)算過(guò)程可表示為式(17)~式(19):
(17)
(18)
(19)
輸出門最終的梯度為各個(gè)時(shí)刻的梯度之和,同理,遺忘門、輸入門和記憶單元的權(quán)重矩陣和偏置項(xiàng)的梯度可以依據(jù)輸出門的求解方法得到。
3 ?實(shí)驗(yàn)及結(jié)果分析
本文主要是基于時(shí)間序列的測(cè)試序列驗(yàn)證。實(shí)驗(yàn)環(huán)境:主機(jī)CPU型號(hào)為Intel i5 9300H,主頻為2.4 GHz,物理內(nèi)存為8 G,64位操作系統(tǒng),深度學(xué)習(xí)框架為TensorFlow 1.11.10,代碼運(yùn)行平臺(tái)為Python3.7。采用的訓(xùn)練數(shù)據(jù)有語(yǔ)言數(shù)據(jù)聯(lián)盟提供的漢語(yǔ)文本語(yǔ)料和失效數(shù)據(jù)集Ohba,訓(xùn)練集是從網(wǎng)上自行下載的Prophet時(shí)間序列數(shù)據(jù)集,隨機(jī)選取3 271個(gè)樣本集,訓(xùn)練樣本集和測(cè)試樣本集的占比為8:2。網(wǎng)絡(luò)模型的參數(shù)預(yù)設(shè)值通過(guò)多次實(shí)驗(yàn)迭代100次確定,具體參數(shù)設(shè)置如表1所示。
LSTM結(jié)構(gòu)的輸出可以是任意長(zhǎng)度的序列,但是序列的長(zhǎng)短會(huì)影響獲取時(shí)間,序列越長(zhǎng),模型訓(xùn)練的時(shí)間也會(huì)增加。序列長(zhǎng)度則為包含字符的個(gè)數(shù),經(jīng)多次測(cè)試并考慮到訓(xùn)練時(shí)間和擬合度的問(wèn)題,本文選擇500作為模型訓(xùn)練的序列長(zhǎng)度。為說(shuō)明驗(yàn)證本文模型特征的有效性,針對(duì)同一數(shù)據(jù)集構(gòu)建其他文獻(xiàn)中常用的RNN檢測(cè)結(jié)果,訓(xùn)練和測(cè)試分別表示訓(xùn)練樣本集和測(cè)試樣本集的建模與檢測(cè)時(shí)間。
由表2可知,LSTM調(diào)用處理序列在準(zhǔn)確率(ACC)、檢測(cè)率(DR)和誤報(bào)率(FAR)均優(yōu)于RNN,文本構(gòu)建的LSTM的檢測(cè)效果準(zhǔn)確率為99.12%,誤報(bào)率為0.91%,優(yōu)于RNN的93.58%的檢測(cè)率和5.76%的誤報(bào)率。因?yàn)楸疚牡哪P陀?xùn)練采用多個(gè)數(shù)據(jù)集不斷訓(xùn)練優(yōu)化模型,反復(fù)實(shí)驗(yàn)修改迭代次數(shù),LSTM能夠?qū)χ匾妮斎胄畔⒈A?,不?huì)出現(xiàn)權(quán)重比較大的信息遺失等問(wèn)題。
4 ?結(jié) ?論
本文對(duì)基于軟件故障檢測(cè)和預(yù)測(cè)進(jìn)行了研究,提出了一種基于LSTM的軟件測(cè)試方法,針對(duì)目前軟件工程的故障類型繁多和需求復(fù)雜等特點(diǎn),為更好地實(shí)現(xiàn)軟件缺陷預(yù)測(cè)和故障預(yù)測(cè)方法,與RNN進(jìn)行了比較,結(jié)果顯示提出的LSTM具有以下優(yōu)勢(shì):模型的檢測(cè)時(shí)間短,擬合程度較好;網(wǎng)絡(luò)模型在準(zhǔn)確率、檢測(cè)率和誤報(bào)率三個(gè)指標(biāo)上的性能較好;網(wǎng)絡(luò)結(jié)構(gòu)上要優(yōu)于RNN的模型結(jié)構(gòu),LSTM的遺忘門會(huì)使得前一級(jí)輸入的狀態(tài)信息按照權(quán)重大小輸出。同時(shí),本文方法也存在一些不足,目前僅提出了字符序列信息,對(duì)語(yǔ)音和圖像等測(cè)試訓(xùn)練還需要加強(qiáng),且模型構(gòu)建的時(shí)間長(zhǎng),下一步工作將提取更多的輸入信息特征,進(jìn)一步優(yōu)化模型,提高模型的可用性和高效性。
參考文獻(xiàn):
[1] 王文滔.Android手機(jī)軟件自動(dòng)化測(cè)試的設(shè)計(jì)與實(shí)現(xiàn) [D].北京:北京交通大學(xué),2015.
[2] 左玲云,張晴晴,黎塔,等.電話交談?wù)Z音識(shí)別中基于LSTM-DNN語(yǔ)言模型的重評(píng)估方法研究 [J].重慶郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2016,28(2):180-186+193.
[3] TUMULURU V K,WANG P,NIYATO D. A Neural Network Based Spectrum Prediction Scheme for Cognitive Radio [C]//2010 IEEE International Conference on Communications.IEEE,2010:1-5.
[4] AHMAD N S,KHAN M G M,RAFI L S.A study of testing effort dependent inflection S-shaped software reliability growth models with imperfect debugging [J].International Journal of Quality & Reliability Management,2010,27(1):89-110.
[5] 楊波,吳際,徐珞,等.一種軟件測(cè)試需求建模及測(cè)試用例生成方法 [J].計(jì)算機(jī)學(xué)報(bào),2014,37(3):522-538.
[6] 韓文凱.認(rèn)知網(wǎng)絡(luò)的頻譜感知對(duì)抗技術(shù)研究[D].成都:電子科技大學(xué),2018.
[7] 李秋英,李海峰,陸民燕,等.基于S型測(cè)試工作量函數(shù)的軟件可靠性增長(zhǎng)模型 [J].北京航空航天大學(xué)學(xué)報(bào),2011,37(2):149-154+160.
[8] 楊宏宇,徐晉.基于改進(jìn)隨機(jī)森林算法的Android惡意軟件檢測(cè) [J].通信學(xué)報(bào),2017,38(4):8-16.
作者簡(jiǎn)介:蘇智韜(1992—),男,漢族,四川綿陽(yáng)人,碩士研究生在讀,研究方向:基于機(jī)器學(xué)習(xí)的軟件自動(dòng)化測(cè)試。