起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 没有bug的代码如何写

没有bug的代码如何写

时间:2019-02-11 17:25:02来源:编程网 作者:IT培训网 已有: 名学员访问该课程

  快捷搜索:bug(25)

前言:bug 这个概念的起源,就预示着它的不可避免性。世界上第一个 bug 是一只飞蛾,这剧本,谁能料到?某种意义上说,bug 就是不可预见的错误,能被预估并且提前做好准备的,那叫 exception, try catch 是他们的朋友。

请问:如何写出没有BUG的代码?

没有bug的代码如何写_www.epx365.cn

1947年9月9日,美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作。她的团队跟踪到 Mark II 上的一个错误,操作人员发现是由于一只飞蛾钻到了 Mark II 的继电器里导致的。团队清除了这只飞蛾,一切恢复正常。

当时的工作人员记录了这样一句日志:” First actual case of bug being found. ” 这次着名的事件,犹如潘多拉打开了魔盒,从此,程序员的世界里,bug 满天飞。

没有bug的代码如何写_www.epx365.cn

世界上第一个 bug

在我所担任过的角色中,有一个岗位叫做 Development Manager,通常简称 DM. 记得在一次基于一款平台的二次开发项目中,因为 bug 实在太多,我们几乎拿出了一整个里程碑的周期来 debug,于是我这个DM有了新的解释:Debug Man.

没有人喜欢 bug,bug 意味着错误、不确定性、加班、交付风险,等等…… 负面的词语怎么堆砌都不冗余。随便找个有过一、两个项目经验的开发者,问问他 debug 的回忆,那气氛就跟上坟一样。

对于 bug,开发者的神经往往也很敏感。有个段子很有趣 —— 说的是“应该如何向程序员反馈一个 bug ”

你不能直接跟他说:“这里不对啊,是不是你程序有 bug 啊?”,要这么说的话,会直接被怼回来:“你丫的自己不会用吧!”。

你可以换个说法:“咦,这里好像不对,是我操作错了吗?”,这时程序员心里就一咯噔:“Shit.. 不会是我代码有 bug 吧?”

从业多年,发现有个现象还蛮有趣的:有时候,当某个 bug 被发现时,犯下这个错误的始作俑者会开玩笑地为自己解脱:“谁没写过 bug 啊,Windows 还有 bug 呢。” 这句托词我也用过,感觉挺好用的,就好比:梅西都能罚丢点球,我空门没进,也是可以理解的嘛。

但其实吧…… 这逻辑经不起推敲的。

Windows 操作系统,一款长达30多年,装机量估计都超过了地球人口数量的巨型工程,复杂度基本只能靠猜。以微软公布的资料来看:

Windows 95 代码量约 1500 万行

Windows XP 代码量约 4500 万行

Windows Vista 代码量约 5000 万行

Windows 7 代码量 5000+ 万行

以 Windows 7 为例,超5000万的代码量,23个小组,共1000多人的开发团队。如此规模下产生的bug,和一个在办公室里上了1天班,写了200行代码,就闹出一堆bug,搞得项目乱七八糟的,能同日而语吗?最后再轻描淡写地来句 “微软也有 bug ”,不害臊?

所以我后来不用这句了,如此开脱,水平太low。其替代方案容我稍后再讲。

没有bug的代码如何写_www.epx365.cn

为了对抗 bug,人们发明了各种各样的工具和手段,上至方法论,下至生产工具。越来越先进的 IDE, 复杂的代码审查制度,从单元测试到集成联调,再配上 beta 版,试用,公测,等等。凡此种种,其目标无一不是消灭 bug 。可这些琳琅满目的解决方案的存在,反倒证明了一个悲剧:人类,实在是太容易犯错了。

如果说凡事都有正反两面的意义,那么 bug 的正能量就是硬生生造就了大量就业机会,进而维护了社会稳定。

那么,为什么我们总是无法避免 bug 的产生?我们能不能杜绝 bug ?

答案当然是不可能了。因为那样一来,程序员的日子岂不是太舒服了?不符合苦逼的定位。而且,我们所处的这个世界,但凡越是高唿要消灭的东西,越是会普遍地存在。就像苍蝇、蚊虫、污染、犯罪、战争,不一而足。

按照常识,经验越丰富的老手写出来的代码,一次通过的几率更高,比如他们思考得会更周全,对异常的判断和处理更老练,边界条件把握得更精确,等等。所以我们可能会幻想:是不是只要我们足够仔细,并努力磨练技艺,通过让一部分码农先老练起来,然后实现共同老练,最终就可以达到全世界开发者联合起来消灭bug的大解放了?

很遗憾,这只是一个治标不治本的思路,因为bug是有阶级的。老手们的bug相对少,只是低级错误少,他们也会遇到bug,而他们的bug,往往都是一眼蒙逼的难度系数N.x的难题,不发生在代码层面,大多在业务层面,甚至需求设计层面,或者直接是一些不可抗拒因素(做过政府项目吗?)。总之,萌新有萌新们的秀逗,大叔有大叔们的短路,老杆也会有自己的滑铁卢。

bug 这个概念的起源,就预示着它的不可避免性。世界上第一个 bug 是一只飞蛾,这剧本,谁能料到?某种意义上说,bug 就是不可预见的错误,能被预估并且提前做好准备的,那叫 exception, try catch 是他们的朋友。

对于为什么会产生 bug 的原因,着名的荷兰计算机科学家 Edsger W. Dijkstra 有过一句经典名言:

If debugging is the process of removing software bugs, then programming must be the process of putting them in.

这就是上文提到的那句托词 “ Windows 也有 bug. ” 的替代方案。

原文标题:没有bug的代码如何写

原文链接:http://www.epx365.cn/peixun/software/201946787.html

 (责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:0371-58670215 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件:3158895217@qq.com 网站域名:http://www.cnitedu.cn 注册时间:2016-07-18 11:07 最后登录:2019-02-11 16:02
推荐内容