国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于變異技術(shù)的軟件故障修復(fù)方法研究

2015-06-11 13:23:05曹克浩
今日湖北·下旬刊 2015年12期
關(guān)鍵詞:故障定位

曹克浩

摘 要 程序的可維護(hù)性和可靠性已經(jīng)成為軟件產(chǎn)業(yè)發(fā)展的突出難題,如何快速鎖定故障,如何有效修復(fù)軟件已經(jīng)成為當(dāng)前軟件工程實(shí)踐中最重要的活動之一?;谧儺惖某绦蚬收闲迯?fù)技術(shù),在闡述C程序表達(dá)式故障的方法中,利用變異修復(fù)機(jī)制來輔助修復(fù)程序故障,并通過實(shí)例故障來驗(yàn)證方法的有效性。

關(guān)鍵詞 程序軟件 變異技術(shù) 故障定位 修復(fù)方法

計算機(jī)技術(shù)的發(fā)展,特別是軟件技術(shù)的廣泛應(yīng)用,越來越多的程序在出現(xiàn)故障后帶來了更多維護(hù)性難題。軟件測試技術(shù)的發(fā)展,主要針對軟件程序運(yùn)行可靠性問題,從程序故障的鎖定及修復(fù)中來提升軟件質(zhì)量。美國標(biāo)準(zhǔn)與技術(shù)研究所NIST調(diào)查顯示,軟件程序故障修復(fù)的成本每年達(dá)到595億美元,約占總GDP的0.6%。程序故障修復(fù)作為軟件工程實(shí)踐中的重要內(nèi)容,在軟件修復(fù)程序中耗時、費(fèi)力,且完全依賴于軟件開發(fā)人員的專業(yè)知識和行業(yè)經(jīng)驗(yàn)。這種現(xiàn)象不僅加長了軟件開發(fā)周期,也阻礙了軟件產(chǎn)業(yè)的快速發(fā)展。因此,積極從軟件程序修復(fù)技術(shù)及理論研究中,就軟件行業(yè)程序故障修復(fù)問題進(jìn)行探討,并從軟件故障修復(fù)實(shí)踐中來開發(fā)自動化修復(fù)工具,以改善軟件程序故障修復(fù)的缺陷。

一、當(dāng)前軟件程序故障修復(fù)現(xiàn)狀及方法研究

從軟件技術(shù)開發(fā)實(shí)踐來看,軟件程序故障是軟件工程的重要內(nèi)容,當(dāng)前軟件開發(fā)人員在面臨程序故障修復(fù)時,多以手工方式來進(jìn)行故障定位和修復(fù),使得程序開發(fā)周期較長,成本較高。國內(nèi)外對軟件故障修復(fù)理論的研究也取得了一定進(jìn)展,特別是在內(nèi)存管理、數(shù)據(jù)結(jié)構(gòu)修復(fù)及特定數(shù)據(jù)類型的故障提示中也取得一定成績。Dallmeier等人通過對軟件運(yùn)行與失敗的差異分析,利用回歸測試用例來減少程序修復(fù)后產(chǎn)生的新問題;Perkins等人通過不變式監(jiān)控程序的方法,就匯編級程序錯誤進(jìn)行自動檢測和修復(fù)。然而,這兩種方法主要針對條件表達(dá)式或監(jiān)控器軟件相關(guān)的錯誤修復(fù)。Arcuri等人首次以遺傳編程自動修復(fù)方法,根據(jù)程序規(guī)模的擴(kuò)大,利用遺傳編程搜索方法來進(jìn)行修復(fù),較為適宜單個函數(shù)的修復(fù);Weimer等人為了縮小進(jìn)化算子的搜索空間,采用抽象語法樹先對程序進(jìn)行抽象,再通過基于遺傳的編程方法就C語言程序和匯編語言程序進(jìn)行修復(fù)。我國學(xué)者何加浪等人在Weimer研究基礎(chǔ)上,利用不變量約束來對搜索空間進(jìn)行簡化,并針對測試過程難以覆蓋所有功能需求,提出成功測試用例學(xué)習(xí)的不變量約束來解決該難題;成功測試用例與失敗測試用例所執(zhí)行的路徑不同,對于程序故障及修復(fù)方法也不一致,反而限制了程序修復(fù)的類型;另外,該方法在修復(fù)過程中還產(chǎn)生大量無關(guān)冗余的代碼轉(zhuǎn)換;遺傳算法本身的非穩(wěn)定性,在程序本身的變化中也存在適應(yīng)性問題。

二、基于變異技術(shù)的軟件故障修復(fù)原理及步驟

(1)基于變異技術(shù)的軟件故障修復(fù)原理。傳統(tǒng)基于變異的測試技術(shù)是對已知程序,根據(jù)變異算子來得到一批程序故障變異體,利用這些變異體來對測試用例集T進(jìn)行測試。而新的基于變異技術(shù)的程序故障修復(fù)技術(shù),則是將之作為故障程序,根據(jù)變異算子來選擇故障程序的變異,從而得到一批變異體,利用已知的測試用例集來對這些變異體進(jìn)行驗(yàn)證,以得到程序故障修復(fù)目標(biāo)。在制定變異體是否修復(fù)軟件故障時,首先需要定義變異體的標(biāo)準(zhǔn),即對于變異體執(zhí)行完成后的輸出結(jié)果與期望不一致。任何一個被放棄的變異體都不能是故障程序的正確修復(fù)版本,原因是這些變異體曾導(dǎo)致測試用例執(zhí)行失敗。相反,如果一個變異體順利通過測試用例,說明本變異體被故障程序進(jìn)行正確修復(fù)。通過對這些潛在修復(fù)版本的分析,可以幫助程序開發(fā)人員得到期望的程序。

(2)故障程序修復(fù)實(shí)施步驟。基于變異技術(shù)的故障程序修復(fù)方法,其具體實(shí)施步驟表示如下:一是要確定故障類型,利用程序變異技術(shù)對某類特定的程序故障進(jìn)行測試,在修復(fù)之前,首先要明確變異修復(fù)程序的故障類型。程序設(shè)計人員在對程序常見故障類型進(jìn)行分析,并從發(fā)生概率高且危害大的故障類型進(jìn)行修復(fù),有助于提升軟件的修復(fù)效果,降低軟件開發(fā)成本。二是選擇合適的變異算子,對于變異算子是基于變異技術(shù)的故障修復(fù)方法,也是產(chǎn)生變異體的基礎(chǔ)。通過導(dǎo)入多元化變異算子,能夠從不同類型的故障測試中進(jìn)行修復(fù),最大化的提升變異體的生成。程序故障修復(fù)方法應(yīng)該能滿足不同類型的故障測試,高效的修復(fù)方法需要變異修復(fù)的代價盡可能小。因此,在對變異算子的設(shè)計上,要從執(zhí)行效率和變異體修復(fù)效果上來針對不同程序故障類型進(jìn)行修復(fù)。三是設(shè)定變異修復(fù)停止條件。在進(jìn)行變異技術(shù)故障修復(fù)執(zhí)行過程中,對于某些特定的程序故障,并不是所有程序故障都能夠得到修復(fù),只有當(dāng)產(chǎn)生并檢查一定數(shù)量的變異體后,如果找不到對應(yīng)的修復(fù)版本的變異體,則會提示:繼續(xù)還是停止;如果選擇繼續(xù),則進(jìn)行再次修復(fù)版本變異體的查找,否則直到找到變異體被檢查出,修復(fù)程序并不停止。通常情況下,對于修復(fù)對象為大型程序軟件時,對于變異體的數(shù)量要求也較大,如果選擇繼續(xù)則會浪費(fèi)系統(tǒng)資源,因此需要設(shè)置一個停止條件。三是變異故障程序,對于所設(shè)計的變異算子本身,由于設(shè)置的變異修復(fù)停止條件不同,對故障程序進(jìn)行變異產(chǎn)生變異體時,可以先利用故障定位技術(shù)來對故障程序進(jìn)行明確,再利用故障檢測結(jié)果來選擇修復(fù)程序故障,從而降低修復(fù)代價。四是確定修復(fù)變異體版本,并通過變異故障程序返回到產(chǎn)生新的變異體,以檢查和確定故障程序的潛在修復(fù)版本。

三、C語言程序故障修復(fù)方法

(1)C語言程序故障類型劃分。C語言軟件開發(fā)常用語言,在對C語言程序進(jìn)行故障修復(fù)測試中,需要對所提供的故障系統(tǒng)類型進(jìn)行分析,總的來說歸結(jié)為四類:即內(nèi)存故障,以內(nèi)存資源釋放、分配錯誤、函數(shù)返回值錯誤、非法指針應(yīng)用錯誤等;條件表達(dá)式錯誤,通常表現(xiàn)在If、While、For結(jié)構(gòu)開頭的條件表達(dá)式,其錯誤主要與關(guān)系運(yùn)算符、邏輯運(yùn)算符及邊界條件故障有關(guān);變量賦值錯誤,其故障主要發(fā)生在變量賦值語句中,如某些運(yùn)算符或邊界賦值錯誤而引發(fā)的變量賦值故障;語句冗余或缺失類錯誤,隨著程序工作流程和設(shè)計流程的差異而導(dǎo)致程序執(zhí)行失敗。

(2)C語言變異算子的設(shè)計。變異算子是程序故障修復(fù)的關(guān)鍵,也是基于變異測試技術(shù)最常用的程序變異體。變異算子在設(shè)計上主要從算術(shù)運(yùn)算符的變異、關(guān)系運(yùn)算符的變異,以及邏輯運(yùn)算符的變異中來完成。針對程序中常用的運(yùn)算符,能夠從運(yùn)算符錯誤引起的變量賦值故障或條件表達(dá)式故障中,對包含算術(shù)、關(guān)系、邏輯運(yùn)算符的程序語言進(jìn)行測試。針對程序設(shè)計中的條件表達(dá)式、變量賦值故障,以及語句冗余或賦值缺失等故障,從變異算子的設(shè)計上,能夠?qū)崿F(xiàn)對每一類特殊故障類型的修復(fù),如多一些子類型故障進(jìn)行修復(fù),就需要從程序發(fā)生錯誤的概率中進(jìn)行針對性設(shè)計,優(yōu)先為故障發(fā)生率高的程序設(shè)計相應(yīng)的變異算子。

(3)變異算子處理方法。針對不同類型的變異算子,在進(jìn)行變異故障修復(fù)中,對于運(yùn)算符變異,從常用運(yùn)算符如算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、自增/自減運(yùn)算符、位操作符、賦值運(yùn)算符等,利用替換運(yùn)算符進(jìn)行變異,能夠修復(fù)的故障類型主要有變量賦值故障和條件表達(dá)式故障。如對于條件表達(dá)式中的變異,針對可疑程序語句的條件表達(dá)式,從整體取反進(jìn)行變異,或者通過整體加1或減1來進(jìn)行變異;對于邊界值變異,針對可疑語句中的For循環(huán),通過初始量增1或減1進(jìn)行變異;對于初始化變量賦值偏差錯誤,可疑通過賦值方法進(jìn)行修復(fù);對于常量浮點(diǎn)變異,針對可疑語句進(jìn)行變異成等值的浮點(diǎn)型常量,如float a=1/2;假設(shè)程序?qū)的期望值為0.5,根據(jù)C語言語法,可疑從分子分母整型常量賦值中來引發(fā)變量賦值故障,以完成對錯誤的修復(fù)。對于類型擴(kuò)展變異,通過對可疑程序語句中的float、int等關(guān)鍵字,將其變異為高一級類型,以修復(fù)由精度缺失帶來的變量賦值故障。

(4)變量修復(fù)停止條件。從程序故障修復(fù)方法中,必須要對不能修復(fù)的故障類型,以及找不到潛在修復(fù)版本的情況進(jìn)行終止修復(fù),這就需要從變異修復(fù)中設(shè)定某一停止條件。如當(dāng)變異修復(fù)所使用的代價高于某一限值時,仍未找到潛在修復(fù)版本的變異體就會返回程序終止。簡言之,對于某一變異體從產(chǎn)生到執(zhí)行完所用的代價為e,若在找到潛在修復(fù)版本時需要檢查n個變異體,則此次修復(fù)代價為;可見,對于變異修復(fù)代價主要取決于n值大小,也就是修復(fù)過程所檢查的變異體數(shù)量。

(5)潛在修復(fù)版本的確定。基于變異技術(shù)的程序故障修復(fù),是對程序在執(zhí)行過程中對變異體進(jìn)行所有測試用例后還活著,則說明該變異體為潛在修復(fù)版本。同樣,在變異修復(fù)程序設(shè)計上,還應(yīng)該至少包括一個失敗測試用例,與潛在修復(fù)版本具有不同的輸出結(jié)果。基于變異技術(shù)的故障修復(fù)方法,并沒有對所有測試用例的數(shù)量進(jìn)行限制,當(dāng)每次測試用例集中的測試用例數(shù)量過多時,則會帶來更大的驗(yàn)證變異體的代價。因此,可以對測試用例集的選取進(jìn)行確定,以避免變異體修復(fù)所花費(fèi)的代價過多。程序設(shè)計人員可以從測試用例集的選擇上,先對測試用例集進(jìn)行優(yōu)化,再進(jìn)行故障程序變異修復(fù)。

參考文獻(xiàn):

[1]陳翔,顧慶.變異測試:原理、優(yōu)化和應(yīng)用[J].計算機(jī)科學(xué)與探索, 2012(12).

[2]周改云,張國平,呂瓊帥,黎遠(yuǎn)松.利用智能控制流方法的嵌入式軟件故障檢測[J].電子技術(shù)應(yīng)用,2015(10).

(作者單位:河南財政稅務(wù)高等??茖W(xué)校)

猜你喜歡
故障定位
城市軌道交通供電直流側(cè)短路故障定位技術(shù)探討
小電流接地系統(tǒng)故障定位技術(shù)研究
基于配電網(wǎng)故障停電管理系統(tǒng)的設(shè)計與應(yīng)用研究
基于GIS的電力系統(tǒng)光纜故障快速定位研究
光纖劣化分析技術(shù)研究
測控區(qū)和非測控區(qū)并存的配電網(wǎng)故障定位實(shí)用方法
探討智能配電網(wǎng)故障快速定位與故障恢復(fù)
電力電纜故障定位的探討
科技視界(2016年21期)2016-10-17 19:59:34
FTTX光纖線路常見故障查找與定位
CDMA 網(wǎng)絡(luò)IP 問題故障定位研究
海宁市| 绥宁县| 靖西县| 枝江市| 大埔区| 泰州市| 醴陵市| 黄大仙区| 齐河县| 根河市| 渑池县| 万州区| 南开区| 祁阳县| 荆州市| 荆门市| 明水县| 黑山县| 醴陵市| 随州市| 葫芦岛市| 恭城| 双牌县| 松溪县| 宝清县| 和田市| 武城县| 富平县| 许昌市| 贺兰县| 宣汉县| 芮城县| 江门市| 阳春市| 禄丰县| 大石桥市| 昆明市| 革吉县| 留坝县| 屯昌县| 定陶县|