日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | ||||||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
| 12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
| 19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
| 26 | 27 | 28 | 29 | 30 | 31 | ||||
搜索标题
最新评论
我的收藏
统计信息
- 访问量: 345
- 日志数: 8
- 建立时间: 2008-08-26
- 更新时间: 2008-09-04
我的最新日志
-
个人工作心得
2008-9-04
刚刚写完工作总结,才发现原来这一个月,我还没少做事儿呢,工作还不到两个月,适应力还算可以吧?我没有把自己当做实习员工,就按正式员工一样要求自己。认真的做好每一件事,我的工作就是,找bug,只要我不停下,就能找出更多的bug。这几天真的好忙呢,我的手都快成鼠标手了,一天不停的点。右手碗上都磨了一个茧子啦。我自认为自己是一个很上进的员工。因为我肯踏实的做事。今天挺开心的,以前总觉得自己是新人,提出的bug不被重视,提出的问题,再去做回归测试的时候发现仍存在,后来自己都只能把它们放在一边,但是,这两天,随着产品的上市,我以前发现的bug在一个个的被开发人员修改。每做一次回归测试,看到哪些问题被修改掉,我就好开心。我发现做测试挺辛苦的,但我不觉得苦,也挺枯燥的,但我不觉得无味,I enjoy it。yes ,i like this job,and i must do it best.i believe i can do it.
还是哪句话,既然选择了这份职业,我就要用心去做好它,不管别人怎么样,我都会尽自己最大的努力去完成自己份内的事。我相信我会把握属于自己的机会。机会永远属于有准备的人,最重要的不是把握住了机会,而是要在得到机会后好好的把握它,珍惜它。我相信,我做到啦。
以后的路我仍会踏实的走下去的。我相信我可以走稳每一步。这也是我要的,不管做什么都要踏踏实实,稳稳当当的。我只要把握好我手里的鼠标,盯好眼前的屏幕,我就可以做很多~~~
找呀找呀找bug ,找到一个大bug,提交给开发人员修掉它
人歇我不歇,继续回来找bug.我是不是专门找茬的?
没错,我就是来找茬的。This is my job,
我要做什么?Just doing what i have to
-
跟我一步一步学写测试用例 6
2008-8-26
跟我一步一步学写测试用例 5 中展示的是系统UI部分的公用测试用例,实际上这块检查内容应该被最先动态化,所谓动态化就是让静态测试用例中所有的检查元素用程序的方法来实现。
对于公用UI测试用例的复合测试策略,如图:screen.width-461) window.open('/pic/58.JPG');" src="http://www.cntesting.com/pic/58.JPG" border=0>
一般复合测试策略定义了执行针对测试项目的可能支持手段,相对于 跟我一步一步学写测试用例 5 其他复合测试策略基本上跟第一份差不多,如图:screen.width-461) window.open('/pic/59.JPG');" src="http://www.cntesting.com/pic/59.JPG" border=0>
screen.width-461) window.open('/pic/60.JPG');" src="http://www.cntesting.com/pic/60.JPG" border=0>
screen.width-461) window.open('/pic/61.JPG');" src="http://www.cntesting.com/pic/61.JPG" border=0>
screen.width-461) window.open('/pic/62.JPG');" src="http://www.cntesting.com/pic/62.JPG" border=0>
screen.width-461) window.open('/pic/63.JPG');" src="http://www.cntesting.com/pic/63.JPG" border=0>
screen.width-461) window.open('/pic/64.JPG');" src="http://www.cntesting.com/pic/64.JPG" border=0>
screen.width-461) window.open('/pic/65.JPG');" src="http://www.cntesting.com/pic/65.JPG" border=0>
然后根据测试驱动的编辑器给出对应的测试脚本,一般来说好的测试驱动不用用户重新定义或者自己编写测试脚本,所有的数据全部根据已经存在的测试用例元素抽取,如图:screen.width-461) window.open('/pic/66.JPG');" src="http://www.cntesting.com/pic/66.JPG" border=0>
实际上动态用例的好处在于对回归测试的支持,前期测试用例设计快速复制和测试用例自动化对加快测试速度起了很大的推动作用。
缺点在于:UI测试的公共缺点就是当UI元素变化后,原来可用的测试脚本将失效,如果变动巨大那么可能造成所有关联UI测试全部失效。所以说这里会采用一种新的探测技术“UI效能监控”,不过跟本学习贴没什么牵扯就不用说了。 -
跟我一步一步学写测试用例 5
2008-8-26
现在我们就要针对《创意设计概要》作一些UI测试设计,首先对UI做层次分析,区分不同的效果UI界面整,如图所示:
screen.width-461) window.open('/pic/25.JPG');" src="http://www.cntesting.com/pic/25.JPG" border=0>
screen.width-461) window.open('/pic/28.JPG');" src="http://www.cntesting.com/pic/28.JPG" border=0>
上面的图片作为正常功能界面,单独抽取UI验证元素。screen.width-461) window.open('/pic/26.JPG');" src="http://www.cntesting.com/pic/26.JPG" border=0>
screen.width-461) window.open('/pic/27.JPG');" src="http://www.cntesting.com/pic/27.JPG" border=0>
上面的图片作为异常功能界面,单独抽取UI验证元素。
在构造UI测试用例之前首先声明一下,UI测试用例不可能在第一时间内完成,随着项目的扩大UI测试用例也相应的做调整。一般来说,做一份公共的UI测试用例是非常必要的,可以在每个功能测试用例前导入此份文档,扩大测试覆盖率。
ATM取款机系统
ATM取款机UI测试用例
公共ATM取款机UI测试用例
版本:草案
修订历史记录
日期 版本 说明 作者
21/Dec/98 草案 草案版本 Fastpoint
目录
1. 简要说明
2. UI验证元素分类
2.1 UI验证元素分类A - 输入用户密码
2.2 可能前置动作
2.3 可能异常抛出
3. 特殊要求
4. 扩展点
公共ATM取款机UI测试用例
1. 简要说明
本用例针对ATM取款机系统的UI元素测试。本用例非关联UI元素外功能验证测试。
本用例的主角是普通用户。
2. UI验证元素分类
2.1 UI验证元素分类A - 父界面窗体
1. 父界面窗体-MixSize-[640, 480]。
2. 父界面窗体-MineSize-[0, 0]。
3. 父界面窗体-Name-ATM模拟器。
4. 父界面窗体-布局-Center。
5. 父界面窗体-Font-Dialog 12 无格式。
6. 父界面窗体-BackGround-[236,233,216]。
7. 父界面窗体-ForegRound-[0,0,0]。
8. 父界面窗体-Border-(无边框)。
9. 父界面窗体-IcoSet-atm.ico。
2.2 UI验证元素分类B - 数字键盘按钮
1. 数字键盘按钮-MixSize-(例子)[39, 27]。
2. 数字键盘按钮-MineSize-(例子)[39, 27]。
3. 数字键盘按钮-Text-(例子)3。
4. 数字键盘按钮-布局-Center。
5. 数字键盘按钮-Font-Dialog 12 无格式。
6. 数字键盘按钮-BackGround-[236,233,216]。
7. 数字键盘按钮-ForegRound-[0,0,0]。
8. 数字键盘按钮-Border-[XPEmptyBorder]。
9. 数字键盘按钮-IcoSet-(例子)Null。
2.3 UI验证元素分类C - 功能键盘按钮
1. 功能键盘按钮-MixSize-(例子)[49, 25]。
2. 功能键盘按钮-MineSize-(例子)[49, 25]。
3. 功能键盘按钮-Text-(例子)<<。
4. 功能键盘按钮-布局-Center。
5. 功能键盘按钮-Font-Arial 14 无格式。
6. 功能键盘按钮-BackGround-[236,233,216]。
7. 功能键盘按钮-ForegRound-[0,0,0]。
8. 功能键盘按钮-Border-[XPEmptyBorder]。
9. 功能键盘按钮-IcoSet-(例子)Null。
2.3 UI验证元素分类D - 模拟功能键盘按钮
1. 模拟功能键盘按钮-MixSize-(例子)[93, 23]。
2. 模拟功能键盘按钮-MineSize-(例子)[93, 23]。
3. 模拟功能键盘按钮-Text-(例子)插卡(正确)。
4. 模拟功能键盘按钮-布局-Center。
5. 模拟功能键盘按钮-Font-宋体 12 无格式。
6. 模拟功能键盘按钮-BackGround-[236,233,216]。
7. 模拟功能键盘按钮-ForegRound-[0,0,0]。
8. 模拟功能键盘按钮-Border-[XPEmptyBorder]。
9. 模拟功能键盘按钮-IcoSet-(例子)Null。
2.3 UI验证元素分类E - 活动业务区
1. 活动业务区-MixSize-(例子)[32767, 32767]。
2. 活动业务区-MineSize-(例子)[270, 210]。
3. 活动业务区-Text- Null。
4. 活动业务区-布局-Center。
5. 活动业务区-Font-Dialog 12 无格式。
6. 活动业务区-BackGround-[236,233,216]。
7. 活动业务区-ForegRound-[0,0,0]。
8. 活动业务区-Border-[EtchedBorder]。
9. 活动业务区-IcoSet-(例子)Null。
2.3 UI验证元素分类F - 活动业务区文字
1. 活动业务区文字-MixSize-(例子)[48, 26]。
2. 活动业务区文字-MineSize-(例子)[48, 26]。
3. 活动业务区文字-Text- (例子)200元。
4. 活动业务区文字-布局-(例子)Center。
5. 活动业务区文字-Font-Dialog 18 无格式。
6. 活动业务区文字-BackGround-[236,233,216]。
7. 活动业务区文字-ForegRound-[0,0,0]。
8. 活动业务区文字-Border-(无边框)。
9. 活动业务区文字-IcoSet-(例子)Null。
2.3 UI验证元素分类G - 用户帮助文字
1. 用户帮助文字-MixSize-(例子)[179, 18]。
2. 用户帮助文字-MineSize-(例子)[179, 18]。
3. 用户帮助文字-Text- (例子)注意:只接受50元和100元的倍数。
4. 用户帮助文字-布局-(例子)Center。
5. 用户帮助文字-Font-Dialog 12 无格式。
6. 用户帮助文字-BackGround-[236,233,216]。
7. 用户帮助文字-ForegRound-[0,0,0]。
8. 用户帮助文字-Border-(无边框)。
9. 用户帮助文字-IcoSet-(例子)Null。
2.3 UI验证元素分类H - 用户Flash
1. 用户Flash-MixSize-(例子)[416, 250]。
2. 用户Flash-MineSize-(例子)[416, 250]。
3. 用户Flash-Text- Null。
4. 用户Flash字-布局-(例子)Center。
5. 用户Flash-Font- Null。
6. 用户Flash-BackGround-[236,233,216]。
7. 用户Flash-ForegRound-[0,0,0]。
8. 用户Flash-Border-[EtchedBorder]。
9. 用户Flash-IcoSet-(例子)Flash.gif。
3. 特殊要求
下次迭代增加
4. 扩展点
下次迭代增加
好了,到此为止这是我们的第一份UI测试用例,注意:它是在不断的迭代中完成的。 -
跟我一步一步学写测试用例 4
2008-8-26
作者:Fastpoint 来源:cntesting.com原创 发布时间:2006-11-06
如果是一个软件的UI,那么在它的形成之前肯定有一份特殊的构造文档,我找了半天终于在机器上找到了原来为ATM取款机写的《创意设计概要》,文档内容是这样的:
ATM取款机系统
创意设计概要
登录ATM取款机UI设计
版本 1.0
修订历史记录
日期 版本 说明 作者
21/Dec/98 1.0 初始版本 Fastpoint
目录
1.简介
2.概述
3.直观地功能(风格)
4.确定色彩方案
5.字体
6.屏幕布局
7.图形标准
8.其它标准
9.个性化元素
10.结论
登录ATM取款机UI设计
1. 简介
1.1 目的
本文档将说明在ATM取款机系统的用户界面 (UI) 设计中所采用的标准。
1.2 范围
本文档包括在此 Web 站点中使用的所有 UI 元素。
1.3 定义、首字母缩写词和缩略语
请参见词汇表。
1.4 参考
2. 概述
ATM取款机的可视化元素采用同真实银行ATM机器一致的外观元素,除此之外所有和ATM动作联动的硬件功能由软件模拟绘制,大体上,它将保持同真实银行ATM机器一致的视觉和操作效果。
3. 直观地功能(风格)
ATM取款机的用户操作功能,例如插卡、打印票据等功能由软件模拟,整体外观设计趋于保守。排除一切花哨不切实际的元素,例如ATM的广告效果。
4. 确定色彩方案
采用冷色和中性色,亮色或暖色可用作强调。
图1 - ATM取款机调色板screen.width-461) window.open('/pic/ex_clrplt.JPG');" src="http://www.cntesting.com/pic/ex_clrplt.JPG" border=0>
在ATM取款机上,将利用色彩来区分背景和活动业务区域。在ATM取款机中,模拟机身背景为标准的灰色。所有的正文文字都是黑色(警告除外,采用红色),相对于各种活动业务背景颜色都为白色。
5. 字体
功能操作字体设定: 字体Dialog,样式无格式,大小12。
业务提示字体设定: 字体Dialog,样式粗体 ,大小16。
6. 屏幕布局
屏幕长宽限制在 640 个象素 X 480 个象素,坐标X 0 、Y 0、宽 640、高 480。活动业务区长宽限制在 270 个象素 X 210 个象素,坐标X 30 、Y 30、宽 270、高 210。screen.width-461) window.open('/pic/ex_pglyout.JPG');" src="http://www.cntesting.com/pic/ex_pglyout.JPG" border=0>
图 2 - 屏幕布局标准
功能区块将包含帮助键、小数字键盘。动作模拟区块将包含所有用户触发行为键。
7. 图形标准
ATM取款机取消动画和其它图像设置。
8. 其它标准
在下次迭代中确定。
9. 个性化元素
警告字体采用红色。
10. 结论
该ATM取款机应该易于操作、浏览,并具有较快的反馈速度。
这个文档就是ATM取款机的UI设计用例了,它将成为UI测试用例一份重要依据。 -
跟我一步一步学写测试用例 3
2008-8-26
作者:Fastpoint 来源:cntesting.com原创 发布时间:2006-11-06
先来看一下整个UI界面的导航图,如图所示:
screen.width-461) window.open('/pic/ex_trcblty.JPG');" src="http://www.cntesting.com/pic/ex_trcblty.JPG" border=0>
首先我要说明一下,测试用例也是分很多种的,既然我个人非常推崇朴实测试用例,所以这一次我也朴实的、快速的构造关于Login ATM的功能级测试用例吧。
ATM取款机系统
测试用例
登录ATM取款机功能测试用例
版本:草案
修订历史记录
日期 版本 说明 作者
21/Dec/98 草案 草案版本 Fastpoint
目录
1. 简要说明
2. 操作顺序
2.1 基本操作顺序 - 输入用户密码
2.2 异常操作顺序
2.2.1 密码后台验证
3.备选测试数据
4. 特殊要求
5. 前置测试条件
5.1 插卡动作
6. 后置测试条件
7. 测试扩展点
登录ATM取款机功能测试用例
1. 简要说明
本用例针对普通用户登录ATM取款机系统的功能操作测试。本用例不包含用户密码后台验证测试。
本用例的主角是普通用户,已知密码设定“123456”为正确。
2. 操作顺序
ATM取款机初始化完毕插卡后,本测试用例就开始使用了。
基本操作顺序 - 输入用户密码
1. 初始界面,等待用户密码输入。
2. 普通用户点击键盘“1”。
3. 普通用户点击键盘“2”。
4. 普通用户点击键盘“3”。
5. 普通用户点击键盘“4”。
6. 普通用户点击键盘“5”。
7. 普通用户点击键盘“6”。
8. 系统后台验证普通用户密码,正确。
9. 系统切入ATM取款机普通用户个人帐户界面。
备选流
1. 初始界面,等待用户密码输入。
2. 普通用户点击键盘“2”。
3. 普通用户点击键盘“3”。
4. 普通用户点击键盘“4”。
5. 普通用户点击键盘“5”。
6. 普通用户点击键盘“6”。
7. 普通用户点击键盘“7”。
8. 系统后台验证普通用户密码,错误,等待继续输入。
备选测试数据
序号 测试数据 期望值 实际值
01 123456 T
02 234567 F
03 00.564 E
特殊需求
特殊需求将在下次迭代中确定。
前置测试条件
1. 插卡
在本用例开始前,普通用户要登录插卡。
后置测试条件
后置测试条件将在下次迭代中确定。
扩展点
用户密码输入错误三次,系统返回ATM取款机普通用户个人帐户界面。
好了,到此为止我们终于看到第一份功能测试用例了,实际上测试用例有多种,对于我们这种类型的测试用例,大部分是通过GUI前台验证的,这样我们还需要附带一份GUI测试用例。 -
跟我一步一步学写测试用例 2
2008-8-26
作者:Fastpoint 来源:cntesting.com原创 发布时间:2006-11-06
好了,现在案例有了,我们来看看测试用例是什么?下面是对测试用例的关键字解释:
测试用例(Test Case)目前没有经典的定义。比较通常的说法是:指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。
不同类别的软件,测试用例是不同的。不同于诸如系统、工具、控制、游戏软件,管理软件的用户需求更加不统一,变化更大、更快。笔者主要从事企业管理软件的测试。因此我们的做法是把测试数据和测试脚本从测试用例中划分出来。测试用例更趋于是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。
以上解释引用pennychueng,大家可以通过这个联结和他联系。
实际上不同的应用虽然都有测试用例,但是它们的侧重点不一样,今天我们面对的是ATM取款机,这样某些测试用例就要设计的非常“与众不同”了。你现在马上就要动手写吗?No,No,好的设计来自于更多的思维,如果是我我习惯在一张纸上先把业务的流程画出来,它可能是这样的:screen.width-461) window.open('/pic/8dfd.jpg');" src="http://www.cntesting.com/pic/8dfd.jpg" border=0>
看起来有点歪歪扭扭的,当然了这是我想得随手画出,其实这里面肯定有某些方面的逻辑错误和遗漏,不过这样做算是我对要测试物粗浅的理解好了。正规流程是我们先找到这个ATM取款机的用例(UserCase),也可以是详细设计文档,也可以是需求规格说明等等,反正你要找到描述这个ATM取款机业务逻辑和操作逻辑的文档,不然只是靠想象100%做不好测试,第一份用例是这样的:
ATM取款机系统
用例规约
登录ATM取款机用例
版本:草案
修订历史记录
日期 版本 说明 作者
21/Dec/98 草案 草案版本 Fastpoint
目录
1. 简要说明
2. 事件流
2.1 基本流 - 输入用户密码
2.2 备选流
2.2.1 密码后台验证
3. 特殊需求
4. 前置条件
4.1 插卡动作
5. 后置条件
6. 扩展点
登录ATM取款机用例
1. 简要说明
本用例允许普通用户登录ATM取款机系统。本用例覆盖用户密码后台验证。
本用例的主角是普通用户。
2. 事件流
ATM取款机初始化完毕插卡后,本用例就开始使用了。
基本流 - 输入用户密码
1. 初始界面,等待用户密码输入。
2. 普通用户点击键盘“1”。
3. 普通用户点击键盘“2”。
4. 普通用户点击键盘“3”。
5. 普通用户点击键盘“4”。
6. 普通用户点击键盘“5”。
7. 普通用户点击键盘“6”。
8. 系统后台验证普通用户密码,正确。
9. 系统切入ATM取款机普通用户个人帐户界面。
10. 系统后台验证普通用户密码,错误。
11. 系统显示普通用户个人帐户密码错误,返回步骤1。
备选流
1. 密码输入错误内部计数超过3次,普通用户个人帐户封存。
2. 密码后台验证。
特殊需求
特殊需求将在下次迭代中确定。
前置条件
1. 插卡
在本用例开始前,普通用户要登录插卡。
后置条件
后置条件将在下次迭代中确定。
扩展点
业务用例的扩展点将在精化阶段中确定。
好了,到此为止我们终于看到用例了,该用例模式来自于RUP,比较干净缺点就是以后的文档分支联结过多,下一步我们就要看如何根据用例写测试用例了。 -
跟我一步一步学写测试用例 1
2008-8-26
作者:Fastpoint 来源:cntesting.com原创 发布时间:2006-11-05
我知道这里有很多朋友刚刚进入测试,为了减少新朋友们对“如何写测试用例”的问题,特别制作了这个教程。我趋向于使用自己开发的应用做案例,这里使用的是ATM取款机模拟器,我们使用这个案例来描述书写测试用例的整个过程,如图1:
screen.width-461) window.open('/pic/2863001_070483.jpg');" src="http://www.cntesting.com/pic/2863001_070483.jpg" border=0>
图1
整个界面是比较干净的,跟银行的路边取款机界面没有什么区别,现在我们来看一下如何操作它。首先模拟插卡动作,这个时候ATM显示器出现这样的状况,如图2:screen.width-461) window.open('/pic/2863005_800991.jpg');" src="http://www.cntesting.com/pic/2863005_800991.jpg" border=0>
图2
现在ATM显示器提醒我们输入用户密码,继续操作选择小键盘输入用户密码,ATM显示器显示“******”,点击“确定”按钮,如图3:screen.width-461) window.open('/pic/2863023_079309.jpg');" src="http://www.cntesting.com/pic/2863023_079309.jpg" border=0>
图3
如果密码正确我们可以进入个人账户主界面,如图4:screen.width-461) window.open('/pic/2863029_202384.jpg');" src="http://www.cntesting.com/pic/2863029_202384.jpg" border=0>
图4
现在我们随意操作,根据平常我取钱的动作我会先查看一下我当前的账户余额,点击ATM显示器右边和“查询”对齐的“<<”help按钮,进入账户当前余额界面,如图5:screen.width-461) window.open('/pic/2863046_885813.jpg');" src="http://www.cntesting.com/pic/2863046_885813.jpg" border=0>
图5
哇,我这么挥霍无度的人还有5000大元,足够请我的学生吃饭了,呵呵。现在点击和“返回”对齐的“<<”help按钮,返回个人账户主界面,点击ATM显示器右边和“取款”对齐的“<<”help按钮,进入账户取钱界面,如图6:screen.width-461) window.open('/pic/2863051_193708.jpg');" src="http://www.cntesting.com/pic/2863051_193708.jpg" border=0>
图6
啊,我要取2000元呢,好像当前快捷操作的只有“100”、“200”、“500”,那只好操作“自定义取款”了,点击ATM显示器右边和“自定义取款”对齐的“<<”help按钮,进入账户自定义取款界面,点击小按钮“2”,“0”,“00”,点击“确定”按钮,钱就这么出来了,呵呵。如图7:screen.width-461) window.open('/pic/2863062_981906.jpg');" src="http://www.cntesting.com/pic/2863062_981906.jpg" border=0>
图7
再检查一下帐户万一这机器不牢靠,扣多了就亏大了,看看:screen.width-461) window.open('/pic/2863074_726977.jpg');" src="http://www.cntesting.com/pic/2863074_726977.jpg" border=0>
图8
嗯,没错。
好了,到这里我们整个案例操作完了,现在我们要开始考虑如何测试这么一台冷冰冰的,却让我们爱恨交织的机器了,且听下回分解!
-
测试用例
2008-8-26
测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
测试用例(Test Case)目前没有经典的定义。比较通常的说法是:指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。
不同类别的软件,测试用例是不同的。不同于诸如系统、工具、控制、游戏软件,管理软件的用户需求更加不统一,变化更大、更快。笔者主要从事企业管理软件的测试。因此我们的做法是把测试数据和测试脚本从测试用例中划分出来。测试用例更趋于是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。
随着中国软件业的日益壮大和逐步走向成熟,软件测试也在不断发展。从最初的由软件编程人员兼职测试到软件公司组建独立专职测试部门。测试工作也从简单测试演变为包括:编制测试计划、编写测试用例、准备测试数据、编写测试脚本、实施测试、测试评估等多项内容的正规测试。测试方式则由单纯手工测试发展为手工、自动兼之,并有向第三方专业测试公司发展的趋势。
要使最终用户对软件感到满意,最有力的举措就是对最终用户的期望加以明确阐述,以便对这些期望进行核实并确认其有效性。测试用例反映了要核实的需求。然而,核实这些需求可能通过不同的方式并由不同的测试员来实施。例如,执行软件以便验证它的功能和性能,这项操作可能由某个测试员采用自动测试技术来实现;计算机系统的关机步骤可通过手工测试和观察来完成;不过,市场占有率和销售数据(以及产品需求),只能通过评测产品和竞争销售数据来完成。
既然可能无法(或不必负责)核实所有的需求,那么是否能为测试挑选最适合或最关键的需求则关系到项目的成败。选中要核实的需求将是对成本、风险和对该需求进行核实的必要性这三者权衡考虑的结果。
确定测试用例之所以很重要,原因有以下几方面。
测试用例构成了设计和制定测试过程的基础。
测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,您对产品质量和测试流程也就越有信心。
判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。类似下面这样的说明:“95 % 的关键测试用例已得以执行和验证”,远比“我们已完成 95 % 的测试”更有意义。
测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。
测试设计和开发的类型以及所需的资源主要都受控于测试用例。
测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。最佳方案是为每个测试需求至少编制两个测试用例:·一个测试用例用于证明该需求已经满足,通常称作正面测试用例;
·另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。
一、测试用例是软件测试的核心软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入,在最短的时间内完成测试,发现软件系统的缺陷,保证软件的优良品质,则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要有一套优秀的测试方案和测试方法。
影响软件测试的因素很多,例如软件本身的复杂程度、开发人员(包括分析、设计、编程和测试的人员)的素质、测试方法和技术的运用等等。因为有些因素是客观存在的,无法避免。有些因素则是波动的、不稳定的,例如开发队伍是流动的,有经验的走了,新人不断补充进来;一个具体的人工作也受情绪等影响,等等。如何保障软件测试质量的稳定?有了测试用例,无论是谁来测试,参照测试用例实施,都能保障测试的质量。可以把人为因素的影响减少到最小。即便最初的测试用例考虑不周全,随着测试的进行和软件版本更新,也将日趋完善。
因此测试用例的设计和编制是软件测试活动中最重要的。测试用例是测试工作的指导,是软件测试的必须遵守的准则。更是软件测试质量稳定的根本保障。
二、编制测试用例
着重介绍一些编制测试用例的具体做法。
1、测试用例文档
编写测试用例文档应有文档模板,须符合内部的规范要求。测试用例文档将受制于测试用例管理软件的约束。
软件产品或软件开发项目的测试用例一般以该产品的软件模块或子系统为单位,形成一个测试用例文档,但并不是绝对的。测试用例文档由简介和测试用例两部分组成。简介部分编制了测试目的、测试范围、定义术语、参考文档、概述等。测试用例部分逐一列示各测试用例。每个具体测试用例都将包括下列详细信息:用例编号、用例名称、测试等级、入口准则、验证步骤、期望结果(含判断标准)、出口准则、注释等。以上内容涵盖了测试用例的基本元素:测试索引,测试环境,测试输入,测试操作,预期结果,评价标准。
2、测试用例的设置
我们早期的测试用例是按功能设置用例。后来引进了路径分析法,按路径设置用例。目前演变为按功能、路径混合模式设置用例。
按功能测试是最简捷的,按用例规约遍历测试每一功能。
对于复杂操作的程序模块,其各功能的实施是相互影响、紧密相关、环环相扣的,可以演变出数量繁多的变化。没有严密的逻辑分析,产生遗漏是在所难免。路径分析是一个很好的方法,其最大的优点是在于可以避免漏测试。
但路径分析法也有局限性。在一个非常简单字典维护模块就存在十余条路径。一个复杂的模块会有几十到上百条路径是不足为奇的。笔者以为这是路径分析比较合适的使用规模。若一个子系统有十余个或更多的模块,这些模块相互有关联。再采用路径分析法,其路径数量成几何级增长,达5位数或更多,就无法使用了。那么子系统模块间的测试路径或测试用例还是要靠传统方法来解决。这是按功能、路径混合模式设置用例的由来。
3、设计测试用例
测试用例可以分为基本事件、备选事件和异常事件。设计基本事件的用例,应该参照用例规约(或设计规格说明书),根据关联的功能、操作按路径分析法设计测试用例。而对孤立的功能则直接按功能设计测试用例。基本事件的测试用例应包含所有需要实现的需求功能,覆盖率达100%。
设计备选事件和异常事件的用例,则要复杂和困难得多。例如,字典的代码是唯一的,不允许重复。测试需要验证:字典新增程序中已存在有关字典代码的约束,若出现代码重复必须报错,并且报错文字正确。往往在设计编码阶段形成的文档对备选事件和异常事件分析描述不够详尽。而测试本身则要求验证全部非基本事件,并同时尽量发现其中的软件缺陷。
可以采用软件测试常用的基本方法:等价类划分法、边界值分析法、错误推测法、因果图法、逻辑覆盖法等设计测试用例。视软件的不同性质采用不同的方法。如何灵活运用各种基本方法来设计完整的测试用例,并最终实现暴露隐藏的缺陷,全凭测试设计人员的丰富经验和精心设计。
三、测试用例在软件测试中的作用
1、指导测试的实施
测试用例主要适用于集成测试、系统测试和回归测试。在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中,以便自动生成测试结果文档。
根据测试用例的测试等级,集成测试应测试那些用例,系统测试和回归测试又该测试那些用例,在设计测试用例时都已作明确规定,实施测试时测试人员不能随意作变动。
2、规划测试数据的准备
在我们的实践中测试数据是与测试用例分离的。按照测试用例配套准备一组或若干组测试原始数据,以及标准测试结果。尤其象测试报表之类数据集的正确性,按照测试用例规划准备测试数据是十分必须的。
除正常数据之外,还必须根据测试用例设计大量边缘数据和错误数据。3、编写测试脚本的"设计规格说明书"
为提高测试效率,软件测试已大力发展自动测试。自动测试的中心任务是编写测试脚本。如果说软件工程中软件编程必须有设计规格说明书,那么测试脚本的设计规格说明书就是测试用例。
4、评估测试结果的度量基准
完成测试实施后需要对测试结果进行评估,并且编制测试报告。判断软件测试是否完成、衡量测试质量需要一些量化的结果。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。以前统计基准是软件模块或功能点,显得过于粗糙。采用测试用例作度量基准更加准确、有效。
5、分析缺陷的标准
通过收集缺陷,对比测试用例和缺陷数据库,分析确证是漏测还是缺陷复现。漏测反映了测试用例的不完善,应立即补充相应测试用例,最终达到逐步完善软件质量。而已有相应测试用例,则反映实施测试或变更处理存在问题。
四、相关问题
1、测试用例的评审
测试用例是软件测试的准则,但它并不是一经编制完成就成为准则。测试用例在设计编制过程中要组织同级互查。完成编制后应组织专家评审,需获得通过才可以使用。评审委员会可由项目负责人、测试、编程、分析设计等有关人员组成,也可邀请客户代表参加。
2、测试用例的修改更新
测试用例在形成文档后也还需要不断完善。主要来自三方面的缘故:第一、在测试过程中发现设计测试用例时考虑不周,需要完善;第二、在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成;第三、软件自身的新增功能以及软件版本的更新,测试用例也必须配套修改更新。
一般小的修改完善可在原测试用例文档上修改,但文档要有更改记录。软件的版本升级更新,测试用例一般也应随之编制升级更新版本。
3、测试用例的管理软件
运用测试用例还需配备测试用例管理软件。它的主要功能有三个:第一、能将测试用例文档的关键内容,如编号、名称等等自动导入管理数据库,形成与测试用例文档完全对应的记录;第二、可供测试实施时及时输入测试情况;第三、最终实现自动生成测试结果文档,包含各测试度量值,测试覆盖表和测试通过或不通过的测试用例清单列表。
有了管理软件,测试人员无论是编写每日的测试工作日志、还是出软件测试报告,都会变得轻而易举。
五、测试用例的设计
(一)白盒技术
白盒测试是结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。
1、逻辑覆盖
程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆盖最有代表性的路径的测试用例。下面根据图7-1所示的程序,分别讨论几种常用的覆盖技术。
(1)语句覆盖。
为了个提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。
如图7-1是一个被测试程序流程图:
(2)判定覆盖。
判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。
(3)条件覆盖。
条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。
(4)判定/条件测试。
该覆盖标准指设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
(5)条件组合覆盖。
条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。
(6)路径覆盖。
路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。
在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。
2.循环覆盖
3.基本路径测试
(二)黑盒技术1.等价类划分
(1)划分等价类。
①如果某个输入条件规定了取值范围或值的个数。则可确定一个合理的等价类(输入值或数在此范围内)和两个不合理等价类(输入值或个数小于这个范围的最小值或大于这个范围的最大值)。
②如果规定了输入数据的一组值,而且程序对不同的输入值做不同的处理,则每个允许输入值是一个合理等价类,此处还有一个不合理等价类(任何一个不允许的输入值)。
③如果规定了输入数据必须遵循的规则,可确定一个合理等价类(符合规则)和若干个不合理等价类(从各种不同角度违反规则)。
④如果已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分为更小的等价类。
(2)确定测试用例。
①为每一个等价类编号。
②设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类。重复这步,直到所有合理等价类被测试用例覆盖。
③设计一个测试用例,使其只覆盖一个不合理等价类。
2.边界值分析
使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。
(1)如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。如输入值的范围是[1,100],可取0,1,100,101等值作为测试数据。
(2)如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。如,一个输入文件可包括1--255个记录,则分别设计有1个记录、255个记录,以及0个记录的输入文件的测试用例。
(3)对每个输出条件分别按照以上原则(1)或(2)确定输出值的边界情况。如,一个学生成绩管理系统规定,只能查询95--98级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。
由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。
(4)如果程序的规格说明给出的输入或输出域是个有序集合(如顺序文件、线形表、链表等),则应选取集合的第一个元素和最后一个元素作为测试用例。
3.错误推测
在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。
4.因果图
等价类划分和边界值方法分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入数据的组合引起的错误。
5.综合策略
每种方法都能设计出一组有用例子,用这组例子容易发现某种类型的错误,但可能不易发现另一类型的错误。因此在实际测试中,联合使用各种测试方法,形成综合策略,通常先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。六、测试用例设计的误区
(来源:关河测试网)·能发现到目前为止没有发现的缺陷的用例是好的用例;
首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“V&V”的活动,测试 需要保证以下两点:
程序做了它应该做的事情
程序没有做它不该做的事情
因此,作为测试实施依据的测试用例,必须要能完整覆盖测试需求,而不应该针对单个的测试用例去评判好坏。·测试用例应该详细记录所有的操作信息,使一个没有接触过系统的人员也能进行测试;
不知道国内有没有公司真正做到这点,或者说,不知道有国内没有公司能够将每个测试用例都写得如此详细。在我的测试经历中,对测试用例描述的详细和复杂程度 也曾有过很多的彷徨。写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实 现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大部分软件公司的测试资源都不足的情况下,恐怕很难实现。但我偏偏就能遇到 一些这样的老总或者是项目负责人,甚至是测试工程师本身,全然不顾实际的资源情况,一定要写出“没有接触过系统的人员也能进行测试”的用例。
在讨论这个问题之前,我们可以先考虑一下测试的目的。测试的目的是尽可能发现程序中存在的缺陷,测试活动本身也可以被看作是一个Project,也需要在 给定的资源条件下尽可能达成目标,根据我个人的经验,大部分的国内软件公司在测试方面配备的资源都是不足够的,因此我们必须在测试计划阶段明确测试的目 标,一切围绕测试的目标进行。
除了资源上的约束外,测试用例的详细程度也需要根据需要确定。如果测试用例的执行者、测试用例设计者、测试活动相关人对系统了解都很深刻,那测试用例就没有必要太详细了,文档的作用本来就在于沟通,只要能达到沟通的目的就OK。在我担任测试经理的项目中,在测试计划阶段,一般给予测试设计30% - 40%左右的时间,测试设计工程师能够根据项目的需要自行确定用例的详细程度,在测试用例的评审阶段由参与评审的相关人对其把关。
·测试用例设计是一劳永逸的事情;
这句话摆在这里,我想没有一个人会认可,但在实际情况中,却经常能发现这种想法的影子。我曾经参与过一个项目,软件需求和设计已经变更了多次,但测试用例 却没有任何修改。导致的直接结果是新加入的测试工程师在执行测试用例时不知所措,间接的后果是测试用例成了废纸一堆,开发人员在多次被无效的缺陷报告打扰 后,对测试人员不屑一顾。
这个例子可能有些极端,但测试用例与需求和设计不同步的情况在实际开发过程中确是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。
·测试用例不应该包含实际的数据;
测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰的输入数据和预期输出,没有测试数据的用例最多只具有指导性的意义,不具有可执行 性。当然,测试用例中包含输入数据会带来维护、与测试环境同步之类的问题,关于这一点,《Effective Software Test》一书中提供了详细的测试用例、测试数据的维护方法,可以参考。
·测试用例中不需要明显的验证手段;
我见过很多测试工程师编写的测试用例中,“预期输出”仅描述为程序的可见行为,其实,“预期结果”的含义并不只是程序的可见行为。例如,对一个订货系统, 输入订货数据,点击“确定”按钮后,系统提示“订货成功”,这样是不是一个完整的用例呢?是不是系统输出的“订货成功”就应该作为我们唯一的验证手段呢? 显然不是。订货是否成功还需要查看相应的数据记录是否更新,因此,在这样的一个用例中,还应该包含对测试结果的显式的验证手段:在数据库中执行查询语句进行查询,看查询结果是否与预期的一致。
七、从用例中生成测试用例
用于功能性测试的测试用例来源于测试目标的用例。应该为每个用例场景编制测试用例。用例场景要通过描述流经用例的路径来确定,这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。例如,下图中经过用例的每条不同路径都反映了基本流和备选流,都用箭头来表示。基本流用直黑线来表示,是经过用例的最简单的路径。每个备选流自基本流开始,之后,备选流会在某个特定条件下执行。备选流可能会重新加入基本流中(备选流 1 和 3),还可能起源于另一个备选流(备选流 2),或者终止用例而不再重新加入某个流(备选流 2 和 4)。

用例的事件流示例遵循上图中每个经过用例的可能路径,可以确定不同的用例场景。从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景:
场景 1 基本流 场景 2 基本流 备选流 1 场景 3 基本流 备选流 1 备选流 2 场景 4 基本流 备选流 3 场景 5 基本流 备选流 3 备选流 1 场景 6 基本流 备选流 3 备选流 1 备选流 2 场景 7 基本流 备选流 4 场景 8 基本流 备选流 3 备选流 4 注:为方便起见,场景 5、6 和 8 只描述了备选流 3 指示的循环执行一次的情况。
生成每个场景的测试用例是通过确定某个特定条件来完成的,这个特定条件将导致特定用例场景的执行。
例如,假定上图描述的用例对备选流 3 规定如下:
“如果在上述步骤 2‘输入提款金额’中输入的美元量超出当前帐户余额,则出现此事件流。系统将显示一则警告消息,之后重新加入基本流,再次执行上述步骤 2‘输入提款金额’,此时银行客户可以输入新的提款金额。”
据此,可以开始确定需要用来执行备选流 3 的测试用例:
测试用例 ID 场景 条件 预期结果 TC x 场景 4 步骤 2 - 提款金额 > 帐户余额 在步骤 2 处重新加入基本流 TC y 场景 4 步骤 2 - 提款金额 < 帐户余额 不执行备选流 3,执行基本流 TC z 场景 4 步骤 2 - 提款金额 = 帐户余额 不执行备选流 3,执行基本流 注:由于没有提供其他信息,以上显示的测试用例都非常简单。测试用例很少如此简单。
下面是一个由用例生成测试用例的更符合实际情况的示例。
示例:
一台 ATM 机器的主角和用例。
下表包含了上图中提款用例的基本流和某些备用流:
本用例的开端是 ATM 处于准备就绪状态。 - 准备提款 - 客户将银行卡插入 ATM 机的读卡机。
- 验证银行卡 - ATM 机从银行卡的磁条中读取帐户代码,并检查它是否属于可以接收的银行卡。
- 输入 PIN - ATM 要求客户输入 PIN 码(4 位)
- 验证帐户代码和 PIN - 验证帐户代码和 PIN 以确定该帐户是否有效以及所输入的 PIN 对该帐户来说是否正确。对于此事件流,帐户是有效的而且 PIN 对此帐户来说正确无误。
- ATM 选项 - ATM 显示在本机上可用的各种选项。在此事件流中,银行客户通常选择“提款”。
- 输入金额 - 要从 ATM 中提取的金额。对于此事件流,客户需选择预设的金额(10 美元、20 美元、50 美元或 100 美元)。
- 授权 - ATM 通过将卡 ID、PIN、金额以及帐户信息作为一笔交易发送给银行系统来启动验证过程。对于此事件流,银行系统处于联机状态,而且对授权请求给予答复,批准完成提款过程,并且据此更新帐户余额。
- 出钞 - 提供现金。
- 返回银行卡 - 银行卡被返还。
- 收据 - 打印收据并提供给客户。ATM 还相应地更新内部记录。
用例结束时 ATM 又回到准备就绪状态。
备选流 1 - 银行卡无效 在基本流步骤 2 中 - 验证银行卡,如果卡是无效的,则卡被退回,同时会通知相关消息。 备选流 2 - ATM 内没有现金 在基本流步骤 5 中 - ATM 选项,如果 ATM 内没有现金,则“提款”选项将无法使用。 备选流 3 - ATM 内现金不足 在基本流步骤 6 中- 输入金额,如果 ATM 机内金额少于请求提取的金额,则将显示一则适当的消息,并且在步骤 6 - 输入金额处重新加入基本流。 备选流 4 - PIN 有误 在基本流步骤 4 中- 验证帐户和 PIN,客户有三次机会输入 PIN。
如果 PIN 输入有误,ATM 将显示适当的消息;如果还存在输入机会,则此事件流在步骤 3 - 输入 PIN 处重新加入基本流。
如果最后一次尝试输入的 PIN 码仍然错误,则该卡将被 ATM 机保留,同时 ATM 返回到准备就绪状态,本用例终止。备选流 5 - 帐户不存在 在基本流步骤 4 中 - 验证帐户和 PIN,如果银行系统返回的代码表明找不到该帐户或禁止从该帐户中提款,则 ATM 显示适当的消息并且在步骤 9 - 返回银行卡处重新加入基本流。 备选流 6 - 帐面金额不足 在基本流步骤 7 - 授权中,银行系统返回代码表明帐户余额少于在基本流步骤 6 - 输入金额内输入的金额,则 ATM 显示适当的消息并且在步骤 6 - 输入金额处重新加入基本流。 备选流 7 - 达到每日最大的提款金额 在基本流步骤 7 - 授权中,银行系统返回的代码表明包括本提款请求在内,客户已经或将超过在 24 小时内允许提取的最多金额,则 ATM 显示适当的消息并在步骤 6 - 输入金额上重新加入基本流。 备选流 x - 记录错误 如果在基本流步骤 10 - 收据中,记录无法更新,则 ATM 进入“安全模式”,在此模式下所有功能都将暂停使用。同时向银行系统发送一条适当的警报信息表明 ATM 已经暂停工作。 备选流 y - 退出 客户可随时决定终止交易(退出)。交易终止,银行卡随之退出。 备选流 z - “翘起” ATM 包含大量的传感器,用以监控各种功能,如电源检测器、不同的门和出入口处的测压器以及动作检测器等。在任一时刻,如果某个传感器被激活,则警报信号将发送给警方而且 ATM 进入“安全模式”,在此模式下所有功能都暂停使用,直到采取适当的重启/重新初始化的措施。
在第一次迭代中,根据迭代计划,我们需要核实提款用例已经正确地实施。此时尚未实施整个用例,只实施了下面的事件流:- 基本流 - 提取预设金额(10 美元、20 美元、50 美元、100 美元)
- 备选流 2 - ATM 内没有现金
- 备选流 3 - ATM 内现金不足
- 备选流 4 - PIN 有误
- 备选流 5 - 帐户不存在/帐户类型有误
- 备选流 6 - 帐面金额不足
可以从这个用例生成下列场景
场景 1 - 成功的提款 基本流 场景 2 - ATM 内没有现金 基本流 备选流 2 场景 3 - ATM 内现金不足 基本流 备选流 3 场景 4 - PIN 有误(还有输入机会) 基本流 备选流 4 场景 5 - PIN 有误(不再有输入机会) 基本流 备选流 4 场景 6 - 帐户不存在/帐户类型有误 基本流 备选流 5 场景 7 - 帐户余额不足 基本流 备选流 6 注:为方便起见,备选流 3 和 6(场景 3 和 7)内的循环以及循环组合未纳入上表。
对于这 7 个场景中的每一个场景都需要确定测试用例。可以采用矩阵或决策表来确定和管理测试用例。下面显示了一种通用格式,其中各行代表各个测试用例,而各列则代表测试用例的信息。本示例中,对于每个测试用例,存在一个测试用例 ID、条件(或说明)、测试用例中涉及的所有数据元素(作为输入或已经存在于数据库中)以及预期结果。
通过从确定执行用例场景所需的数据元素入手构建矩阵。然后,对于每个场景,至少要确定包含执行场景所需的适当条件的测试用例。例如,在下面的矩阵中,V(有效)用于表明这个条件必须是 VALID(有效的)才可执行基本流,而 I(无效)用于表明这种条件下将激活所需备选流。下表中使用的“n/a”(不适用)表明这个条件不适用于测试用例。
TC(测试用例)ID 号 场景/条件 PIN 帐号 输入的金额 (或选择的金额)
帐面金额 ATM 内的金额 预期结果 CW1. 场景 1 - 成功的提款 V V V V V 成功的提款。 CW2. 场景 2 - ATM 内没有现金 V V V V I 提款选项不可用,用例结束 CW3. 场景 3 - ATM 内现金不足 V V V V I 警告消息,返回基本流步骤 6 - 输入金额 CW4. 场景 4 - PIN 有误(还有不止一次输入机会) I V n/a V V 警告消息,返回基本流步骤 4,输入 PIN CW5. 场景 4 - PIN 有误(还有一次输入机会) I V n/a V V 警告消息,返回基本流步骤 4,输入 PIN CW6. 场景 4 - PIN 有误(不再有输入机会) I V n/a V V 警告消息,卡予保留,用例结束 在上面的矩阵中,六个测试用例执行了四个场景。对于基本流,上述测试用例 CW1 称为正面测试用例。它一直沿着用例的基本流路径执行,未发生任何偏差。基本流的全面测试必须包括负面测试用例
- 准备提款 - 客户将银行卡插入 ATM 机的读卡机。



