zoukankan      html  css  js  c++  java
  • 一个小的单元测试

    软件工程课堂上对于一个求最值函数进行了一个小的测试,最值函数如下:

    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;
    }

    虽然只是一个小程序,但是却暴露出许多问题,直到老师说明才突然发现,这个函数存在许多漏洞。而有一些是连小测试都没有发现的。整个程序代码如下:

    #include<stdio.h>
    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;
    }
    int main()
    {
         int k,m,a[5];
         printf("输入数据个数:");
         scanf("%d",&m);
         printf("输入%d个数据:",m);
         for(int n=0; n<m;n++)
        {
              scanf("%d",&a[n]);
        }
        k=Largest(a,m);
        printf("%d",k);
     
        return 0;
    }

    对这个小程序进行了5组数据测试,分别是     1         3        6       8       9

                                                             2         6        7       8       10

                                                            -1        -6      -9      -7      -5

                                                            -4         5        9      -5       3

                                                            -4         0        8       7      -2

    在编译时未出现错误及警告,但数据并不是预想中的结果,调试发现参与比较的数据似乎只有前四个。所以首先改正了 for(i=0;i<(length-1);i++)的错误,改为 

    for(i=0;i<=(length-1);i++)这样就能得到预想结果,似乎程序并没有问题。经老师提醒才发现选用的数据并不完善,包含诸多问题没有测试到:

    第一就是,没有进行数据相等的数据比较:

    第二,极端测试,没有输入数据为空的情况

    第三,没有输入数据个数与所要求个数不等的情况

    第四,max的值没有进行初始化

    第四点是最应该出现的问题,没有初始化,会造成max的值不确定,在比较过程会出现错误,例如max值得内存空间本来有数值10,在测试的第一组数据中会出现结果为10,这是预想不到的结果,另外在初始化时,也不能初始化为0,否则会在进行负数比较时输出结果为0.

         仅仅是一个最值的小函数的测试,就暴露出了自身的许多问题:考虑问题不全面,选用的数据不能进行全面的测试;最值函数出现的问题也是我们编程时很容易出现的问题,这些我们平时都很难注意到。所以再以后编程时应尽量考虑全面,注意细节,再对函数进行测试时要特别注意测试数据的选用。

         最后说明一下,在函数运行时本应出现的许多问题都没有显现出来,这应该是编译环境的问题。也就是说上面的程序换一种编译环境很可能会出现错误。这也是我们经常遇到的问题,一个同样的程序有的环境能运行出来,有的不能。程序本身有问题就是其中的一个答案。通过这个小测试应该学到了很多东西。

      

  • 相关阅读:
    base64转图片的两种方式
    perl表达 匿名数组和匿名哈希
    perl语言中的定义枚举
    两个字符串连接输出乱码问题解决
    perl LibXML模块使用详解
    SQL优化-标量子查询(数据仓库设计的隐患-标量子查询)
    CDH版hbase-0.98.1单机安装
    CDH版本hadoop2.6伪分布式安装
    MYSQL数据的安装、配置
    Redis介绍、安装部署、操作
  • 原文地址:https://www.cnblogs.com/ls110220/p/3587724.html
Copyright © 2011-2022 走看看