All About Smart Testing

测试者的帽子

上一篇 / 下一篇  2010-03-13 14:14:02

去年参加校园招聘时,有一位学生问我:“做测试是不是比较枯燥?”我不想骗他:“在测试过程中,有许多工作是很琐碎的,与开发者的创造性工作相比没有明显的成就感,的确很枯燥、很无聊。但是,测试也有乐趣。测试的乐趣来自于全局观,来自从于不同的角度考察系统的满足感。”

Kent Beck在介绍TDD的时候,建议开发者在不同的开发活动中要戴不同的帽子——交替用“测试”和“开发”的视角处理当前的工作。这篇短文将介绍测试者的帽子和戴上帽子的乐趣。

攻击者的帽子Myers在1979年就指出:测试是为了发现错误而执行程序的过程;成功的测试用例是使程序失败的测试用例。这使得测试者象士兵一样去搜索被攻击阵地的弱点和漏洞。这些弱点可能来自产品经理含糊的邮件、来自紧迫进度压力下的手忙脚乱、来自咖啡因、可乐、茶水混在一起的头昏脑涨。测试者需要反复地搜索、猜测、尝试和攻击,才能获得成功。通过艰苦的努力发现去发现隐蔽的bug,这就是测试的根本乐趣。这也许只有测试从业者才能理解。

客户的帽子。在许多开发团队中,产品经理负责规划产品功能,但并不真正使用产品;开发者负责开发框架或模块,但并不部署整个产品。是测试者,他们代表客户,通过部署、使用被测试软件,率先获得产品的全局观。而全局观是至关重要的:成功的产品不是没有错误的产品,它必须满足用户目标且提供良好的使用体验。测试者要学会“角色扮演”,将自己沉浸在用户的情景中,去保护用户的价值。这不是一件容易的工作。

咨询师的帽子。产品经理不喜欢别人对他的开发安排说三道四,开发者也不喜欢别人对他的设计指手画脚,但是他们都愿意接受有价值的建议。由于测试者从多个角度考察系统,他们往往可以发现遗漏的细节,提出有力的证据,贡献良好的想法。在资源允许的情况下,测试者可以评审规格说明、设计、代码,并贡献自己的想法。以我自己的经验,“易测试性”和“对调试的内建支持”是最容易被忽视的功能点,测试者需要从项目的初始阶段就开始持续增强它们。正如Martin Flower所说,测试移到了编程的前沿和中心位置

开发者的帽子。对于自动化系统测试,测试者的测试开发是基于被测试系统(SUT, Software Under Test)的二次开发。测试者通过在SUT上构建“面向测试的应用系统”,一方面检查SUT的正确性,一方面检验SUT能否支持客户去实现客户目标。既然是开发应用系统,测试者就要考虑架构、部署和维护。而且,测试处于开发的下游,经常受到上游活动的影响,因此对测试系统的易扩展性(需要持续地加入新的测试用例)、可维护性(在上游工件发生变化的情况下,将影响控制在可接受的程度)、可调试性(能够快速地定位产品代码和测试代码中的缺陷),有较高的要求。此外,测试者承担的任务很多,能够用于开发、调试的时间相对较少。因此,对测试代码的质量和生产率的要求要高于平均水平。谁说测试开发没有挑战性?

系统管理员的帽子。测试者需要将构建出的产品部署到测试环境中,运行测试用例来模拟业务过程,监控测试结果和系统运行状态以发现潜在的错误,生成报告以反映当前系统的情况。这与系统管理员的工作非常类似。不同之处在于,测试者将系统管理员数月的工作压缩在几天内完成,且反复迭代以适应产品的变化。对于一些在线系统,系统管理员是很重要的客户,他的工作对于系统的稳定性和可靠性有重要作用。测试者需要在测试环境中扮演他的角色,去发掘他可能会遇到的场景和问题,通过改进产品设计,以简化和便利他的工作。

侦探的帽子。遇到一个难以解释或复现的bug,测试者需要调动各类工具、使用多种技巧、发挥往日经验去探索可能的原因。而解决问题的唯一武器,就是思考。测试者需要戴上福尔摩斯的帽子,不放过问题中的任何一个细节,尽可能地分析出可能的因果关系,来探索背后的真相。不断否定已有思路的思考、不断向终点探索的思考,可能是软件开发中最痛苦也最有趣的活动。

数据分析员的帽子。在软件开发过程中会有许多数据,测试者需要有选择地收集、分析和解释它们,来指导进一步的开发活动。例如下图反映了产品代码(App Code)和测试代码(QA Code)的行数随时间变化的趋势。这里有两个有趣的现象:一、产品代码远多于测试代码;二、产品代码有快速的增长,但是测试代码的增长却很缓慢。这是不是在暗示测试有跟不上开发的风险呢?也许不用担心。对于现象一,可能的解释是:(1) App Code包括开发者的单元测试,因此不完全是产品代码;(2) 测试者用高阶脚本语言开发自动化测试,用较少的代码可以实现更多的逻辑;(3) 许多的测试用例是数据驱动的方式,QA Code没有包括存储在文件或数据库中的测试数据。对于现象二,可能的解释是:(1) 作为下游活动,测试总是落后于开发。测试者还在测试前一阶段的产品代码,还没有开始测试最新签入(check-in)的代码;(2) 测试者正在准备测试数据,还没有编写新的测试代码;(3) App Code增长是因为开发者引入了新的开发库,签入了大量已有代码。总之,数据很有趣,但是更有趣的是对数据的解释。要想获得真实的情况,就必须和相关人员讨论

image

服务者的帽子。睿智的前辈教诲我们:测试是一种服务角色。测试员是否成功,主要是看其是否很好地满足了客户和要求和最佳利益。这里的客户包括项目经理、程序员、技术支持人员、系统管理员、管理层、最终用户和项目相关人员。测试者要认真研究,找出对项目最重要的人,找出要服务人。这是做好测试工作的第一步。如何为客户提供更好地服务,是测试者需要持续思考的问题。

当然,测试者还有许多其他的帽子,更多的帽子也会随着职业的发展在未来出现。尽可能宽泛地思考,频繁地更换帽子,是测试者的乐趣。坚持一种视角,持续地挖掘,是测试者的快乐。Happy testing!


TAG:

karen的个人空间 引用 删除 地下森林   /   2010-03-17 13:43:39
原帖由liangshi于2010-03-16 23:06:38发表
原帖由地下森林于2010-03-16 11:07:33发表
看博主的文章,博主应该是有多年测试经验的人。在这里想请教.


谢谢!
Smart Testing 引用 删除 liangshi   /   2010-03-16 23:06:38
原帖由地下森林于2010-03-16 11:07:33发表
看博主的文章,博主应该是有多年测试经验的人。在这里想请教一个博主一个问题:在一个只有四五个人的测试.


我的建议是,培养专家型的通才。四五个人的小组,最好是每个人都可以胜任大多数工作,这样可以随时替补,以适应动态的开发需求。不过,要想深入,就要投入更多的精力,那么就需要某人在某方面投入更多的精力,也就是在广博的基础上成为专家。例如,可以让某人深入的研究性能测试,让某人研究安全测试,然某人研究自动化(例如,自动化构建,BVT,自动化的每日测试)。许多领域都有值得研究的内容,可以根据每个人的特点来安排。
karen的个人空间 引用 删除 地下森林   /   2010-03-16 11:09:51
补充一点,我们做的是运营类,不是产品测试。
karen的个人空间 引用 删除 地下森林   /   2010-03-16 11:07:33
看博主的文章,博主应该是有多年测试经验的人。在这里想请教一个博主一个问题:在一个只有四五个人的测试组,如何做好测试工作,使测试更深入一些?
引用 删除 凛冬将至   /   2010-03-16 09:46:13
5
 

评分:0

我来说两句

Open Toolbar