ソフトウェアテスト(二)

5425 ワード

Hw 2:以下のプログラムの誤りを指摘し,テストサンプルを設計する.テストサンプルを要求:1.fault 2を実行しない.faultを実行しますが、プログラムはerror状態に入りません.プログラムをerrorに入れますが、failureは起こりません.
(Fault:プログラム内部の静的エラー、およびコード中のエラー.Error:faultを含むコードセグメントが実行されたためプログラムは非正常な状態になったが、errorは内部のままであり、外部には必ずしも現れない.Failure:ある入力に対して、所望の出力結果は得られなかった.failureは外部のものである)
プログラム1:
 1 public intfindLast(int[] x, inty) {
 2 //Effects: If x==null throw NullPointerException
 3 // else return the index of the last element
 4 // in x that equals y.
 5 // If no such element exists, return -1
 6     for (int i=x.length-1; i> 0; i--)
 7     {
 8         if (x[i] == y)
 9         {
10             return i;
11          }
12     }
13     return -1;
14 }
15 // test: x=[2, 3, 5]; y = 2
16 // Expected = 0                    

fault:forサイクルの終了条件はi>=0であるべきである
faultを実行しないサンプル:xはnull、yは任意です.xがnullであるため、forループの変数iの付与値はnullにlengthがないためNull PointerExceptionを放出しfaultの位置に到達しない
Excepted: NullPointerException
Actual: NullPointerException
faultに実行されるがerrorの例はない:x=[1,2,3,4,5],y=2.i=1のときにx[1]=yによりループが終了するため、forループのたびにi>0の判定(faultの実行)が実行されるが、そのためerrorは発生しない(errorがないのは、この例ではi>0というfaultのためループが終了していないためである).
Excepted: 1
Actual: 1
errorにあるがfailureがない例:x=[1,2,3,4,5]y=0.yはxには存在しないため、プログラムがループから飛び出したのはfault(このときerror状態にある)のためであるが、結果は見つからず-1に戻った.
Excepted: -1
Actual: -1
プログラム2:
 1 public static intlastZero(int[] x) {
 2 //Effects: if x==null throw NullPointerException
 3 // else return the index of the LAST 0 in x.
 4 // Return -1 if 0 does not occur in x
 5     for (int i= 0; i< x.length; i++)
 6     {
 7         if (x[i] == 0)
 8         {
 9             return i;
10         }
11     } return -1;
12 }
13 // test: x=[0, 1, 0]
14 // Expected = 2    

fault:forループの検索順序は大きいから小さいまでです.すなわちfor(int i=x.length-1;i>=0;i-)
faultを実行しないサンプル:存在せず、すべてのサンプルがforループに入り、i=0の割り当てが開始されるとfaultに入ります.
faultに実行されますがerrorのサンプルはありません:x=[0].配列の長さが1であるため,このとき大きなものから小さいものへ,あるいは小さいものから大きいものへという概念はなくなった.faultはerrorを起こさない
Excepted: 0
Actual: 0
errorにあるがfailureがない例:x=[1,2,0,4,5].検索の順序が逆なので,配列内の要素の個数が1つ以上であればerrorにある.
Excepted: 2
Actual: 2