写点什么

一次敏捷测试的实战

2010 年 5 月 29 日

据 Matt Heusser 说,Gerald Ford 国际机场的停车场计费器像个老爷车。于是他给全世界的测试人员提出了一个挑战:找出这个停车场计费器的缺陷。通过twitter 和博客,许多人去测试这一应用程序。在往下看之前,建议你先花几分钟来看看自己能找到多少缺陷。

敏捷测试教练 Selena Delesie 从日期和时间这几个字段的边界值入手。

只玩了几分钟,我一天内短时间停车的账单就达到了 6,750,000.00 美元的。……

下面看到的是,通过在“离开时间”这一字段进一步尝试简单的超限设置,我的费用竟攀升至 2,500,000,000,000,041.00 美元。值得注意的是,这只是我一天内的停车?不可思议。

一名在 Philippines 工作的软件测试人员 KC 注意到,如果你尝试用页面的默认值做计算,在错误被覆盖之前,会有一个含 php 错误信息的页面跳出来。其它测试参与者们则发现,这个错误在每次页面加载时都会出现,而页面仅仅忽略了此异常。

形形色色的人都来玩这个程序,他们都想看看最高能获得多少停车费。比较好玩的是, Matt 最初提出的挑战后面有一系列跟帖,这是大家共同努力的结果。随着新帖对前人记录的不断刷新,对根本问题的洞察也进一步浮现出来。

Alain Bohon 发现了一些有趣的事情,停车计费器认为这些例子是有效的:

  • 我如果在同一天的上午 6 点到达,并在上午 3 点离开,就不用付钱!
  • 我改主意了,决定在 4/4/10 晚上 27 点到达,并可以在 4/13/10 早上 -6 点离开,哇!
  • 事实上,我能在 12.5555 点到达,在 13.00004 点离开么……我猜我能。

Peter Haworth-Langford 发现,最初的异常来源于 mktime() 这个方法。了解了此方法所调用的参数,他着手创建一些新的测试来看看是否能找到另外的缺陷。

Dr. Meeta Prakash 观察到,这个应用程序能接受任何输入,包括许多边界外的输入都可以接受。

Matt 发现,在经济停车场第 7 天的停车好像是免费的,程序计算出来的结果是停 7 天更加便宜:停车 6 天又 3 小时是60美元,而停 7 天只要54美元!多停了一天还省了 6 美元。

有几个人还发现日期选择框有时显示不了,Matt 说:

日 期选择框的代码会触发它弹出,但如果它已经“弹出”了,就什么都不做。呃,但有个用户交互的问题。如果我点弹出(让它显示),随后点回程序窗体,那么日期 选择框就到了浏览器后面。接下来我再点显示弹出框,业务逻辑会认为“嘿,弹出框已经弹出了”,于是没反应——然而用户可不明白这些。甚至刷新或者重新提交 页面之后,仍旧没反应。

很多人提出了这一点,但大多数只是注意到了症状,缺乏重现步骤或操作范例。……如果最佳缺陷报告有奖金的话,我打赌有了重现步骤一定会好很多。

最后, Selena 概括了测试过程中发现的缺陷:

  • 在日期和时间框可以输入任意数据,无限制。
  • 可以申请任意时间的短时停车,无限制。
  • 在有些情况下,如果离开日期比开始停车日期晚很多的话,计费会减少(当所有其他因素保持不变时)。
  • 如果输入很大的数字(大约 10 位或更多),时间框里的数据对计费的影响会超过日期框里的数据。
  • 在日期和时间框里允许输入负数,并且能够计费。
  • 在日期和时间框里允许输入字母,并且能够计费。
  • 在日期和时间框里允许输入符号,并且能够计费。
  • 我猜你可以在输入框里写一段 php 脚本来做点儿有趣的事(可能的安全性问题?),可惜我现在已经不写 php 了。
  • 在日期和时间框的每个数据输入处都发现了边界问题。对每个在(X:X,X/X/X)里的 X 点,多加一位数字就会导致计费出错,而且再多加一位会导致计费结果比前一次低。
  • 假设开始日期 = 离开日期,且开始时间 > 离开时间,在开始 <=11:59,离开 >= 0:59(都是 am,或都是 pm)的情况下,超过一天就能免费停车。这会导致停车天数为负值。

我的最高计费?5,014,609,699,998,504.00 美元(对 2.08942070833E+14 天,14 小时,47.4666666667 分钟)。

启示:

  • 三个臭皮匠,顶一个诸葛亮。
  • 对于测试人员而言,跳出日常工作在其它地方练练手、磨磨刀是很好的锻炼。
  • 开发人员则可以通过阅读遇到的问题,考虑在自己的代码中是否也存在类似的问题。

参见英文原文: Agile Testing Challenge

2010 年 5 月 29 日 01:331680
用户头像

发布了 114 篇内容, 共 24.8 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

第八周学习总结

Griffenliu

十二周作业

orchid9

hashmap 是如何炼成的

哈希说

数据结构

HiveQL分析

天天向上

极客大学架构师训练营

第十二周作业

TheSRE

极客大学架构师训练营

第八周作业

Griffenliu

架构师训练营week12总结

FG佳

第三周学习总结

J

极客大学架构师训练营

TronChain波场链系统APP开发|TronChain波场链软件开发

开發I852946OIIO

系统开发

架构师训练营 week8 课后作业

花果山

极客大学架构师训练营

架构师训练营第 8 周课后练习

菜青虫

极客大学架构师训练营

训练营第十二周作业 1

仲夏

大数据应用总结一

天天向上

极客大学架构师训练营

训练营第十二周作业 2

仲夏

第12周 作业

Pyr0man1ac

第12周 C!数据有这么大

Pyr0man1ac

十二周总结

orchid9

极客时间架构 1 期:第 12 周 数据应用(一) - 命题作业

Null

第十二周

Geek_ce484f

极客大学架构师训练营

第七周-作业1

Mr_No爱学习

极客大学 - 架构师训练营 第十二周作业

9527

量化交易软件系统开发|量化交易APP开发

开發I852946OIIO

系统开发

架构师训练营 week12作业

FG佳

架构师一期

量化交易APP软件系统开发(现成)

开發I852946OIIO

系统开发

架构师训练营第二期 Week 8 作业

bigxiang

极客大学架构师训练营

week8性能优化(二)作业和学习总结

杨斌

第十二周 数据应用(一)作业

钟杰

极客大学架构师训练营

第十二周 数据应用(一)

9527

架构师训练营第 8 周学习总结

菜青虫

极客大学架构师训练营

架构师训练营 week8 学习总结

花果山

极客大学架构师训练营

【架构师训练营第 1 期 12 周】 学习总结

Bear在挨踢

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

一次敏捷测试的实战-InfoQ