# 测试用例设计怎么做?怎么设计一个好的测试用例?
**一、测试用例的定义**
测试用例(Test Case),是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
**二、为什么要写测试用例**
1、 理清测试思路
有的系统本来就是一个大而复杂的项目,因此需要把项目功能细分,根据每一个功能通过编写用例的方式来整理测试系统的思路,避免遗漏掉要测试的功能点。
2、 明确测试任务
编写完用例后,可以明确自己需要执行的用例总数,以便预估测试工作量。并且可以很清楚的知道实际测试执行的进度,还很容易统计和跟踪我们的剩余工作量和回归工作量。
3、 规范测试行为
每个人对于功能和开发原理的理解都是不同的,同一条案例,每个人的理解程度和扩展都是不一样的。对于没有测试经验的新人来讲,更是需要详细明确的用例来规范,以减少遗漏。
**三、如何编写用例**
1、 测试用例的来源
a) 分析需求文档
需求文档是编写测试用例的第一依据,需求分析的目的一般是:
l 了解需求的背景;
l 分析需求的合理性;
l 明确需求的范围;
l 挖掘隐含需求;
b) 了解开发原理
l 确定开发的实现框架;
l 明确输入输出代码规则;
l 减少测试方向偏差;
2、 测试用例的要素
a) 测试环境
测试的系统是什么?硬件软件的要求是什么?
b) 测试数据
测试执行的输入值
c) 测试步骤
提供测试执行过程的步骤。一般控制在三个步骤完成。否则需要考虑用例是否需要拆分,因为每条用例对应的测试目的应该是具有唯一性的。
d) 预期结果
预期结果根据软件需求中的输出得出。那么实际测试过程中,实际测试结果如果与预期结果不符,则就测试不通过;反之则测试通过。
e) 用例标题
用例标题是对测试用例主旨的描述,既要言简意赅,也要能够清楚表达测试用例的目的
f) 用例编号
定义测试用例编号,用来标示每个用例的唯一性,进行测试用例的跟踪和维护。
g) 用例级别
一般分为四个等级,P0、P1、P2、P3。
![](http://qa.tedu.cn/upload/20171011/20171011154902_548.png)
3、 用例设计方法
结合一个需求来讲讲不同方法的应用:
a) 等价类划分
将输入值分为有效等价类和无效等价类。如果输入规定了输入区间,可划分出一个有效等价类,两个无效等价类;
b) 边界值
任何测试场景下都可以使用边界值法做设计,输入类型可以数值、字符等,要测试的边界包括上点、下点、离点。
c) 错误推测法
错误推测法,即猜测可能和常出现的错误,来提前制定用例,规避风险。错误推测法很受设计人员的测试经验影响,测试经验不同,设计出来的测试用例区别会很大。
d) 因果图法
罗列出所有的输入和输出,将输入和输出整理出因果图和依赖关系,根据每一个依赖做设计。因果图方法考虑输入的组合,特别适用于多个输入条件相关有关联又相互约束的情况。
e) 判定表驱动法
判定表适合于解决多个逻辑条件的组合,将各种逻辑的组合罗列出来,避免遗漏。列出每个对应条件所有可能情况下的取值,不需要考虑条件和顺序,再列出结果动作项,对每个条件进行结果判定。最后可以适当的进行规则简化和合并。
f) 正交法
当输入条件很多时,因果图等设计方法设计出来的用例数往往多的惊人,用正交法可有效减少用例数。正交法的核心思想是从大量测试数据中选取有代表性的点来测试,从而减少测试用例数。
> 在实际的软件项目测试中,有时候会遇到输入条件很多,且每个条件的取值也较多的情况,这时如果用因果图或者判定表将所有可能的情况都列出来的话将会很麻烦,甚至不可能完成,时间上往往也不允许。比如某输入入口有4个条件,每个条件有3个不同取值,则完整的用例组合就多达81种(3\*3\*3\*3),这时我们就可以考虑通过正交试验法从这81种情况中科学合理的选取一少部分作为测试用例
正交试验设计介绍
正交试验设计是研究多因素多水平的一种设计方法。它基于Galois理论,根据正交性从全面试验中挑选出部分有代表性的点进行试验。这些有代表性的点具备了“均匀分散,齐整可比”的特点。日本著名统计学家田口玄一将正交试验选择的水平组合列成表格,称为正交表。例如一个4因素3水平的试验,如果按全面试验设计,则有81种组合的试验,但如果按正交表设计试验,则只需要9次试验,在确保足够的有效性、合理性的同时大大降低了试验成本。
一般的正交表可以记为Ln(mk),L表示正交表,n表示正交表的行数,也就是试验的次数;k是表中的列数,也就是因素的个数;m表示各因素的水平数。如L9(34)正交表如下所示。
![](http://mmbiz.qpic.cn/mmbiz/YY9qU8W8U9cM4xnlmHWLpNnC4eaYVkUk7XVULOv7gcBq8N7Q2dIgtP5XfLib1crwDPgkyV28nh06X9PSgfVIicDg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)
正交表的两条重要性质
◆ 每列中不同数字出现的次数是相等的。如上L9(34)表中每一列不同的数字1、2、3各出现3次。
◆ 在任意两列中,将同一行的两个数字看成是有序数对时,每种数对出现的次数是相等的。如上L9(34)表中的有序数对共有9个:(1, 1),(1, 2),(1, 3),(2, 1),(2, 2),(2, 3),(3, 1),(3, 2),(3, 3)。
由于正交表的这两条性质,用它来设计试验时,各因素的各种水平搭配是均衡的,这就是正交表的优点。
举例说明
例如测试某WEB程序兼容性时,需要考虑如下三个因素:
操作系统(Windows XP, Win 7, Win10)
浏览器(IE8, Fire Fox, Chrome)
分辨率(1366x768, 1024x768, 800x600)
由上面的需求可以得知有三个因素,三个水平,如果穷举则有27种情况,我们可以用L9(34)正交表设计测试用例,注意这里只有3个因素,但是L9(34)有4个因素,这不冲突,我们选取上表中的三列即可。代入具体的数据后如下表所示。
![](http://mmbiz.qpic.cn/mmbiz/YY9qU8W8U9cM4xnlmHWLpNnC4eaYVkUkZAdia6icfaE0Nkg70ezZs0EPSGhxP8nND2W7gMupuA2I3PHXh5ZYWOKA/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)
一些常见的正交表可以在网上找到,不需要自己去排列,如L4(23)、L9(34)、L8(27)、L27(313),根据需要选取合适的正交表代入数据就可以了。
g) 场景法
画出程序流程图,再把流程图转换成控制流图,根据控制流图设计出场景,再根据场景设计测试用例。
结合这样一个需求:
![](http://qa.tedu.cn/upload/20171011/20171011154920_675.png)
判定表:
![](http://qa.tedu.cn/upload/20171011/20171011154929_626.png)
**四、如何提升用例编写能力**
1、 从大往小抓起测试框架先行
极力推荐思维导图工具,快速的梳理清晰要测试的模块、测试点、以及结构关系,让自己先对要测试的内容有个整体的框架和印象,脑图也能够快速的让开发、接手的测试同学快速理解和看出大方向上的偏差和遗漏。
另外细节的地方,推荐几个图形工具结合用,比如流程图、鱼骨图和N-S 图,详情见另一篇文章『软件开发流程常用图』
2、 多纬度的思考和覆盖
从界面、功能、性能、兼容、异常等角度思考,尽可能的覆盖更全更广。
3、 熟悉被测的业务和系统
任何系统都有大的业务背景,比如测试金融 APP,要了解金融业务,基金、理财产品的业务流程和逻辑,要了解什么是结算、账户、和支付几个系统的差异以及作用。才能更准确的把握好测试重点写好用例。
任何系统在使用过程中,都有一个熟悉的过程,对系统越熟悉,越容易发现系统的特点,以及容易出现错误和异常的地方。
4、 站在用户角度分析
站在客户的角度分析:客户需要什么,客户想要什么,客户不想要什么,也就是客户的使用场景。这样有利于我们更好的挖掘和思考隐含的需求。甚至可以拉上几个同事来体验下产品,看看他们的操作行为和顺序是怎样的。
5、 重视用例评审
重视测试评审和评审意见,把经常见到的用例设计的误区和一些好的用例设计,还可以多看看他人的测试思路和用例,查漏补缺。