欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

面向缺陷的路徑覆蓋測試數(shù)據(jù)進化生成方法

文檔序號:6653945閱讀:564來源:國知局
專利名稱:面向缺陷的路徑覆蓋測試數(shù)據(jù)進化生成方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機軟件測試領(lǐng)域,設計了一種自動生成穿越目標路徑的測試數(shù)據(jù) 的新方法。該方法區(qū)別于原有方法的特色在于,生成的測試數(shù)據(jù)能有效暴露目標路徑中指 定類型的缺陷。
背景技術(shù)
軟件測試是保障軟件質(zhì)量的重要手段,分為靜態(tài)測試和動態(tài)測試,都是為了發(fā)現(xiàn) 程序代碼中可能存在的缺陷,但是前者不執(zhí)行程序代碼,而后者則基于測試數(shù)據(jù)運行程序 代碼,測試數(shù)據(jù)的生成是該類測試的關(guān)鍵。軟件自動測試的核心是在短時間內(nèi)不通過大量 的采樣,生成有效的測試數(shù)據(jù),以發(fā)現(xiàn)軟件存在的缺陷,因此自動生成軟件的測試數(shù)據(jù)成為 軟件工程界非常重要的研究課題。按照生成測試數(shù)據(jù)所依據(jù)的信息來源,動態(tài)測試又分為黑盒測試、白盒測試,以及 二者融合的測試,其中,黑盒測試面向軟件的功能,而白盒測試面向程序的結(jié)構(gòu)。路徑覆蓋 測試屬于白盒測試,它要求產(chǎn)生的測試數(shù)據(jù)盡可能覆蓋程序的所有路徑。單錦輝等認為,許 多軟件測試問題都可以歸結(jié)為路徑覆蓋測試的數(shù)據(jù)生成問題,該問題描述為給定程序的 一條目標路徑,在程序的輸入空間中尋找測試數(shù)據(jù),使得以該數(shù)據(jù)為輸入,所經(jīng)過的路徑為 目標路徑,并在中國專利說明書CN1402133(2003年3月12日公布)公開的發(fā)明專利中給 出了一種路徑覆蓋測試數(shù)據(jù)的自動生成方法。該方法能保證生成測試數(shù)據(jù)穿越目標路徑, 但是并不能保證生成的測試數(shù)據(jù)發(fā)現(xiàn)被測程序中的缺陷。在路徑覆蓋的軟件測試中,一個缺陷(故障)能否被檢測出,除了取決于測試數(shù)據(jù) 外,還與該缺陷被檢測出的概率大小密切相關(guān)。宮云戰(zhàn)等認為對于軟件中的所有缺陷而言, 通常以缺陷檢測的百分比衡量軟件測試的效率。容易知道,一般的路徑覆蓋測試方法難以 檢測出小概率缺陷,鑒于此,宮云戰(zhàn)等提出了面向故障的軟件測試方法;研究了軟件缺陷相 關(guān)問題;給出了內(nèi)存泄露靜態(tài)檢測模型、JAVA語言中數(shù)組越界的故障模型和非法計算故障 的通用檢測模型,建立了基于軟件缺陷模型的測試系統(tǒng)。該方法屬于缺陷的靜態(tài)查找方法, 往往會錯報或(和)漏報一些缺陷。近年來,關(guān)于軟件缺陷的研究成果很多,缺陷查找除 了靜態(tài)方法以外,還有動態(tài)方法,如王青等研究和討論了軟件缺陷預測技術(shù),對典型的軟件 缺陷的分布模型給出了案例研究;Arcuri提出將被測程序和單元測試聯(lián)合進化,達到自動 修復程序中的缺陷的目的;Novark等設計了一個能自動高效糾正C和C++中內(nèi)存錯誤的系 統(tǒng);劉海等根據(jù)軟件缺陷管理的一般目標和過程,提出軟件缺陷數(shù)據(jù)定義的準則和缺陷管 理工具應具有的特性,并舉例說明了缺陷數(shù)據(jù)定義的方法??傮w看來,動態(tài)方法雖然能比 較準確的檢測缺陷,但是,基于程序的實際運行使得該方法的缺陷檢測時間變長。軟件測試的主要目的是發(fā)現(xiàn)被測程序中存在的缺陷。缺陷的表現(xiàn)形式很多,有些 缺陷直接導致程序不能正常運行或是可以被編譯系統(tǒng)發(fā)現(xiàn),這類缺陷也同樣容易被軟件開 發(fā)人員發(fā)現(xiàn)從而得到修正,因此投入測試的被測程序中一般不包含這類缺陷;有些缺陷隱 含在被測程序中不能被編譯系統(tǒng)檢測出來,不影響程序的運行,只要測試數(shù)據(jù)穿越該缺陷所在的路徑,就會被引發(fā),從而導致程序運行結(jié)果不正確,因而也容易被測試數(shù)據(jù)發(fā)現(xiàn);還 有一類缺陷,不能被編譯系統(tǒng)檢測出來,而且不是穿越該缺陷所在路徑的測試數(shù)據(jù)都能發(fā) 現(xiàn)它,需要特殊的測試數(shù)據(jù)才能將其有效地檢測出來,這類缺陷被稱為小概率缺陷,因此生 成能有效檢測小概率缺陷的測試數(shù)據(jù)將對軟件測試工作具有巨大的意義。已有的路徑覆蓋 測試數(shù)據(jù)生成方法雖然能生成穿越目標路徑的測試數(shù)據(jù),但是未必能發(fā)現(xiàn)被測程序隱含在 目標路徑中的缺陷,尤其是小概率缺陷??紤]到生成路徑覆蓋的測試數(shù)據(jù)需要插裝并運行 被測程序,本發(fā)明在被測程序中也插裝關(guān)于各類故障的檢測函數(shù),那么,生成測試數(shù)據(jù)覆蓋 目標路徑的同時,也檢測該數(shù)據(jù)能否發(fā)現(xiàn)目標路徑中的缺陷,在穿越目標路徑的數(shù)據(jù)中選 擇暴露缺陷個數(shù)多、危險程度大的作為最終測試數(shù)據(jù),使生成測試數(shù)據(jù)的質(zhì)量大大提高。

發(fā)明內(nèi)容
本發(fā)明提出一種面向缺陷的路徑覆蓋測試數(shù)據(jù)進化生成方法。首先,以測試數(shù)據(jù) 執(zhí)行被測程序過程中發(fā)現(xiàn)的缺陷個數(shù)最多、缺陷的危險程度最大為目標,以該數(shù)據(jù)穿越的 路徑必須是目標路徑為約束,建立面向缺陷的路徑覆蓋測試數(shù)據(jù)生成問題的數(shù)學模型;然 后,設計了約束多目標優(yōu)化方法解決該問題,用遺傳算法進化生成測試數(shù)據(jù)。本發(fā)明所要解決的技術(shù)問題克服現(xiàn)有路徑覆蓋測試數(shù)據(jù)生成方法的不足,基于 遺傳算法提出一種有效的進化優(yōu)化方法,使生成的測試數(shù)據(jù)不僅穿越目標路徑,而且能盡 可能多地發(fā)現(xiàn)目標路徑中的缺陷。本發(fā)明的技術(shù)解決方案一種基于遺傳算法的面向缺陷的路徑覆蓋測試數(shù)據(jù)生成 方法,其特征在于包含以下步驟步驟1.數(shù)學模型的建立以測試數(shù)據(jù)為程序輸入執(zhí)行被測程序時發(fā)現(xiàn)的缺陷個數(shù)最多、缺陷的危險程度最 大作為優(yōu)化目標,以測試數(shù)據(jù)穿越路徑與目標路徑的層接近度為1(即為目標路徑)作為約 束,建立面向缺陷的路徑覆蓋測試數(shù)據(jù)生成問題的數(shù)學模型如下
權(quán)利要求
1.面向缺陷的路徑覆蓋測試數(shù)據(jù)進化生成方法,其特征在于如下步驟步驟1. 1 針對路徑覆蓋測試數(shù)據(jù)生成問題,本發(fā)明建立了一個面向缺陷的含約束多 目標優(yōu)化數(shù)學模型;步驟1. 2 針對步驟1的數(shù)學模型設計了一種含約束的多目標進化優(yōu)化的求解方法分 別將多個目標規(guī)范化處理后加權(quán)求和轉(zhuǎn)化成單目標,再將約束轉(zhuǎn)化成懲罰項,加入到該單 目標中;步驟1. 3 使用遺傳算法實現(xiàn)上述方法,進化生成能夠有效暴露被測程序中指定類型 缺陷的測試數(shù)據(jù),并針對C以及C++語言給出了 5種類型缺陷的查找與認定的插裝方法以 及它們的危險程度表示方法。
2.權(quán)利要求1中步驟1.1所述的含約束多目標優(yōu)化數(shù)學模型,其特征在于以測試數(shù) 據(jù)執(zhí)行被測程序過程中發(fā)現(xiàn)的缺陷個數(shù)最多、缺陷的危險程度最大為目標,以該數(shù)據(jù)穿越 的路徑必須是目標路徑為約束,建立面向缺陷的路徑覆蓋測試數(shù)據(jù)生成問題的數(shù)學模型如 下
3.權(quán)利要求1中步驟1. 2所述的含約束的多目標進化優(yōu)化方法,其特征在于包含以下 步驟步驟3. 1 由于每個目標取值范圍差別很大,首先將其分別進行規(guī)范化處理考慮進化 過程中的某一代種群,其第i個目標函數(shù)的最大值和最小值分別為fa^Pfin,個體χ的 第i個目標函數(shù)調(diào)整前后分別為fi(x)和f' i(x),則有:
4.權(quán)利要求1中步驟1. 3所述缺陷危險程度的表示法,其特征在于給出了各類缺陷的 危險程度模糊值,并給出具體量化值區(qū)分各類缺陷的危險程度,具體表示如下表。
5.權(quán)利要求1所述部分缺陷查找與認定的插裝方法,其特征在于本發(fā)明針對C或者 C++語言常見的5種類型缺陷,給出了判斷這些缺陷的插裝方法(1)變量未初始化缺陷(UVF)程序中人為設定一個變量未仞始化變量,除了出現(xiàn)在賦值表達式左邊的變量,判斷其 他位置使用的變量是否與該變量相同,如果相同,則存在變量未初始化缺陷,如果不同則不 存在,定義被測程序中出現(xiàn)的各種類型的變量各一個,如對程序中的整型變量i和字符型 變量c判斷是否使用未初始化變量i和c,可在程序中插裝如下代碼 在定義部分插裝int uvfi ; char uvfc ; 在程序中出現(xiàn)i和c的地方進行判斷 if(i == uvfi) {存在UVF,進行相應的處理}; if (c = = uvfc) {存在UVF,進行相應的處理};(2)數(shù)組越界缺陷(OBAF)首先,在需要判斷數(shù)組越界的被測程序中,插裝一個如下的帶參數(shù)的宏定義 #define OBAF(j,N) (j > = 0&&j < N) ? j :(c[k] ++, (w = (w > 05 w:0.5)),j)具 中j為要判斷的數(shù)組下標,N為數(shù)組的上界,(dk]++,(w = (w > 0. 5 ? w :0. 5)), j)處理 有越界的情況,k為分支節(jié)點的序號,c[k]標記發(fā)現(xiàn)缺陷的個數(shù),w記錄發(fā)現(xiàn)缺陷的最大危 險程度,w = (w > 0. 5 ? w 0. 5)對缺陷的危險程度w進行取大運算,因為越界的危險程度 是0. 5,如果當前缺陷的危險程度比0. 5小,那么w = 0. 5 ;否則,w值不變;然后在使用數(shù)組元素的語句處,例如原語句為printf(“% d”,a[i]);語句中有一個對 含有5個元素的數(shù)組a中元素的使用,為了檢測該語句在運行中是否存在數(shù)組越界缺陷,做 如下插裝處理,帶下劃線為插裝部分 printf ( "% d,,,a「0BAF(i,5) 1);(3)空指針引用缺陷(NPDF)此類缺陷通過與空指針常量的比較來實現(xiàn),例如,假設P是一個指針變量,q是一個同 類型的空指針,要檢查P是否是一個空指針,可以采用插裝如下語句來判斷if (p == q) {存在NPDF,進行相應的處理};(4)非法運算缺陷(ILCF)此類缺陷表現(xiàn)形式較多,如存在除數(shù)為0的故障不能運行;求余時除數(shù)為0也不能運 行,在調(diào)試時可以直接發(fā)現(xiàn);對數(shù)自變量為0或負數(shù)故障,系統(tǒng)內(nèi)不報錯,能運行,但是取對 數(shù)結(jié)果為-1. #IND00,代表是一個無效數(shù)字,對其進行任何計算都是這個值;根號內(nèi)為負數(shù) 的故障,系統(tǒng)不報錯,但是結(jié)果也為無效數(shù)字-1. #IND00,可以使用系統(tǒng)函數(shù)jsnan來判 斷,其基本形式為intjsnan (double χ);當χ是一個無效值時,返回非零值,否則返回0, 例如要判斷一結(jié)果值a是否是無效值,插裝如下語句來判斷If Usnan (a) ! = 0) {存在ILCF,進行相應的處理};(5)數(shù)據(jù)溢出缺陷(DOF)根據(jù)溢出的運算具有不可逆的特點,對每個運算的結(jié)果進行逆運算,如果逆運算結(jié)果 正確,說明沒有數(shù)據(jù)溢出發(fā)生;否則,說明有數(shù)據(jù)溢出缺陷,例如,假設a、b、s均為短整型變 量,若有賦值語句為s = a+b,則做如下插裝處理,帶下劃線為插裝部分s = a+b
全文摘要
本發(fā)明公布了一種面向缺陷的路徑覆蓋測試數(shù)據(jù)進化生成方法,目的是使生成的測試數(shù)據(jù)更多地暴露目標路徑中的缺陷,從而有效提高測試數(shù)據(jù)的質(zhì)量。首先,以測試數(shù)據(jù)執(zhí)行被測程序過程中發(fā)現(xiàn)的缺陷個數(shù)最多、缺陷的危險程度最大為目標,以測試數(shù)據(jù)必須穿越目標路徑為約束,建立面向缺陷的路徑覆蓋測試數(shù)據(jù)生成問題的數(shù)學模型;然后,設計了解決該問題的約束多目標優(yōu)化方法,使用遺傳算法進化生成穿越目標路徑同時能有效暴露缺陷的測試數(shù)據(jù)。本發(fā)明提出的方法解決了以往方法生成測試數(shù)據(jù)只是穿越目標路徑,不能很好暴露目標路徑中缺陷,尤其是一些小概率缺陷的問題;可用于白盒測試或回歸測試的測試數(shù)據(jù)生成中,能大大提高軟件測試的效力。
文檔編號G06F11/36GK102141958SQ201110061538
公開日2011年8月3日 申請日期2011年3月9日 優(yōu)先權(quán)日2011年3月9日
發(fā)明者任麗娜, 吳川, 姚香娟, 鞏敦衛(wèi), 張巖, 田甜, 羅永金 申請人:中國礦業(yè)大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
库尔勒市| 台中县| 锡林郭勒盟| 孙吴县| 宁晋县| 永川市| 阜阳市| 什邡市| 宁陕县| 逊克县| 化隆| 嘉定区| 丁青县| 武威市| 桓仁| 宁陵县| 大姚县| 临洮县| 大渡口区| 新田县| 昆山市| 井陉县| 女性| 青冈县| 凌源市| 肃宁县| 连江县| 金寨县| 遂溪县| 固原市| 漳浦县| 长春市| 吕梁市| 勃利县| 井陉县| 安化县| 贡山| 铜山县| 阳西县| 贵溪市| 建阳市|