PIE模型 简述

PIE模型
Fault:静态存在于软件中的缺陷;如代码存在错误

		int numbers[] = {3, 5, 6};
        int lenth = numbers.length;
        double mean,sum;
        sum = 0.0;
// 计算数组所有元素的平均值
            for (int i = 1; i < lenth; i++) {   // 这里i应该为0,但是i却为1,代码存在一个静态缺陷
                sum += numbers[i];
            }
            mean = sum / (double) lenth;
            System.out.print("Mean:" + mean);

Error: 软件运行中,运行到fault,触发产生的错误;
Failure: Error传播到软件外部,使用户用结果与专业文档对比,观测到失效的行为。
要观测到Failure需要三个必要的条件:
1、执行必须通过错误的代码(Execution-执行);
2、在执行错误代码的时候必须触发出一个错误的中间状态(Infection-感染);
3、错误的中间状态必须传播到最后输出,使得观测到输出结果与预期结果不一致(Propagation-传播)。
一个测试执行到包含fault的代码,不一定会产生错误的中间状态error;产生了错误的中间状态,不一定会有失效failure。
在上述代码段中,如 for (int i = 1; i < lenth; i++) 就是一个fault,在正确代码中,i的初值应该为0,应该从数组的0号元素开始计算,这种错误就是Fault。
当有Fault的代码,在运行过程中就会导致相应的Error。
如下代码,若将i = 0,打成 i = 1,则会导致 sum=5+6(正常情况:i = 0,则sum = 3+5+6),Fault导致的sum表现出计算错误,这种 sum的计算错误为Error。代码继续运行会导致 平均数mean的结果错误,mean的计算错误表现在输出,即为Failure。
如果数组为(0,1,1,3) 时,虽然导致了error,但是输出中并没有体现出计算错误,这时Failure就不存在。

 PIE模型相关的题目
Please construct a simple program P (with a fault)  and 3 tests (t1, t2, t3), s.t.
t1 executes the fault, but no error
t2 (executes the fault and) produces an error, but no failure
t3 produces a failure 

 */
public class test {
	public static int[] P(int[] array) {   //冒泡排序
        if (array.length == 0)
            return array;
        for (int i = 1; i < array.length; i++)   //  for (int i = 0; i < array.length; i++)
            for (int j = 1; j < array.length - 1 - i; j++)  //for (int j = 0; j < array.length - 1 - i; j++)
                if (array[j + 1] < array[j]) {
                    int temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
        return array;
    }
	
	public static void print(int[] array) {   //输出数组元素
		System.out.print("  排序后:"  );
		for(int i=0;i<array.length;i++) {
			
			System.out.print( "  " + array[i] );
		}
		
	}

	 public static void main(String[] args) {
		 int array1[] = {1, 2, 8, 11, 58};  //t1  t1 executes the fault, but no error
		 int array2[] = {2, 6, 5, 11, 8, 26};  //t2   t2 (executes the fault and) produces an error, but no failure
		 int array3[] = {24, 8, 5, 11, 2, 9};  //t3    t3 produces a failure 
		 
		 System.out.println("t1排序前:1  2  8  11  58 "  );
		 P(array1);
		 print(array1);
		 System.out.println('\n');
		 System.out.println("t2排序前:2  6  5  11  8  26 "  );
		 P(array2);
		 print(array2);
		 System.out.println('\n');
		 System.out.println("t3排序前:24  8  5  11  2  9 "  );
		 P(array3);
		 print(array3);
	    }
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值