软件测试用例设计(等价类+边界值+判定表+正交试验+PICT)

22 阅读14分钟

在软件测试中,划分等价类是为了减少测试用例数量,同时保证覆盖。核心思路是:如果一组输入,程序对它们的处理方式应该相同,那它们就属于同一个等价类。

· 有效等价类:符合需求规格、合理、有意义的输入,用于验证程序应该做什么。

· 无效等价类:不符合需求、不合理、无意义的输入,用于验证程序不该做什么。


划分步骤

  1. 分析需求:明确输入条件(如类型、范围、格式等)。
  2. 找有效类:满足所有条件的输入为一个有效等价类。
  3. 找无效类:从反方向考虑每个条件。常见角度包括:空值、越界、错误类型、错误格式等。注意,每个违规条件通常单独成为一个无效类,因为它们可能触发不同的错误。

举例 1:输入一个1-100之间的整数(包括1和100)

· 有效等价类:1到100之间的任意整数,比如 50、1、100。

· 无效等价类:

  1. 小于1:如 0、-5
  2. 大于100:如 101、200
  3. 非整数(小数):如 50.5
  4. 非数字(字母、特殊字符):如 abc、@#$

举例 2:用户名注册,要求长度为6-10位,只能包含字母、数字、下划线

· 有效等价类:长度6-10,且只含字母/数字/下划线,如 user_01、abc123。

· 无效等价类:

  1. 长度小于6:如 ab123
  2. 长度大于10:如 abcdefghijk
  3. 包含非法字符(如连字符、空格、中文):如 user-01
  4. 空值或仅空格
  5. 全为数字或全为下划线(虽然不常见,但规则允许,所以是有效的;若规则禁止纯数字,则另当别论)

举例 3:登录功能,密码非空

· 有效等价类:任何非空的密码,如 mypass、123。

· 无效等价类:

  1. 密码为空(不输入任何字符直接提交)
  2. 密码仅为空格(如果系统不自动trim)

关键提醒

· 并非所有条件都有无效类。例如,需求规定“性别:男或女”,若用下拉框选择,用户无法输入错误值,那么无效等价类可以不测。

· 边界值要单独测,因为边界最容易出错。等价类只负责选出代表值,边界值分析是另一种技术。

· 有效类通常只有一个,但如果有多个独立条件需要同时满足,可能会有多个有效组合。

· 实际测试时,每个等价类至少选一个代表值设计测试用例。


等价类划分和边界值分析通常组合使用:先用等价类分出“范围”,再重点测试这个范围的边界上及边界附近的值,因为边界是最容易出错的地方。

核心原则:测边界,不测中间。对于有效等价类,不只取一个代表值(如50),而要测边界值(1、100)。对于无效等价类,则测刚好越界的值。

结合步骤

  1. 划分等价类:找出有效和无效等价类。
  2. 确定边界:找到有效类的上点(正好在边界上)、内点(区间内任意点)、离点(离边界最近,但在边界外)。

经典应用:输入范围 [1, 100]

· 有效类:1-100

· 无效类:<1, >100

边界值分析取值(通常取3个值:边界值、边界-1、边界+1):

· 有效类的边界:1, 100 (上点)

· 有效类内部任一点:50 (内点)

· 无效类的离点:0 (刚好小于1), 101 (刚好大于100)

测试用例取值:0, 1, 50, 100, 101 (共5个)

进阶:双边界(闭合区间)

如果输入必须同时满足两个边界,如 日期:2025-01-01 到 2025-12-31:

· 上点:2025-01-01, 2025-12-31

· 内点:2025-06-01

· 离点:2024-12-31, 2026-01-01

特殊场景:开区间或半开区间

需求说 > 0 且 < 100 (不含0和100):

· 有效类:1-99 (因为整数场景)

· 边界:1 和 99 是有效边界

· 离点:0 和 100 是无效边界

· 取值:0, 1, 50, 99, 100

多变量时的优化(n个变量)

每个变量都取边界值,但组合起来用例会爆炸。常用 边界值分析 或 健壮性测试:

· 基本边界值分析:所有变量取正常值,只让一个变量取边界值(-1, 边界, +1)。用例数 ≈ 4n+1。

· 例:x∈[1,100],y∈[10,20] → 测试 x=1,50,100,同时 y=15;再测 y=10,15,20,同时 x=50。

· 健壮性测试:额外测离点(0, 101, 9, 21)。

· 最坏情况:所有变量取边界值的组合(用例多,用于高可靠性场景)。

实际应用示例:年龄输入框(1-120岁,整数)

测试数据:

· 0 (无效离点)

· 1 (有效上点)

· 50 (有效内点)

· 120 (有效上点)

· 121 (无效离点)

如果允许小数,还需测试边界附近的小数,如 0.9, 1.0, 1.1, 119.9, 120.0, 120.1。

总结:什么时候重点用边界值?

· 输入是数值范围、日期范围、长度限制(如字符串长度1-10)

· 有循环、数组索引、集合大小的临界点

· 输入条件包含≥、>、≤、< 时

边界值 + 等价类 = 高性价比的测试设计。


当输入条件之间存在逻辑依赖(比如“如果满足条件A且不满足条件B,则结果X”),或者有多个条件组合出不同结果时,等价类和边界值就不够用了。这时需要判定表。

判定表能把条件组合和预期结果系统地列出来,避免遗漏,特别适合处理复杂的业务规则。

判定表的结构

一个典型的判定表由四部分组成:

· 条件桩:列出所有输入条件(通常是布尔值,如真/假)。

· 动作桩:列出所有可能的输出结果或操作。

· 条件项:具体列出条件在各组合下的取值(如Y/N, 1/0)。

· 动作项:对应每种组合,哪些动作会执行。

经典案例:打印机故障诊断

· 条件桩:1. 发打印命令了吗? 2. 有纸吗? 3. 有墨吗?

· 动作桩:A. 正常打印;B. 提示“缺纸”;C. 提示“缺墨”;D. 无响应。

完整的判定表(2³ = 8种组合)如下:

条件/动作规则1规则2规则3规则4规则5规则6规则7规则8
命令?YYYYNNNN
有纸?YYNNYYNN
有墨?YNYNYNYN
动作:
正常打印X
缺纸XX
缺墨XX
无响应XXXX

制作步骤

  1. 确定输入和输出:找出所有影响结果的条件,以及所有可能的动作。
  2. 计算组合数:若每个条件有2种状态,n个条件最多有 2ⁿ 种组合。
  3. 填充判定表:列出所有组合,并填入对应规则下的动作。
  4. 简化判定表:合并“与结果无关”的相似规则。 · 例如:只要“没发命令”(规则5-8),无论纸墨如何,结果都是“无响应”。这4条可以合并为1条,用“N”和“-”(任意值)表示。 · 合并后:规则1、规则2、规则3、规则4、规则5(命令=N,其他任意)。
  5. 根据每一列规则设计测试用例:一列就是一个测试用例。

登录功能的判定表示例

· 条件:1. 用户名正确? 2. 密码正确?

· 动作:A. 登录成功;B. 提示“用户名或密码错误”。

条件/动作规则1规则2规则3规则4
用户名正确?YYNN
密码正确?YNYN
动作:
登录成功X
提示错误XXX

· 规则2、3、4结果相同,理论上可以合并,但通常为了更直观,也可以保留。

· 测试用例:共4个用例。

关键提醒

· 适用场景:业务规则复杂、条件组合多、有逻辑依赖(如“如果A则B,否则C”)。

· 不适用场景:条件间没有逻辑组合,或输入是连续数值范围(此时用等价类+边界值)。

· 组合爆炸:当条件超过4-5个时,2ⁿ 组合会非常多。可以先分析条件间的依赖关系,用“决策树”或“正交试验”来精简。

· 与其他方法结合:通常先用等价类处理每个条件的取值范围,再用判定表处理组合逻辑。判定表一列就是一个测试用例,设计时可以直接取等价类的代表值。


判定表在条件超过4-5个时,组合数会爆炸(比如10个条件就有1024种组合)。正交试验法能从全量组合中,选出少量有代表性的组合,用最小的成本覆盖“两两组合”的情况,是解决组合爆炸的实用方法。

核心思想

正交试验法基于正交表(如 L9(3^4)),它保证:

· 均衡分散:每个条件的每个取值,出现的次数相同。

· 整齐可比:任意两个条件的所有取值组合,都会出现且只出现一次(即两两覆盖)。

换句话说,它不测所有组合,但保证任意两个条件的所有搭配都被测到。软件测试中,大部分Bug也恰恰由某两个条件共同触发。

应用步骤

  1. 确定因素与水平

    · 因素:输入条件(如浏览器、操作系统)。

    · 水平:每个条件的具体取值(如浏览器有Chrome、Safari)。

  2. 选择或构造正交表

    · 因素数和水平数需与正交表匹配。

    · 没有完全匹配的,选择刚好能容纳的表(行数稍多、列数稍多的)。

  3. 映射并生成测试用例

    · 把正交表的“值”替换成实际取值,一行就是一条测试用例。

  4. 补充可疑组合

    · 正交表只保证两两组合。如果某三个条件组合风险很高,需手动补充。

举例:网页兼容性测试

· 因素:浏览器(Chrome, Safari, Firefox),操作系统(Win, Mac, Linux),屏幕分辨率(1920x1080, 1366x768, 1280x720)

· 水平数:3个因素,每个因素3个水平。

全组合:3×3×3 = 27种。用标准正交表 L9(3^4)(9行,4列,3水平),只需9条用例。

用例浏览器操作系统分辨率
1ChromeWin1920x1080
2ChromeMac1366x768
3ChromeLinux1280x720
4SafariWin1366x768
5SafariMac1280x720
6SafariLinux1920x1080
7FirefoxWin1280x720
8FirefoxMac1920x1080
9FirefoxLinux1366x768

这9条用例,任意两个条件(比如Chrome+Win、Safari+Mac等)的组合都恰好出现一次。

不同水平数的处理

如果因素水平数不同,例如:浏览器(Chrome, Safari)、操作系统(Win, Mac, Linux)、分辨率(1920x1080, 1366x768)。

· 混合水平正交表:如 L6(2^1 × 3^2),表示1个2水平因素、2个3水平因素,共6行。

· 也可以按最大水平数选表,把不足的取值重复填充(取任意值)。

常见正交表

· 2水平:L4(2^3), L8(2^7)

· 3水平:L9(3^4), L27(3^13)

· 混合水平:L6(2^1 × 3^2), L12(2^1 × 3^1 × 4^1)

与其他方法的对比

· 等价类/边界值:处理单个输入范围。

· 判定表:处理逻辑组合,但组合多时用例爆炸。

· 正交试验:组合多时,用两两覆盖精简用例。

· pairwise testing:正交试验是它的实现方式之一。更灵活的工具(如PICT)能自动生成最优组合。

关键提醒

· 适用场景:配置测试(浏览器/OS/分辨率)、参数组合多的接口测试。

· 局限性:只保证两两组合。如果三个条件组合才出现的Bug,可能会漏测,需手动补充。

· 实践经验:先跑正交试验的用例,时间充裕再逐步增加强度(如三三组合)。


PICT(Pairwise Independent Combinatorial Testing)是微软开发的免费命令行工具,能根据你定义的参数和取值,自动生成精简的测试用例组合,尤其适合多参数配置测试。

第一步:安装与准备

PICT是绿色免安装工具,下载后配置环境变量即可全局使用。

  1. 下载PICT

· 官方渠道(推荐):访问 GitHub Releases 页面 github.com/microsoft/p…,选择最新版本下载 pict.exe。

· 存放位置:建议在 C:\Tools\PICT 下新建文件夹存放 pict.exe,便于管理。

  1. 配置环境变量(可选)

· 若想在命令行任意路径下使用 pict 命令,需将 pict.exe 所在文件夹路径添加到系统 PATH 环境变量中。

· 不配置环境变量:也可以在 pict.exe 所在目录下,通过在路径前加 .\ 运行,如 .\pict model.txt。

第二步:编写模型文件

用文本编辑器创建一个 .txt 或 .pict 文件,核心语法是:

格式:参数名: 值1, 值2, 值3, ... 注释:以 # 开头的行

示例:登录功能参数模型 (login_model.txt)

# 登录功能测试模型
用户名: 空, 不存在, 超长, 正常
密码: 空, 不匹配, 正常
验证码: 正确, 错误

第三步:生成测试用例

  1. 打开命令行:Win + R 输入 cmd 并回车。

  2. 进入文件目录:使用 cd 命令切换到模型文件所在目录,例如 cd C:\my_test_models。

  3. 运行PICT:

    · 直接显示在屏幕:执行 pict login_model.txt,生成的用例表格会直接打印在命令行窗口。

    · 导出到文件(推荐):执行 pict login_model.txt > test_cases.txt。这会将结果保存到 test_cases.txt 文件中,方便查看和编辑。

高级功能:约束与子模型

实际测试中,某些参数组合本身无效,需要排除。

  1. 约束条件 (Constraints) 使用 IF...THEN... 语句排除无效组合。必须以分号 ; 结尾。
# 文件系统测试模型
Size: 10, 100, 5000, 40000
File system: FAT, FAT32, NTFS

# 约束条件
IF [File system] = "FAT" THEN [Size] <= 4096;
IF [File system] = "FAT32" THEN [Size] <= 32000;

说明:当文件系统为 FAT 时,Size 必须小于等于 4096,否则不会生成这条组合。

  1. 子模型 (Sub-models) 默认PICT保证所有参数两两组合。若想加强某几个参数的组合强度,可使用子模型。
PLATFORM: x86, x64, arm
CPUS: 1, 2, 4
RAM: 1GB, 4GB, 64GB
OS: Win7, Win10, Linux
Browser: Chrome, Firefox, Edge

# 子模型
{ PLATFORM, CPUS, RAM } @ 3   # 这3个参数进行三三组合
{ OS, Browser } @ 2           # 这两个参数进行两两组合

避坑指南:解决中文乱码

模型文件或生成的结果中包含中文时,命令行可能显示乱码。解决办法如下:

  1. 使用正确的编码:用记事本打开模型文件,点击“文件” -> “另存为”,在对话框底部将“编码”从默认的 UTF-8 改为 ANSI,然后保存。
  2. 切换命令行字符集:在运行PICT命令前,先在cmd窗口中执行 chcp 936,将代码页切换为简体中文。

PICT工作流程总结

  1. 分析需求:梳理出所有需要组合的测试参数及其取值。
  2. 编写模型:在文本文件中按 参数名: 值1, 值2, ... 格式编写。
  3. 定义规则:根据需要,添加 IF...THEN... 约束条件来剔除无效组合。
  4. 生成用例:在命令行执行 pict model.txt > output.txt。
  5. 审查与使用:打开生成的 output.txt,用例即可直接用于测试执行。