软件测试⽅法——静态测试与动态测试
从测试⽅法的⾓度可以分为⼿⼯测试和⾃动化测试。
1、静态测试
所谓(static testing)就是不实际运⾏被测软件,⽽只是静态地检查程序代码、界⾯或⽂档中可能存在的错误的过程。
从概念中我们可以知道,其包括对代码测试、界⾯测试和⽂档测试三个⽅⾯:
对于代码测试,主要测试代码是否符合相应的标准和规范。
对于界⾯测试,主要测试软件的实际界⾯与需求中的说明是否相符。
对于⽂档测试,主要测试⽤户⼿册和需求说明是否符合⽤户的实际需求。
其中后两者的测试容易⼀些,只要测试⼈员对⽤户需求很熟悉,并⽐较细⼼就很容易发现界⾯和⽂档中的缺陷。⽽对程序代码的静态测试要复杂得多,需要我们按照相应的代码规范模板来逐⾏检查程序代码。那么我们从哪⾥获得这个规范模板呢?其实没有⼀个统⼀的标准,每个公司内部⼀般都有⾃⼰的编码规范,
⽐如《c/c++编码规范》,你只需要按照上⾯的条⽬逐条测试就可以了。当然很⽩盒测试⼯具中就⾃动集成了各种语⾔的编码规范,⽐如公司的C++Test就集成了C/C++的编码规范,我们只要点击⼀个按钮,这些⼯具就会⾃动帮助我们检测代码中不符合语法规范的地⽅,⾮常⽅便。
下⾯我们举⼀个实际的例⼦。
C语⾔程序的静态分析和动态分析
#include <sio.h>
Max(float x, float y)
{
float z;
z=x>y?x:y;
return(z);
}
Main()
{
float a, b;
int c;
scanf(“%f, %f”&a,&b);
c=max(a,b);
printf(“Max is %d\n”, c);
}
这段C语⾔编写的⼩程序,⽐较简单,实现的功能为:在主函数⾥输⼊两个单精度的数a和b,然后调⽤max⼦函数来求a和b中的⼤数,最后将⼤数输出。
我们现在就对代码进⾏静态分析,主要根据⼀些C语⾔的基础知识来检查。
我们把问题分为两种,⼀种必须修改的,另⼀种建议修改的。
必须修改的问题有三个:
(1)程序没有注释。注释是程序中⾮常重要的组成部分,⼀般占到总⾏书的1/4左右。程序开发出来不仅是给程序员看得,其他程序员和测试⼈员也要看得。有了注释,别⼈就能很快地了解程序实现的功能。注释应该包含作者,版本号、创建⽇期等,以及主要功能模块的含义。scanf返回值被忽略是怎么回事
(2)⼦函数max没有返回值的类型。由于类型为单精度,我们可以在max()前⾯加⼀个float类型声明。
(3)精度丢失问题。⼤家注意“c=max(a,b)”语句,我们知道c的类型为整型int ,⽽max(a,b)的返回值z为单精度float,将单精度的数赋值给⼀个整型的数,c语⾔的编译器会⾃动地进⾏类型转换,将⼩数部分去掉,⽐如z=2.5,赋给c则为2,最后输出的结果就不是a和b 中的⼤数,⽽是⼤数的整数部分。
建议修改的问题也有三个;
(1)Main函数没有返回值类型和参数列表。虽然main函数没有返回值和参数,但是我们组后将其改为void main(void),来表明main函数的返回值和参数都为空,因为在有的⽩盒测试⼯具的编码规范中,如果不写void会认为是个错误。
(2)⼀⾏代码只定义⼀个变量。
(3)程序适当加些空⾏。空⾏不占内存,会使程序看起来更清晰。
程序修改如下:
#include <stdio.h>
float max(float x, float y)//返回两个单精度数中的⼤数
{
float z;
z=x>y?x:y;
return(z);
}
main()
{
float a;
float b;
int c;
scanf(“%f, %f”&a,&b);
c=max(a,b);
printf(“Max is %d\n”, c);
}
根据上⾯的分析,我们来编写⼀个简单的C语⾔代码规范
规范编号规范内容是否通过
1⼀⾏代码只做⼀件事情
2代码⾏的最⼤长度控制在70-80字,否则不便于阅读和打印
3函数和函数之间,定义语句和执⾏语句之间加空⾏
4在程序开头加注释,说明程序的基本信息;在重要的函数模快处加注释,说明函数的功能
5低层次的语句⽐⾼层次的缩进⼀个tab(4个空格)
6不要漏掉函数的参数和返回值,如果没有,⽤void表⽰
2. 动态测试
动态测试(dynamic testing),指的是实际运⾏被测程序,输⼊相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以判断⼀个测试属于动态测试还是静态的,唯⼀的标准就是看是否运⾏程序。
我们还是以刚才的那段代码为例,实际运⾏修改后的程序,输⼊1.2 和3.5两个实数,按回车,得到结果3.500000,与我们预期的相符合。这是⼀个动态测试的过程。可能有的读者会问,以上过程不也是的过程马?⿊盒⽩盒、动态静态,它们之间有什么关系呢?
它们只是测试的不同⾓度⽽已,同⼀个测试,既有可能是⿊盒测试,也有可能是动态测试;既有可能是静态测试,也有可能是⽩盒测试。⿊盒测试有可能是动态测试(运⾏程序,看输⼊输出),也有可能是静态测试(不运⾏,只看界⾯)
⽩盒测试有可能是动态测试(运⾏程序并分析代码结构),也有可能是静态测试(不运⾏程序,只静态察看代码)
动态测试有可能是⿊盒测试(运⾏,只看输⼊输出),也有可能是⽩盒测试(运⾏并分析代码结构)
静态测试有可能是⿊盒测试(不运⾏,只察看界⾯),也有可能是⽩盒测试(不运⾏,只察看代码)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。