软件中出现缺陷(BUG)的原因有哪些? | 当前位置: 首页> 学习中心> 小白入门> 详情 |
提到bug,有些人觉得很遥远,但是事实上我们经常会碰到,比如网络瘫痪,游戏出现卡顿等等,然而,一个bug越长越不被发现,它就可能带来更大的隐患,历史上太多这样的例子,下面我们就来看看这些经典的事例。
2015年4月,伦敦彭博终端由于软件漏洞宕机,导致金融市场上超过30万交易商受到影响。迫使政府推迟30亿英镑的债务出售。
日产尼桑汽车由于安全气囊感应探测器的软件故障,召回超过100万辆汽车。据报道,由于此软件故障导致两起事故。
星巴克咖啡由于POS系统的软件故障无法处理交易,因此被迫关闭了美国和加拿大约60%的商店。
亚马逊的一些第三方零售商看到他们的产品由于软件故障价格全部被降至1英磅,由此导致惨重损失。
Windows 10中的漏洞,此问题使用户能够通过win32系统中的缺陷脱离安全沙箱。
2015年,F-35战斗机成为软件漏洞的受害者,导致其无法正确检测目标。
1994年4月26日,中国航空公司空中客车A300因软件故障而坠毁,造成264人无辜死亡
1985年,加拿大的Therac-25放射治疗机由于软件Bug而发生故障,向患者提供了致命的辐射剂量,造成3人死亡,3人严重受伤。
1999年4月,一个软件漏洞导致12亿美元的军事卫星发射失败,这是历史上最昂贵的事故。
1996年5月,一个软件问题导致美国一家大型银行823名客户的银行账户被记入9.2亿美元。
2018年6月27日,阿里云出现大规模故障,原因为上线自动化运维系统触发未知Bug,导致部分产品访问链接不通,影响时间约半小时,不知道云中的程序猿们年终奖是否会泡汤。
即使是优秀的程序员,也会犯低级的错误。根据数据统计,即便是优秀的程序员,在他开发的软件产品中,如果未经过测试,代码中遗留的缺陷至少在每千行代码6个以上。
因此,未经过测试的软件程序中一定会存在缺陷。
导致软件中有缺陷的常见根源如下。
(1)缺乏有效的沟通,或者没有进行沟通。
现在的软件开发已经不是一个人的事情了,往往涉及多个人,甚至几十、几百个人。同时,软件的开发还需要与不同的人、不同的部门进行沟通。如果在沟通方面表现不力,最后会导致产品无法集成,或者集成后的产品无法满足用户需要。
(2)软件复杂度高。
软件越复杂就越容易出错。在当今的软件开发中,对于一些没有经验的人来说,软件复杂性可能是难以理解的。图形化界面、客户端/服务器、数据通信、大规模的关系数据库、应用程序的规模等大幅度地增加了软件的复杂度。面向对象技术也有可能增加软件复杂度,除非能够很好地工程化。
(3)有编程错误。
编程错误是程序员经常会犯的错误,包括语法错误、语义错误、拼写错误、编程规范错误。很多错误可以通过编译器直接找到,但是遗留下来的错误必须通过严格的测试才能发现。
(4)需求不断变更。
在实际项目开发过程中,不断变更的需求是项目失败的重要原因。
用户可能不知道变更的影响,或者知道影响却需要进行变更,这些都会引起重新设计、工程的重新安排并对对其他项目造成影响,已完成的工作可能不得不重做或推翻,硬件需求可能也会受到影响。
如果存在许多小的变更或者任何大的改动,由于项目中不同部分间可知和不可知的依赖关系,因此就会产生问题,跟踪变更的复杂性也可能引入错误,项目开发人员的积极性也会受到打击。
在一些快速变化的商业环境下,不断变更的需求可能是一种残酷的事实。在这种情况下,管理人员必须了解变更的风险,质量保证(Quality Assurance,QA)工程师与软件测试工程师必须通过进行大规模的测试来防止不可避免的Bug造成无法控制的局面。
(5)来自时间的压力。
进度压力是每个从事过软件开发的人员都会碰到的问题。为了抢占市场,我们必须比竞争对手早一步发布产品,于是不合理的进度安排就产生了,不断地加班加点最终导致大量错误的产生。另外,由于软件项目的时间安排是最难的,通常需要很多猜测的工作,因此当最后期限来临的时候,错误也就伴随发生了。
(6)缺乏文档的代码。
由于人员的变动和产品的生命周期演进,在一个组织中很难保证一个人一直在开发某个产品。因此,对于后面参与产品开发的人员来说,难以读懂和维护一段没有文档的糟糕代码,最终的结果只会导致更多的问题。
(7)依据软件开发工具。
当我们的产品开发依赖某些工具的时候,这些工具本身隐藏的问题可能会导致产品的缺陷。因此,我们在选择软件开发工具的时候,尽可能选择比较成熟的产品,不使用最新的开发工具,这类工具往往本身还存在很多问题。
(8)人员过于自大。
我们经常会发现人们普遍喜欢说“没问题”“很简单”“我可以在几小时内解决那个问题”“修改那些老代码应当是很简单的”;而不是说“那会增加很多复杂性,可能会导致很多错误”“如果我们要做那个的话,我们将无能为力”“我无法估计可能要多长时间,除非我能进一步进行观察和研究”“我们无法弄清楚那些混乱的代码到底在做什么事情”。
如果存在太多的“没问题”,问题也就产生了。
更多软件测试相关推荐:
文章来源:网络 版权归原作者所有
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理