• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      曹克浩

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

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

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

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

      從軟件技術(shù)開發(fā)實踐來看,軟件程序故障是軟件工程的重要內(nèi)容,當前軟件開發(fā)人員在面臨程序故障修復(fù)時,多以手工方式來進行故障定位和修復(fù),使得程序開發(fā)周期較長,成本較高。國內(nèi)外對軟件故障修復(fù)理論的研究也取得了一定進展,特別是在內(nèi)存管理、數(shù)據(jù)結(jié)構(gòu)修復(fù)及特定數(shù)據(jù)類型的故障提示中也取得一定成績。Dallmeier等人通過對軟件運行與失敗的差異分析,利用回歸測試用例來減少程序修復(fù)后產(chǎn)生的新問題;Perkins等人通過不變式監(jiān)控程序的方法,就匯編級程序錯誤進行自動檢測和修復(fù)。然而,這兩種方法主要針對條件表達式或監(jiān)控器軟件相關(guān)的錯誤修復(fù)。Arcuri等人首次以遺傳編程自動修復(fù)方法,根據(jù)程序規(guī)模的擴大,利用遺傳編程搜索方法來進行修復(fù),較為適宜單個函數(shù)的修復(fù);Weimer等人為了縮小進化算子的搜索空間,采用抽象語法樹先對程序進行抽象,再通過基于遺傳的編程方法就C語言程序和匯編語言程序進行修復(fù)。我國學(xué)者何加浪等人在Weimer研究基礎(chǔ)上,利用不變量約束來對搜索空間進行簡化,并針對測試過程難以覆蓋所有功能需求,提出成功測試用例學(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進行測試。而新的基于變異技術(shù)的程序故障修復(fù)技術(shù),則是將之作為故障程序,根據(jù)變異算子來選擇故障程序的變異,從而得到一批變異體,利用已知的測試用例集來對這些變異體進行驗證,以得到程序故障修復(fù)目標。在制定變異體是否修復(fù)軟件故障時,首先需要定義變異體的標準,即對于變異體執(zhí)行完成后的輸出結(jié)果與期望不一致。任何一個被放棄的變異體都不能是故障程序的正確修復(fù)版本,原因是這些變異體曾導(dǎo)致測試用例執(zhí)行失敗。相反,如果一個變異體順利通過測試用例,說明本變異體被故障程序進行正確修復(fù)。通過對這些潛在修復(fù)版本的分析,可以幫助程序開發(fā)人員得到期望的程序。

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

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

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

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

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

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

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

      參考文獻:

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

      [2]周改云,張國平,呂瓊帥,黎遠松.利用智能控制流方法的嵌入式軟件故障檢測[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)故障定位實用方法
      探討智能配電網(wǎng)故障快速定位與故障恢復(fù)
      電力電纜故障定位的探討
      科技視界(2016年21期)2016-10-17 19:59:34
      FTTX光纖線路常見故障查找與定位
      CDMA 網(wǎng)絡(luò)IP 問題故障定位研究
      张家口市| 泌阳县| 尚义县| 涪陵区| 海阳市| 晋江市| 如东县| 佳木斯市| 白银市| 五指山市| 镇赉县| 屯门区| 射洪县| 青冈县| 江口县| 南通市| 晋宁县| 彰武县| 兴仁县| 孙吴县| 华宁县| 漳州市| 万山特区| 依安县| 北碚区| 横峰县| 宜兰市| 会东县| 广德县| 房山区| 合作市| 阜城县| 龙岩市| 卓资县| 沾化县| 鄂托克前旗| 名山县| 井冈山市| 天镇县| 建昌县| 同德县|