51Testing软件测试论坛

标题: 学习提问:怎么理解这个断言例子呢? [打印本页]

作者: jane.su    时间: 2007-5-9 14:06
标题: 学习提问:怎么理解这个断言例子呢?
下面代码是从就业培训辅导教材《软件测试技术概论》中,第四章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
个人理解,互相探讨:如果程序运行到红色部分未满足括号里的条件那么就会报错。
作者: jane.su    时间: 2007-5-9 21:36
原帖由 lytton 于 2007-5-9 16:06 发表
个人理解,互相探讨:如果程序运行到红色部分未满足括号里的条件那么就会报错。


没有满足,就报错,了解。
那么红色部分设置的断言,看来条件是合理的,如果不满足的话,就是程序本身传进来num1的data出状况了,是吗?
那看来,断言设置,就是写入正确的条件,如果设置了错误的,那这个断言本身出问题了哦。

谢谢lytton的回复呵^_^

[ 本帖最后由 jane.su 于 2007-5-9 21:38 编辑 ]
作者: lytton    时间: 2007-5-11 09:24
应该是这样没错,但书上说断言的设置是非常有难度的,设置不好的话会影响程序,看来只有在以后的工作中才能体会了。
作者: yanfei5500    时间: 2007-5-16 11:35
设置这个断言,应该是检查该函数的输入输出接口的正确性。
作者: jane.su    时间: 2007-5-16 13:57
原帖由 yanfei5500 于 2007-5-16 11:35 发表
设置这个断言,应该是检查该函数的输入输出接口的正确性。



哦?是检查本函数Dev的输入,输出的正确性?
作者: mqymqy    时间: 2007-6-8 20:29
assert是系统提供的一个函数,assert的语义如下:在debug编译模式下,如果assert的表达式求值为false,就会中断程序;在release模式下,则没有任何操作.assert就是在调试模式下用来确保制定条件被满足的一种手法,比如说,你想确保a>0,你就可以写assert( a > 0 );如果在运行过程中,a<=0了,代码就会中断,利用调试器很容易发现问题所在。
作者: seifer1754    时间: 2007-6-9 10:24
可以理解为 借助编译器的 Debug 功能,在代码程序中设置一些断点,
然后再相应的断点插入一些临时变量,将需要验证的值获取出来进行检测。
这样可以在不修改代码的情况下方便的对代码的流程进行检测。
在很多大型的公司,都采用编译器的断点功能对代码进行验证与检测。
很多编译器还提供脚本功能,这样我们可以单独根据里代码的流程图来设计断点脚本,然后
在编译代码的时候,同时运行脚本,使得编译器能够自动将断点设置在代码行中,同时对 变量的值进行获取,来和预期值进行比较。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2