对近期开发中遇到的有趣bug的思考

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对近期开发中遇到的有趣bug的思考相关的知识,希望对你有一定的参考价值。

问题一:

  第一个问题是对IDE过于依赖导致的bug,由于我经常使用Java和c++,之间的一些区别有时候就很容易忽略:

  

int a =0;
int b = 1;
if(a=b)
{
     ... 
}

 

  在Java中,这样的判断eclipse是会报错的,因为a=b是赋值语句,所以返回值是对左值的引用,返回int,而java的判断语句括号中必须是boolean,不然会报错。

  而在c++中是不会报错的,括号内先赋值操作,a=b,变成a=1,返回a的引用,int类型的1在c++中表示判断时为true,所以这个if判断始终成立。

 

  这样的问题是对于IDE过度依赖,代码开发的过程中粗心导致的bug,并且在debug过程中很难发现,在开发中花费了较长的时间去debug。

 

 

问题二: 

  在web开发过程中,需要完成一个小功能:输入一个年份,确定其是否合法,并且判断该年份是否为闰年。

 

  对于一个闰年的判断,有以下几个注意点

    1.可以被被400整除的年份

    2.可以被4整除,但不能被100整除的年份


  以下是最终完成的判断代码:

 1 public boolean isLeapYear(int year)
 2 {
 3     boolean judge = false;
 4   
 5     if (year % 4 == 0)
 6         judge = true;       
 7 
 8     if (year % 100 == 0)
 9         judge = false;
10  
11     if (year % 400 == 0)
12         judge = true;
13 
14     return judge; 
15 }

  

  在刚开始的开发中,由于逻辑的不清楚,对于闰年的判断顺序先判断4整除,然后判断400,最后用100去修正,这样导致了整除400的年份被100修正后,

变成了非闰年,是不符合闰年判断的规则的。

  这个bug发生的原因是在开发开始的时候,没有理清判断流程,导致了判断顺序的错误。

以上是关于对近期开发中遇到的有趣bug的思考的主要内容,如果未能解决你的问题,请参考以下文章

近期的一些思考(前后台对接方面)

关于近期开发中遇到的同一账户多人登录造成数据库数据不一致的思考和解决(避开了数据库存状态的常用处理手段)

团队版本交付不断延期,我们应该如何追回进度,赶上工期的一些思考

三段诡异的JavaScript代码,结果出乎意料

腾讯bugly干货分享解耦---Hybrid H5跨平台性思考

程序员开发思考-1