基于矩阵模式的 Web 软件测试手段(转)
http://www.ibm.com/developerworks/cn/web/1410_dujing_matrixfortest/
在 Web 测试中,我们经常针对某个测试点进行多种场景测试,或者是重复性测试,或者与其他测试点交互测试模仿用户行为,这样就需要编写多条测试用例来完全覆盖。利用矩阵模式不仅可以缩小编写测试用例占用的时间和人力,而且对其测试结果易于追踪。
阵模式形象的可理解为表格,我们常用表格来记录复杂的数据,若将表格首行和首列的数据看成一个个简单的测试点,那除首行首列之外的表格里的数据就可以看成一个复杂测试用例期望执行的结果,那这个表就是一个容纳了很多测试用例的数据表。本文就矩阵模式在软件测试用例中的应用进行阐述,以帮助您了解如何巧妙的利用矩阵模式这种简单手段,更高效的记录测试用例,尤其是复杂场景的测试用例
矩阵模式对测试用例的重要性
在软件测试中,编写测试用例是必不可少的一环。理论上测试人员会根据产品设计文档等将测试点全部罗列出来,然后根据每个测试点设计不同的场景,逐一编写测试用例。但通过分析会发现某个测试点的场景很类似,编写的测试用例中有些步骤的重复率很高。而在实际测试中,这些重复性的步骤利用率并不高,有经验的测试人员无需逐条查看每一步骤,根据场景就可以执行类似测试用例。
针对这一情况,Ryan Davis 早在 2007 年就提出了矩阵模式,用矩阵模式记录测试用例,其实相当于把多条测试用例组合成一个复杂的产品检查清单,一方面节省了编写和维护测试用例的时间,提高工作效率;另一方面可以将传统的测试用例看起来简单化,增加易读性,直观的将功能点展现出来,方便测试人员全局追踪测试状态。
本文就矩阵模式在软件测试的应用展开,主要介绍矩阵模式在多个场景测试,重复性问题测试,交互测试的应用实例,以及改进的矩阵模式原理及其工具。
多个场景测试
在测试中经常会针对某一测试点设计不同的场景进行测试,以达到模拟用户使用的真正效果。比如数据输入测试,如密码输入域,一般会限制至少 6 位等条件。针对密码输入长度至少 6 位这一测试点,至少需测试以下四种场景:
- 不输入;
- 小于 6 位;
- 等于 6 位;
- 大于 6 位;
按照传统测试用例编写方式需要编写四条类似的测试用例,而且这四条的测试步骤几乎一样。如下表 1-表 4 所示:
表 1.密码输入域长度测试用例-不输入
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. No input in password field | |
3.Submit | Alert “password is not allowed blank” |
表 2.密码输入域长度测试用例-小于 6 位
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. Input password with less than 6 digit in password filed | |
3.Submit | Alert “password length must be more than or equal 6 digit” |
表 3.密码输入域长度测试用例-等于 6 位
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. Input password with 6 digit in password filed | |
3.Submit | Success |
表 4.密码输入域长度测试用例-大于 6 位
Test steps | Expected result |
---|---|
1. Open a application…. | Can open normally |
2. Input password with more than 6 digit in password filed | |
3.Submit | Success |
分析这四个测试用例,发现除了第二步输入的参数不同之外,其余步骤都一样。我们可以把这一参数抽离出来,通过矩阵模式可以将测试用例简化表示,如下表 5 所示:
表 5.密码输入域长度测试用例
Test point | Expected result | Execute result |
---|---|---|
不输入 | Alert “password is not allowed blank” | |
小于 6 位 | Alert “password length must be more than or equal 6 digit” | |
等于 6 位 | Success | |
大于 6 位 | Success |
比较发现利用矩阵模式简单明了地将密码输入域长度的测试点列出来,为测试人员节省了编写测试用例的时间。理论上这种形式的测试用例不能够完全称为完整的测试用例,没有像传统的测试用例那样,将每一步骤都详细列出来,但实际上反而更适用,尤其是当某一测试点有一定数量级的测试场景需要测试时,或者某个测试用例有多个测试点时,通过矩阵模式制定这种形式的测试用例还是很值得的。
重复性问题测试
重复性问题是指对同一个测试点一直进行测试。如在某些软件中,有很多对象的属性是一样的,如 table,shape,chart 等,它们都有 color fill 属性,color 又可分为三种类型:theme color,standard color,custom color。按照传统的测试用例记录方法,测试人员必须针对每一个对象的 color fill 编写测试用例。如下表 6-8 所示:
表 6.Table Fill
Test steps | Expected result |
---|---|
1.Insert a table | Can insert normally |
2.Set theme/standard/custom color for table | Success |
表 7.Shape Fill
Test steps | Expected result |
---|---|
1.Insert a shape | Can insert normally |
2. Set theme/standard/custom color for shape | Success |
表 8.Chart Fill
Test steps | Expected result |
---|---|
1.Insert a chart | Can insert normally |
2. Set theme/standard/custom color for chart | Success |
分析这三个测试用例,我们可以将测试对象以及测试点抽离出来,通过矩阵模式可以将这些对象的 color fill 测试用例表示如下表 9 所示:
表 9.Table/Shape/Chart color Fill
Test object | Expected result | ||
---|---|---|---|
Theme color | Standard color | Custom color | |
Table | Success | Success | Success |
Shape | Success | Success | Success |
Chart | Success | Success | Success |
不难发现矩阵模式的测试用例形式上更加直观,更容易追踪测试状态。
交互测试
操作是用户使用软件很普遍的行为,而且用户不可能像测试人员一样根据测试步骤按部就班的操作,所以多种操作交互执行测试就变得非常重要。通过矩阵模式对这些常用场景进行不同的组合测试,可以达到一般用户使用的效果测试,更好的从用户角度发现产品缺陷。例如在办公软件中,Font style 是用户经常用到的,有 bold,italic,underline 等。利用矩阵模式可以将这三个属性进行组合测试,每种属性可以设置两种值,分别用 Y 和 N 来表示,如下表 10 所示:
表 10.Font style
No. | Bold | Italic | Underline | Expected result |
---|---|---|---|---|
1 | Y | Y | Y | |
2 | Y | Y | N | |
3 | Y | N | Y | |
4 | Y | N | N | |
5 | N | N | Y | |
6 | N | N | N | |
7 | N | Y | Y | |
8 | N | Y | N |
这种形式的测试用例将所有可能的组合都表示出来,达到百分之百的覆盖,提高了测试覆盖率。
改进的矩阵模式
不难从上面的多个场景测试,重复性问题测试以及交互测试中发现,所举的例子涉及的参数数量都比较少,如果一旦参数数量及其取值都达到一定数量级,就会产生太多的测试用例,这在实际的测试中是不可能做到的。如果可以保证一定的测试覆盖率的前提下,将这些测试用例压缩到一定比例,这将会大大的提高测试工作的效率。
在这里我们应用全对偶测试理论进行改进。全对偶的原则就是每个变量的每一个取值都必须与至少一个测试用例中其他变量的取值配对过一次。以交互测试中 Font style 举例说明,假设 bold,italic 和 underline 分别都有两个取值 Y,N,则两两配对如下表 11 所示:
表 11.All pairs
Variable 1 | Variable 2 | Value 1 | Value 2 | Appearance |
---|---|---|---|---|
Bold | Italic | Y | Y | Case 1 |
Bold | Italic | Y | N | Case 2 |
Bold | Italic | N | Y | Case 3 |
Bold | Italic | N | N | Case 4 |
Bold | Underline | Y | Y | Case 1 |
Bold | Underline | Y | N | Case 2 |
Bold | Underline | N | Y | Case 4 |
Bold | Underline | N | N | Case 2 |
Italic | Underline | Y | Y | Case 1 |
Italic | Underline | Y | N | Case 3 |
Italic | Underline | N | Y | Case 4 |
Italic | Underline | N | N | Case 2 |
通过全对偶方法将表 10 的测试用例压缩,用矩阵模式表示的测试用例如下表 12 所示:
表 12.Font style
No. | Bold | Italic | Underline | Expected result |
---|---|---|---|---|
1 | Y | Y | Y | |
2 | Y | N | N | |
3 | N | Y | N | |
4 | N | N | Y |
每个配对都在表 12 的测试用例中出现过一次,出现的情况可以参考表 11 的 Appearance 列。
为了利用全对偶方法产生组合测试用例,James Bach 使用 Perl 语言开发了一个全对偶工具,下面介绍一下如何使用这个工具产生组合测试用例。
第一步,无需安装,直接下载并解压到某个路径。下载地址:http://www.satisfice.com/tools/pairs.zip。
第二步,新建一个excel
文件,在excel
文件中列出测试用例的变量及其取值,如下图1
所示。并将其拷贝到text
文件中保存到与工具一样的路径下面并假设命名为Variable.txt
。这个文件可以随便命名,但不允许有空格存在名字中间。
图 1.Variable.txt
第三步,在 Dos 窗口下运行命令。切换到工具所在路径,输入 allpairs.exe Variable.txt > TestCase.txt 并回车。其中 Variable.txt 是第二步创建的,TestCase.txt 是用来存储产生的组合测试用例的文件,同样名字可以随便命名,但不允许名字中间有空格。
执行结束后,产生的组合测试用例及其每一个配对在测试用例中出现的情况都在 TestCase.txt 文件中,如下图 2 所示,其中 pairings 列是用来记录每一个测试用例包含的唯一配对数量,appearance 列是用来记录每一个配对出现的次数,cases 列是用来记录每一个配对出现在哪一个产生的测试用例中。
图 2.TestCase.txt
总结
利用矩阵模式的思想以及全对偶工具对测试用例进行编写和组织,能非常简单高效的覆盖产品功能测试点,增加了测试用例执行结果的可追踪性,尤其对于复杂的测试用例,可以一目了然的看到测试用例的测试点,全局的追踪测试状态,提高了工作效率。
基于矩阵模式的 Web 软件测试手段(转)的更多相关文章
- Web 软件测试 Checklist 应用系列,第 1 部分: 数据输入
Web 软件测试 Checklist 应用系列,第 1 部分: 数据输入 本文为系列文章"Web 软件测试 Checklist 应用系列"中的第一篇.该系列文章旨在阐述 Check ...
- 软件工程师应该关注的web攻击手段
1.SQL注入------常见的安全性问题. 解决方案:前端页面需要校验用户的输入数据(限制用户输入的类型.范围.格式.长度),不能只靠后端去校验用户数据.一来可以提高后端处理的效率,二来可以提高后端 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍
最近花了很多时间在重构和进一步提炼Winform开发框架的工作上,加上时不时有一些项目的开发工作,我博客里面介绍Web开发框架的文章比较少,其实以前在单位工作,80%的时间是做Web开发的,很早就形成 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计
自从上篇<基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍>总体性的概括,得到很多同行的关注和支持,不过上一篇主要是介绍一个总体的界面效果和思路,本系列的文章将逐步介绍其中的 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...
- 基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍
在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+Ea ...
- 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)
转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...
- 基于Spring MVC的Web应用开发(三) - Resources
基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的we ...
- 转--基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
原文 http://www.cnblogs.com/wuhuacong/p/3317223.html 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用 在前面介绍了两篇关于我的基 ...
随机推荐
- poj 1985 Cow Marathon 树的直径
题目链接:http://poj.org/problem?id=1985 After hearing about the epidemic of obesity in the USA, Farmer J ...
- Matlab稀疏矩阵
一.矩阵存储方式 MATLAB的矩阵有两种存储方式,完全存储方式和稀疏存储方式 1.完全存储方式 将矩阵的全部元素按列存储,矩阵中的全部零元素也存储到矩阵中. 2.稀疏存储方式 仅存储矩阵所有的非零元 ...
- git在terminal中自动补全
1. curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~ ...
- JAVA算法系列 快速排序
java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...
- “System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常。{转}
<connectionStrings> <add name="ConnectionStringName" providerName="System.Da ...
- POJ 2541 Binary Witch(逆序KMP,好题)
逆序KMP,真的是强大! 参考链接,下面有题意解释:http://blog.sina.com.cn/s/blog_6ec5c2d00100tphp.htmlhttp://blog.csdn.net/s ...
- POJ 1459
#include<iostream> #define MAXN 105 #include"queue" #define big_num 100000000 using ...
- LoaderManager使用详解(三)---实现Loaders
这篇文字将介绍Loader<D>类,并且介绍自定义Loader的实现.这是本系列的第三篇文章. 一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders ...
- UVA 11038 - How Many O's? 计算对答案的贡献
题意: 求[n, m]之间包含0的数字的个数题解:转化为求solve(n) - solve(m-1)的前缀问题 对于求0到n的解,我们举例 n = 25789 对于8这位,让其为0对答案的贡献是 (0 ...
- hdu2021(很闲~~)
http://acm.hdu.edu.cn/showproblem.php?pid=2021 water~~~ #include<iostream> #include<stdio.h ...