蔣 超,黃 松,2,惠戰(zhàn)偉,2
(1.陸軍工程大學 指揮控制工程學院,江蘇 南京 210007;2.全軍軍事訓練軟件測評中心,江蘇 南京 210007)
圖像區(qū)域生長是圖像分割的常用方法之一[1],是指將圖像中成組的像素或區(qū)域發(fā)展成更大區(qū)域的過程。從種子點的集合開始,區(qū)域增長是通過將與每個種子點具有相似屬性如顏色、灰度、紋理等的相鄰像素合并到此區(qū)域的過程。
軟件測試是保證軟件可靠性和軟件質量的重要手段,是評估軟件能否滿足設計需求的過程。當前,圖像處理軟件的測試更多的是由領域專家手動完成,依賴其經(jīng)驗來判斷輸出結果是否正確,這種測試方法效率低下并且無法保證測試充分性和正確性。
傳統(tǒng)軟件測試面臨的一大難題是預期輸出結果很難甚至無法獲取,即測試判定問題(test oracle problem)[2]。為了解決此問題,Meyer等提出利用統(tǒng)計的方法來驗證圖像處理程序的正確性[3],Jameel等提出利用支持向量機的方法來構建程序測試判定[4],Din等提出利用機器學習的方法來構建程序測試判定并成功將此方法應用于衍射圖像處理軟件測試中[5]。
為了緩解測試判定問題,香港中文大學的Chen T Y等提出了蛻變測試技術(metamorphic testing,MT)[6]。該技術針對程序預期輸出難以獲取的問題,將檢查程序的實際輸出是否符合預期輸出轉變?yōu)闄z查程序的多個執(zhí)行結果之間是否滿足某特性關系,這種關系被稱為“蛻變關系”。蛻變測試以原始輸入為基礎,以蛻變關系為判斷準則,當測試用例之間滿足一定的輸入關系時,檢查輸出之間是否符合相應的蛻變關系,若不滿足,則可以認為軟件存在缺陷,這就為緩解測試判定問題提供了一種有效途徑。
當前蛻變測試的研究熱點是蛻變關系的構造及其在不同領域的應用[7],對測試過程的標準規(guī)范研究不是很多,這就造成了測試過程的隨意性和盲目性。為了減少人為因素對測試過程的干擾,規(guī)范蛻變測試流程,文中提出了一種適用于圖像區(qū)域增長程序的蛻變測試框架,并對其中的相關模塊的實現(xiàn)方法進行介紹。
針對圖像區(qū)域增長程序的特點,提出了由蛻變關系構造、原始測試用例的自動生成、衍生測試用例自動生成、區(qū)域增長程序自動執(zhí)行、測試結果自動判定、測試有效性度量和蛻變關系優(yōu)化等模塊組成的蛻變測試框架,如圖1所示。
圖1 圖像區(qū)域增長程序蛻變測試框架
蛻變測試的結果可以分為以下四類,如表1所示。通常第一種與第二種情況是經(jīng)常遇到的,第一種情況對于程序的正確性有一定參考價值,第二類能夠發(fā)現(xiàn)程序中存在的錯誤。因此,有效的蛻變關系應當使得第一種和第二種情況盡可能多的出現(xiàn)。在測試過程中,蛻變關系的構造是實施蛻變測試的關鍵環(huán)節(jié),其質量的優(yōu)劣直接影響到蛻變測試的性能和效率,也是影響自動化蛻變測試的重要因素。
表1 蛻變測試結果分析
Murphy等針對數(shù)值計算函數(shù)提出了6條通用蛻變關系[8],如表2所示。6類常見蛻變關系可以作為構造蛻變關系的依據(jù),但更需要針對不同待測程序的特性構造不同的蛻變關系。針對圖像處理軟件的特點,可以從以下幾個方面著手構建蛻變關系:
(1)幾何屬性。對原始輸入圖像做幾何變換可以得到新的輸入圖像,這樣并未影響圖像的內部布局,因此兩幅圖像的生長結果應當保持相應的幾何關系。
(2)算法特性。給定輸入圖像后,區(qū)域增長程序的輸出受控制參數(shù)的影響。Chen等提出了基于策略選擇的系統(tǒng)構建蛻變關系的方法[9],即改變一個輸入?yún)?shù),控制其他輸入?yún)?shù),查看輸出結果的變化是否符合預期。
表2 常見數(shù)值蛻變關系
原始測試用例生成是影響測試效率的關鍵環(huán)節(jié),現(xiàn)有的測試用例生成技術主要有特殊值選取、隨機值選取和迭代生成等[10]。目前應用最廣泛的是隨機值選取和特殊值選取兩種方法[11]。特殊值選取與待測程序和測試人員相關度很大,且生成的測試用例數(shù)量有限,難以保證測試充分性。隨機值選取的測試效果優(yōu)于特殊值,且可視為無偏的,但是測試過程帶有一定的盲目性。迭代生成的方法是將每次產生的衍生用例作為下一次測試的原始用例,但這種方法容易造成狀態(tài)爆炸問題,實際使用范圍有限。對于圖像區(qū)域增長程序,原始測試用例包含圖像數(shù)據(jù)和程序控制參數(shù)。
原始輸入圖像的常見來源有兩種,一是從標準測試數(shù)據(jù)集中選取,二是由測試人員自動生成。從測試圖像數(shù)據(jù)集選取也可分為隨機選取和啟發(fā)式選取。標準數(shù)據(jù)集存在一個缺點,即通用的測試數(shù)據(jù)很難涵蓋待測程序的特定功能,因此就產生了根據(jù)需求自動生成圖像的方法。最直接的圖像生成方法就是隨機生成或者依據(jù)概率生成,這種簡單的方法的弊端就是生成的圖像脫離現(xiàn)實,參考價值不足。Tahir等提出了利用符號執(zhí)行技術生成測試圖像[12],Matthew等提出利用程序性噪聲生成測試圖像[13],Hu等提出利用模板生成灰度圖像[14],這些方法為圖像自動生成提供了很好的借鑒。
在給定輸入圖像后,種子點的選擇和閾值設定將直接影響圖像區(qū)域生長效果。文獻[15]介紹了種子點的自動選取方法,生長閾值和生長個數(shù)閾值采用Otsu方法全局最佳自動生成。
根據(jù)蛻變關系的定義,可以將蛻變關系分解為輸入關系、程序函數(shù)關系和輸出關系。衍生測試用例是由原始測試用例根據(jù)輸入關系生成的,此項工作可以由計算機自動完成。值得注意的是,圖像處理軟件中,測試用例包含圖像數(shù)據(jù)和控制參數(shù),衍生用例的生成需要同時對兩者進行處理。
圖像的輸入數(shù)據(jù)可以視為函數(shù)f(x,y),其中(x,y)對應圖像像素點坐標,f(x,y)就是其對應像素點上的屬性值,因此區(qū)域增長后生成的圖像依然可以看作一個函數(shù)。根據(jù)蛻變關系中的輸出關系,原始測試用例和衍生測試用例的輸出是否滿足蛻變關系就可以由計算機來自動判定,提高了判定的效率和準確性。
蛻變測試過程中,不滿足蛻變關系意味著程序錯誤,然而輸出之間滿足蛻變關系并不能保證程序正確。如果程序是正確的,那么測試終止條件和測試充分性就是需要考慮的問題。為此測試框架引入了測試充分性判定。
當選定一幅圖像和一個蛻變關系后,自動執(zhí)行測試流程,執(zhí)行完畢后,計算程序路徑覆蓋率,若不滿足覆蓋率要求,則依次使用下一個蛻變關系,若蛻變關系使用完畢,則使用下一幅圖像,直至覆蓋率滿足測試要求,整改測試過程結束。考慮到部分程序有一定冗余,部分路徑可能永遠不能覆蓋,若到達一定測試階段,測試覆蓋率不滿足測試的要求,但也不再增長,亦可結束測試。
不同的蛻變關系其檢錯能力也不一樣。在測試過程中,為了提高測試效率,需要不斷優(yōu)化測試過程,蛻變關系優(yōu)化就是選取一些檢錯能力強的蛻變關系,剔除檢錯能力弱的蛻變關系??偟膩碇v,有效的蛻變關系會涉及到程序的核心功能,程序執(zhí)行路徑也會盡量不同。對于正確的程序,可以在待測程序中植入變異,計算各個蛻變關系的檢錯能力,優(yōu)化蛻變關系,以提高測試效率。
某雷達圖像處理軟件是一款用于識別雷達圖像中重點目標的軟件,作者所在的軍用軟件測評中心參與了該軟件的定型測試,整個測試的過程按照上述框架完成。
根據(jù)需求規(guī)格說明以及程序源代碼,從幾何屬性、數(shù)值屬性和算法特性三個方面構造了14條蛻變關系。
數(shù)值屬性方面,對整個圖像的灰度值做整體增減和縮放,那么區(qū)域生長后的結果應當保持不變。
幾何屬性方面,在確定起始種子點、生長閾值和生長個數(shù)閾值的情況下,原始輸入圖像繞坐標軸旋轉或沿對角線轉置可以得到新的輸入圖像,兩幅圖像的生長結果保持相應的幾何關系。
算法特性方面,可以依次對種子點位置、生長閾值和生長個數(shù)閾值做調整,那么生長結果應當保持一定的關系。
由于真實雷達圖像涉密,測試過程中采用標準測試數(shù)據(jù)集來完成軟件測試工作。Pascal voc[16]是專門用于目標檢測、圖像分割的標準測試數(shù)據(jù)集,采取隨機選取圖像的方法,控制參數(shù)由前面介紹的方法自動確定。
測試目標設定的測試覆蓋率為100%。因此,在沒有檢測到錯誤的情況下,區(qū)域增長功能測試必須達到設定的覆蓋率才能停止。程序測試覆蓋率變化如圖2所示。隨著測試圖像的增加,到第九幅圖像的時候,覆蓋率達到100%,滿足測試需求。
圖2 程序蛻變測試覆蓋率
為了檢測不同的蛻變關系的檢錯能力,可以在源程序中依次植入三個變異,不滿足蛻變關系就意味著檢測到錯誤。Milu[17]是一款針對C程序的變異算子生成工具,用該工具植入的變異如表3所示,這些都是開發(fā)過程中常見的錯誤,不會使輸出結果出現(xiàn)較大的變化。
表3 變異構造列表
表4所示為各個蛻變關系的檢錯能力,所有的變異都被檢測出來,證明了該方法的有效性,但是不同蛻變關系的檢錯能力不一樣。為了提高測試效率,測試過程中篩選錯誤檢測率在50%以上的蛻變關系,精簡了蛻變關系集,節(jié)約了測試時間。
表4 蛻變關系檢錯能力 %
近年來,圖像處理軟件在生活中扮演日益突出的作用,因此軟件的正確性和可靠性需要得到保證。為了緩解測試判定問題和推動測試過程的自動化標準化,提出了圖像區(qū)域增長程序的蛻變測試框架。該框架從三個層面解決了此問題:蛻變測試的同時也產生了測試用例,相比于隨機測試,該方法生成了更多的測試數(shù)據(jù);在缺乏測試判定的情況下,通過檢查蛻變關系有效緩解了測試判定問題;該方法結合測試充分性判定,規(guī)范了測試過程,確保了軟件測試質量。