• 
    

    
    

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

      ?

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

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

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

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

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

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

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

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

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

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

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

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

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

      if (0<=i && i

      throw

      ArrayIndexOutOfBoundsException;

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

      if ( currValue == 0 )

      throw new ZeroValueException();

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

      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;

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

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

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

      a>5,a+b<10;

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

      a=5,a+b=10;

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

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

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

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

      本小節(jié)主要針對常見的異常類型,例如:除數(shù)為0,數(shù)組邊界值越界,關(guān)系表達式的符號判斷條件等進行詳細分析和歸納,以具體的示例來設(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)系表達式為例,其示如例圖2所示:

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

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

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

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

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

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

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

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

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

      ③布爾表達式(true、false)

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

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

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

      圖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#的標準異常類DivideByZeroException。

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

      throw new Exception();

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

      由于測試用例中num是一個隨機的值,所以恒等于99的幾率非常的小,我們改變“= =”的條件,以達到以滿足引發(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)的異常處理語句,達到測試異常處理機制的目的。

      10.3969/j.issn.1001-8972.2010.22.052

      猜你喜歡
      邊界值故障注入數(shù)組
      模擬訓練裝備故障注入系統(tǒng)研究
      JAVA稀疏矩陣算法
      電腦報(2022年13期)2022-04-12 00:32:38
      JAVA玩轉(zhuǎn)數(shù)學之二維數(shù)組排序
      電腦報(2020年24期)2020-07-15 06:12:41
      如何設(shè)計好的測試用例
      價值工程(2020年3期)2020-02-02 04:00:42
      巧用洛必達法則速解函數(shù)邊界值例讀
      讀寫算(2019年11期)2019-08-29 02:04:19
      SM4算法前四輪約減輪故障注入分析
      采用修改-回放原理的1553B故障注入方法
      列車MVB總線故障注入研究
      尋找勾股數(shù)組的歷程
      一類帶有Dirichlet邊界值條件的橢圓型方程正解的存在性
      沽源县| 铜梁县| 那曲县| 新化县| 汪清县| 万荣县| 长汀县| 东辽县| 平顶山市| 精河县| 敦煌市| 城步| 丰原市| 温宿县| 宜兰市| 岳普湖县| 湘西| 曲阜市| 绥阳县| 乌苏市| 祥云县| 临安市| 崇信县| 谢通门县| 马边| 呈贡县| 昌江| 宜宾市| 凤翔县| 吉隆县| 平定县| 常山县| 大石桥市| 新郑市| 台东市| 林芝县| 长丰县| 青岛市| 民县| 河南省| 论坛|