第五课 闭着眼睛测试软件
动态黑盒测试, 闭着眼睛做测试 a) 通过测试和失败 b) 等价分配 c) 数据测试 d) 状态测试 e) 失败状态测试
动态黑盒测试: 让程序运行起来, 测试人员充当客户, 通过使用软件, 找出缺陷. 测试工作就是使用测试用例,进行输入,等待输出,同时验证结果. 这个过程的工作思想是依照产品说明书, 设计和选择测试用例, 输入给软件, 等待结果, 和预期结果相互对照.
测试员会碰到的情况 产品开发不规范, 没有产品说明书,根据现有资料和软件, 尽量进行测试, 这时候叫探索性测试. 把软件本身当说明书, 边运行, 边记录功能, 找出可能存在的缺陷. 尽量督促开发者提供说明书是明智的选择.
通过测试 简单说就是验证软件能做什么, 是否达到了说明书中基本的功能, 而不考虑其他因素。 设计用例时, 就设计最通常的数据, 测试其是否实现了某功能, 不用挖空心思给破坏数据。
在设计和执行测试时, 总是首先进行通过测试, 在破坏性测试前看看软件基本是否实现了所要功能, 这很重要。 通过测试的用例也叫常规用例。
测试汽车: 通过测试:正常启动,停车,刹车,加速等。
看看上面的计算器例子, 我们怎样设计通过测试用例. 常规用例: 0+0 1+0 2+0 99999+0,等等
失败测试 纯粹为了破坏软件而设计的测试用例. 执行失败测试用例的过程叫失败测试, 或者叫迫使出错测试. 工作思想: 尽量找出软件薄弱环节, 蓄意攻击.
还是测试汽车 失败测试:加到最大速度,突然转弯,看打滑情况,突然刹车,看刹车装置, 开到最大速度,突然撞击障碍,看对假人的影响(一般看可能对人伤害多大)等
看看上面计算器例子, 我们怎样设计失败用例. 破坏用例: 1/0 1e308+1 (最大数字+1) 故意用使用过的旧电池,测试在电不足的情况下的表现是否失常。 非常规用法都可以叫破坏用例
注意:不必要强调通过测试和失败测试的词汇区别, 测试人员尽量做到覆盖各种情况. 软件病毒是一种很特殊的破坏测试。 访问网站的时候,随意点击,随便乱用,不合乎常规,看软件会出现怎样情况, 都是破坏测试。 测试打印,可以不连接打印机,或者打印机缺纸等, 没有墨,或者没有墨盒,也是非常规操作测试.(需要查看打印机的操作手册) 注意:不必要强调通过测试和失败测试的词汇区别, 测试人员尽量做到覆盖各种情况.
测试用例生成方法 等价分配原则: 由于测试用例无法穷尽, 等价分配就是分步骤地把过多(甚至无限)的测试用例减小到同样有效的小范围的过程. 等价类别或者等价区间是指具有相同测试目标或者暴露相同软件缺陷的一组测试用例. 在寻找等价区间时, 先想把软件相似输入, 输出, 操作分组, 这些组就是等价区间.
针对一个软件的测试数据的等价类 看,这个例子,应该有9个等价类
等价分配例子 如果一个操作系统文件名可以包括除了、/ : * ? “ < >和1之外的任意字符。文件名长度是1-255个字符。 我们考虑一下等价区间 针对长度:合法长度的名称,过长名称(超过255), 过短名称(空的名) 针对字符:合法字符,非法字符
可以测试: 合法长度,合法字符 合法长度,非法字符 非法长度,合法字符 非法长度,非法字符
例如一个三角型分类程序,会把三角型分成非三角型,三角型(等边,等腰,直角,其他) 我们输入等价类可以是这样:
三角型 非三角型 直角 非直角 非等腰 等腰 非等腰 等腰 等边 非等边 等边 非等边
根据上面的分类设计好三角型三边,a, b, c,边。 同时记住:还要让它们的值轮流一下,比如让a为b的值,b为c的值, c为a的值再测试。
注意: 许多时候针对一个程序的一个方面测试,测试人员等价类设计的也不太一样,但是准则是需要保证把测试的各个方面覆盖。 如果为了减少测试用例的数量过度进行等价分配,测试漏掉软件缺陷的风险会增加。 提醒:对于初涉软件测试的人员,一定要请经验丰富的人员审查预定的等价类。
软件 = 数据+程序 数据包括:用户的交互行为,文件,网络传送的数据,打印输出的数据。 程序:可以执行的流程,转换,逻辑,运算。 下面我们就数据和状态两个方面对测试进行讨论
数据测试 根据下列主要原则进行等价分配,以合理减少测试用例: 边界条件 次边界条件 空值 无效数据等
边界条件:在悬崖边上行走没问题,平地就没事情了。 例如: 数组长度,下标越界; 文件名字长度; 计算器最大值,最小值计算;
边界条件类型 数据类型: 数值, 速度, 字符, 地址, 位置,尺寸, 数量, …. 边界条件类型 第一个/最后一个 最小值/最大值 第一个/最后一个 最小值/最大值 开始/完成 超过/在内 空/满 最短/最长 最慢/最快 最早/最迟 最大/最小 最高/最低 相邻/最远 等价分配原则: 如果要选择在等价分配中包含哪些数据, 就根据边界来选择
针对一个软件的测试数据的等价类 看,这个例子,9个等价类,测试边界,和边界边的值
测试边界线 提出边界线的时候, 要测试临近边界的合法数据, 即测试最后一个合法数据, 和超过边界的非法数据. 例如: 第一个加1/最后一个减1 第一个减1/最后一个加1
看几个例子(p48): a) 如果程序读写一个盘,尝试保存一个字符的文件,然后保存一个刚好和盘容量一样大的文件,然后保存一个空文件,和保存一个超过容量的文件。
b) 测试飞行模拟程序,尝试控制飞机在地平线上和最大允许高度飞行,尝试在地平线和海平线下飞行。
c)测试一个fib数列生成,测试f(-1), f(0), f(1) d)测试栈,测试从空栈中提取数,向满栈压数。
次边界条件 次边界条件一般是隐含的,需要测试员大体了解软件工作方式和一些细节。
2的乘方:一个通信软件是压缩数据来传送的,允许你输入数字(0-255之间),其实内部软件是这样做的,当你输入的是0-15,把数据压缩为4个bit, 和其他数据一起发送。当你输入16-255时,把数据当8个bit发送。 边界条件:0, 1, 254, 255, 256 次边界条件:数据15, 16, 17, 都需要测试
如果一个输入,可以接受ASCII表中 0-9, A-Z, a-z的数字,测试员需要知道0-9, A-Z, a-z的边界,边界外的测试. (参考p52)
默认,空白,空值,零值和无 对于这些数据要小心测试。 默认值:好的软件,当用户没有输入一些数据的时候,往往根据需要,会选定一些默认值,例如书例子(p53), 或者给出提醒。
测试人员需要对这些值格外关注,进行测试。
非法,错误,垃圾数据 垃圾数据时失败测试的数据,为了应付千奇百怪的用户使用方法。 故意乱用软件,输入不正常数据,发挥想象。
状态测试 状态测试就是通过不同的状态验证程序的逻辑流程, 在黑盒测试中, 我们说的软件状态是指软件当前所处的情况或者模式.
测试软件状态也有组合爆炸问题,原因是现在的软件为了迎合日益丰富的用户界面, 提供了太多选择和选项, 致使软件分支爆炸式增长. 解决办法: 用等价类法, 选择状态和分支.
举画图软件测试状态 测试窗口,拉大,拉小,放最大,最小,看版面的各种图版位置 选择画图工具栏,观察下面状态栏的文字变化。 选择了一个画图工具,测试画图效果 有了当前图片,测试菜单中“图像”栏中各种对图像的调整。
建立状态转换图 先建立软件可能进入的每一种独立状态。 从一种状态进入另一种状态所需要的输入和条件。(可能按键,菜单选择,传感器信号等) 进入或退出状态的设置条件及输出结果。(包括显示的菜单和按钮,设置的标志,产生的打印输出,执行的运算.)
状态的研究,是需要研究产品说明书,同时还需要和开发设计小组人员共同讨论。
考虑这样的计算器的状态图
根据状态图设计上面用例,将是我们的实习作业之一。
失败状态测试
例如:银行数据读写问题 用户A 用户B 500元 If(money>500) 提取500 If(money>500) 提取500 read read 500元 If(money>500) 提取500 If(money>500) 提取500 write 0元 write 注意:银行该帐户被提取两次,应该是不行的,但是程序没有保护,造成了错误
正确做法:读取,判断,写回操作应该是锁住帐户数据,不让其他读写介入,这样的操作在数据库或者编程工具中叫transaction(交易)。 例如: beginTransaction read account if (account_money >=500) withdraw 500 write back account endTransaction 这样的问题也可以用代码走查找到。
重复,压迫和重负 重复做一个操作,看该操作对系统影响。 比如系统有一个功能,允许教师等成绩。该操作要读一批学生成绩数据,模仿这个过程,进去后,然后退出系统,然后进入,重新读一批学生成绩数据,排序,然后退出。 这样的反复操作,意在看程序对读取大量数据,占有了内存,退出后,是否内存被释放了。 (注意,这样的测试往往针对一个目的,所以测试员需要和程序员沟通,了解哪些地方是薄弱的)
压迫测试: 迫使软件在不理想状态下运行-内存小,磁盘少,CPU慢,网速慢等。观察软件对外部资源的要求和依赖程度。
重负测试:尽量提供条件,让软件处理可能大的数据。
针对性能测试的方法,和数据分析,我们将会在后面专题讨论。
其他黑盒测试技术 象愚笨的用户那样 根本不懂得正常操作 输入无法想象的数据 使用中中途变卦,对异常流程的考验。
在已经找到软件缺陷的地方再找找 凭借经验,直觉以及预感
小测验 1. 假设有一个文本框要求输入10个字符作为邮政编码,对这样的文本框,如何选择等价类? format: 00000-0000
2. 说出画程序状态图的几个要素? 3. 启动写字板程序, 从File菜单选择Print命令。看Print Range这个特性,有哪些需要测试的边界条件?
本学期第一次实验: 黑盒动态测试,测试两个程序。