51Testing软件测试论坛
标题:
从代码内部窥探bug的产生
[打印本页]
作者:
tomzhang
时间:
2010-5-9 17:31
标题:
从代码内部窥探bug的产生
大家都知道,程序主要包括三种语句:顺序,条件,循环(不提倡goto语句),目前所有的语言都包含这三类语句。
*顺序语句是最基本,最简单的语句,一般很少因为它本身出现bug。
*条件语句相比顺序语句就容易出错得多。
举个例子:if(A) {B;}
在这个语句中,最常见的错误就是表达式A的边界逻辑错误,特别是“大于/大于等于”;“小于/小于等于”这类判断。
边界逻辑错误还会引起嵌套条件语句错误,如:
if(A)
{ B; }
else if(C)
{ D; }
else
{ E; }
理论应该执行D语句,实际执行了B语句。
所以对待条件语句,需要多使用边界测试手段。
*循环语句相比其他语句是最消耗系统资源的,但是又不能没有它。它同样可能出现边界错误,如:
for(a; b; c) { d; }
b表达式容易出现边界错误,造成循环的次数不对。
它还可能出现死循环,当出现死循环的时候,系统的内存一般会被耗尽。
举几个死循环的例子:
while(true)
{
B;
}
不要以为这种错误不会出现,把true换成复杂些的表达式就极可能出现。
for(int i=0; i<6; i++)
{
for(int j=3; j<i; j++)
{
i--;
}
}
运行到i=4的时候会出现死循环。
所以对待循环语句,需要注意是否出现死循环。
至于goto语句,我不想过多的说它,它不仅破坏了程序的可读性,而且比一般的循环语句更容易出现死循环。
说了这么多,大家以为我是在讨论白盒测试,其实黑盒测试,也可以考虑这些方面。很多时候,从系统的界面就可以猜测到系统的内部结构,这就是“反向工程”。
举几个例子来判断运用了哪些语句?
1.循环语句
这类最好判断,凡是具有批处理功能的地方,多数就涉及循环语句,如:批量删除,批量导入,批量导出...
2.条件语句
状态变化,下拉框选择...都会涉及条件语句。
作黑盒测试,我们不要总把系统当做透明的,应该多运用一些以前学过的知识,试着分析系统内部的原理和结构,这样的黑盒测试,可能会更有意思,更有收获。
作者:
swinfans
时间:
2010-5-9 21:50
受教了!
作者:
msnshow
时间:
2010-5-9 22:32
在测试中黑盒和白盒兼用,这样测试效率、效果可能会更好!
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2