51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1376|回复: 7
打印 上一主题 下一主题

学习提问:怎么理解这个断言例子呢?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-5-9 14:06:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面代码是从就业培训辅导教材《软件测试技术概论》中,第四章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;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-5-9 16:06:38 | 只看该作者
个人理解,互相探讨:如果程序运行到红色部分未满足括号里的条件那么就会报错。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-5-9 21:36:39 | 只看该作者
原帖由 lytton 于 2007-5-9 16:06 发表
个人理解,互相探讨:如果程序运行到红色部分未满足括号里的条件那么就会报错。


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

谢谢lytton的回复呵^_^

[ 本帖最后由 jane.su 于 2007-5-9 21:38 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-5-11 09:24:19 | 只看该作者
应该是这样没错,但书上说断言的设置是非常有难度的,设置不好的话会影响程序,看来只有在以后的工作中才能体会了。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-5-16 11:35:46 | 只看该作者
设置这个断言,应该是检查该函数的输入输出接口的正确性。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-5-16 13:57:57 | 只看该作者
原帖由 yanfei5500 于 2007-5-16 11:35 发表
设置这个断言,应该是检查该函数的输入输出接口的正确性。



哦?是检查本函数Dev的输入,输出的正确性?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-6-8 20:29:34 | 只看该作者
assert是系统提供的一个函数,assert的语义如下:在debug编译模式下,如果assert的表达式求值为false,就会中断程序;在release模式下,则没有任何操作.assert就是在调试模式下用来确保制定条件被满足的一种手法,比如说,你想确保a>0,你就可以写assert( a > 0 );如果在运行过程中,a<=0了,代码就会中断,利用调试器很容易发现问题所在。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-6-9 10:24:03 | 只看该作者
可以理解为 借助编译器的 Debug 功能,在代码程序中设置一些断点,
然后再相应的断点插入一些临时变量,将需要验证的值获取出来进行检测。
这样可以在不修改代码的情况下方便的对代码的流程进行检测。
在很多大型的公司,都采用编译器的断点功能对代码进行验证与检测。
很多编译器还提供脚本功能,这样我们可以单独根据里代码的流程图来设计断点脚本,然后
在编译代码的时候,同时运行脚本,使得编译器能够自动将断点设置在代码行中,同时对 变量的值进行获取,来和预期值进行比较。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-27 15:32 , Processed in 0.077359 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表