等价类和边界值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
等价类和边界值
等价性划分:选择输入,输出,动作,环境,或者你感兴趣的因素,对这些因素进行分类,系统应该对每一类中的因素进行等价处理。我们选择的测试应该至少代表了每个类中的一个选项。当选择存在某种有意义的顺序,等价类中就会存在边界值。
整数:
假设输入允许的最大数量为99,那么等价类和边界值如下:
在有效的数量类里面,也可能存在两个子类,可能允许输入千位分隔符。这只有当你允许数目可以数以千计时才有意义。
如果说输入65536可以,为什么65537不可以。由于依赖于计算机表示而迫使产生了边界值。尤其是最大的边界。这样,我们完全可以分析出两个无效的等价类。数量过少,数量过多。那么最低的有效值减1和最高有效数量加1都是你的边界值。对于卖东西而言。0是典型的边界值,卖出1包槟榔是有意义的,卖出0包则没意义。对于随行人数而言,随行人数0又是有意义的,
我们在设计时,考虑系统应该显示的业务行为。一个合理的用户期待是什么样子的,以此来设计测试,覆盖这些行为。
实数:
对于实数而言,整数的例子可以直接借用,这里我们需要考虑的问题是一个数值的最小差值是多少。在测试我们酒店管理系统时,一个可能的用例是用户提交申请查看账务信息。
为了识别等价类和边界值,我们必须知道我们的差值幅度是多少,在实际中,我们保存的为0.01.那么有效等价类
为什么我把有效等价的又分成了三个子类。比0小的,比0大的,和0,这样就造成了位于0和接近0的边界值。很多时候奇怪的事情发生在0,如果程序员忘记在做除法时检查0值会怎么样。空值有的时候在计算时被处理成0.所以,在一个数值中检查位于或者接近0这样做是很值得的。
输入过多的小数位数也是无效等价类,使用了错误的千位或者小数分隔符的无效等价类,输入两个小数分隔符或者千位分隔符。
我们在测试中,要仔细的观察和使用常识。这样会发现很多有趣的缺陷。在酒店管理系统中,对于money输入,精确到两位小数可能没意义。但是在会计上,银行记账来说,两位小数精确度可能还不能满足要求。在使用美元的国家,1美分是存在的,这样就引发一个问题。我们在测试的时候看到数字域我们自然想到单位。单纯的1是无法度量的。
到此我们可以设计测试时的三个可能缺陷
1,给客户显示了一个无用的精度,比如在报表中数字默认为9位,
2,显示的数字精度超出了实际的准确度。比如在餐饮中显示出四位小数
3,没有指定单位
字符和字符串:
字符和字符串域给等价划分引入了更大的复杂性
假设我们在测试一个密码框,用户提示:“输入一个6---10个字符长的字母和数字组合密码。”我们该如何设计。也许我们根据上述划分,给出边界上的有效类,6个0,6个9,6个z,10个Z,接下来就是字符太少和字符太多。5个0,11个0,输入6个”/”等等。这个测试集不算好,
首先,这个测试集基于一个可能存在的缺陷的错误假设,从而包括了不必要的测试。极端条件组合通常不太适应软件功能测试。因为系统架构一般是分层的,,每一层使用本层或者下层的服务或者功能。并服务和功能提供给此层或者上面一层。软件一般都不可能像人一样一下全部判断到。
我们可以设想下,在程序中会有一段代码区分密码的有效或者无效,另外一段代码则检查有效的密码长度。而检查无效字符和密码长度时先后运行的。这意味着一段代码或者另外一段(不是同时),会拒绝一个在长度和字符种类方面无效的密码。
如果一个使用了有效字符的密码被接受,那么它是否具有最大个数的字符就没关系啦。如果说字符的个数检查被正确的编程处理了(这是必须经过测试),那么使用哪些字符就无关紧要。所以设计时没必要设计字符过多,过少,长度和字符种类都是极端的测试。
另外一个问题,我们在考虑有效类时,我们没有考虑到区分大小写,这是一个常见的划分陷阱。实际上我们应该包含三类:数字,大写字母,小写字母。
我们考虑下,在一个函数中,必须是一个字符一个字符的检查密码,只要每个字符都是好的,我们可以在一个测试上用上有效字符的所有边界值,如:09AZaz,我们在包含10个字符的,设计一个怪异的密码如:51YbcMPc8x就OK。无需再去测试边界字符。因为我们已经测试过六个边界值
一般来说,我们在考虑使用边界值时,我们就会对某两类缺陷关注过多。而忽略了其他类型的缺陷。这两类测试是:输入错误的操作组合,或者把一些限制值进行加减1得到太高和太低。例如:当程序员使用case语句来吧输入值划分到不同子类,最可能的问题不是比较操作,而是会漏掉case标志。测试会漏掉某些情况。只有保证我们的测试设计有足够多的变化,才能增加偶尔发现交叉性缺陷错误。而有可能这些缺陷不是原本特意去找的。
我们在测试时,无效边界的测试应该包括一个无效字符,且它是一个其他部分皆有效的中的唯一一个无效字符。
边界值分析还可以找到两个无效等价类:无输入的串、空串,以及非常长的串。在数组中这样的测试往往会暴露相关的缺陷。
综上:我们可以理解为测试设计必须
1,长度测试
2,有效字符(09AZaz)
3,无效字符。
4,整数,实数
5,设计更多其他类型的测试
对多样性的上限,下限、字符的特殊限制,或者精度的测试还需要有意义。在具体的环境下,有可能程序会接受无意义的输入。
货币:
货币域通常是固定小数点域的数字。
假设你在测试一个工资管理应用程序,有提示告诉你:请输入低于3000的工资。第一感觉,有效的边界值包括2999.99和0.01,或者低于0.01的无效类。
接下来你可能要想到钱的单位,在同一系统中是否支持多中货币互通。
功能之外的类和边界:
我们很多时候只看到功能测试的等价类,特别是针对用户界面的逻辑。但是我们可能对功能性之外的进行等价类分析。
比如:最低配置,那么我们至少要测试最低配置,在需求上,有个这样的描述:接待应该在三分钟内完成所有操作。
不得不说,测试是无限的,对可能缺陷的不同假定能够让这些测试在特定的环境下成为聪明的测试。最重要的是,当你决定运行哪些测试和不运行哪些测试,你要鉴别你做的缺陷假定。