结对编程之Fault、Error、Failure
1.结对说明
结对对象:刘世麟 博客地址:http://www.cnblogs.com/liushilin/
双方贡献:1:1
2.题目要求
构造程序,分别是:
•不能触发Fault。
•触发Fault,但是不能触发Error。
•触发Error,但是不能产生Failure。
3.题目概述
提示用户输入两个值,两个值必须在[0,100],若不满足条件各自有自己的提示,若两个值都小于5,则输出all input less than 5,程序退出。否则根据输入的值判断使用加法还是减法,若输入的第一个数小于第二个数,则使用减法计算,结果小于0,不然就使用加法,结果一定大于0。
4.结对照片
5.源码
1 package com.nanchen.jieduibiancheng; 2 3 import java.util.Scanner; 4 5 public class ErrorFault { 6 private static Scanner in = new Scanner(System.in); 7 private static final int RANGE_LOW = 0;// 允许用户输入的最小值 8 private static final int RANGE_HIGH = 100;// 允许用户输入的最大值 9 private static final int LIMIT = 5; 10 private static int result;// 返回结果 11 12 /** 13 * 获得用户输入,输入值必须是0到100的整数 14 * 15 * @return 16 */ 17 public static int getUserInput() { 18 int number = -1; 19 System.out.println("please input a integer number,range in [0,100] !"); 20 while (true) { 21 if (in.hasNextInt()) { 22 number = in.nextInt(); 23 if (number > RANGE_HIGH || number < RANGE_LOW) { 24 System.out.println("The input integer number not in [0,100],please input again!"); 25 } else { 26 break; 27 } 28 } else { 29 in.nextLine();// 刷新输入流 30 System.out.println("illegal input!!!the input must be a integer!please input again!"); 31 } 32 } 33 return number; 34 } 35 36 /** 37 * 获得返回结果 38 * 39 * @param num1 40 * @param num2 41 * @return 42 */ 43 public static int getResult(int num1, int num2) { 44 if (num1 < num2) { 45 return num1 + num2;// 此处存在fault,应该是减法 46 } 47 return num1 + num2; 48 } 49 // 如上,无论如何输入都会执行加法而不会执行减法。 50 51 public static void main(String[] args) { 52 int op1 = getUserInput(); 53 int op2 = getUserInput(); 54 System.out.println("******************************************************"); 55 System.out.println("The user input num1 is " + op1 + " the num2 is " + op2); 56 if (op1 < LIMIT && op2 < LIMIT) { 57 System.out.println("All input less than 5!!!"); 58 return; 59 } 60 result = getResult(op1, op2); 61 if (result > 0) { 62 if (result > 100) { 63 System.out.println("Illegal!"); 64 } else { 65 System.out.println("The system uses the addition,and the result is " + result); 66 } 67 } else { 68 if (result < -50) { 69 System.out.println("Illegal!"); 70 } else { 71 System.out.println("The system uses subtraction,and the result is " + result); 72 } 73 } 74 } 75 76 }
6.存在fault的代码说明
/** * 获得返回结果 * @param num1 * @param num2 * @return */ public static int getResult(int num1,int num2) { if(num1 < num2){ return num1 + num2;//此处存在fault,应该是减法 } return num1 + num2; } //如上,无论如何输入都会执行加法而不会执行减法。
如上,无论用户输入的第一个数和第二个数的大小,都会触发加法计算,而不会进行减法的运算
7.测试用例
1)存在fault但不能触发fault。
由于本程序存在分支,所以只要不进入fault分支,就不能触发fault!
2)触发fault,但不能触发error。
如上,由于用户输入的第一个值大于第二个值,会触发正确的得到加法运算,所以触发了fault,但是并没有触发error。
3)触发Error,但是不能触发Failure。
如上,实际上opA < opB,应该执行减法,且所得结果小于-50,应该得到一个Illegal的输出。但是使用getResult方法得到的结果是101,触发fault,并且产生了error,但是由于得到的结果大于100,所以输出的结果也是正确的。如上,测试用例满足了触发error,但是没有触发failure
8.总结
现在已经进入软件测试方面的学习,通过该程序,对软件中fault,error,failure 有了很直观的认识和理解,也让我们明白了,测试有一定的局限性,如何高效的测试,如何科学的测试,如何能得到较高的测试回报率,这也是本门课程中最重要的核心学习的内容。这是本门课程的开头,也让我们认识到软件测试有有趣性,对软件测试领域有了不一样的认识。