第5章 带上眼罩测试软件
一、动态黑盒测试
不深入代码细节测试软件的方法称为动态黑盒测试。它是动态的,因为程序在运行——软件测试员像用户一样使用它;同时,它是黑盒子,因为测试时不知道程序如何工作。
测试前需要的文档:
1、 有效的动态测试需要关于软件行为的一些定义——也即需求文档或者产品说明书。
在没有产品说明书时使用探索测试。尽管这对软件测试员不是理想的状况,但是此时可以采取称为探索测试的解决方案——了解软件、设计测试、执行测试同时进行。这就需要把软件当做产品说明书来对待。
2、测试用例在清楚软件输入和输出之后,开始定义。测试用例是指进行测试时使用的特定输入,以及测试软件的过程步骤。
选择测试用例是软件测试员最重要的一项任务。不正确的选择可能导致测试量过大或过小,甚至测试目标不对。准确评估风险,把无穷尽的可能性减少到可以控制的范围是成功的诀窍。
二、通过性测试和失效性测试
测试软件有两种基本方法:通过性测试和失效性测试。
通过性测试,实际上是确认软件至少能做什么,而不会考验其能力。失效性测试也称错误强制测试,其纯粹为了破坏软件而设计和执行的测试用例。
在设计和执行测试用例时,总是首先进行通过性测试。在破坏性测试之前看看软件基本功能是否能实现是很重要的,软件测试员可能会吃惊地发现仅仅正常使用软件就会发现那么多软件缺陷。
三、等价类划分
选择测试用例是软件测试员最重要的任务。选择测试用例的方法是等价划分,有时称为等价分类。等价类划分是指分步骤地把海量(无限)的测试用例减得很小,但过程同样有效。
一个等价类或者等价划分是指测试相同目标或者暴露相同软件缺陷的一组测试用例。
在寻找等价划分时,考虑把软件具有相似输入、相似输出、相似操作的分在一组。这些组就是等价划分。
如果为了减少测试用例的数量过度划分等价类,就有漏掉那些可能暴露软件缺陷的测试风险。对于初涉软件测试者,一定要请经验丰富的测试员审查划分好的等价类别。
网上对等价划分的介绍:
等价类分为有效等价类和无效等价类,有效等价类就是由那些对程序的规格说明有意义的、合理的输入数据所构成的集合;无效等价类就是那些对程序的规格说明不合理的或无意义的输入数据所构成的集合。
划分等价类的方法:下面给出六条确定等价类的原则。
1、在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
2、在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。
3、在输入条件是一个布尔量的情况下,可确定一个有效等价类。
4、在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
5、在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
6、在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。)
四、数据测试
使所有这些数据得以测试的技巧是,根据一些关键的原则进行等价类划分,以合理减少测试用例,这些关键的原则是:边界条件、次边界条件、空值和无效数据。
1、 边界条件
边界条件是指软件运行在计划操作界限的边界的情况。边界条件是特殊情况,因为编程从根本上说在边界上容易产生问题。
由于软件容易在边界上产生缺陷,因此,如果要从等价划分中选择包含的数据,从边界条件中选择会找出更多的软件缺陷。
如果建立两个等价划分就可能找出更多软件缺陷。第一个划分包含认为应该正确的数据——在边界内部最后一两个合法的数据点。第二个区间包含认为可能出现错误的数据——边界之外——一到两个非法数据点。
书中标注的记巧:提出边界条件时,一定要测试临近边界的有效数据,测试最后一个可能有效的数据,同时测试刚超过边界的无效数据。
缓冲区溢出是由边界条件缺陷引起的,它是造成软件安全问题的头号原因。
2、 次边界条件
有些边界在软件内部,最终用户几乎看不到,但是软件测试员仍有必要进行检查,这样的边界条件称为次边界条件或者内部边界条件。书中举例:2的幂和ASCII表。
3、 默认、空白、空值、零值和无
因为这些值在软件中通常进行不同的处理,所以不要把它们与合法情况和非法情况混在一起,而要建立单独的等价划分。
4、 非法、错误、不正确和垃圾数据
数据测试的最后一种类型是垃圾数据。这是失效性测试的对象。经过边界测试、次边界测试和默认值测试等通过性测试证实软件能够工作之后,就该进行垃圾数据测试了。
五、状态测试
软件状态是指软件当前所处的条件或者模式。软件测试员必须测试程序的状态及其转换。
1、 测试软件的逻辑流程
(1) 建立状态转换图
状态转换图应该表示出以下项目:
a. 软件可能进入的每一种独立状态;
b. 从一种状态转入另一种状态所需的输入和条件;
c. 进入或者退出某种状态时的设置条件及输出结果。
(2) 减少要测试的状态及转换的数量
如对数据进行等价划分一样,需要将大量的可能性减少到可以操作的测试用例集合。有以下5种实现方法:
a. 每种状态至少访问一次;
b. 测试看起来是最常见和最普遍的状态转换;
c. 测试状态之间最不常用的分支;
d. 测试所有错误状态及其返回值;
e. 测试随机状态转换。
(3) 怎样进行具体测试
确定要测试的状态及其转换之后,就可以定义测试案例了。测试状态及其转换包括检查所有的状态变量——与进入和退出状态相关的静态条件、信息、值、功能等。状态变量也许不可见,但是很重要。
2、 失败状态测试
(1)竞争条件和时序错乱
在现在的多任务操作系统环境中,软件设计必须处理随时被中断的情况,能够与其它任何软件在系统中同时运行,并且共享内存、磁盘、通信以及其他硬件资源。这一切的结果就是可能导致竞争条件问题。这些问题是指几个事件恰巧挤在一起,由于软件未预料到运行过程会被中断,以致造成混乱。也就是说,时序发生错乱。竞争条件一词源自很容易想到的情形——多个进程向终点线冲刺,不知道谁会首先到达。
竞争条件测试难以设计,最好是首先仔细查看状态转换图中的每一个状态,以找出哪些外部影响会中断该状态。考虑要使用数据如果没有准备好,或者在用到时发生了变化,状态会怎样。
以下是可能会面临竞争条件的典型情形:
a. 两个不同的程序同时保存或打开同一个文档;
b. 共享同一台打印机、通信端口或者其他外围设备;
c. 当软件处于读取或者修改状态时按键或者单击鼠标;
d. 同时关闭或者启动软件的多个实例;
e. 同时使用不同的程序访问一个共同数据库。
(2)重复、压迫和重负
这些测试的目标是那些处理程序员没考虑到,但在极端恶劣条件下可能发生问题的状态。
a. 重复测试是不断执行同样的操作。最简单的是不停地启动、关闭程序。还可以反复读写数据或者反复选择同一个操作。进行这种反复测试的主要原因是检查是否存在内存泄漏。
b. 压迫测试是使软件在不够理想的条件下运行——内存小、磁盘空间少、CPU速度慢、调制解调器速率低等。压迫测试就是将支持降到最低限度,目的在于尽可能地限制软件的必要条件。
c. 重负测试与压迫测试相反。压迫测试是尽量限制软件,而重负测试是尽量提供条件任其发挥。让软件处理尽可能大的数据文件。最大限度的发掘软件的能力,让它不堪重负。
不要忘了时间也是一种重负测试。对于大多数软件,长期稳定地工作是很重要的。某些软件应该能够永远运行下去,而不用重新启动。
重复、压迫和重负测试应联合使用,同时进行,这是找出以其他方式难以发现的严重缺陷的一个可靠的方法。
对于重复、压迫和重负测试有两个重要事项:
a. 项目经理和小组程序员可能不完全接受软件测试员这样破坏的做法。但是软件测试员的任务就是确保软件在这样恶劣的条件下正常工作,否则就报告软件缺陷。
b. 无数次打开和关闭程序对于手工操作是不可能的。因而需要借助自动化测试工具来实现。
六、其他黑盒测试技术
1、像无经验的用户或新用户那样操作软件和想问题
2、在已经找到的软件缺陷的地方再找找
其原因有两个:
(1) 找到的软件缺陷越多,就说明那里的软件缺陷越多;
(2) 许多程序员倾向于只修复报告出来的软件缺陷,不多也不少。
3、 像黑客一样考虑问题
4、 凭借经验、直觉和预感发现软件缺陷
阅读(896) | 评论(0) | 转发(0) |