《探索式软件测试 》
当软件测试的热点渐渐转向测试自动化,当越来越多的测试人员谈论白盒测试、测试编程、测试脚本时,测试专家James A. Whittaker旗帜鲜明地捍卫手工测试(manual testing),探讨如何用探索式测试(exploratory testing)来应对严峻的现实挑战。
作者以“漫游”为隐喻,提出了以漫游测试(touring testing)为核心的探索式测试方法。
- 第3章“局部探索式测试法”介绍了如何测试软件的局部:一个组件或模块。
- 第4章“全局探索式测试法”介绍了如何测试软件的功用(capacity):以测试意图为核心,将应用程序的多个特性和功能组合起来进行测试。这一章是全书的核心,作者提出一系列漫游测试方法,并组成了方法谱系(catalog)。作者为每一种方法起了独特的名字,并分门别类的讨论,其效果类似于Martin Fowler在《重构》中对重构手法的组织。
- 第5章分享了5个微软测试团队对于漫游测试的技术报告,以生动的笔触、丰富的素材证明了积极的手工测试依然是软件测试不可或缺的关键。
在第8章,作者对未来的软件测试进行了展望,非常有启发性。有些内容看似天马行空,实际上已经渐渐出现在现实的软件测试中。例如,Visual Studio 2010中代码覆盖率与测试用例的映射、手工测试的全程“录像”(作者曾经是Visual Studio Test Edition的架构师,相信他为此贡献良多)、正在出现的基于云计算的测试服务商。
在展望未来时,作者提出了“测试人员提示”的构想。游戏“魔兽世界”有许多小屏幕、地图、道具列表、其他玩家的消息,玩家利用这些信息能够在超级残酷的游戏世界中生存。与此相似,“测试人员提示”是是测试者的“游戏地图”:把光标移动到控件上,旁边的小窗口可以显示源代码、代码变更历史、缺陷修复历史、其他测试者已运行的用例等信息。有了它,测试者能够更自如地探索软件、展开攻击。
在我看来,”测试人员提示“很可能最先出现于Web测试。Firefox的插件Firebug已经实现页面元素和DOM树节点的双向映射:用鼠标点击一个页面元素上,页面高亮该元素,DOM窗口高亮该节点,源代码窗口高亮相应代码。一旦能定位到源代码,那么从源码管理系统获得其变更记录、从Bug管理系统获得其缺陷历史、从测试管理系统获得其测试用例,是相对容易的任务。James目前在Google任职,似乎正在将相关理念引入Chrome OS。对于Web OS,所有的应用程序都是用HTML和Javascript构建的Web程序(其软件栈是Web-app/Chrome-Browser/Chrome-OS),这是”测试人员提示“的最佳舞台。无论如何,Google都会将Chrome Browser打造成Chrome OS上的最佳测试平台,类似于Selenum的测试工具会以插件的形式植入Chrome Browser,成为Web应用和Chorme OS的测试工具。
书的最后1/3是作者的博客汇编。许多文章颇具见底,其中一篇引用了Tony Hoare爵士的名句,颇令人深思:软件测试的真正价值并不体现在代码中找出了多少缺陷,而是发现设计和编程人员解决问题方法上的局限、思路中的狭隘和技能方面的不足。这也许在暗示,是作者的持续思考和反复实践,使他能够提出漫游测试这种切合软件测试本质的方法吧。
Amazon上的一条书评是“Strong on theory and planning, weak on practical implementation”,很好的概括了此书的优缺点。
此书在附录中介绍了一批典型的开源工具:JUnit、Bugzilla、Subversion等,但是并没有介绍具体的测试实现技术,例如编写测试脚本、构造测试断言、生成测试数据等。如果你需要第一线的测试开发手册,这本书不能满足你的需求。
此书的贡献在于,当你迫不及待地准备一个猛子扎入测试自动化的深海时,它问道:
- 降低什么类型的软件缺陷最重要?
- 哪套测试活动、测试技术已经被证明对于发现这类测试最重要?
- 有哪些关键测试需要不断地重复或频繁运行?
- 哪个测试阶段的成本最高?
- 哪些测试的附加值最高并且绝对要执行?
- 是那些投入最多的测试在创造最多的价值么?
这些恼人的问题,毫无乐趣,且难以回答。但是,如果没有仔细地考虑过它们,测试自动化就会直面失败的风险。
这本书的目标读者是大规模测试自动化的领导和骨干。它所定义的测试自动化是:以改进软件测试生命周期的效率和有效性为目标,贯穿整个周期的软件技术实施。其内容涵盖:
- 为什么需要测试自动化。
- 测试自动化的成本和收益。
- 测试自动化失败的原因。
- 测试自动化的生命周期:获取自动化需求、确定自动化策略、开发自动化测试框架、跟踪度量以评估自动化测试效果、完善实施过程、培养所需人才。
作为测试组织的负责人,仔细地思考其中的问题,谨慎的实践,方能提升测试组的整体效率,优化整个软件开发过程。
据我观察,大多数测试自动化的中文图书聚焦于具体的自动化技术,在组织、战略层面的思考较少。测试自动化往往是录制、回放、脚本、框架的代名词,而没有从测试生命周期的角度涵盖需求、测试、汇报、度量与优化。此书在高层策略上分享了一些专家经验,值得思考、借鉴。