

白盒测试项目实践经验总结(二)—边界值问题
source link: http://www.10tiao.com/html/212/201807/2247485227/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

点击蓝字关注这个神奇的公众号~
序言及回顾
长期测试经验告诉我们,大量的错误发生在输入或输出范围的边界值上,而不是在输入输出范围的内部。
本文是系列总结第二篇,列举3个测试时遇到的边界值bug的典型例子~
系列1--白盒测试项目实践经验总结(一)复制链接查看:https://mp.weixin.qq.com/s/DtkVNqkgkp6LYq751KfeiQ
边界值Bug1
Bug描述: 判断内存大小能否容纳字符串时,判断条件未正确处理边界值,导致边界值情况下,使用sprintf函数向目标内存写数据,会丢失最后一个字符。
if((size_t)dest_size < strlen(idc) + strlen(host) + strlen(tmp))
{
LOG_ERR(“%s failed. Dest buffer_size is not enough.”,_func_);
return ERR_BUF_NOT_ENOUGH;
}
如上,代码中是想判断目标内存区大小能否存得下即将放入的字符串,如果空间不足,则返回一个错误;否则,则使用sprintf将字符串直接写入目标内存。
出问题的关键在于这里在判断时忽略了字符串末尾的\0。
而当实际的目标内存空间大小为11个字节时,不满足以上判断条件,于是认为目标内存是足够容纳字符串的,于是通过sprintf写入后最终的结果变成这样(最后一个字符d被截取掉了):解决:将条件判断中的<改成<=。
边界值Bug2
Bug描述:发送消息次数小于最大重试次数时,继续重试;达到最大重试次数后退出。代码中如果一直重试失败,最后实际发送次数会比最大重试次数多1.
代码中当发送消息失败时,会判断重试次数是否小于最大重试次数,如果是,则记录一条日志并重试。初始时,try_send_times=0,当if(try_send_times<MAX_SEND_MSG_TIMES)条件不满足退出后,实际已经发送了MAX_SEN_MSG_TIMES+1次。
if (status == -1)
{
// send message failed
if (errno == EAGAIN)
{
if (try_send_times < MAX_SEND_MSG_TIMES)
{
LOG_WARN("msg queue is full! try_send_times:%d",try_send_times);
usleep(5000);
try_send_times++;
continue;
}
else
{
LOG_ERR("msg queue is full! try send message times are large than MAX TIMES: %d",MAX_SEND_MSG_TIMES);
}
}
else
{
LOG_ERR("Send msg failed! Err: %s", strerror(errno));
}
}
}
解决:将try_send_times初始值修改为1.
边界值Bug3
Bug描述:自增操作写在判断语句中,导致最后日志记录次数比实际多1.
if(try_get_times++ < _max_repeat_read_times)
{
….
}
….
if (try_get_times >= _max_repeat_read_times)
{
LOG_ERR("%s: Error value of key: %s, Execute %d times", __func__,key, try_get_times);
}
如上,代码中每执行一次判断,try_get_times都会自增1,即使不满足判断条件后,即try_get_times=_max_repeat_read_times时,条件不满足不再执行if语句块内容,但变量值仍然会加1,这样在最后记录日志时,try_get_times=_max_repeat_read_times+1。
解决:将自增语句放在if块内;或者在最后记录日志时改成记录_max_repeat_read_times的值。
总结
以上是在测试时遇到的边界值问题,除了最表浅的判断条件处之外,问题更容易隐藏在上下文逻辑中,测试时仅仅关注判断条件,循环条件等本身是不够的,需要具体情况具体分析。
Qtest是360旗下的专业测试团队!
是WEB平台部测试技术平台化、效率化的先锋力量!
陪伴是最长情的告白
每日为你推送最in的测试技术
识别二维码
关注我们
Recommend
-
60
IT基础设施领域正在积极向白盒化转型,旨在取代戴尔、惠普和思科等知名品牌服务器和交换机,转而使用原始设备制造商(ODM)生产的白盒设备。ODM通常贴上自己家的logo出售设备,但它们也直接向企业销售设备或通过低利润率的增值...
-
47
根据IHS Markit的数据显示,数据中心领域白盒服务器的采用已经超过了品牌服务器。 ...
-
51
总部设在加利福尼亚州圣何塞的初创公司Arrcus从隐身中脱颖而出,本周一推出了ArcOS系统。这是一个独立的,与硬件无关的网络操作系统,适用于白盒系统,专门针对服务提供商和云计算平台的大规模可扩展基础设施。
-
52
白盒交换机的出现给了用户选择最佳软硬件平台的权利,它仅仅提供交换机硬件和ONIE(开放网络安装环境),用户可以自行选择最合适的交换机芯片,降低成本实现最大效益。但是白盒交换机没有软件是无法使用的,因此每个白盒交换机...
-
38
AT&T计划在2020年初在全国范围内实现移动5G的覆盖,最近完成了65%的网络功能虚拟化工作。而且据报道,该公司将削减工作部分岗位。
-
59
2015年底,国内首个真正意义上的互联网交换中心(Internet Exchange,IX)——蓝汛ChinaCache互联网交换中心CHN-IX首个接入点在北京成功上线;2016年4月第二个接入点于广州顺利上线;2017年5月17日,以“绿色 开放 共享”为主题的2...
-
20
【51CTO.com快译】 常言道:没有经历测试,您怎么能够判定软件开发的质量呢?对于一名测试人员来说,他需要通过测试来确定目标软件是否...
-
2
互联网六巨头联手 S³IP规范化白盒生态的项目启动_IDC国内资讯_中国IDC圈 互联网六巨头联手 S³IP规范化白盒生态的项目启动 ,“S³IP 发布会”将于7月16日举办,对S³IP项目的首阶段内容及第一版规范进行公开发布,并宣布生...
-
4
Delphi Digital 报告速读:2022 年加密世界值得关注的趋势BTCWan7小时前1374Delphi Digital 发布的 2022 年前瞻报告,对热点话题、项目和加密趋势进行了分析,Foresight News 对该报告...
-
3
作者:京东物流 陈维 G.J.Myers在《软件测试的艺术》中提出:从心理学角度来说,测试是一个为了寻找错误而运行程序的过程。 那么安全测试则是一个寻找系统潜在安全问题的过程,通过测试手段发现系统中可能...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK