一个有趣的小Bug避免了一场大灾难
作者:网络转载 发布时间:[ 2016/3/1 15:14:15 ] 推荐标签:软件测试管理 缺陷管理
我要讲述的这个故事是,在一个下午,视频游戏中的小bug造成的故障,如何促使我去清除来自于软件的潜在危险漏洞,而该软件被来自于世界各地的企业和政府使用。这件事还让我明白了一个实践教训,即你为什么要将代码中发现的问题报告上去,即使一开始它们看上去那么微不足道。
这一切都始于这个秋天一个下午,我正在哈佛商学院上关于创业的本科课程。我们正在学习如何用小组的形式来有效地工作,途径是通过参与一个商学院的模拟游戏,这个模拟游戏是用来教授团队协作专业管理课程的。
little-bug-Avert-Disaster
我们被分为五组,并被告知我们的目标是共同努力作为一个团队登顶一座山峰。此外,还给了我们每个人到模拟网站的链接,一旦我们登录网站,里面会有一个屏幕告诉我们,我们在这个团队中需要扮演的独特角色。一个是,一个是经验丰富的登山者,一个是医护人员,而我则是极其有用的环境保护者,嘿嘿
从根本上而言,模拟是一个老式的、回合制的菜单游戏,用Javascript和HTML在浏览器中实现。像是《龙与地下城》的高级训练版本,在每个回合中,每个玩家都需要对往山上的哪里走,以及如何使用他们的设备做出选择。完成共同的团队目标和特定个人目标还可以获得积分(我的目标自然是通过清理山上的垃圾来保护自然了,哈哈)。
整个游戏是通过网站上的一系列表格运行的,但除此之外,还有一个一直保持在页面顶部的对话框,它允许你直接发送即时消息给其他玩家,或整个团队。当我的队友对虚拟用品产生争执时,我开始摆弄对话框,并很快意识到,它会换码任何我输入的HTML。
这意味着,我可以通过跨站点脚本,对任意我的队友的模拟页面运行我想要的Javascript代码(如果你不知道跨站点脚本以及为什么换码HTML的重要性,那么我极力推荐这个视频)。
因为有了这个新的权力,于是我发送代码给我的队友们——在他们的屏幕上弹出消息,通知他们如果清理山上的垃圾,会有奖励积分,以及扮演医护人员角色的人(特别好斗)并不需要登上山顶。我们很快收集好了虚拟垃圾,同时也放弃了医护人员。我置身于模拟游戏之外,转而让我的队友们互相竞逐积分,并陶醉在随之而来的混乱中。
利用模拟网站中的bug,我制造了很多混乱(当然所有的混乱又都是有趣的),但这绝非严重问题。因为问题内置于游戏,所以即便是坏的情况,心思不正的学生也只能用来干扰同学,而不能用它来窃取重要信息,也不能像其他的跨站脚本漏洞一样劫持帐户。我琢磨着,可能是创造这个游戏的商学院教授,后期将这个网站等的所有事宜都扔给了一个学生去做,而这个学生则匆匆忙忙地在一个喝着咖啡熬夜的夜晚,因为疏忽而遗漏了这个bug。
我本来可以此放手,随它去,但我一想到,如果有这样一个漏洞在我写的代码中,我会希望别人能够告诉我。所以,我决定负责到底,在课后报告bug。
这是事情变得有趣的地方了。
我写了一封电子邮件给哈佛商学院出版社,因为它拥有游戏的出版权。我告诉他们,我在这个软件中找到了一个跨站点脚本问题,然后他们要求我能够与他们负责维护模拟的人接触,这样以便于我告知他们漏洞的细节。他们告诉我,此模拟实际上是由第三方软件开发公司创建的,他们会把我提供的消息告知这个第三方软件开发公司,以便于该开发公司可以直接跟进。
好吧,事情跟我想得不大一样。bug不是由粗心学生引进的,它的始作俑者是一家专业公司里的专业开发人员。
现在,你可能会想,这有什么大不了的呢?这只是一个游戏而已。算有里面有bug,也不会导致什么不好的事情。问题不在于游戏有bug,问题在于,当一个专业的软件公司犯了这样的错误时,往往不会是一次性的。很有可能这家公司所使用的质量保证流程,根本不能捕捉这个这个bug,于是乎,他们甚至有可能正在将这段缺陷代码用于其他客户的项目中,从而导致更多的安全漏洞。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11