我们还使用电子管技术制造计算机的那个年代,那是计算机的主机重达数吨,并常常占据整个房间的时代。在某个实验室的某个平常的早晨,这个庞然大物突然停止了工作,我们的IT前辈们马上就开始寻找出现这种情况的原因。凭借设计图纸的引导,他们很快就圈定了可能发生问题的那一部分。在接下来的检查中,他们发现这次故障原来是一只虫子在经过两只继电器时造成了短路所致。在修复了计算机并重新开始工作之后,负责计算机维护的工程师把这次故障记录在了一份备忘录上,以便将来其他人遇到类似的情况可以迅速的找到答案。当然,他还写了一份文档给计算机的设计人员,希望以后在主机的散热孔那里可以加装一层更加细密的金属网,即不影响散热,又可以防止虫子爬到主机里。
发现上面的区别了吗?一只虫子爬进主机引起短路的这个事件,更多的被我们称为Bug,这个名词一直从计算机硬件故障沿用到了计算机软件故障。那么缺陷又是什么呢?
还是看上面的这个例子。真正的缺陷是计算机维护工程师提出来的那个问题:在主机的散热孔那里可以加装一层更加细密的金属网,即不影响散热,又可以防止虫子爬到主机里。这是计算机设计人员疏忽的地方,是产品真正的缺陷。而虫子引发的那个故障只是这个缺陷导致的故障的其中一种表现形式。z197.com也就是说,Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的。
弄懂这两个概念的区别,也就容易懂得Error、Fault和Exception的区别了。这三者一般在软件中表示出现的一些错误程度。一般认为,Error为普通级别的错误,这个错误在经过更加严格的修正后会马上解决。而Fault则认为是致命的错误,较之Error来说要严重很多,并且在短时间内来说不太容易解决。Exception一般认为是程序中可以拥有的一些异常分支,只是这些异常没有被截获,进行处理。
举个例子,飞机飞行在高度为10000米的天空中,空乘小姐发现厕所的水龙头没有关闭而导致一些水外流出来,流出的水由于没有防护装置而流到了乘坐区,影响了环境。当空乘小姐想去打扫乘坐区卫生时,扫了几下发现笤帚坏了。她需要来修理这个笤帚,而此时,机组人员报告飞机引擎坏了,所有人需要保持镇定,稳定情绪,并快速做好跳伞准备,飞机发生了致命的错误,随时会有生命危险。
这里的水龙头没有关闭影响了飞机内环境卫生就是Exception,而笤帚坏了则属于Error,飞机引擎坏了就是属于Fault。通过这个例子,我们也可以知道,软件出现了这三种类型的问题,首先处理Fault,其次是Error,最后才是Exception。
在我看来Error、Fault、Exception都是Bug的一些类型,根据轻重,你可以处理它。