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


    测试代码

    查找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
    ",max1);//printf("Hello World!
    ");
        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
    ",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
    ",max1);
        }
        //printf("Hello World!
    ");
        return 0;
    }
    点击查看完整代码

    总结单元测试的内容:

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

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

  • 相关阅读:
    慕课网-安卓工程师初养成-1-4 练习题
    慕课网-安卓工程师初养成-1-3 使用记事本编写Java程序
    慕课网-安卓工程师初养成-1-2 开发环境搭建
    慕课网-安卓工程师初养成-1-1 Java简介
    安卓开发菜鸟初学
    Java编程——输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
    JSP三种常用注释
    语录——(摘自应届毕业生网)
    Servlet基础知识
    建议网站购物——建立一个简易购物网站,包括登录页面、商品选择页面和结账页面。
  • 原文地址:https://www.cnblogs.com/renguoqing/p/3589530.html
Copyright © 2020-2023  润新知