Bug 是如何产生的?

图片:Pixabay / CC0 Bug 是如何产生的?

胖总,砍头不用怕,不过是一个碗大的脑洞

Bug 的产生,通常分为三种类型:逻辑漏洞、越界访问、条件考虑不全面

为了便于你理解,我以女朋友来大姨妈举例。

某日,你收到了女朋友的一条微信,跟你说自己来大姨妈,肚子疼。这时,你要写一段文字回复,这段回复你就可以认为是你写的一段代码。

这段代码需要达到的目的是让你的女朋友感受到你对她的爱,增进(至少不减少)你俩之间的感情。我们可以把这个目的当成你对自己提出的这段代码背后的产品需求。

1,逻辑漏洞:

你:我叫外卖来给你买个热饮吧。

女朋友:滚!你是想让我从床上趴下去给外卖小哥开门么?

分析:低级错误,程序执行后无法达到想要效果。

2,越界型:

你:我给你室友打个电话,让她帮忙照顾下你。

女朋友:滚,谁让你联系我室友的。

分析:访问了非法区域,造成程序崩溃。

3,条件考虑不全面:

你:亲爱的,我早就知道有这天,所以暖宝宝、热水壶、痛经药....(此处省略一万字),我都给你准备好了,就在家里。

女朋友:我现在在地铁站。

分析:你以为你万无一失,但你永远都不知道输入参数究竟是什么!

除了上面三种主流错误,还有一大堆,这里就不细说。

我跟其他答主不一样的是,我不光要告诉你们 Bug 是如何产生的,我还要跟大家解释我们程序员平常如何防范未知 Bug,因为你们也看到了,Bug 就像你女朋友的微信,你永远不知道她下一句攻击你哪个点。

所以,这里要祭出利器:异常捕获

异常捕获一般依靠 try,catch 语句。很好理解:try(尝试)一下,如果有问题,直接捕获(catch)住,防止程序崩溃。

什么,你没听懂?我这么写你可能就懂了:

女朋友:我来大姨妈了,好难受。
try {
你:xxx。
}
catch(Exception e) {
你:对不起,我触发了“e”,都是我不对,你现在选个包包,我去给你买。
}
女朋友:爱你!

完。


补充:

评论中有人提到了没有理解需求导致的 Bug。这里我要讲一下,对于普通程序员来说,那可能就是 Bug。但是对于我胖总来说,那是我设计的 feature。对于能够产出结果的东西,只要运行时没崩溃,我都能把它描述成是我故意编写的功能。

所以,在需求错位的时候,到底是低头背锅,认了那就是一个 Bug;还是昂首挺胸,说就是那么设计的功能?

这!不光是你的态度问题,还决定了事情的走向。

与其战战兢兢地怕出了 Bug 惹女朋友生气,不如思考如何霸气回应她的 Diss,把自己的所作所为描述成你精心设的结果,前提是要有理有据。

来,跟我一起说:

世界上本没有 Bug,只要你放下舔犬的自卑,迎难而上,用顶层架构者的语气反击所有指出你问题的人。

你收获的不仅仅是他人的尊敬,更是没有年终奖的清心寡欲和被逐出公司的人生自由,以及孑然一身远离女色的开悟人生。

加油,你行的。