测试工程师 - 面试题
测试一个web页面,上面有一个文本输入框,一个计数count按钮,用于计算一个文本字符串中大写字母A出现的个数,请设计出一系列字符串用以测试这个web页面
应聘者不应一开始就直接去罗列测试用例,应先充分思考这个问题
测试数据列表如下:
1.banana (正常合法用例)
2.A和a(一个简单的有正常结果的合法输入)
3.“”(一个简单的结果为0的合法输入)
4.Null:简单的错误输入
5.“AA”和“aa”:(个数>1,并且所有字母都是A的输入)
6.“b”:简单的非空合法输入,结果为0
7.aba:目标字符出现在开头和结尾,以寻找循环边界错误
8.“bab”:目标字符出现在中间
9.space/tab AAAAAAA等:空白字符与N个A的混合
10.不包含A的长字符串:如2^32、2和10的次方
11.包含A的长字符串
12.X\nX字符串
13.{java/C/HTML/JavaScript}
然后讨论更加高级的测试问题:
14.质疑解密的外观、调色板和对比度
15.文本框大小长度是否合适
16.考虑这个应用能否在同一台服务器上运行多个实例,是否会发生多个用户的串扰
17.提出疑问“数据会被记录吗”,输入串可能包含地址或其他身份信息
18.建议使用真实数据进行自动化测试,如从词典或书本里选择
19.提出疑问,“计算足够快吗,在大负载下呢”
20.提出疑问,“该页面是可发现的吗?用户怎么能找到该页面”
21.输入HTML和JavaScript,看是否会破坏页面渲染
22.寻找是对大小写的A计数,还是都包括
23.尝试复制粘贴字符串
另外可问些更加高级的问题,能反映富有经验、宝贵的测试思维、能够比问题走的更远的想法:
24.意识到计算会通过URL-encode HTTP GET请求传递到服务器,字符串可能会在穿越网络时被截断,因此无法保证支持多出的URL
25.建议将此应用参数化。为何只对字母A计数呢
26.考虑计算其他语言中的A,如变音符号
27.考虑该应用是否可以被国际化
28.考虑编写脚本或者手工采样来探知字符长度的上限,如通过2的指数递进算法,然后确保在此区间内功能正常
29.考虑背后的实现和代码,也许有一个计数器遍历该字符串,另外一个跟踪已经遇到了多少个A(累加器),因此可以在边界值附件变化A的个数和字符串的长度来进行测试
30.提出疑问,“HTTP POST方法和参数会被黑掉吗,也许有安全漏洞”
31.用脚本创建各种有趣的排列组合和字符串特性如长度、A的个数等组合,自动生成测试输入和验证
最后,Google需要的是保持好奇心,充满热情的工程师,不满足于简单完成被分派的工作,而是会进一步探索各种可能性,尝试工作描述之外的东西。工作职责自然要完成,但是生活和工作的意义在于最大限度的对外部世界产生影响。
我们需要的是那些与现实世界和计算机科学团体紧密联系的人,例如给开源项目开bug的人,或者通用化自己的工作以提高复用性的人。
我们需要的是能够和他人和睦相处、合作愉快的人,是能够影响Google文化的人。
我们需要的是愿意持续学习和成长的人。我们也需要那些带来新鲜思想和经验的人,他们丰富了Google的人才库。
我们希望他们在看到问题时能直言不讳。
参加大型技术公司的面试是一件令人害怕的事情,很多人无法一次过关,而是需要多次练习。严酷的面试并非我们的本意,我们的目的是确保找到合适的、能发挥作用的、将来能胜任工作顺利成长的人