分类: 项目管理
2008-12-23 10:01:35
测试软件是一项艰苦的工作。当对测试用例进行等价划分时,必然会减少了测试的覆盖范围。如果测试员需要做更多的测试,该如何办?
方法是开发并使用工具。
本章重点:
为什么测试工具和自动化是必须的
可用的简单工具例子
工具如何实现测试的自动化
如何饲养和照顾“猴子”
测试工具和自动化为什么不是灵丹妙药
在大多数软件的开发模式中,软件发布之前要多次重复代码——测试——修复的过程。如果要测试某项特性,也许需要不止一次执行测试,而是重复多次。还要检查确认在前面的测试中发现的软件缺陷修复没,同时又没有引入新的软件缺陷。重复执行测试的过程称为回归测试。
软件测试工具和自动化可以在有限的时间内执行多次测试。
工具和自动化的主要属性是:
1)速度;
2)效率;
3)准确度和精确度;
4)节省资源;
5)仿真和模拟;
6)坚持不懈。
注意:软件测试工具不能代替软件测试员——它们只能帮助软件测试员更好地工作。
一定要注意,使用测试工具不见得总是对的,有时手工测试是不可代替的。目前的任务是了解测试工具能做什么以及怎么做,考虑如何用它们来完成测试任务。
使用工具的类型取决于测试的软件类型,以及是进行黑盒测试还是白盒测试。
测试工具的好处是使用时并不是总需要深入了解工具在怎样做或者做什么。测试员不必了解工具是怎样做到的,只要知道它做得到就可以了——这就是黑盒测试。
另一方面,还可以建立工具监视和改变上百万计算机之间原始通信的工具。测试员要有效使用这些工具,需要具备一些白盒技能以及底层协议的知识。
1、非入侵式工具和入侵式工具的区别:
1)非入侵式工具:如果工具仅用于监视和检查软件而不对其进行修改,就认为是非入侵式工具。
2)入侵式工具:如果工具以任何方式修改了程序代码或者控制了操作环境,就属于入侵式工具。
由于入侵的程度各有不同,测试员通常设法使用侵入性尽量小的工具,以减少工具影响测试结果的可能性。
2、查看器和监视器
查看器(viewer)或者监视器(monitor)测试工具能够看到正常情况下看不到的运行的细节。
1)如代码覆盖率分析器就是查看器的一个例子。
代码覆盖率分析器是如何提供一种方式来查看哪些代码行得以运行、什么函数正在运行、执行测试时所运行的代码分支的。大多数的代码覆盖率分析器是入侵式工具,因为它们需要编译并链接到原程序中才能获得所需信息。
2)通信分析器(communications analyzer)是另一种查看器的例子。
它只是监听线路,提取经过的数据,在另一台计算机上显示。利用该系统可以查看通信数据的正确性以及观察软件缺陷为什么会产生。通过查看从线上提取的数据,就可以确定问题是出于创建数据的机器还是解释数据的机器。这种类型的系统对软件是非入侵式的。在网络中,真正监视器被称为嗅探器(sniffer)。
3)大多数编译器所带的代码调试器也可以看做是查看器,看到一般用户看不到的数据的工具都可以归类为查看测试工具。
3、驱动程序
驱动程序是控制和操作被测试软件的工具。
最简单的驱动程序的例子是批处理文件(batch file)。在DOS时代很流行,然而,在现今的操作系统和编程语言下,执行测试程序有更多复杂的方法。如java和perl脚本可以取代老的MS- DOS批处理文件,并且windows任务调度程序可以在全天24小时的任意时刻执行各种测试程序。
教材中的实例驱动和被测试机不在一台,因为OS不可能多任务,分开为非入侵式。
在设法驱动被测试的软件时,想一想从外部控制程序的所有可行方法,然后,想方法用自动提供测试输入的方式代替外部控制。
4、桩
桩和驱动程序一样,属于白盒测试技术。桩与驱动程序本质上是相反的,桩不控制或者操作被测试软件;相反,它接收或者响应软件发送的数据。
当软件需要与外部设备进行通信时经常要用到桩。一般在开发过程中不能得到这些设备,或者这些设备很少,桩就可以使测试在没有硬件的条件下进行,使测试更加有效。
仿真器(emulator):仿真器是在实际使用中用来代替真正设备的设备。仿真器和桩的区别在于桩还给测试程序提供手段来查看和解释发送给它的数据,桩是仿真器的超集。
5、压力和负载工具
压力(stress)和负载(load)工具用于向被测试软件增加压力和负载。
一般的压力测试软件可以分别设置内存量、磁盘空间大小、文件数量,以及在该机器上运行软件的其它可用资源。
把这些值设置为零或者近似为零,会使软件执行不同的代码分支以试图处理这种紧迫限制。理想情况是软件运行不发生崩溃或者数据丢失。它可能会运行得很慢,或者宣布在内存不足情况下运行,但是无论如何它会正确运行,或者正常地降级运行。
负载工具和压力工具的相似之处在于,它们为软件创造了用其它方式难以创造的环境条件。例如:运行在web服务器上的商用程序可以通过模拟一定数量的链接和单击次数来增大负载,使其不堪重负。
6、干扰注入器和噪声发生器
干扰注入器(interference injectors)和噪声发生器(noise generators)是类似于压力和负载工具的另一类工具。它们在行为上更具有随机性。比如模拟内存不断变化。
例如:挂在通信线路上的干扰注入器可以测试软件能否处理由超声引起的错误情况。
决定在哪里和如何使用干扰注入器和噪声发生器时,考虑何种外部因素会影响测试软件,然后设法改变和操纵这些影响因素看软件如何应付。
7、分析工具
最后一类工具称为分析工具(analysis tool),它们常常不受重视,但是它们能够促进测试,节省大量时间。
1)文字处理软件
2)电子表格软件
3)数据库软件
4)文件比较软件
5)抓屏和比较软件
6)调试器
7)二进制——十六进制计算器
8)秒表
9)录象机或者照相机
软件的复杂性和方向性总是在变,要视具体情况来决定最有效的工具是什么,以及如何运用它们。
测试自动化(test automation)是一类工具。它可以执行测试用例、查找软件缺陷、分析看到的信息、记录结果。这就是软件测试自动化。
1、宏录制与回放
最基本的测试自动化类型是录制第一次执行测试用例时的键盘和鼠标操作,然后在需要重新执行这些测试时回放一次。
在MAC系统上有Quickeys工具可以录制并回放;在windows上有Macro Magic工具等。
宏录制器和播放器是一种驱动程序工具。用于控制和操作被测试软件的工具。
如Macro Magic设置向导可以设置宏的如下选项:
1)名称:为宏命名;
2)重复次数:设置宏在运行时重复或者循环的次数;
3)触发条件:设置宏如何启动,可以按热键、输入一串字符、单击快捷方式、当某个窗口显示出来时或者当系统闲置一段时间之后;
4)捕捉对象:可以选择只捕获(记录)键盘操作或键盘和鼠标的移动和单击都记录;
5)回放速度:该速度比最初录制时最多慢20%,最多快500%;
6)回放位置:该选项确定鼠标移动和单击位置与某个窗口的位置是绝对的还是相对的。
宏无法检验软件,回放速度也是个难点。
注意:在使用宏录制器捕捉鼠标移动和单击时要小心,因为程序并非总是在屏幕上的同一位置启动和出现。把回放位置设置为相对于程序窗口比设置为屏幕的绝对位置更好,即便如此,GUI的一点变化也会扰乱捕捉的步骤。
2、可编程的宏
可编程的宏是在简单录制和回放的变化上的一大进步。与其通过录制第一次执行测试时的操作来创建可编程的宏,不如在创建时编写回放系统遵循的简单指令。
可编程的宏与录制的宏相比,具有真正的优势:
1)它可以暂停执行,向测试员提示预期结果,并询问测试是通过还是失败。
2)还可以解决录制宏的许多时序问题,不是依靠绝对延时,而是等待特定条件成立才继续执行。
然而,在进行复杂测试时还遗漏了两个重要之处:
1)可编程的宏限于直接执行命令行——只能循环和重复;
2)在常规编程语言中可以见到的变量和决策语句不能使用,而且没有自动检查测试结果的能力。
3、完全可编程的自动测试工具
像可视化测试程序这样的自动测试工具为软件测试员创建强大测试提供了手段。许多工具基于BASIC编程语言。这些自动化工具具有的最重要的特点是进行验证的能力,实际上就是检查软件是否以预期方式运行。实现这一点的方式:
1)屏幕捕获:首次执行自动测试时,可以在肯定正确的关键点捕捉并保存屏幕图像;
2)控件值:检查软件窗口中各种控件的值;
3)文件和其它输出。
验证是自动测试要克服的最后一个大难题。
常用的软件:
· Software Development Technologies at
· Mercury at www.mercury.com
· Segue Software at
有一类测试工具不是为帮助执行或者自动执行测试用例而设计的,其目标是模拟用户可能的操作,此类自动化工具称为测试猴子(test monkey)。
测试猴子的来源:如果让一百万只猴子在一百万只键盘上敲一百万年,从统计的角度上讲,它们最终就可能写出莎士比亚话剧Adventures of Curious George(好奇乔治历险记)等巨著。
1、笨拙的猴子
最简单最直接的测试猴子是笨拙的猴子:只是随机地单击鼠标或者敲击按键。
不停重复和使用笨拙的猴子可能会暴露内存泄漏等软件缺陷。
2、半聪明的猴子
在笨拙的猴子的基础上加上日志记录,将猴子的所有操作记录到一个文件中。
当猴子发现软件缺陷时,只需查看日志文件,找出在失败前猴子做了些什么。
技巧:另外一个解决方法时用摄像机录下屏幕上的内容。当发现软件出现故障时,就倒回去重新看看。
另外还有崩溃辨认能力。
3、聪明的猴子
它从半聪明的猴子那里获取了随机测试的结果,增加了对环境的认知能力,是有目的地敲键盘。
它知道:
1. 它在哪里
2. 在那里能干什么
3. 它能到哪里
4. 它曾经在哪里
5. 它见到的是否正确。
能阅读状态转换图。不仅限于查找崩溃缺陷,同时还查看数据、检查操作结果、找出其与预期结果的差别。
记住,测试自动化不是万能的。如果正确规划和执行的话,工具和自动化可以使测试效率大大提高并且能发现其它方式不能发现的缺陷。然而,如果自动化和工具步入歧途,会导致无数的自动化测试的努力被放弃,并且使项目成本大大增加。
考虑以下因素:
1)软件变更;
2)人眼和自觉是不可替代的;
3)验证难以实现;
4)容易过分依赖自动化;
5)不要花费太多时间使用达不到测试软件目的的测试工具和自动化;
6)编写宏、开发工具和编制猴子都属于开发工作;
7)某些工具是入侵式的。