亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于程序變異的故障注入及故障規(guī)則庫的設(shè)計

        2010-11-07 08:19:50徐麗中國礦業(yè)大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院221008
        中國科技信息 2010年22期
        關(guān)鍵詞:邊界值故障注入數(shù)組

        徐麗 中國礦業(yè)大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院 221008

        基于程序變異的故障注入及故障規(guī)則庫的設(shè)計

        徐麗 中國礦業(yè)大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院 221008

        1. 基于程序變異的軟件故障注入方法

        軟件故障注入的方法有很多種,本節(jié)著重介紹利用插入的故障代碼違反程序中函數(shù)的滿足條件(前置條件、后置條件或其它),改變其狀態(tài),迫使軟件出現(xiàn)故障,使程序偏移正常的控制流,從而達(dá)到引發(fā)異常,執(zhí)行異常處理代碼的軟件故障注入方法。

        1.1 基于斷言違背的軟件故障注入方法

        對于違背語言規(guī)則或違背系統(tǒng)規(guī)則的隱式引發(fā)的異常,根據(jù)異常處理結(jié)構(gòu)的抽取信息,對try塊中的每個語句可以采用基于斷言違背的軟件故障注入法進(jìn)行故障注入。假設(shè)程序中有下列的語句:

        int [ , ]a=new int [2][3]

        該語句執(zhí)行的前置條件是數(shù)組的下標(biāo)的滿足條件,由于C#中默認(rèn)的下標(biāo)起始值為0,所以下標(biāo)的范圍定義為0到下標(biāo)值減去1,即我們對于上述定義的數(shù)組,可以取到的范圍為 int [0][0]-int [1][2]我們所采用的斷言違背的故障注入則有以下幾種可能來進(jìn)行注入,從而引發(fā)所對應(yīng)的異常。

        在測試時只需改變數(shù)組下標(biāo)的值,就可以改變注入的錯誤,從而引發(fā)不可達(dá)的異常,注入故障后即可進(jìn)行異常機(jī)制的測試。

        對于用戶自定義異常,根據(jù)抽取的異常處理結(jié)構(gòu)信息,針對引發(fā)異常的條件則可以進(jìn)行故障注入。分為兩種情況:一種是基于斷言違背的軟件故障注入方法,假設(shè)在程序的源代碼中有如下的一個語句:

        if (0<=i && i

        throw

        ArrayIndexOutOfBoundsException;

        則可以采用與上面類似的故障注入程序來進(jìn)行。另一種是普通的故障注入方法,假設(shè)在程序的源代碼中有如下的一個語句:

        if ( currValue == 0 )

        throw new ZeroValueException();

        則在進(jìn)行故障注入時,可以直接對currValue賦值為0,即可引發(fā)ZeroValueException(),測試源程序不可達(dá)的異常代碼,增大測試的覆蓋面。

        1.2 在條件中插入真值的軟件故障注入方法

        從上面的例子中可以看出,基于斷言違背的軟件故障注入技術(shù)可以很好地仿真這類軟件故障。但如果在條件語句中涉及到系統(tǒng)調(diào)用,那么通過簡單的程序變異或斷言違背技術(shù)通常無法直接修改系統(tǒng)調(diào)用的返回結(jié)果。本文在設(shè)計實現(xiàn)時,擬采用在條件中插入真值法來注入故障,從而引發(fā)異常。假設(shè)有下列語句:

        if (p=malloc(sizeof(int))= =NULL) throw OutOfMemoryException;

        因為這個語句是一個系統(tǒng)函數(shù),并且不能直接訪問它的源代碼。為了測試由該異常引發(fā)的異常處理代碼段,可以將上式條件語句轉(zhuǎn)化為如下形式:

        if (p=malloc(sizeof(int))= =NULL||true ) throw OutOfMemoryException;

        此方法擴(kuò)大了if語句的條件判斷范圍,無論系統(tǒng)調(diào)用函數(shù)運行的結(jié)果如何,在并上條件為真的情況下,都將引發(fā)異常,執(zhí)行相應(yīng)的異常處理語句,達(dá)到測試異常機(jī)制的目的。

        1.3 逆向設(shè)置的軟件故障注入方法

        本節(jié)主要針對關(guān)系表達(dá)式和布爾表達(dá)式進(jìn)行研究和討論,在原程序中做一個很少的語法改變即可得到一個變異程序。例如,一個大于號“>”可以改變?yōu)椤啊荨?,可以測試到異常處理代碼;我們也可以在條件語句中改變操作數(shù)讓程序轉(zhuǎn)去執(zhí)行異常處理代碼。假設(shè)有下列語句:

        a>5,a+b<10;

        我們可以根據(jù)逆向設(shè)置的方法,將此關(guān)系表達(dá)式改變?nèi)缦拢?/p>

        a=5,a+b=10;

        讓程序的代碼在語法上做一個很小的改動,從而引發(fā)預(yù)期的異常。

        2.故障注入規(guī)則庫的設(shè)計與生成

        本節(jié)特別有針對性的選擇了幾種常見的異常情況,對其進(jìn)行可發(fā)生故障的分析,特別對可能發(fā)生的故障設(shè)計了故障注入規(guī)則庫,以確定原程序中的故障注入點以及故障注入的可選列表。

        2.1 故障注入規(guī)則庫的設(shè)計

        本小節(jié)主要針對常見的異常類型,例如:除數(shù)為0,數(shù)組邊界值越界,關(guān)系表達(dá)式的符號判斷條件等進(jìn)行詳細(xì)分析和歸納,以具體的示例來設(shè)計故障注入規(guī)則庫,以解決故障注入的問題。

        2.1.1 除數(shù)為0的示例

        常見的異常類型中,除數(shù)為0是比較典型的,由于除數(shù)不能為0的原則,使得在這個判斷原則的基礎(chǔ)上,只要遇到除數(shù)為0,則引發(fā)除數(shù)為0的異常,使程序執(zhí)行其所引發(fā)的異常語句。

        2.1.2 If判斷條件示例

        我們以If條件中的關(guān)系表達(dá)式為例,其示如例圖2所示:

        圖1 除數(shù)異常示例圖

        特別注意的是,判斷條件的故障注入的可選列表的設(shè)計,我們是基于簡單的程序變異,抽取出表達(dá)式符號后,根據(jù)斷言違背或逆向設(shè)置等條件列出可以引發(fā)故障的注入條件,從而引發(fā)故障。

        2.1.3 數(shù)組越界的示例

        關(guān)于數(shù)組的異常判斷,關(guān)鍵在于下標(biāo)的邊界值是否越界,按照數(shù)組邊界值的定義,我們一般取兩種情況來引發(fā)數(shù)組的異常:取一個下標(biāo)的上界;取一個下標(biāo)的下界。由于C#語言的數(shù)組下標(biāo)的起始值為0,所以,在規(guī)則庫的設(shè)計中,我們?nèi)∠陆鐬?1,上界為抽取出的數(shù)組的邊界值。從而確定了針對一維數(shù)組的故障注入的兩個可選擇的條件。

        2.2 故障注入規(guī)則庫的生成與實現(xiàn)

        我們根據(jù)第1節(jié)所介紹的幾種軟件故障注入方法,將相對應(yīng)的異常程序分析整合,主要包括以下幾種異常處理的測試:

        1)if的條件判斷所引發(fā)的異常

        ① || 關(guān)系表達(dá)式

        ②單一關(guān)系表達(dá)式(包括:= = , ! = ,> =, < =, >, <)

        ③布爾表達(dá)式(true、false)

        2)除數(shù)為0所引發(fā)的異常

        3)數(shù)組索引值越界

        ①一元數(shù)組下標(biāo)范圍;②二元數(shù)組下標(biāo)范圍

        圖2 If判斷條件注入示例圖

        4)調(diào)用系統(tǒng)函數(shù)所引發(fā)的異常

        此測試用例的主要程序變異如下:

        1)int[]a=new int[8];

        a[4]=123; //數(shù)組邊界值示例

        一元數(shù)組邊界值的范圍為a[0]—a[7],所以引發(fā)異常的邊界值越界主要有以下兩種選擇:

        ① a[-1]=123;

        ② a[8]=123

        2)int nTheZero=10;

        int nResult=100/nTheZero; //判斷除數(shù)為0示例

        若要引發(fā)除數(shù)為0的異常,則要把變量nTheZero賦值0即可引發(fā)C#的標(biāo)準(zhǔn)異常類DivideByZeroException。

        3)if(num= =99) //if的= =判斷條件(自定義異常)

        throw new Exception();

        在本測試用例中,自定義異常為,當(dāng)num值恒等于99時,拋出自定義的異常,輸出“Game Over!”。

        由于測試用例中num是一個隨機(jī)的值,所以恒等于99的幾率非常的小,我們改變“= =”的條件,以達(dá)到以滿足引發(fā)異常的條件,如:

        ① num != 99 ; ② num > = 99 ;③num < = 99 ; ④ num > 99 ; ⑤ num < 99 ;

        4)if(n<0)

        throw(new

        ArgumentOutOfRangeException()); //if的<判斷條件

        有以下幾種可選擇的注入條件:

        ①n = = 0 ; ② n > = 0 ; ③ n < = 0 ; ④ num > 0 ; ⑤ n ! = 0 ;

        任意選擇其中的一種條件,引發(fā)基本異常類ArgumentOutOfRangeException,從而執(zhí)行相對應(yīng)的異常處理語句,達(dá)到測試異常處理機(jī)制的目的。

        10.3969/j.issn.1001-8972.2010.22.052

        猜你喜歡
        邊界值故障注入數(shù)組
        模擬訓(xùn)練裝備故障注入系統(tǒng)研究
        JAVA稀疏矩陣算法
        電腦報(2022年13期)2022-04-12 00:32:38
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        電腦報(2020年24期)2020-07-15 06:12:41
        如何設(shè)計好的測試用例
        價值工程(2020年3期)2020-02-02 04:00:42
        巧用洛必達(dá)法則速解函數(shù)邊界值例讀
        讀寫算(2019年11期)2019-08-29 02:04:19
        SM4算法前四輪約減輪故障注入分析
        采用修改-回放原理的1553B故障注入方法
        列車MVB總線故障注入研究
        尋找勾股數(shù)組的歷程
        一類帶有Dirichlet邊界值條件的橢圓型方程正解的存在性
        国产精品国产三级国产专播| 亚洲国产成人精品无码区在线播放| 亚洲性久久久影院| 国产午夜精品久久久久免费视| 亚洲精品一二区| 国产啪啪视频在线观看| 免费av网站大全亚洲一区| 国产福利精品一区二区| 99久久精品自在自看国产| 国产日韩亚洲中文字幕| 亚洲熟女一区二区三区250p| 麻豆精品国产专区在线观看| 国产大片黄在线观看| 漂亮人妻被中出中文字幕久久 | 亚洲精品久久激情国产片| 免费国产裸体美女视频全黄| 人体内射精一区二区三区| 免费无码黄网站在线观看| 三级日本理论在线观看| 国产成人综合亚洲看片| 日韩毛片在线看| 91久久精品一区二区喷水喷白浆| 国产乱码一区二区三区精品| 东京热人妻一区二区三区| 激情久久无码天堂| 加勒比东京热综合久久| 午夜大片在线播放观看| 亚洲av无码久久精品狠狠爱浪潮 | 欧美xxxx做受欧美| 国偷自产av一区二区三区| 美女露屁股无内裤视频| 国产精品第一二三区久久| 欧美最猛性xxxxx免费| 亚洲av影院一区二区三区四区| 亚洲乱熟妇一区二区三区蜜桃| 国产电影无码午夜在线播放| 波多野结衣aⅴ在线| 亚洲精品区二区三区蜜桃| 国产在线播放一区二区不卡| 日韩免费无码一区二区三区| 日韩免费高清视频网站|