测试用例设计基础:等价类划分、边界值分析、因果图法、正交实验法
做测试这么多年,我越来越觉得一个道理:测试用例设计,才是自动化回放的灵魂。你想想看,脚本写得再漂亮,如果用例本身设计得稀烂,跑出来的结果能信吗?
今天咱们就来聊聊测试用例设计的四大金刚——等价类划分、边界值分析、因果图法、正交实验法。这些方法我几乎每天都在用,尤其是做接口自动化的时候,少了它们还真不行。
一、等价类划分:别做无用功
等价类划分,说白了就是把输入数据分成几个“类”,每个类里挑一个代表来测。为什么?因为同一类里的数据,程序处理逻辑是一样的,测一个就够了。
我记得刚入行那会儿,有个同事测一个登录功能,把用户名从“a”试到“zzzzz”,试了上千条数据。我说你干嘛呢?他说怕漏测。其实这就是典型的没理解等价类。
核心思想:
- 有效等价类:符合需求、程序能正常处理的输入
- 无效等价类:不符合需求、程序应该拒绝的输入
举个例子,一个输入框要求输入1-100的整数:
| 类型 | 等价类 | 示例数据 |
|---|---|---|
| 有效等价类 | 1到100之间的整数 | 50 |
| 无效等价类1 | 小于1的整数 | -5 |
| 无效等价类2 | 大于100的整数 | 200 |
| 无效等价类3 | 非整数(小数、字母、特殊字符) | abc、3.14、@ |
你看,本来要测无数种输入,现在只需要测4个类就够了。效率提升不是一星半点。
我的小技巧:写自动化用例时,我会把等价类数据直接参数化。比如用pytest的parametrize,把有效类和无效类分开写,清晰又好维护。
二、边界值分析:Bug最爱藏在边界
等价类划分有个“盲区”——它不关心边界。但经验告诉我,程序出问题,十有八九在边界上。
边界值分析就是专门来补这个窟窿的。它关注的是:
- 上点:边界上的点(比如1和100)
- 离点:离边界最近的点(比如0和101,或者2和99,看闭区间还是开区间)
- 内点:边界内的任意点
我曾经在一个金融项目里吃过亏。一个转账金额限制在0.01到999999.99之间,我测了0.01和999999.99都正常,就放了。结果上线后用户反馈,输入0.00居然也能提交成功,后台直接报错。嗯,这就是没测“离点”的后果。
避坑指南:我曾经以为边界值就是测“最小值、最大值”就够了。后来发现,边界值要结合等价类一起用。比如一个输入框要求1-100的整数,等价类告诉你测50,边界值告诉你测1、100、0、101。两者互补,缺一不可。
三、因果图法:理清复杂逻辑
等价类和边界值,对付单个输入还行。但遇到多个条件组合的情况,就有点力不从心了。这时候,因果图法就派上用场了。
因果图法的核心是:找出“因”(输入条件)和“果”(输出结果),然后画出它们之间的逻辑关系。常见的逻辑关系有:
- 恒等:条件成立,结果就成立
- 非:条件不成立,结果才成立
- 与:所有条件都成立,结果才成立
- 或:任意一个条件成立,结果就成立
我习惯用因果图来梳理业务规则。比如一个优惠券系统:
- 因1:用户是新用户
- 因2:订单金额超过100元
- 因3:使用优惠码
- 果:享受8折优惠
规则是:新用户且订单超100元,或者使用优惠码,才能享受8折。你看,这就是一个典型的“与或”组合。
下面是我画的一个简单因果图,帮你理解这个逻辑:
画完因果图,下一步就是把它转成判定表。判定表能帮你穷举所有条件组合,确保不遗漏。
我的习惯:因果图适合“脑暴”阶段,画在纸上或者白板上。真正写用例时,我直接用判定表,因为更直观,也方便转成自动化脚本。
四、正交实验法:用最少的用例覆盖最多的组合
因果图法有个问题——条件一多,组合数就爆炸了。比如有6个条件,每个条件2种取值,那就是2^6=64种组合。真要全测,时间成本扛不住。
正交实验法就是来解决这个问题的。它用一套数学方法,从所有组合中挑出“最有代表性”的几个组合来测。说白了,就是用最少的用例,覆盖最多的“两两组合”。
为什么是两两组合?因为经验表明,绝大多数Bug都是由两个条件的交互引发的,三个及以上条件同时出问题的概率极低。
举个例子,一个搜索功能有3个条件:
- 搜索类型:精确、模糊
- 排序方式:按时间、按热度
- 结果数量:10条、20条
全组合是2×2×2=8种。用正交表L4(2^3),只需要测4种:
| 用例 | 搜索类型 | 排序方式 | 结果数量 |
|---|---|---|---|
| 1 | 精确 | 按时间 | 10条 |
| 2 | 精确 | 按热度 | 20条 |
| 3 | 模糊 | 按时间 | 20条 |
| 4 | 模糊 | 按热度 | 10条 |
你看,4个用例就覆盖了所有“两两组合”。比如“精确+按时间”在第1条,“精确+10条”也在第1条,“按时间+10条”在第1条……每个条件对都出现了至少一次。
实用建议:
- 条件少于5个时,我倾向于用因果图+判定表,全量覆盖
- 条件超过5个时,正交实验法更划算
- 网上有现成的正交表工具,比如Allpairs,直接生成,不用自己算
五、四种方法怎么选?
你可能会问,这么多方法,到底用哪个?我个人的经验是:
- 单个输入:等价类 + 边界值,搞定
- 多个条件,逻辑简单:因果图 + 判定表
- 多个条件,组合爆炸:正交实验法
- 实际项目中:往往是混合使用。比如先等价类划掉大部分数据,再用边界值补边界,最后用正交法处理多条件组合
说实话,这些方法不是死规矩。你用得多了,自然就形成自己的套路了。我现在的习惯是,拿到一个需求,先画因果图理逻辑,再用等价类和边界值定数据,最后用正交表查漏补缺。一套下来,心里就有底了。
最后提醒一句:方法再好,也别忘了结合业务。我曾经见过有人把正交表用得飞起,结果漏了一个“金额为0”的边界值,上线就出事故。嗯,工具是死的,人是活的,业务理解永远比方法重要。
好了,这四种方法就聊到这儿。下一节咱们会把这些方法用到实际的接口测试中,看看怎么设计出高质量的自动化用例。