基于矩阵模式的 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开发框架形成之旅--界面控件的使用 在前面介绍了两篇关于我的基 ...
随机推荐
- RegExp.exec和String.match深入理解
今天在重新阅读<JavaScript权威指南>的RegExp和String的时候,看到了2个比较容易混淆的函数:RegExp的exec和String的match 这2个函数都是从指定的字符 ...
- 读书笔记:<世界是数字的>
世界是数字的?第一次听到这个名词不由的感到惊讶,我有听过地球是海洋的,那世界不应该是人类共同拥有的吗或者也可以说世界是大自然的?为什么世界偏偏是数字的呢?我带着满心的疑问去看了那本<世界是数字的 ...
- 线段树--Color the ball(多次染色问题)
K - Color the ball Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- 802.11 wireless 五
802.11 wireless 5CSMA/CA,采用倒计时的方法,退避的时间(当年时间+duration 为发送时间,每一个帧会有一个duration,这个位叫做duration[n.持续]) PS ...
- jquery 提示简单效果插件 cluetip
介绍一个不错的jquery插件-cluetip 我们在做web项目的时候,经常会使用到提示效果.html自带的提示效果是label标签的title,但是这个效果过于简单和难看,并且不方便调整样式. 今 ...
- hdu 3926 Hand in Hand 同构图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3926 In order to get rid of Conan, Kaitou KID disguis ...
- 重启nginx后丢失nginx.pid解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- [geeksforgeeks] Convert a given Binary Tree to Doubly Linked List
http://www.geeksforgeeks.org/in-place-convert-a-given-binary-tree-to-doubly-linked-list/ Given a Bin ...
- 2014年03月09日攻击百度贴吧的XSS蠕虫源码
var n=PageData.user.user_forum_list.info.length; var num=0; var config = { titles: ["\u4f60\u76 ...
- 帝国cms栏目别名如何调用?
我们在用帝国cms建站时经常会发现栏目的标题不好设置,栏目名称太长的话在后台那边看了眼花,太短又不好优化.能不能直接调用栏目别名呢?栏目别名不会什么影响.那么,帝国cms栏目别名怎么调用呢?和ytka ...