昨天下午实现一段代码,如果一说的话非常简单,非常低级的问题,但当时测试好几次,包括两个人review了,都没有发现问题.
结果集成到应用发布的时候出现BUG了,只好回滚.好在我们的应用都有预发而机制,没有影响线上的真实应用.
场景是这样的:
switch(x){
case 1:
case 2:
case 3: // nothing
break;
case 4:
dosomething;break;
case 5:
dosomething;break;
default:
dosomething;break;
}
昨天要实现case 3的逻辑,是一个URL编码.结果改成:
switch(x){
case 1:
case 2:
case 3: // nothing
urlencode(url);
break;
case 4:
dosomething;break;
case 5:
dosomething;break;
default:
dosomething;break;
}
当时测试的时候只写了个URL传进来,正确输出了.
没想到case 1和case 2的情况穿越到 case 3了,结果是case 1和case 2的字符串都进入了urlencode的逻辑.
这么低级有错误,说出来谁都明白,或者如果整个代码是自己一次性写的,绝对不会犯这种低级错误,但在修改别人原有代码时
却忘记了在上面加个break来阻止穿越.
这样的代码如果考虑到以后别人可能修改和维护,其实不如费点事每个case直接加上break;否则别人很容易在增加处理状态时忘记
上面的穿越.
小心啊,小心................................