最近重读《Google软件测试之道》,其中有一道面向软件测试工程师的面试题非常考验测试人员的思维。拿来与你们分享,看看这样一道题,你能想到多少个测试点。
题目:
在一个Web测试页面上,有一个输入框,一个计数器(count)按钮,用于计算一个文本字符串中字母a出现的个数。这里的问题是,请设计一系列字符串用以测试这个Web页面。
题目非常简单,看到这个题目不要上来就开始设计用例,最好能有一些思考,这样看起来更加“专业”。
(题外话,我在参加产品需求评审的时候也会问许多问题,尤其是产品需求并没完全确定下来的时候,站在用户的角度,我也是用户啊,我是否喜欢这个功能?)
所以,我第一个想到的是设计这个功能的背景,因为同样一个功能,在不同的背景下,测试需要考虑的点可能是不一样的。例如,同样是一个搜索功能,百度的搜索和淘宝的搜索就有很大不同,因为用户的使用场景完全不同,输入搜索的关键字和预期结果也不一样。
当然,这只是一道题,你根据题目回答就好了。
不过,我们仍然可以就题目本身来提一些问题:大写还是小写?只是英文么?计算完成后文本会被清除码?多次按下按钮会发生什么事情?…..
接下来你假装有条不紊的设计用例(思考一会儿,然后再输入一串字符,然后再思考…),而不是看起来像monkey试图破坏软件(拼命的敲击键盘…)。
“banana”:3(一个合法的英文字)。
“A” 和“a”:1(一个简单有正常结果的合法输入)。
“”:0(一个简单的结果为0的合法输入)。
Null:0(简单的错误输入)。
“AA” 和“aa”:2(个数大于1并且所有字符都为a/A的输入)。
“b”:0(一个简单的非空合法输入,结果为0)。
“aba”:2(目标字符出现在开头和结尾,以寻找循环边界错误)。
“bab”:1(目标字符出现在中间)。
space/tabs:N(空白字符与N个a的混合)。
不包含a的长字符串:N(N大于0)。
包含a的长字符串:N(N是a的倍数)。
{java/C/HTML/JavaScript}:N是a出现的个数(可执行字符,或错误,或代码解释)。
...
更优秀的测试工程师,应该跳出输入本身,设计以下用例。
质疑界面的外观、调色板和对比度(这与相关应用风格一致么?)
文本框太小了,建议加长以便显示更长的输入字符串
这个应用能否在同一台服务器上运行多个实例,多个用户同时使用是否会有问题。
是否会根据用户的输入自动匹配内容?
建议使用真实的数据,如从词典或书中选择输入内容。
提出疑问:“输入的数据是否会被保存”,输入字符串可能包含地址或其他身份信息。
输入HTML和JavaScrip,看是否会破坏页面渲染。
尝试复制/粘贴字符串。
提出疑问:“计算足够快么?在大并发下使用”。
提出提问:“用户怎么找到该页面?”
还有一些测试点,只有经验丰富的测试工程师才会想到。
意识到计算会通过URL-encodedHTTP GET请求传递到服务器,字符串可能会在网络传输时被截断,因此,无法保证支持多长的URL。
建议将此功能参数化,为什么只对字母a计算呢?
考虑计算其它语言中的a(α,Alpha)。
考虑到该应用是否应该国际化。
考虑编写脚本或者手工采样来探知字符串长度的上限,然后确保在此区间内功能正常。
考虑背后的实现和代码。也许已经有一个计数器遍历该字符串。
提出疑问:“HTTP POST方法和参数会被黑掉码?也许有安全漏洞?”
用脚本创建各种有趣的排列组合和字符串特性,如长度、a的个数等,自动生成测试输入和验证
最后:
欢迎关注公众号:程序员一凡,领取一份216页pdf文档的Python自动化测试工程师核心知识点总结!
这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
网友评论