学习软件单元测试

软件课上,学习单元测试,王老师给我们亮出一个求最大值的函数,要求我们在10分钟内对该函数进行用例测试,原代码如下:

 1 int Largest(int list[], int length)
 2 {
 3     int i,max;
 4     for(i = 0; i < (length – 1); i ++ )
 5     {
 6           if(list[i] > max) 
 7           {
 8               max=list[i];
 9             }
10      }
11      return max;
12 }

因为,前几天刚敲过类似的代码,所以,看出max没有赋初值,并且for循环应为i<length;

很欣喜的给max=0;

输入数组{2,3,4,6,9}  输出 max=9  对了

输入数组{-9 8 3}     输出  max=8  也对哦

输入数组{-9 -8 -6}  输出  max=0  奇怪,怎么不对呢?

。。。

原来max初值不该赋0 ,应该赋数组中的一个值--------max=list[0];

这样应该就对了吧

输入{-9 -8 -1}  输出 max=-1   对了

输入{9 9 -4}   输出  max=9  对了

原以为这样就可以了,老师又问,如果数组为空怎么办?????

数组为空,C中编译都通不过。(老师发话了:把电脑合上吧!课下完成后发到博客上)

课下:

有C定义一个数组,初始化为空时,编译都通不过,最后在同学的提醒下,想到用malloc动态分配内存,解决了数组为空的问题(C语言还得再学啊!)

最终代码如下:

 1 #include<stdio.h>
 2 #include<stdlib.h>  //malloc动态分配内存
 3 void main()
 4 {
 5      void Largest(int list[],int length);
 6      int *p1;      //数组所分配区域第一个字节的地址
 7      int i;
 8      int n;
 9      printf("输入数组个数:");
10      scanf("%d",&n);
11      p1=(int *)malloc(n*sizeof(int));
12     while(n!=0)
13     {
14         printf("输入数组元素:
");
15          for(i=0;i<n;i++)   
16       {
17              scanf("%d",p1+i);
18        }
19        break;   //一次数组输入完成,跳出
20      }
21     Largest(p1,n);
22 }
23 void Largest(int list[],int length)  //求数组元素中最大数
24 {
25      int i;
26      int max=list[0];
27      if(list==NULL||length==0)   //数组为空
28      {
29         printf("数组不能为空
");
30       }
31      else 
32       {
33           for(i=0;i<length;i++)
34        {
35           if(list[i]>max)
36          {
37              max=list[i];
38           }
39         }
40     printf("max=%d
",max);
41        }
42 }

运行结果:

   这次测试还有不到位的,就是没有实现都去读取文件中事先存好的测试用例,下面我们将会再完善一下。

通过这次课,这次作业,感受到,只有保证了一个个函数单元的正确,才更有利于整个程序的运行,也有利于调试,明白编程时养成单元测试的习惯是多么的重要。

原文地址:https://www.cnblogs.com/fengxiaolan/p/3588559.html