
1.fault
靜态存在于軟體中的缺陷,通常稱之為缺陷。
2.error
在運作過程中,fault出發了一個中間狀态,稱之為error。
3failure
通常稱之為失效,是指error一直傳播到軟體的外面,使使用者可以觀察到失效的行為
舉個例子更好了解:
<周遊數組>
public class CSta {
public static void main(String args[]) {
int numbers[]= {3,4,5};
t1(numbers);
}
private static void t1(int numbers[]) {
// TODO Auto-generated method stub
int length=numbers.length;
int n=1;
double mean,sum;
sum=0.0;
for(int i =1;i<length;i++)//i=0
{
sum+=numbers[i];
System.out.println("sum"+n+"="+sum);
n++;
}
mean=sum/(double)length;
System.out.println("sum:"+sum+"\nmean:"+mean);
}
}
sum最後值應該為數組的每一位的數組相加。
我們都知道,周遊數組應該用:
for(int i =0;i<length;i++)
本來的結果是:
sum1=3.0
sum2=7.0
sum3=12.0
sum:12.0
mean:4.0
因為數組下标是從0開始的。
但這裡卻是 for(int i =1;i<length;i++)
是以結果為:
sum1=4.0
sum2=9.0
sum:9.0
mean:3.0
這樣就導緻了周遊數組不完整的問題。
在這個程式中
fault為:靜态變量int i=1
error:sum=4+5=9
(正常狀态是3+4+5=12)
failure:mean=3
(正常狀态是12/3=4)
–整個運作過程中通過派模型來刻畫–
三者對應了派模型(Pie Model):
Propagation(傳播) Infection(感染) Execution(執行)
Pie模型的三種情況:
1.fault,error,failure全部觸發,如上面的程式
2.error觸發,但error與failure未觸發(error不觸發,failure就不會觸發)
Test:int numbers[]={0,4,5}
當i=0時(正常情況全部周遊):sum=0+4+5=9; mean=3
當i=1時(非正常情況第一個數未周遊):sum=4+5=9; mean=3
結果一緻,無法觸發error
3.fault觸發,error觸發,但failure未必會觸發
Test:int numbers[]={3,5,4}
public class CSta {
public static void main(String args[]) {
int numbers[]= {3,5,4};
t2(numbers);
}
private static void t2(int[] numbers) {
// TODO Auto-generated method stub
double sum=0.0,mean;
int n=1;
int length=numbers.length-1;
for(int i=0; i<length;i++)
{
sum+=numbers[i];
System.out.println("sum"+n+"="+sum);
n++;
}
mean=sum/(double)length;
System.out.println("sum:"+sum+"\nmean:"+mean);
}
}
分析:
非正常情況(如上程式):
sum1=3.0
sum2=8.0
sum:8.0
mean:4.0
正常情況(完整周遊數組):
sum1=3.0
sum2=8.0
sum3=12.0
sum:12.0
mean:4.0
1.fault:
int length=numbers.length-1;
for(int i=0; i<length;i++)
最後一個數沒有周遊到,是以達成fault
2.error:
完整周遊:sum最終值為12.0
非完整周遊:sum最終值為8.0
是以達成error條件
3.failure
完整周遊:mean=8/2=4
非完整周遊:mean=12/3=4
兩次執行結果的最終值mean相等,是以不達成failure條件