静态规则检查的那些故事 -- 真实客户案例 (一)该死的For循环
本文原载于软件测试人专业博客,任何转载,均需保留原地址:http://www.mytestlife.com/post/2.html
(一)该死的For循环:
"
As talked last night, we have solved one big code bug; here I list it here for your information.
This code cause system running in an endless loop, that cause system reboot due to watch dog timer timeout.
This code cause system running in an endless loop, that cause system reboot due to watch dog timer timeout.
void ETN_xdd_algo::stop_running(T_global_TCID tcid)
{
if (pinstances == NULL) {
return;
}
LE_simple_list<ETN_xdd_algo *>::iterator it = pinstances->begin();
{
if (pinstances == NULL) {
return;
}
LE_simple_list<ETN_xdd_algo *>::iterator it = pinstances->begin();
for (; it != pinstances->end(); ) {
if (tcid == (*it)->get_tcid()) {
delete *it;
break;
}
}
if (tcid == (*it)->get_tcid()) {
delete *it;
break;
}
}
return;
}
}
"(为防止泄漏客户信息,代码做轻微改动)
单看这段代码,你或许能很快发现“该死的For循环错误”!你或许甚至无限鄙夷书写这样代码的开发人员所犯如此低级错误;
是的!非常低级的错误。但别幸灾乐祸,也别自以为聪明不会犯此类错误。
让我们先简单看看客户的情况:
A公司(为保障客户信息,使用A公司代替)是国际电信行业的佼佼者,是数十亿美元规模的电信技术领先厂商,拥有数个重要的全球研发中心,拥有技术先进、制造能力达到世界一流水平的生产制造平台,销售服务网络遍及全国和海外50多个国家。
以上错误的代码正来自A公司核心设备的软件中。述及该项目的历史,也足让你瞠目结舌。总项目全部基础性代码超过1000万行,最早的代码可追踪到90年代。客户所测项目隶属总项目重要模块之一,代码量超过100万行。
实际项目已经运行于电信设备上,而该Bug只会在极端情况下才会发生。可想而知,这样的问题从他们客户那里反馈回来,然后该项目主要负责人开始安排人手从100万行代码中查找该问题,何异于大海捞针。无赖之下,客户只有不停模拟各种输入参数,模拟各种可能发生的情况。经数日苦战,客户终于重现该问题。然后顺藤摸瓜,揪出以上“罪魁祸首”的源码 – “该死的For循环!”
我们可以简单总结以上情形:
1. 国际性大公司,庞大的研发团队,优秀的开发人员;
2. 源码中的低级错误引入到产品阶段,被客户发现;
3. 客户发现问题 –> 反馈给开发团队 -> 查找问题
低级错误所花费成本可想而知;
通过静态规则可轻易防止该错误产生:
以下规则来自C++test静态编码规则:
"
Null initialize or increment expressions in for loops will not be used; a while loop will be used instead [CODSTA-49-3]
DESCRIPTION Null initialize or increment expressions in for loops
will not be used; a while loop will be used instead.
Rule reports a violation message if 'for' statement
misses init or increment section.
will not be used; a while loop will be used instead.
Rule reports a violation message if 'for' statement
misses init or increment section.
BENEFITS
A while loop provides a more natural representation.
EXAMPLE
void foo()
{
for(int i=0; i< 10;) // Violation
{
/* ... */
}
int j = 0;
for(; j< 10;) // Violation
{
/* ... */
}
}
REPAIR
void foo()
{
int i = 0;
while(i< 10) // OK
{
/* ... */
}
int j = 0;
while(j< 10) // OK
{
/* ... */
}
}REFERENCES JOINT STRIKE FIGHTER, AIR VEHICLE, C++ CODING STANDARDS
Chapter 4.24 Flow Control Structures, AV Rule 200
"
原文链接:http://www.mytestlife.com/post/2.html

不是专业人士看不懂
It is very good ! SKYCC营销软件是一款多功能组合营销软件,主要由2个部分组成:广告信息发布、网站排名优化。<br />
广告信息发布:可以将广告信息发布到类似58同城,赶集网,站台网,阿里巴巴等大型商务网站中,让更多的客户通过广告信息找到您,从而促成定单。网站排名优化:将外连接发布到众多博客,论坛中。通过建立大量高质量和稳定外链接配合网站优化技巧从而提高网站在搜索引擎排名,来达到推广的效果。</p>
SKYCC营销软件是一款功能强大的网络推广软件,软件由三大模块组成:商贸营销平台、搜索引擎排名、其他辅助工具。SKYCC营销软件在对外发布信息的同时为网站建立高质量稳定的外部链接,这种信息群发能够提升网站在搜索引擎中的排名,SKYCC营销软件的搜索引擎排名模块主要是针对百度、Google等大型的搜索引擎为网站做优化。提升网站排名,增加网站流量,为企业带来订单是SKYCC的使命。73
SKYCC营销软件是一款功能强大的网络推广软件,软件由三大模块组成:商贸营销平台、搜索引擎排名、其他辅助工具。SKYCC营销软件在对外发布信息的同时为网站建立高质量稳定的外部链接,这种信息群发能够提升网站在搜索引擎中的排名,SKYCC营销软件的搜索引擎排名模块主要是针对百度、Google等大型的搜索引擎为网站做优化。提升网站排名,增加网站流量,为企业带来订单是SKYCC的使命。61
It is very very good soft...! SKYCC营销软件是一款多功能组合营销软件,主要由2个部分组成:广告信息发布、网站排名优化。
广告信息发布:可以将广告信息发布到类似58同城,赶集网,站台网,阿里巴巴等大型商务网站中,让更多的客户通过广告信息找到您,从而促成定单。网站排名优化:将外连接发布到众多博客,论坛中。通过建立大量高质量和稳定外链接配合网站优化技巧从而提高网站在搜索引擎排名,来达到推广的效果。37
SKYCC营销软件是一款多功能组合营销软件,主要由2个部分组成:广告信息发布、网站排名优化。
广告信息发布:可以将广告信息发布到类似58同城,赶集网,站台网,阿里巴巴等大型商务网站中,让更多的客户通过广告信息找到您,从而促成定单。
网站排名优化:将外连接发布到众多博客,论坛中。通过建立大量高质量和稳定外链接配合网站优化技巧从而提高网站在搜索引擎排名,来达到推广的效果。11
&圣诞节元旦节燕窝大促销,全场8折 !
有需要的联系:18668003733,13617310555
&
&&&&&& 马来燕皇集团是马来西亚一家汇集燕屋开发,燕屋销售及管理,燕窝加工厂,燕窝交易中心于一体的专业燕窝集团。我们从源头的燕屋设计开发,引燕,燕屋管理,燕窝采摘, 挑选,分类,包装,检疫检测,进出口报关,产品专卖店,品牌的推广都全程跟进,确保消费者的食品安全。
&&&&& 我们的燕窝基地是个两千多亩的果园,它位于马来西亚的国家森林边缘.燕屋分布在这一望无际的原始森林里,以森林野果自然繁殖的昆虫吸引岩洞内的金丝燕在人工建造的燕屋内筑巢,既......42