摘 ?要:針對現(xiàn)階段軟件缺陷預測模型研究少和準確率低的問題,提出了一種基于LSTM的軟件缺陷預測模型。基于LSTM對輸入序列信息的相關性進行了研究,通過Prophet和Ohba開源數(shù)據(jù)集對網絡模型進行訓練和測試。實驗結果表明:在輸入序列為500時,LSTM的檢測效果準確率為99.12%,誤報率為0.91%,優(yōu)于RNN的93.58%的準確率和5.76%的誤報率。
關鍵詞:深度學習;長短期記憶;軟件缺陷預測;RNN
中圖分類號:TP315.53 ? ? 文獻標識碼:A 文章編號: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 ?引 ?言
早期的軟件測試基本等同于調試,最常見的測試方法是面向圖形和非圖形的用戶界面測試,實際上,一個軟件從需求分析、開發(fā)設計到最后上線交付誕生的過程中,離不開軟件缺陷的測試和預測技術的思想。導致軟件缺陷的主要因素有概念需求說明的精細化,測試工具和數(shù)據(jù)的綜合化,模型的合理化以及測試人員的專業(yè)化[1]。目前,利用機器學習算法對軟件缺陷預測是當下的研究熱點,國內外學者對軟件預測技術進行了一些研究。文獻[2]通過LSTM和RNN簡化語音識別技術,可預測疾病、圖像分類和控制聊天機器人等任務;文獻[3]利用RNN輸入文本的微小增改處理方法,對錯誤文本分類。
筆者在軟件圖形用戶界面(GUI)測試中,發(fā)現(xiàn)自動化測試工具在某些環(huán)節(jié)可以代替人工測試與應用程序進行交互,但自動化測試工具在不同的GUI狀態(tài)下對于可接受的手勢識別存在限制和缺陷。不同測試生成器的主要區(qū)別在于生成測試用例時所采用的策略,常用的策略主要包括基于模型策略、隨機策略和針對性策略三種[4],本文利用機器學習算法LSTM構建模型策略。測試生成器的模型策略通常使用RNN,主要是基于訓練算法BPTT[5]。但是,單純地使用RNN會出現(xiàn)權重指數(shù)級爆炸和梯度消失的問題,難以捕捉長時間輸入序列的關聯(lián)性,使重要的信息可能不會被輸出[6]。因此,本文使用了RNN的改進策略長短期記憶模型(LSTM),可以更好地處理和預測時間序列的重要事件。
1 ?LSTM的網絡模型結構
LSTM在語音識別、自然語言處理、圖像處理和視頻分類等方面表現(xiàn)出了很好的效果[7]。LSTM和RNN相比,主要解決了RNN長期依賴的問題。LSTM的網絡模型結構如圖1所示,LSTM通過引入記憶單元、輸入門、遺忘門和輸出門解決梯度消失問題。其中,t時刻的輸入信息為xt,yt為t時刻的輸出,Sigmoid激活函數(shù)為σ,?為元素相乘,⊕為元素相加,門結構由σ和?組成。前一級記憶單元輸入的信息是否需要被保留由遺忘門決定,輸入門確定重要的信息加載到記憶單元,輸出門則決定了下一個隱藏狀態(tài)。
2 ?LSTM預測模型的建立
LSTM是一種具有很好學習性的神經網絡算法模型[8]。在實際工程軟件測試過程中,測試人員依據(jù)測試需求說明書和測試用例發(fā)現(xiàn)軟件缺陷。算法模型的輸入層包括日常測試用例、需求說明書、測試用例數(shù)個被測對象,輸出層則是軟件缺陷個數(shù)及問題描述。
2.1 ?LSTM的設計
RNN推導演進后可得到LSTM,原始的RNN由于隱藏層只有一個狀態(tài)h,對于短期的輸入比較敏感。因此,在此RNN的基礎上增加一個狀態(tài)c,狀態(tài)c又稱為單元狀態(tài),按照時間維度展開如圖2所示,讓它保存長期的狀態(tài),解決了原始RNN無法處理長距離依賴的問題。
從圖2可以看出,LSTM的輸入有三個:xt為當前時刻的輸入,ht-1為前一時刻的輸出,ct-1為前一時刻的單元狀態(tài),模型當前時刻的兩個輸出為ht和ct。LSTM利用三個控制開關控制長期狀態(tài),思路方法如下:前一個開關s1保存控制長期狀態(tài)ct,中間的開關s3將輸入的數(shù)據(jù)傳輸?shù)介L期狀態(tài)ct,最后一個開關s2控制是否將長期狀態(tài)ct作為輸出,三個開關控制長期狀態(tài)的模思路如圖3所示。
2.2 ?LSTM的前向計算
門是代替開關算法中的重要組成部分,是一層全連接層,輸入和輸出都是向量。在LSTM算法中,權重向量為W,偏置項為b,門的一般表達式可寫為:
g(x)=σ(Wx+b) ? ? ? ? ? ? ? ? ? ? ? ?(1)
其原理是通過輸出向量乘以控制向量,當門輸出為0代表不通過,門輸出為1時,向量與1相乘則不會改變,表示通過。LSTM用輸入門和遺忘門來控制單元狀態(tài)c的內容,遺忘門決定了前一時刻的單元狀態(tài)ct-1,輸入門決定了當前時刻的網絡輸入xt保存到單元狀態(tài)的數(shù)量。遺忘門可表示為:
ft=σ(Wf ·[ht-1,xt]+bf) ? ? ? ? ? ? ? ? ? (2)
其中,Wf為遺忘門的權重矩陣,[ht-1,xt]為兩個向量的組合,bf為遺忘門的偏置項,σ為激活函數(shù)。若輸入的維度為dh,單元狀態(tài)的維度為dc,則Wf維度為dc·(dh+dx)。實際上,權重矩陣Wf是兩個矩陣Wfx和Wfh拼接而成。Wf可以寫為:
(3)
輸入門可以表示為:
it=σ(Wi×[ht-1,xt]+bi) ? ? ? ? ? ? ? ? ? ? ? ?(4)
記憶單元的狀態(tài)可通過上一時刻的輸出和本次的輸入計算,即ct-1按元素乘遺忘門ft,當前輸入的單元狀態(tài)乘輸入門it,兩個乘積項相加可得到ct,將LSTM的當前記憶單元和前一時刻的狀態(tài)組合得到了新的單元狀態(tài)。而在數(shù)據(jù)傳輸過程中,輸入門可以避免當前不重要的信息進入記憶單元,遺忘門可以保存前一時刻的數(shù)據(jù)信息記憶,最終的輸出門控制當前的記憶單元輸出數(shù)據(jù)信息,輸出門的計算可表示為:
ot=σ(Wo×[ht-1,xt]+bo) ? ? ? ? ? ? ? ? ? ? ?(5)
輸出門和記憶單元狀態(tài)最終決定了LSTM的輸出,可以寫為:
ht=ot×tanh(ct) ? ? ? ? ? ? ? ? ? ? ? ? ? (6)
LSTM最終數(shù)據(jù)輸出過程如圖4所示。
2.3 ?LSTM訓練
由于輸入狀態(tài)是連續(xù)的時間序列,LSTM可以很好地解決時序問題,根據(jù)前面的介紹訓練模型,LSTM反向傳播算法的訓練分為三個步驟:
Step1:求解前向計算的每個神經元ft,it,ot,ht向量的輸出值。
Step2:分別計算每個神經元兩個方向的誤差項δ值。即每個時刻和向上一層傳播的誤差項。
Step3:根據(jù)得到的誤差項計算權重的梯度。
LSTM的詳細計算過程和推導公式為:與RNN類似,LSTM誤差反向傳播的計算利用誤差項的δ值,采用梯度下降法更新權值,在LSTM的訓練過程中,需要學習的參數(shù)共有8組,分別為輸入門的Wi和bi,輸出門的Wo和bo,以及記憶單元狀態(tài)的Wc和偏置項bc。在反向傳播時權重矩陣使用不同的公式,因此,權重矩陣Wf、Wi、Wc、Wo被分開為兩個矩陣:Wfh、Wfx、Wih、Wix、Woh、Wox、Wch、Wcx。誤差沿時間反向傳遞,E為損失函數(shù),在t時刻LSTM的輸出值為ht。我們定義t時刻的誤差項δt為:
(7)
通過式(7)可知,損失函數(shù)對輸出值的導數(shù)為誤差項,建立的LSTM有四個加權輸入,而向上一層傳遞的只有一個誤差項,因此,分別定義四個加權輸入對應的誤差項為:
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)
沿時間反向傳遞t-1時刻的誤差項δt-1可表示為:
(16)
以輸出門為例,根據(jù)得到的誤差項,計算當前時刻權重矩陣的梯度和偏置項梯度,計算過程可表示為式(17)~式(19):
(17)
(18)
(19)
輸出門最終的梯度為各個時刻的梯度之和,同理,遺忘門、輸入門和記憶單元的權重矩陣和偏置項的梯度可以依據(jù)輸出門的求解方法得到。
3 ?實驗及結果分析
本文主要是基于時間序列的測試序列驗證。實驗環(huán)境:主機CPU型號為Intel i5 9300H,主頻為2.4 GHz,物理內存為8 G,64位操作系統(tǒng),深度學習框架為TensorFlow 1.11.10,代碼運行平臺為Python3.7。采用的訓練數(shù)據(jù)有語言數(shù)據(jù)聯(lián)盟提供的漢語文本語料和失效數(shù)據(jù)集Ohba,訓練集是從網上自行下載的Prophet時間序列數(shù)據(jù)集,隨機選取3 271個樣本集,訓練樣本集和測試樣本集的占比為8:2。網絡模型的參數(shù)預設值通過多次實驗迭代100次確定,具體參數(shù)設置如表1所示。
LSTM結構的輸出可以是任意長度的序列,但是序列的長短會影響獲取時間,序列越長,模型訓練的時間也會增加。序列長度則為包含字符的個數(shù),經多次測試并考慮到訓練時間和擬合度的問題,本文選擇500作為模型訓練的序列長度。為說明驗證本文模型特征的有效性,針對同一數(shù)據(jù)集構建其他文獻中常用的RNN檢測結果,訓練和測試分別表示訓練樣本集和測試樣本集的建模與檢測時間。
由表2可知,LSTM調用處理序列在準確率(ACC)、檢測率(DR)和誤報率(FAR)均優(yōu)于RNN,文本構建的LSTM的檢測效果準確率為99.12%,誤報率為0.91%,優(yōu)于RNN的93.58%的檢測率和5.76%的誤報率。因為本文的模型訓練采用多個數(shù)據(jù)集不斷訓練優(yōu)化模型,反復實驗修改迭代次數(shù),LSTM能夠對重要的輸入信息保留,不會出現(xiàn)權重比較大的信息遺失等問題。
4 ?結 ?論
本文對基于軟件故障檢測和預測進行了研究,提出了一種基于LSTM的軟件測試方法,針對目前軟件工程的故障類型繁多和需求復雜等特點,為更好地實現(xiàn)軟件缺陷預測和故障預測方法,與RNN進行了比較,結果顯示提出的LSTM具有以下優(yōu)勢:模型的檢測時間短,擬合程度較好;網絡模型在準確率、檢測率和誤報率三個指標上的性能較好;網絡結構上要優(yōu)于RNN的模型結構,LSTM的遺忘門會使得前一級輸入的狀態(tài)信息按照權重大小輸出。同時,本文方法也存在一些不足,目前僅提出了字符序列信息,對語音和圖像等測試訓練還需要加強,且模型構建的時間長,下一步工作將提取更多的輸入信息特征,進一步優(yōu)化模型,提高模型的可用性和高效性。
參考文獻:
[1] 王文滔.Android手機軟件自動化測試的設計與實現(xiàn) [D].北京:北京交通大學,2015.
[2] 左玲云,張晴晴,黎塔,等.電話交談語音識別中基于LSTM-DNN語言模型的重評估方法研究 [J].重慶郵電大學學報(自然科學版),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] 楊波,吳際,徐珞,等.一種軟件測試需求建模及測試用例生成方法 [J].計算機學報,2014,37(3):522-538.
[6] 韓文凱.認知網絡的頻譜感知對抗技術研究[D].成都:電子科技大學,2018.
[7] 李秋英,李海峰,陸民燕,等.基于S型測試工作量函數(shù)的軟件可靠性增長模型 [J].北京航空航天大學學報,2011,37(2):149-154+160.
[8] 楊宏宇,徐晉.基于改進隨機森林算法的Android惡意軟件檢測 [J].通信學報,2017,38(4):8-16.
作者簡介:蘇智韜(1992—),男,漢族,四川綿陽人,碩士研究生在讀,研究方向:基于機器學習的軟件自動化測試。