学习提问:怎么理解这个断言例子呢?
下面代码是从就业培训辅导教材《软件测试技术概论》中,第四章P52页摘出来的,想请教老师同学们,这个例子想说明断言检测的啥呢?红色字体的部分,可以大致解释下吗?
先谢过了。:)
unsigned int Dev(int num1,int num2,int &ref)
{
int val1,val2,k=0;
val1 = num1;
val2 = num2;
while((val1-val2) > 0)
{
val1 = val1 - val2;
k++;
}
ref = val1;
return k;
}
unsigned int Dev(int num1,int num2,int &ref)
{
int val1,val2,k=0;
val1 = num1;
val2 = num2;
_ASSERT(num1 >= 0);
_ASSERT(num2 >= 0);
while((val1-val2) > 0)
{
val1 = val1 - val2;
k++;
_ASSERT(num2 * k + val1 == num1);
}
ref = val1;
_ASSERT(ref < num2);
return k;
} 个人理解,互相探讨:如果程序运行到红色部分未满足括号里的条件那么就会报错。 原帖由 lytton 于 2007-5-9 16:06 发表 http://bbs.51testing.com/images/common/back.gif
个人理解,互相探讨:如果程序运行到红色部分未满足括号里的条件那么就会报错。
没有满足,就报错,了解。
那么红色部分设置的断言,看来条件是合理的,如果不满足的话,就是程序本身传进来num1的data出状况了,是吗?
那看来,断言设置,就是写入正确的条件,如果设置了错误的,那这个断言本身出问题了哦。
谢谢lytton的回复呵^_^
[ 本帖最后由 jane.su 于 2007-5-9 21:38 编辑 ] 应该是这样没错,但书上说断言的设置是非常有难度的,设置不好的话会影响程序,看来只有在以后的工作中才能体会了。 设置这个断言,应该是检查该函数的输入输出接口的正确性。 原帖由 yanfei5500 于 2007-5-16 11:35 发表 http://bbs.51testing.com/images/common/back.gif
设置这个断言,应该是检查该函数的输入输出接口的正确性。
哦?是检查本函数Dev的输入,输出的正确性? assert是系统提供的一个函数,assert的语义如下:在debug编译模式下,如果assert的表达式求值为false,就会中断程序;在release模式下,则没有任何操作.assert就是在调试模式下用来确保制定条件被满足的一种手法,比如说,你想确保a>0,你就可以写assert( a > 0 );如果在运行过程中,a<=0了,代码就会中断,利用调试器很容易发现问题所在。 可以理解为 借助编译器的 Debug 功能,在代码程序中设置一些断点,
然后再相应的断点插入一些临时变量,将需要验证的值获取出来进行检测。
这样可以在不修改代码的情况下方便的对代码的流程进行检测。
在很多大型的公司,都采用编译器的断点功能对代码进行验证与检测。
很多编译器还提供脚本功能,这样我们可以单独根据里代码的流程图来设计断点脚本,然后
在编译代码的时候,同时运行脚本,使得编译器能够自动将断点设置在代码行中,同时对 变量的值进行获取,来和预期值进行比较。
页:
[1]