软件测试中不可忽视的 Warning

 

这篇博客旨在强调软件测试开发过程中Warning的重要性

软件开发过程中,软件开发人员常常重视error而忽视warning,然而warning却能为我们提供更为重要的关于软件日后稳定性健壮性的信息

下面我就以一个小例子来和大家分享我对warning的理解

//test.c

#include<stdio.h>
int main(void)
{

char buff[10];
memset(buff,0,sizeof(buff));
gets(buff);
printf("\n The buffer entered is [%s]\n",buff);
return 0;
}

这是一点简单的c语言程序,linux下运行后功能是让用户输入一串字符床并输出显示用户的输入信息。但编译时会出现两个warning

warning如下:

  • 第一个warning

incompatible implicit declaration of built-int function 'memset’是说函数memset没有明确定义,那么就隐试定义。编译时库里有这个函数就不会出错。然而这样做是危险的,例如库里的函数不是的想要的函数,他实现的功能与你想要的不一致那么出错就很难发现也很难理解,所以函数都应该被明确定义。

对于此例添加#include<string>.h 便可消除warning

  • 第二个warning

'gets' is deprecated gets函数已经被弃用原因是 

如果你有这样的code:

char s[10];
gets( s );

当程序运行的时候你输入了超过10个字符,你就会是buffer溢出,造成undefined behaviour。gets() 函数不能防止你输入数量越界,因此gets()函数给弃用。用来代替的可以用fgets()函数, 这个函数可以限制你的字符输入数量,防止buffer溢出:

char s[10];
fgets( s, 10, stdin );


//test.c

修改后的code:

#include<stdio.h>

#include<string.h>
int main(void)
{

char buff[10];
memset(buff,0,sizeof(buff));
fgets(buff,10,stdin);
printf("\n The buffer entered is [%s]\n",buff);
return 0;
}

编译正常,没有warning。

谨以此片博客为大家提示warning的重要性,以及在保证软件稳定性健壮性是的重要性,希望对大家以后的编程中有所帮助。

 

posted @ 2015-03-14 17:22  EDzhang  阅读(697)  评论(2编辑  收藏  举报