标签 程序员 下的文章

工作中的故事-0是'TRUE'还是'FALSE'?

这个故事源于今天测试组测出的一个BUG,BUG被测试人员转给了我,故事便从这里开始了。

我们的系统是一个后台服务器程序,用C写的,运行在Solaris上,数据存储在数据库中,每次系统启动都要从数据库中读取配置数据。系统根据配置数据对输入的消息数据进行处理。今天的这个BUG现象就是对于一定的输入消息,系统根据配置数据的指导进行处理,结果得到的结果本应该是A,但是却得到了B。

首先咱抱着谨慎负责的态度,先从头到尾,再从尾到头检查自己的程序是否有漏洞或者疏忽大意之处,许久后,未发现问题,疑惑中,怎么经过我的程序这么一番处理,结果就是这样呢?

由于测试数据较简单,所以我对照着数据库中的数据,然后用输入消息数据在我脑子中根据程序的处理步骤人工处理了一次,终于发现了一处’不和谐的音符’。我发现数据库中一业务层配置表中的一字段的数据值有出入,赶忙打开数据库设计报告查看,一找一个准儿,问题就在这儿。

这个表中的这个字段的含义是’是否为默认项’,数据库设计报告中其值的定义是这样的:0 – 默认项;1 – 非默认项。首先我不去评论数据值设计是否合理,我们先来看看程序是如何处理的。
int is_default_item;
…..

if (is_default_item == 1) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}

看到这所有人都能看出问题所在了,没错,程序里想当然的以为’1′就是默认项,其他就是’非默认项’了。虽然问题找到了,但是我的心里却有了嘀咕,到底是谁错了,这个问题很显然有两个改法,一个是程序修改’1′->’0′;另一个是数据库修改,让1代表默认项。首先这里我要说我不是数据库设计的高手,可以说我自己没做过相关的数据库设计,数据库表中各字段取值设计有无经验可循我也不是很清楚。写到这可以把故事升华一下,升华成一个问题,也就是本篇的题目-0到底是’TRUE’还是’FALSE’?,这里的’TRUE’和’FALSE’并不仅仅代表真与假,而是代表更广义的含义,比如’TRUE’我们可以理解为’成功’、’正确’、’与预期目标一致’等;’FALSE’则可理解为’失败’、’错误’、’与预期目标不一致’等。

在UNIX上用C写过系统程序的人可能清楚Unix提供的API多以返回0代表调用成功,这就是一个典型的0表示’TRUE’的例子,这种返回值方式也被很多人用于程序设计中;在我们自己实现的底层库中,我们同样遵循了这样一种方式。还就我们上述的问题而言,数据库设计中’0′代表’默认项’是否就一定合理呢,相信也是见仁见智的问题;但是从程序角度,你认为:
if (is_default_item == 1) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}
更合逻辑还是
if (is_default_item == 0) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}
更合逻辑一些呢?起码我觉得第一种比较符合逻辑一些,代码可读性好些。当然如果按照下面的使用manifest constant的方式处理会比直接用literal constant更好些^_^,这样无论用0还是用1代表’默认项’起码从代码里都是逻辑通顺的,可读性好的。
#define DEFAULT_ITEM 1

if (is_default_item == DEFAULT_ITEM) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}

这个故事叙述到这就结束了,故事没有完,因为它在我们日常生活工作中还会时常发生,0是’TRUE’还是’FALSE’,把决定权留给大家^_^。

搬到新工作区了

从这周一开始,我们就在新的工作区上班了,根据公司发展需要,旧的工作区要重新整改,我们就被挪到园子外的那座楼里。

上周五,花了一天的时间进行搬家,上午打包,贴标签,大家忙的不亦乐乎。

我的东西较少,再加上用的是laptop,所以也没什么可收拾的,主要时间都是帮出差的同事整理打包了。新的工作地点在园子外,平时吃饭坐车稍有不便了。新的工作区自然什么都是新的了,新桌子,椅子和柜子。入司时我的柜子的锁就坏掉了,我也一直没有充分使用上,这次是新的,起码可以存放我的laptop。


新工作区

每个人的personal space比以前稍大些,我的工作桌上显得空荡荡的。我很是不喜欢这种转角的工作桌,工作时间一段时间后感觉很不舒服。在新工作区工作了三天了,设备和服务逐渐在完善,希望以后会更好。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats