测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景图法等。
今天我们主讲等价类划分法。
等价类划分法
前面文章中提到过测试是不能穷举的,那么等价类划分法就是将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。
等价类划分法是把所有可能的输入数据(输入域),划分成若干部分(子集),然后从每一个子集选取少数具有代表性的数据作为测试数据去测试。输入域的每个子集就是一个等价类,等价类中任意一个输入数据对于揭露程序中潜在错误都具有同等效果。在测试过程中我们只要从每个等价类中任意选取少数的值作为代表进行测试即可,等价类划分法可以让我们用少量测试输入取得较好的测试覆盖结果。
要注意的是,在进行等价类划分的过程中,我们不仅要考虑有效等价类划分,也要考虑无效等价类划分。具体定义如下:
有效等价类:是指输入完全符合程序规格说明的数据集合。利用有效等价类可以测试程序是否满足规格说明书规定的功能和性能。
无效等价类:和有效登记类相反,即不满足程序规格说明的数据集合。使用无效等价类,可以测试程序对异常情况的处理。在程序设计中,不但要保证所有有效数据输入能产生正确的输出,同时也需要保证在输入错误或者输入为空等异常数据时程序有异常保护或者说明。比如:测试人员在测试QQ的时候不能只测试网络正常时候消息的传送、存储和展示,也要测试断网/弱网等情况下消息的传送、聊天记录的存储和展示等。否则就可能会出现一旦断网,之前发送的消息全都没了,甚至发送者这边提示消息发送成功,但是接收方却没收到消息(即消息丢失)等糟糕的情况。
接下来我们来看个例子:
我们要测试学习成绩这一输入框(假设总成绩都是100),那么我们就可以如下图划分,有效的成绩是>=0且<=100的,无效的是<0和>100这两部分;另外图中还有一个无效等价类没有表现出来--非数字字符(比如:英文字母、中文、特殊的符号等单一或者组合,如a、abc、你好、你abc、你=我、\你\a\等;以及他们分别与数字组合,比如:a123、321a、你123、12你、1你2、1\2、1=你等)。
那么根据上述分析,最终设计出来的测试用例如下:
有效等价类1:0~100(包含0和100)之间的任意数,比如:19;
无效等价类1:小于0的负数,比如:-1;
无效等价类2:大于100的数,比如:121;
无效等价类3:其他任意非数字字符,比如:a、你、\;
无效等价类4:空字符(什么也不填写或者输入多个空格,很多人容易忘了这个呢)。
可能会有人有疑问了,为什么前三个等价类都给了一个值,而无效等价类3给了那么多?这就是我们即将要说的等价类最终必须是分割到最小单位,只有这样才能保障测试覆盖全面。比如上述说的:
无效等价类3:其他任意非数字字符。
非数字字符可以是包含英文字符、中文、特殊符号的字符串或者字符,所以其实它又可以分为三个无效等价类,分别是:
无效等价类:包含英文字符的字符串,比如:a、a123、a=、b你a;
无效等价类:包含中文的字符串,比如:你、你12、1你2、你=;
无效等价类:包含特殊字符的字符串,比如:\ 。