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

发表于:2018-1-03 10:49

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:iProg    来源:博客园

  问题一:
  第一个问题是对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发生的原因是在开发开始的时候,没有理清判断流程,导致了判断顺序的错误。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号