`
java-mans
  • 浏览: 11422132 次
文章分类
社区版块
存档分类
最新评论

一个值得记住的教训啊

 
阅读更多

昨天下午实现一段代码,如果一说的话非常简单,非常低级的问题,但当时测试好几次,包括两个人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;否则别人很容易在增加处理状态时忘记

上面的穿越.

小心啊,小心................................

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics