矩阵
•问题是什么?
——如果你认为获取的结果过时,那将怎样?(如果这一项目提出了新的计划,为把标准测试覆盖,将做何操作?)
——你是否需要每次都执行所有测试?(或者永远?)
——如果自动化测试编号改变了那将如何?我们仍存在一个并不难理解的维护问题。
域测试-理解域测试
简单练习
这是一个Open Office的打开的对话框。想象
1、 你能输入到拷贝份数区域最大的拷贝数是999,或
2、 你的打印机管理着多份拷贝数,最大为99。
对于每种情况,先做一个传统的域分析。
这些变量的域分析?
•你会对这些变量做域分析吗?
•这样做,你将从中收获什么?
浮点类型域分析
•对页宽做个域分析。
•想想:这个与整数类型的分析有什么不同?
练习
对于下列各项
-列出重要的变量。
-列出有效与无效的等价类。
-列出测试用例的边界值。
-在边界表中展示结果。
1、FoodVan为通过网络订货的客户提供食品杂货。为了决定是否购买更多的客货车,FV跟踪那些要求加车的客户。办事员每天都把电话数输入到数据库中。基于之前的经验,数据库对于数量超过400的电话设定为一个挑战(询问:“你确定吗?”)
2、foodvan提前一天安排司机。为了符合转让资格,一名司机必须有特别许可或者她必须在30天内到她将被分配的换班开车。
理解域测试
•早在有人提出关于域测试的理论描述之前,人们就把数值按等价类来划分。
•域测试最重要的理念是,它为从域中取样提供了一个理性的基础。
•定义:域
- 数学上
•域的功能是定义功能的所有输入值的集合。
•范围(或输出域)的功能是所有功能可以实现的结果集。
- 前期的域测试描述侧重于输入,不过我们习惯性地把分析应用于输出(测试计算机软件,第一版,1988,反映了这一实践)
在域测试中,我们把一个域细分为子域(等价类),然后使用子域中的数值进行测试
1. 什么是等价类?
什么使得等价类有价值,有四个观点。每一个都具有其实际意义。
- 直观的相似:如果两个测试彼此如此相似,测试值是相等的,那么看起来两个都测试是没有意义的。
• 这是最早的观点并且也是最容易教导的
• 对于微妙的用例或多变量少有指导
- 明确说明为等价:如果详细说明书中指明程序以同种方式处理,那两个测试值是相同的。
• 测试者抱怨,遗漏了详细说明书可能会花大量的时间在些详细说明书上。
• 注意力集中于被指明的事情上,但这可能导致被指明特征下的更多缺陷。
- 等效路径:如果两个测试驱使程序执行相同的路径,那值是相等的。(例如,执行IF中的同一个分支)
• 测试人员应是一个程序员
• 测试人员应根据代码设计测试
• 有些作者声称,一个完整的域测试将造就一个完备的分支覆盖
• 从类中撷取一个而非其他是没有什么依据的
• 两个值可能使程序执行相同的路径,但却有着十分不同的影响。(例如超时或不超时对后续程序的影响;又如文字处理器以及输出可能相同,但不同的打印机会导致不同的解释或结果)
- 基于风险:鉴于你的理论可能存在误差,你期待从中获得相同的结果-两个测试值相同。
• 主观分析,因人而异。这取决于你的期望(以及,你可以预期什么)
• 两个值相对于一个潜在的缺陷是等价的,但相对于其他而言是非等价的。
2. 测试等价类中的哪些值呢?
大多数针对域测试的讨论是从几个假设开始的:
(a) 域是连续的 【这点容易被忽视 --CK】
(b) 域是线性的(域中的值可以在数轴上画出)或者,至少,域是一个有序集(给定两个组成部分,其中一个大于另外一个或二者相等)
(c) 导致程序不同分支的比较是简单的,线性的不等式
“远离这些假设是可能的,但成本可能会很高。”--Clarke, Has sell , & Richardson, 388页
• 如果我们以路径的方式来思考,我们能用值驱使程序执行正确的路径吗?这种方法在以覆盖率为重点的测试中比较常见,但不幸的是,它并不能发现大量的缺陷。参见Hamlet & Taylor
• 如果你能在数轴上标注输入空间,那么标出从一个等价类到另一个等价类转换的点或区间的相边界标志。据说,这些都是等价类中好的成员,因为,程序更可能在边界处失败。
程序更可能在边界处失败吗?
- 假设程序设计:
· 输入<10 结果:错误信息 · 10<=输入<=25 结果:输出“hello” · 25<=输入 结果:错误信息 |
- 一些错误的类型
• 程序中不适合用数字
- 所有的数值都将导致错误
• 不等式说明错误(例如,输入<=25,而非<25)
- 仅检测边界
• 边界值误输入(例如,输入<52,位置错误)
- 检测边界及可能会导致错误处理的数值
- 边界值(此例中,测试25)可以捕获全部三个错误
- 非边界值(如53)仅可捕获三个缺陷中的一个
- 侧重于边界本就是基于风险的
- 不过明确提出基于风险的方法更进一步
• 考虑多种不同风险
• 按风险划分执行
• 按风险选择执行的值
- 如果等价类中没有其他的份子比最佳代表更容易暴露缺陷,那么等价类中的这个份子就是最佳代表(相对于潜在错误而言)
» 边界值往往是最佳代表
» 我们可找到不属于边界值的最佳代表
» 我们可在无序域中找到最佳代表