记一次令人哭笑不得的bug
Bug 背景:
我项目组需要从B项目组同步一些订单数据,B项目组提供一个dubbo接口给我调用。B项目 依赖jar 之前已经引入,并且对应的DTO 也使用过。
由于要区分测试数据和真实数据,订单有个测试标。我们项目组字段叫is_test ,取值 规则0 代表 真实数据,1 代表测试数据。
看了项目中引入B 的DTO 中测试标 也叫is_test ,我特意看了 其他用判断测试数据代码是 is_test == 1。因此我十分肯定,加确定 B项目的is_test也是
0 代表线上数据,1代表测试数据。
但是由于我的需求是查询真实数据,所以我写的查询条件是is_test = 0;需求太简单了,领导也允许我自测上线,我也信心十足,第二天产品慌张地找我线上数据乱了,真实数据被当成测试数据了,让我赶紧修复。我也慌了,怎么会有问题,一查数据库,怎么有is_test = 2 的数据,然后我下载了它们代码,看到注释 赫然写到/** ** 1 => 测试数据,2 => 真实数据 */ private int isTest;
当时瞬间我血压升高,幸好他不坐在我身边,不然要挨一耳光。我细细数了下,就这一行代码。他犯了多少错误。此时,我突然想起高中一个小插曲:
话说某日课间休息期间(午饭后下午上课前),几位同学在打牌,不幸被一领导看到了,记下名字,然后找我们班主任了。几位打牌的其中还有一位成绩不错的,班会上班主任说,你们至少犯了四大错误你不该打牌不该是你打牌你不该在这打牌你不该在这打牌被抓到
虽然我班主任是数学老师,说话很有水平,回到我细数这个同事代码过错,也至少犯了四大错误isTest 类型你不该定义为int 类型,要定义成boolean类型定义成int 类型就算了, 取值 非得弄好1 ,2不该提供一个这样的接口不该提供这样的一个接口给我
这就是一个简单的命名规范,甚至约定俗称,常识性的东西,偏偏有人不遵守,当然本人也有犯错的地方太相信别人的水平太自信自己的判断
还是那句话,对任何代码都要有敬畏之心,尤其涉及线上订单等敏感数据。
推荐看下
阿里开发规范
stackoverflow 程序员必备
github