// Introduction to Software Testing // Authors: Paul Ammann & Jeff Offutt // Chapter 7, page ?? // No JUnit tests at this time. import java.io.*; import java.util.*; public class Stats { // Example for data flow. Has some issues. // The calculation of mean fails with an empty numbers list. // The calculation of var fails with a numbers list of length one. public static void computeStats (int [ ] numbers) { int length = numbers.length; double med, var, sd, mean, sum, varsum; sum = 0.0; for (int i = 0; i < length; i++) { sum += numbers [ i ]; } med = numbers [ length / 2 ]; mean = sum / (double) length; varsum = 0.0; for (int i = 0; i < length; i++) { varsum = varsum + ((numbers [ i ] - mean) * (numbers [ i ] - mean)); } var = varsum / ( length - 1 ); sd = Math.sqrt ( var ); System.out.println ("median: " + med); System.out.println ("variance: " + var); System.out.println ("standard deviation: " + sd); } public static void main (String []argv) { // Driver method for computeStats int [] numbers1 = new int[] {1, 5, 7, 9, 10, 15}; System.out.println ("TEST 1"); System.out.println ("Input: " + Arrays.toString(numbers1)); computeStats (numbers1); System.out.println ("\n----------------------------------"); int [] numbers2 = new int[] {42}; System.out.println ("TEST 2"); System.out.println ("Input: " + Arrays.toString(numbers2)); computeStats (numbers2); System.out.println ("\n----------------------------------"); int [] numbers3 = new int[] {}; System.out.println ("TEST 3"); System.out.println ("Input: " + Arrays.toString(numbers3)); try { // Expect ArrayIndexOutOfBoundsException computeStats (numbers3); // Throws ArrayIndexOutOfBoundsException } catch (ArrayIndexOutOfBoundsException e) { System.out.println ("ArrayIndexOutOfBoundsException thrown."); } // This doesn't compile // System.out.println ("\n----------------------------------"); // int [] numbers4; // System.out.println ("TEST 4"); // System.out.println ("Input: " + Arrays.toString(numbers4)); // computeStats (numbers4); } }