bug的排除

今天下午统计病人人数的程序出了错误,


1.开始以为Calendar的minute相加出现问题,也就是日历可能只对分钟相加,而不会影响到年、月、日、时的,进过测试排除了这种可能

2.通过logger,打印出来的日志,对比发现存在误差

如: 

考虑到地区timezone: GTM -5h

一次排班 2013-03-25 15:00:00-2013-03-26 06:00:00,对应的UTC时间为2013-03-25 23:00:00-2013-03-26 11:00:00

那么这个地区2013-03-25所对应UTC的时间为2013-03-25 05:00:00 -2013-03-26 04:59:59


那么在2013-03-25那天,所用的时间为2013-03-26 04:59:59 - 2013-03-25 23:00:00 =05:59:59

而实际应该是06:00:00,也就是少计算了一秒钟。

Timestamp end= Timestamp.valueOf("2013-03-26 04:59:59");

Timestamp start= Timestamp.valueOf("2013-03-25 23:00:00");


int duration =( end.getTime()-start.getTime()+1)/60

duration还是等于59,实际应该是60,

但是由于java中的日期,都是通过ms来计算的,应该将1改成1000,则就正常了

修改的正确结果为

int duration =( end.getTime()-start.getTime()+1000)/60

3.但是数据还是和页面上的结果不够吻合。

数据库查询,将所有的病人人数保存到ScheduleStaffData结构中,之前料想的是,每个病人对应一条记录,但是结果并非这样

,通过打印出的logger发现,ScheduleStaffData中的 staff_required字段,可能不为1,这样导致有些病人少算了


到此为止,这个bug最终被解决。

所得的启发:

1. 弄清边界条件,时间相减可能出现多一秒少一秒的情况

2. 弄清单位,同样是1,有时候代表的是一秒钟,有的时候却是1000毫秒

3. 弄清复杂数据结构中的,字段含义,有时候可能和自己臆想的不一样。






评论

© ftutor / Powered by LOFTER