【软件工程】软件单元测试与规范

测试代码

查找list[]中的最大值:int Largest(int list[], int length);
 
测试函数代码段:
 

int Largest(int list[], int length)
 
{
 
  int i,max;
 
   for(i = 0; i < (length – 1); i ++ )
 
  {  
 
     if(list[i] > max)
 
       { max=list[i]; }
 
  }
 
return max;
 
}

编写一个程序对Largest函数进行测试,并写出所有的测试用例。

 

下面我们编写合适的函数功能,使其能测试出上面测试代码的错误。

测试代码如下:

// 20140303.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


int largest(int list[],int length)
{
    int i,max=0;
    for(i=0;i<(length-1);i++)
    {
        if(list[i]>max)
        {
            max=list[i];
        }
    }
    return max;
}

int main(int argc, char* argv[])
{
    int max1,arr[100],k;
    printf("数字的个数:");
    scanf("%d",&k);
    printf("请输入测试数字的值:");
    for(int i=0;i<k;i++)
    {
        scanf("%d",&arr[i]);
    }
    max1=largest(arr,k);
    printf("最大值为:%d\n",max1);//printf("Hello World!\n");
    return 0;
}

通过运行,我们发现了一些问题:

我们发现,最后的结果并不正确。经过逻辑分析,我们可以看出是int largest(int list[],int length)函数中的条件设置错误。

应将其中的for语句调整为:

for(i=0;i<length;i++)
    {
        if(list[i]>max)
        {
            max=list[i];
        }
    }

然后运行得到正确的结果:

接下来,我们测试其他的几点案例:

数组①含有相同的数字:

测试结果OK:

数组②都为负数:

测试结果坑爹了,出现了0:

经过排查,我们发现里max初值为0,我们选取的Max也不合适。这里我们可以将max值赋值为数组的第一个数字的值。

程序代码修改为:max=list[0];

然后测试发现正好可以通过:

数组③:正数负数一起测试

测试结果OK:

数组④:只输入一个数字

测试结果OK:

数组⑤:输入0个数字呢

测试结果出现意外的结果:

这里我们发现,我们并没有对不输入给出提示。

修改代码即可:

if(k==0)
    {
        printf("无数据!!!!");
    }
    else
    {
        max1=largest(arr,k);
        printf("最大值为:%d\n",max1);
    }

然后再查看结果:

测试通过。

经过上面的多个数组的测试,我们得到完善的代码:

// 20140303.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


int largest(int list[],int length)
{
    int i,max=0;
    max=list[0];
    for(i=0;i<length;i++)
    {
        if(list[i]>max)
        {
            max=list[i];
        }
    }

    return max;
}

int main(int argc, char* argv[])
{
    int max1,arr[100],k;
    printf("数字的个数:");
    scanf("%d",&k);
    printf("请输入测试数字的值:");
    for(int i=0;i<k;i++)
    {
        scanf("%d",&arr[i]);
    }
    if(k==0)
    {
        printf("无数据!!!!");
    }
    else
    {
        max1=largest(arr,k);
        printf("最大值为:%d\n",max1);
    }
    //printf("Hello World!\n");
    return 0;
}
点击查看完整代码

总结单元测试的内容:

每个测试的模块一般是一个完整的函数,我们经过各种极端的测试案例,然后排查函数功能的缺陷。

例如本次的测试用例中,我们将各种情况均考虑到了,这样,程序的功能才能完善。

posted @ 2014-03-09 09:25  任国庆  阅读(371)  评论(0编辑  收藏  举报