陳曉璠,鄧硯谷
(南昌航空大學(xué),江西南昌330063)
計(jì)算機(jī)系統(tǒng)的功能日益強(qiáng)大,軟件系統(tǒng)的復(fù)雜性也逐漸凸顯,軟件系統(tǒng)的維護(hù)難度逐漸增大,與軟件有關(guān)的程序失效問(wèn)題層出不窮,而人們對(duì)計(jì)算機(jī)系統(tǒng)軟件應(yīng)用的可靠性需求并未降低,反而逐漸增多。目前軍事國(guó)防、金融、通信等領(lǐng)域均離不開計(jì)算機(jī)系統(tǒng),若計(jì)算機(jī)不能長(zhǎng)時(shí)間穩(wěn)定運(yùn)行,在一定程度上對(duì)社會(huì)經(jīng)濟(jì)存在不可忽視的影響。
計(jì)算機(jī)系統(tǒng)中軟件老化可理解為服務(wù)器軟件在長(zhǎng)時(shí)間工作后,性能出現(xiàn)衰退。大部分人認(rèn)為老化僅出現(xiàn)于計(jì)算機(jī)硬件系統(tǒng)里,但針對(duì)軟件來(lái)講,軟件老化問(wèn)題已不少見[1]。一個(gè)軟件工作后,伴隨時(shí)間的積累,軟件內(nèi)部潛藏的缺陷將逐漸凸顯,致使軟件系統(tǒng)性能老化。通俗來(lái)講,軟件系統(tǒng)使用時(shí)間較長(zhǎng)后,系統(tǒng)資源將出現(xiàn)明顯耗損,服務(wù)速度、服務(wù)質(zhì)量也大大降低。為此,軟件老化趨勢(shì)預(yù)測(cè),能夠?yàn)檐浖到y(tǒng)失效起到?jīng)Q定性作用。文獻(xiàn)[2]與文獻(xiàn)[3]的研究人員均對(duì)軟件缺陷問(wèn)題進(jìn)行研究,分別提出了半監(jiān)督集成跨項(xiàng)目軟件缺陷預(yù)測(cè)方法、融合多策略特征篩選的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法,可對(duì)軟件缺陷進(jìn)行準(zhǔn)確預(yù)測(cè),但未曾考慮到軟件老化的動(dòng)態(tài)性,僅可以識(shí)別軟件缺陷模式,未能對(duì)缺陷模式下的老化趨勢(shì)進(jìn)行準(zhǔn)確預(yù)測(cè)。為此,提出基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)方法,該方法與同類方法的差異在于使用動(dòng)態(tài)命令樹算法優(yōu)化軟件老化預(yù)測(cè)效果,可動(dòng)態(tài)預(yù)測(cè)軟件老化趨勢(shì),這對(duì)軟件系統(tǒng)維護(hù)存在十分重要的意義。
考慮傳統(tǒng)粒子濾波方法的狀態(tài)方程具有單一性,未能適應(yīng)動(dòng)態(tài)的軟件老化趨勢(shì),且在軟件老化趨勢(shì)預(yù)測(cè)過(guò)程中,對(duì)軟件老化特征的提取必須根據(jù)經(jīng)驗(yàn)判斷,訓(xùn)練過(guò)程需要大量軟件老化數(shù)據(jù),應(yīng)用成本較多[4]。為此,本文使用基于降噪自編碼器與混合趨勢(shì)粒子濾波的軟件老化趨勢(shì)預(yù)測(cè)方法,克服上述問(wèn)題。
2.1.1 混合軌跡粒子濾波
本文使用混合軌跡粒子濾波方法,通過(guò)最小二乘擬合最新階段軟件老化觀測(cè)值,選取當(dāng)中擬合誤差平方和最低的函數(shù)設(shè)成粒子濾波的狀態(tài)方程,此方法能夠伴隨軟件老化趨勢(shì)的變化而自主變化粒子濾波狀態(tài)方程[5-6]。
混合軌跡粒子濾波方法原理如圖1所示。
圖1 混合軌跡粒子濾波方法原理
如圖1所示,混合軌跡粒子濾波方法應(yīng)用步驟是:
步驟一:初始化軟件老化趨勢(shì)預(yù)測(cè)數(shù)據(jù)特征數(shù)目j=1;
步驟二:輸入d個(gè)軟件老化趨勢(shì)觀測(cè)值,使用最小二乘方法擬合多個(gè)老化趨勢(shì)種類函數(shù),運(yùn)算獲取平方誤差與最小函數(shù)并設(shè)成粒子濾波狀態(tài)方程;
步驟三:通過(guò)粒子濾波算法對(duì)狀態(tài)方程時(shí)變參數(shù)實(shí)施優(yōu)化,判斷軟件老化趨勢(shì),設(shè)置閾值運(yùn)算軟件剩下應(yīng)用壽命[7];
步驟四:增多b個(gè)軟件老化趨勢(shì)觀測(cè)值(b 圖中使用的擬合函數(shù)是 rt+1=β1rt+β2 (1) 式中,rt表示t時(shí)刻的軟件狀態(tài)值;rt+1表示h+1時(shí)刻的軟件狀態(tài)值;βn表示狀態(tài)函數(shù)參數(shù)。 2.1.2 特征提取 在實(shí)施降噪自編碼器訓(xùn)練時(shí),對(duì)軟件老化特征的歸一化十分重要,歸一化后的軟件老化數(shù)據(jù)能夠優(yōu)化降噪自編碼器的學(xué)習(xí)效率,優(yōu)化降噪自編碼器的學(xué)習(xí)準(zhǔn)確性[8]。所以,本文擴(kuò)展頻域能量占比,實(shí)現(xiàn)軟件老化特征的歸一化,將歸一化后的軟件老化數(shù)據(jù)設(shè)成降噪自編碼器的輸入,擴(kuò)展頻域能量占比的方法是 (2) 式中,軟件老化趨勢(shì)預(yù)測(cè)數(shù)據(jù)的頻譜與特征數(shù)目是v(g);軟件老化趨勢(shì)預(yù)測(cè)數(shù)據(jù)的頻域區(qū)間寬度與頻譜能量占比的擴(kuò)展系數(shù)是h;頻譜能量占比的偏置系數(shù)是δ。 預(yù)測(cè)實(shí)際軟件老化趨勢(shì)時(shí),可能會(huì)存在軟件老化趨勢(shì)預(yù)測(cè)數(shù)據(jù)樣本數(shù)量低于軟件老化特征數(shù)量的問(wèn)題,此時(shí)訓(xùn)練過(guò)程將出現(xiàn)過(guò)擬合問(wèn)題,所以,需要在有限的訓(xùn)練樣本里導(dǎo)入噪聲擴(kuò)展訓(xùn)練樣本,以此抑制過(guò)擬合問(wèn)題[9-10]。 2.1.3 降噪自編碼驗(yàn)證集誤差提取 在軟件全壽命周期里均勻采集并提取軟件老化數(shù)據(jù)特征樣本,將軟件老化特征樣本集合設(shè)成Q。訓(xùn)練時(shí),把樣本集合Q導(dǎo)入噪聲后設(shè)成訓(xùn)練樣本和測(cè)試樣本,最小化代價(jià)函數(shù),以此實(shí)現(xiàn)軟件老化特征重構(gòu)。 在預(yù)測(cè)軟件老化趨勢(shì)時(shí),使用訓(xùn)練完畢的降噪自編碼器運(yùn)算測(cè)試樣本P的各個(gè)輸入和輸出的重構(gòu)誤差DV,把它設(shè)成描述軟件老化趨勢(shì)的觀測(cè)值。DV可使用重構(gòu)值φ和原始特征值φ運(yùn)算獲取 (3) 由于正常情況下,軟件老化特征在訓(xùn)練完畢的自編碼器里重構(gòu)誤差較小,伴隨軟件老化程度變大,獲取的軟件老化特征樣本和軟件未老化樣本差異也日益變大,此時(shí)DV也開始變大。DV屬于一種單一曲線,所以僅需要獲取軟件完全老化時(shí)的重構(gòu)誤差閾值便能夠使用混合軌跡粒子濾波方法實(shí)施軟件老化趨勢(shì)預(yù)測(cè)。此方法能夠降低訓(xùn)練過(guò)程里采集的軟件老化特征數(shù)據(jù)量,訓(xùn)練成本變小,訓(xùn)練效率變高。 2.1.4 預(yù)測(cè)流程 降噪自編碼器與混合趨勢(shì)粒子濾波的軟件老化趨勢(shì)預(yù)測(cè)方法的預(yù)測(cè)流程圖如圖2所示。 圖2 降噪自編碼器與混合趨勢(shì)粒子濾波的軟件老化趨勢(shì)預(yù)測(cè)方法流程圖 綜上所述,基于降噪自編碼器與混合趨勢(shì)粒子濾波的軟件老化趨勢(shì)預(yù)測(cè)方法的步驟是: 步驟一:訓(xùn)練軟件老化趨勢(shì)預(yù)測(cè)樣本:采集軟件老化數(shù)據(jù),得到軟件在沒(méi)有出現(xiàn)老化時(shí)的數(shù)據(jù)特征,導(dǎo)入高斯噪聲,增多訓(xùn)練樣本數(shù)目; 步驟二:訓(xùn)練降噪自編碼器,提取閾值:設(shè)定網(wǎng)絡(luò)結(jié)構(gòu)參數(shù),建立降噪自編碼器神經(jīng)網(wǎng)絡(luò)。將訓(xùn)練樣本輸入至降噪自編碼器神經(jīng)網(wǎng)絡(luò)中,代價(jià)函數(shù)實(shí)施最小化,按照測(cè)試樣本調(diào)節(jié)降噪自編碼器神經(jīng)網(wǎng)絡(luò)的超參數(shù),完成訓(xùn)練集特征重構(gòu)。把軟件完全老化的數(shù)據(jù)特征輸入訓(xùn)練完畢的降噪自編碼器神經(jīng)網(wǎng)絡(luò)之中,獲取軟件老化閾值; 步驟三:軟件老化數(shù)據(jù)特征重構(gòu)誤差獲取。把軟件老化數(shù)據(jù)特征輸入到降噪自編碼器神經(jīng)網(wǎng)絡(luò),得到重構(gòu)誤差; 步驟四:軟件老化趨勢(shì)預(yù)測(cè)。把重構(gòu)誤差進(jìn)行平滑處理后,設(shè)成觀測(cè)值分別輸入的混合趨勢(shì)粒子濾波算法里,實(shí)施軟件老化趨勢(shì)預(yù)測(cè)。 因預(yù)測(cè)軟件老化趨勢(shì)時(shí),軟件老化趨勢(shì)數(shù)據(jù)具有動(dòng)態(tài)性,軟件老化趨勢(shì)預(yù)測(cè)樣本也存在變化,前一階段的數(shù)據(jù)樣本將不適用于后一階段的預(yù)測(cè)任務(wù),為此,預(yù)測(cè)指令也分為新增、重寫、去除等。為實(shí)現(xiàn)高精度的軟件老化趨勢(shì)預(yù)測(cè),本小節(jié)使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法,優(yōu)化管理軟件老化趨勢(shì)預(yù)測(cè)命令,實(shí)現(xiàn)軟件老化趨勢(shì)預(yù)測(cè)效果優(yōu)化。 2.2.1 動(dòng)態(tài)命令樹的構(gòu)建 在軟件老化趨勢(shì)預(yù)測(cè)時(shí),使用動(dòng)態(tài)命令樹合理的組織與管理預(yù)測(cè)命令,動(dòng)態(tài)命令樹結(jié)構(gòu)中包含雙向鏈表、多個(gè)平衡二叉子樹鏈表,其可以在軟件老化趨勢(shì)預(yù)測(cè)命令中動(dòng)態(tài)變化預(yù)測(cè)指令,且應(yīng)用效率顯著。存儲(chǔ)結(jié)構(gòu)如圖3所示。 圖3 動(dòng)態(tài)命令樹結(jié)構(gòu)示意圖 雙向鏈表是按照軟件老化趨勢(shì)預(yù)測(cè)命令集中命令行的命令關(guān)鍵字而建立的,軟件老化趨勢(shì)預(yù)測(cè)命令集里相應(yīng)的命令域,是鏈表里各個(gè)結(jié)點(diǎn)所存儲(chǔ)的數(shù)據(jù)信息,且各個(gè)結(jié)點(diǎn)具有相應(yīng)的命令行處理入口,此入口與二級(jí)鏈表存在連接性[11]。軟件老化趨勢(shì)預(yù)測(cè)命令建立后,需要先根據(jù)命令關(guān)鍵字,檢索雙向鏈表定位至相應(yīng)的結(jié)點(diǎn),然后在此節(jié)點(diǎn)入口位置進(jìn)入相應(yīng)的平衡二叉子樹里,實(shí)施第二次定位,獲取匹配節(jié)點(diǎn),此節(jié)點(diǎn)相應(yīng)的位置即為命令行管理的位置。 動(dòng)態(tài)命令樹雙向鏈表結(jié)點(diǎn)的存儲(chǔ)結(jié)構(gòu)分為四部分,第一部分是軟件老化趨勢(shì)預(yù)測(cè)命令行節(jié)點(diǎn)屬性結(jié)構(gòu)入口指針;第二部分是孩子結(jié)點(diǎn)指針;第三部分是前驅(qū)結(jié)點(diǎn)指針;第四部分是后繼節(jié)點(diǎn)指針。軟件老化趨勢(shì)預(yù)測(cè)命令行節(jié)點(diǎn)屬性結(jié)構(gòu)入口指針可存儲(chǔ)命令行記錄,其屬于動(dòng)態(tài)命令樹執(zhí)行命令的憑據(jù)。孩子結(jié)點(diǎn)指針指向命令處理的入口地址;前驅(qū)結(jié)點(diǎn)指針、后繼節(jié)點(diǎn)指針依次指向節(jié)點(diǎn)的前驅(qū)和后繼,可較好的管理雙向鏈表。 使用雙向鏈表結(jié)點(diǎn)數(shù)據(jù)建立軟件老化趨勢(shì)預(yù)測(cè)命令樹時(shí),雙向鏈表是按照軟件老化趨勢(shì)預(yù)測(cè)命令關(guān)鍵字順序構(gòu)建,若雙向鏈表里某結(jié)點(diǎn)的命令關(guān)鍵字和軟件老化趨勢(shì)預(yù)測(cè)命令行的關(guān)鍵詞一致,便把相應(yīng)操作變換至此結(jié)點(diǎn)相應(yīng)的子樹中。軟件老化趨勢(shì)預(yù)測(cè)命令行節(jié)點(diǎn)屬性的結(jié)構(gòu)分為命令關(guān)鍵字、命令參數(shù)掩碼值、命令屬性R/A、命令優(yōu)先級(jí)。 命令關(guān)鍵字即為軟件老化趨勢(shì)預(yù)測(cè)命令的首個(gè)關(guān)鍵字;命令參數(shù)掩碼值為除了命令關(guān)鍵詞之外全部參數(shù)關(guān)鍵字大小對(duì)比值;命令屬性R/A與命令行管理存在直接聯(lián)系;命令優(yōu)先級(jí)是軟件老化趨勢(shì)預(yù)測(cè)命令的先后順序,命令集里命令行記錄均根據(jù)結(jié)點(diǎn)模式保存在雙向鏈表里。 2.2.2 動(dòng)態(tài)命令樹算法 為優(yōu)化動(dòng)態(tài)命令樹算法效率,讓它可以高效的更新軟件老化趨勢(shì)預(yù)測(cè)命令信息,把平衡二叉樹設(shè)計(jì)為動(dòng)態(tài)命令樹的形式[12]。在動(dòng)態(tài)命令樹雙向鏈表里檢索獲取命令行的命令關(guān)鍵字所匹配的結(jié)點(diǎn)信息域后,將此匹配節(jié)點(diǎn)設(shè)成入口,進(jìn)入平衡二叉樹,然后將輸入的軟件老化趨勢(shì)預(yù)測(cè)命令信息按照具體情況實(shí)施新增、重寫或去除等管理。 針對(duì)軟件老化趨勢(shì)預(yù)測(cè)命令重寫問(wèn)題,可在雙鏈表中操作,其不存在結(jié)點(diǎn)空間釋放情況。例如針對(duì)軟件老化趨勢(shì)預(yù)測(cè)命令新增問(wèn)題,需要融合雙向鏈表與平衡二茬子樹鏈表的雙向應(yīng)用,不論是新增或去除,使用遞歸搜索模式便可獲取最合適的操作位置。 在軟件老化趨勢(shì)預(yù)測(cè)命令管理中,若軟件老化趨勢(shì)預(yù)測(cè)命令在平衡二叉子樹里,便表示此命令已存在,直接進(jìn)行編輯處理即可。若沒(méi)軟件老化趨勢(shì)預(yù)測(cè)命令不在平衡二叉子樹里,變需要在此樹中實(shí)施新增處理。 使用動(dòng)態(tài)命令樹算法管理軟件老化趨勢(shì)預(yù)測(cè)命令,能夠降低命令行的對(duì)比次數(shù),提高命令查詢效率,優(yōu)化軟件老化趨勢(shì)的動(dòng)態(tài)預(yù)測(cè)效果。 實(shí)驗(yàn)在Linux系統(tǒng)中設(shè)計(jì)應(yīng)用服務(wù)器,由于Linux系統(tǒng)穩(wěn)定性與安全性顯著,且使用性能較好。目前很多企業(yè)服務(wù)器都把自家企業(yè)的服務(wù)設(shè)置在Linux系統(tǒng)中。實(shí)驗(yàn)里本文使用的Linux系統(tǒng)處理器核數(shù)是4核,網(wǎng)站服務(wù)器使用Tomcat服務(wù)器,Tomcat服務(wù)器是一種輕量級(jí)應(yīng)用服務(wù)器,可獨(dú)立運(yùn)行。為模擬軟件老化過(guò)程,使用壓力測(cè)試工具siege模擬,實(shí)驗(yàn)環(huán)境使用的工具信息如表1所示。 表1 實(shí)驗(yàn)環(huán)境使用工具 在體現(xiàn)軟件老化趨勢(shì)的多個(gè)指標(biāo)里,內(nèi)存使用是核心指標(biāo)之一。所以把內(nèi)存設(shè)成軟件老化特征,使用本文方法預(yù)測(cè)內(nèi)存衰退趨勢(shì),實(shí)現(xiàn)軟件老化趨勢(shì)預(yù)測(cè)。Linux操作系統(tǒng)長(zhǎng)時(shí)間使用后,內(nèi)存損耗將逐漸嚴(yán)重,每日需要重啟4次以上,可用內(nèi)存的日變化詳情如圖4所示。 圖4 可用內(nèi)存的日變化詳情 使用本文方法預(yù)測(cè)Linux操作系統(tǒng)內(nèi)存衰退趨勢(shì),實(shí)現(xiàn)Linux操作系統(tǒng)軟件老化趨勢(shì)預(yù)測(cè)。使用平均絕對(duì)誤差、均方誤差評(píng)價(jià)本文方法對(duì)Linux操作系統(tǒng)軟件老化趨勢(shì)預(yù)測(cè)效果,平均絕對(duì)誤差MAE、均方誤差MSE的表達(dá)式如下式所示 (4) (5) 式中,m是軟件老化特征數(shù);i是軟件老化趨勢(shì)預(yù)測(cè)次數(shù);o1、o2依次是實(shí)際值與預(yù)測(cè)值。 使用文獻(xiàn)[2]提出的半監(jiān)督集成跨項(xiàng)目軟件缺陷預(yù)測(cè)方法、文獻(xiàn)[3]提出的融合多策略特征篩選的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法作為對(duì)比方法,以此評(píng)價(jià)本文方法的預(yù)測(cè)效果。三種方法的預(yù)測(cè)效果如圖5、圖6、圖7所示。 圖5 本文方法預(yù)測(cè)效果 圖6 文獻(xiàn)[2]方法預(yù)測(cè)效果 圖7 文獻(xiàn)[3]方法預(yù)測(cè)效果 對(duì)比圖5、圖6、圖7可知,三種方法對(duì)Linux操作系統(tǒng)內(nèi)存衰退趨勢(shì)的預(yù)測(cè)效果存在明顯差異,本文方法預(yù)測(cè)結(jié)果的平均絕對(duì)誤差、均方誤差小于0.04,半監(jiān)督集成跨項(xiàng)目軟件缺陷預(yù)測(cè)方法、融合多策略特征篩選的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法預(yù)測(cè)結(jié)果的平均絕對(duì)誤差、均方誤差都大于本文方法,表示本文方法對(duì)Linux操作系統(tǒng)內(nèi)存衰退趨勢(shì)的預(yù)測(cè)和實(shí)際值偏離較小,精確度較高,軟件老化趨勢(shì)預(yù)測(cè)效果更好。 測(cè)試本文方法中基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法的使用價(jià)值,此方法使用價(jià)值主要通過(guò)軟件老化趨勢(shì)預(yù)測(cè)指令的新增、重寫、去除三種指令管理效果體現(xiàn)。將軟件老化趨勢(shì)預(yù)測(cè)指令的數(shù)目依次設(shè)成5個(gè)、10個(gè)、15個(gè)、20個(gè),測(cè)試在使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法前后,軟件老化趨勢(shì)指令新增、重寫、去除三種指令操作的響應(yīng)耗時(shí),結(jié)果如圖8、圖9、圖10所示。 圖8 新增指令 圖9 重寫指令 圖10 去除指令 分析圖8、圖9、圖10可知,在使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法前后,新增、重寫、去除三種指令響應(yīng)耗時(shí)都存在一些變化,在未使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法之前,新增、重寫、去除三種指令響應(yīng)耗時(shí)超過(guò)300ms,雖然響應(yīng)耗時(shí)不顯著,但是和使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法相比,響應(yīng)耗時(shí)較多。使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法后,新增、重寫、去除三種指令響應(yīng)耗時(shí)低于200ms,響應(yīng)速度較快,指令管理效率高,這對(duì)軟件老化趨勢(shì)預(yù)測(cè)效率存在積極影響,可提升本文方法對(duì)軟件老化趨勢(shì)預(yù)測(cè)效果。 為預(yù)測(cè)軟件老化趨勢(shì),提出基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)方法。本文方法和同類軟件老化趨勢(shì)預(yù)測(cè)方法的差異在于本文方法中使用基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法,動(dòng)態(tài)管理軟件老化趨勢(shì)預(yù)測(cè)指令,可實(shí)現(xiàn)軟件老化趨勢(shì)預(yù)測(cè)階段性指令管理,提升軟件老化預(yù)測(cè)效率。 在實(shí)驗(yàn)中,證明了本文方法可以高精度的預(yù)測(cè)軟件老化趨勢(shì),比半監(jiān)督集成跨項(xiàng)目軟件缺陷預(yù)測(cè)方法、融合多策略特征篩選的跨項(xiàng)目軟件缺陷預(yù)測(cè)方法的使用效果更佳,并且本文方法中,基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法的使用,可大大提升軟件老化趨勢(shì)預(yù)測(cè)指令管理效率。2.2 基于動(dòng)態(tài)命令樹算法的軟件老化趨勢(shì)預(yù)測(cè)命令管理方法
3 實(shí)驗(yàn)分析
4 結(jié)論