c语言编写三角形边界值测试,白盒测试中的边界值测试

白盒测试中需要重点测试哪些边界值呢?总结起来有以下几点:

测试数据类型的边界值,如整型的范围、单精度数的范围等。

测试数组的边界值。

测试分支判断语句的边界值:如if(a>=0)中的a=0。

1.数据类型的边界值

任何数据类型在内存中都是有一定的存储空间的。例如C语言分为DOS平台和Windows平台。Dos平台下的C语言中各种数据类型的存储范围如下表。

数据类型

长度

范围

短整型(short)

2B

-32768--32767

整型(int)

2B

-32768--32767

长整型(long)

4B

-2147485648--2147483647

字符型(char)

1B

256

单精度型(float)

4B

-2147485648--2147483647

双精度型(double)

8B

-1.7*10308—1.7*10308

Windows平台下的C语言中各种数据类型的存储范围如下表。

数据类型

长度

范围

短整型(short)

2B

-32768--32767

整型(int)

4B

-2147485648--2147483647

长整型(long)

4B

-2147485648--2147483647

字符型(char)

1B

256

单精度型(float)

4B

-2147485648--2147483647

双精度型(double)

8B

-1.7*10308—1.7*10308

如果是在Turbo C(DOS环境)里面定义了一个整型变量,就需要测试这个整型变量的数值是否超出了-32768—32767这个范围;而如果是在VC(Windows环境)里面定义了一个整型变量,就需要测试这个整型变量的数值是否超出了-2147485648—2147483647这个范围。

现看一个数据类型边界值测试的例子:

#incldue

void main()

{

inta=32765;

int b=3;

int c;

c=a+b;;

printf(“%d”,c);

}

假设该程序是用DOS环境下的Turbo C开发的,则求得的c值为32768超出了这个范围,当然不能正确打印。

启发:a和b作为两个整形变量,它们没有超出范围,而a和b计算之后的结果却超出了边界值,这也是程序员们经常犯的一个错误,要引起足够的重视。

2.数组的边界值

当测试数组时要重点测试其边界值,防止产生数组越界的问题,请看下面的例子:

#include

void main()

{

int a[5];

int i=0;

for(i=0;i<=5;i++)

scanf(“%d”,&a[i]); //输入数组5个元素

for(i=1;i<5;i++)

printf(“%d”,a[i]); //打印数组5个元素

}

上面程序中循环时i的取值有问题。

第一个for循环:for(i=0;i<=5;i++),i值从0到5,赋给a[i]就变成了a[0]到a[5];而数组a[5]的范围却是从a[0]到a[4],没有a[5]这个元素,这就是越界问题。它会有什么后果呢?我们事先在内存中只给a[5]分配了5个整型元素所占的空间,而在用scanf语句输入时,却要输入6个元素,那么多输入的这一个元素存在哪里呢?只能存在与数组a[5]相邻的内存空间,而这一空间是没有提前分配的,其中不一定存储什么样的数据,因此就比较危险,可能幼年期内存溢出的错误。

第二个for循环:for(i=1;i<5;i++),i值从1到4,输出a[1]到a[4],显然把a[0]这一数组元素漏掉了,虽然这一问题不是数组越界问题,但也属于边界值出了问题。

可以将程序修改如下:

#include

void main()

{

int a[5];

int i=0;

for(i=0;i<5;i++)

scanf(“%d”,&a[i]); //输入数组5个元素

for(i=0;i<5;i++)

printf(“%d”,a[i]); //打印数组5个元素

}

3.分支判断语句的边界值

很多if语句、elseif语句都含有关系表达式,如if(a>=0),else if(b<1)等,这里面关系表达式的边界值需要重点留意,我们需要测试a=0,b=1时是否成立。请看下面这个例子:

/*

程序功能:输入两个2位数(10-99之间的整数),计算它们的和并输出

*/

#include

void main()

{

int a;

int b;

int c;

printf(“请输入两个10到99之间的整数”);

scanf(“%d%d”,&a,&b);

if(a<=10||a>=99)

printf(“a的值应该在10到99之间”);

else if(b<=10||b>=99)

printf(“b的值应该在10到99之间”);

else

{

c=a+b;

printf(“两个数的和为%d”,c);

}

}

重点观察一下if语句和else if语句的条件判断有没有问题。

if(a<=10||a>=99)

printf(“a的值应该在10到99之间”);

只要a<=10或者a>=99,程序就给出错误提示信息。而实际上当输入10或99时,程序不应该报错,因为10和99也是两位数,属于合法数据,因此这句话应该改为:

if(a<10||a>99)

printf(“a的值应该在10到99之间”);

同理,下面的else if语句也应该改为:

else if(b<10||b>99)

printf(“b的值应该在10到99之间”);

通过对上面例子的分析,了解了分支语句的边界值如何测试,这也是程序员经常犯错误的地方,希望引起注意。

----------✂-------------------------------------

如果您觉得文章不错,请点击右上角按钮分享到您的朋友圈!

点击阅读原文,访问北京测试空间IT实训基地微官网!

0818b9ca8b590ca3270a3433284dd417.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值