1 ST的主要工作职责:
测试计划 & 风险分析
评审需求、设计、代码&测试
探索式测试
用户场景
编写测试用例
执行测试用例
覆盖度报告
众包
使用统计
用户反馈
2 测试设计:
和测试人员相比,开发人员有一个优势就是他们的工作产物是每个人都真正关心的,代码是项目过程中的最重要的文档。
测试计划是测试最早出现的产物,也是最早被遗忘的测试产物。由于测试计划在项目早期产出,它会很快随着新代码的完成或者功能特性的变更及设计的调整而过期。
ACC:测试计划的替代方法。ACC通过指导计划者依次考察产品的三个维度达成这个目标:描述产品目标的形容词和副词;确定产品各部分、个特性的名词;描述产品实际做什么的动词。
A代表特质(Attribute):
在做ACC分析时,需要明确该产品对用户、对业务的意义。我们为什么要开发这个东西?它能带来什么核心价值?它又靠什么来吸引用户?不需要对这些问题做辩解,直接写出来就行了。
特质是系统的形容词,代表了产品的品质和特色,是区别于竞争对手的关键。特性一般在几分钟内就可以列举出来。
比如chrome的特质:快速、安全、方便
C代表组件(component)
组件是系统的名词,在特质被识别之后去顶。组件是构成待测系统的模块。
例如:chrome的导航、收藏夹、扩展程序、web页面、设置、搜索等
组件不能太多,也不能太细。
C代表能力(Capacity)
能力是系统的动词,代表着系统在用户指令之下完成的动作。它们是对输入的响应、对查询的应答、以及代表用户完成的活动。也就是软件为用户提供了哪些功能。
能力是特性&组件交点。组件(Componet)执行某种功能(Capacity)来满足产品的一个特质(Attribute)。
例如:在线购物系统:从购物车增加或删除商品、获得信用卡和验证数据、使用HTTPS处理钱款交易、显示剩余库存、基于购买者正在浏览的商品提供建议。
能力最重要的伊特特点是它的可测试性。我们需要为每个能力编写对应的测试用例。一个能力可以有任意数量的测试用例。
能力描述并不是测试用例,能力是软件可以提供或者用户可能要求的动作的一般性概念,是抽象的,不会包含 实际测试所需要的一切信息,录入特定的值或者具体的数据。
component\Attribute | Attribute1 | Attribute2 |
component1 | capactiy1 capacity2 | capacity4 |
component2 | capacity3 | capacity5 |
构建一张上述的ACC分析表格。
3 风险分析
影响风险的因素很多,试图精确地、定量地计算风险比环节风险还要麻烦。在google,评估风险主要是两个因素:
(1) 失败频率(frequency of failure):
罕见:发生故障的可能性很小,发生问题的回复也容易。
少见:在少数情况下会发生故障,但是在试用场景复杂度不高的情况下或使用率较低的情况下,发生的可能性非常小。
偶尔:故障的情形容易想象,场景有点复杂,而该能力是比较常见的。比如:Chrome的Sync功能。
常见:此能力所属的特性使用量大,复杂度高,问题频发。比如:chrome浏览器的web页面渲染。
(2) 影响(impact)
最小:用户不会注意到该问题。
一些:可能会打扰到用户的问题,一旦发生、重试或恢复机制即可解决问题。比如:refresh刷新按钮。
较大:导致用户使用受阻。比如:chrome的扩展功能。
最大:例如chrome的自动更新机制,一旦失败,就会导致关键性的安全升级无法进行。
可以将风险标注在ACC分析表格上。就会形成风险热区。
4 测试用例的生命周期
谷歌的用例管理工具:GTCM(google test case Manager)
5 bug的生命周期
谷歌使用的bug管理工具:Buganizer
给bug制定优先级P0-P4.
严重性:S0-S4
6 面试TE
测试一个web页面:上面有一个文本输入框,以及一个计数按钮,用于统计一个文本字符串中大写字母A出现的个数。
分析思路:
明确需求,输入框是否有字数限制、计算完成后文本是否会被移除、是否包括小写字母“a”。
(1) 功能测试
无效输入:null:0
有效输入:
“”:0,name:2(一个正常的字符串,合法的单次),a:1(仅一个字符a),b:0(不含有a字符), aa:2(连续的两个aa字符),aba:2(a和a分别在第一个和最后一个,以寻找循环边界错误),bab:1(a在中间),“ \n a”:1 (包含特殊字符), <alter>abc</alert>:3(还有可执行字符) , 长字符串不包含a:0(长串的测试),长字符串包含N个a:N(长串的测试)
(2) 高级测试
输入框是否太小
输入串的内容会被记载么
尝试复制和粘贴字符串
建议用真实数据做自动化测试,如从词典或者书本选择
计算足够快么
考虑这个应用能否在同一台机器上运行多个实例,会发生多个用户的串扰么?
(3) 更高级
计算会通过URL_encoded HTTP GET请求发送到服务器,字符串可能会在穿越网络时被截断。
建议将此应用参数化,可以支持对其他字母的计数。
HTTP post方法和参数会被黑掉么?也许会有安全漏洞
用脚本创建各种有趣的排列组合和字符串特性如长度,A的个数等的组合,自动生成测试输入和验证。