Testing Contest

 

Below is a variant of the Pig Latin program we used in the debugging contest. It's supposed to translate text, found in a file called testinput0.txt, into Pig Latin.

 

The rules of Pig Latin are that a word that starts with a vowel is translated by adding "ay" to the end, and a word that starts with a consonant has the consonant moved to the end, and then "ay" added.

 

You will find that the program more or less works. For example, if you out this in your test file

 

here is some text for translation into pig latin

 

it will correctly produce this result:

 

erehay isway omesay exttay orfay ranslationtay intoway igpay atinlay

 

Your challenge is to demonstrate (not fix) as many failures of the program as you can. A failure is any situation in which the program does not behave as desired. This can happen because the program produces output that is different from what the user wants, or because the program crashes.

 

Note the a failure can occur even in "correct" code, if the requirements the code implements don't actually agree with what the user wants. While failures usually reflect defects in the code, in this case they reflect defects in the requirements.

 

Black Box and White Box testing.

 

In Black Box testing you find failures by testing the executable program, without examining the code. In White Box testing you do get to examine the code.

 

Start the testing contest with Black Box testing. Compile the code without looking at it. Then create a file testinput0.txt and test the executable. You can put whatever you want in your test file, and change it as often as you like. Note any failures you demonstrate.

 

At an agreed time, we'll switch to White Box testing. Here you get to examine the code. See how many more failures you can demonstrate.

 

There'll be worthless prizes for teams that find defects other teams don't find, as well as for the team that finds the most different failures (failures are different if they involve different defects, which may involve looking at the code to score.)

 

 

#include <stdio.h>

//Pig Latin program modified to serve as testing example

#define MAX 100

#define MAXW 10

void piglatin(char input[]);

int isvowel(char c);

void stripfirst(char input[]);

void addletter(char input[],char c);

int last(char input[]);

 

int main()

{

     char input[MAXW];

     FILE *fp;

     fp=fopen("testinput0.txt","r");

     printf("The translation is: \n");

     while(fscanf(fp,"%s",input)==1)

     {

          piglatin(input);

          printf("%s ",input);

     }

     return 0;

}

 

void piglatin(char input[])

{

     char first;

     first=input[0];

     if(isvowel(first))

          addletter(input,'w');

     else

     {

          stripfirst(input);

          addletter(input,first);

     }

     addletter(input,'a');

     addletter(input,'y');

     addletter(input,' ');

     return;

}

 

int isvowel(char c)

{

     if((c=='a')||(c=='i')||(c=='0')||(c=='u')||(c=='x'))

          return 1;

     return 0;

}

 

 

void stripfirst(char input[])

{

     int i;

     for(i=0;i<strlen(input);i++)

          input[i]=input[i+1];

}

 

void addletter(char input[],char c)

{

     int n;

     n=last(input);

     input[n+1]=c;

     input[n+2]='\0';

}

 

int last(char input[])

{

     int i;

     for(i=2;i<MAX;i++)

          if (input[i]=='\0')

              return i-1;

     return MAX;

}