【软件测试】测试用例的设计方法

简介: 测试用例写的过于简单,则可能失去了测试用例的意义,设计过于简单的测试用例其实并没有真正的进行设计,只是把需要测试的功能模块记录下来而已,它的作用仅仅是在测试过程中作为一个简单的测试计划,提醒测试人员测试的主要功能包括哪些而已,测试用例设计的本质应该是在设计的过程中理解需求,检验需求,并把对软件系统的测试方法的思路记录下来,以便指导将来的测试

1. 测试用例的概念

测试用例就是测试人员向被测试系统发起的一组集合,该集合包括测试环境,测试数据,测试步骤,预期结果


2. 设计测试用例的好处

在测试前都要先设计测试用例,设计测试用例有如下好处:


测试用例是测试人员执行测试的依据

在做回归测试的时候,测试用例可以复用

测试用例可以衡量需求的覆盖率

测试用例是自动化测试的依据

测试用例具有借鉴意义,后续测试人员可以借鉴前人写的测试用例

测试用例的编写往往是根需求编写的,那么如何根据需求来编写测试用例?


3. 基于需求设计测试用例

在基于需求设计测试用例之前,测试人员要进行如下操作:


测试人员首先要分析需求,验证需求的合理性,正确性,无二义性,并且逻辑自洽

其次再是细化需求,从需求中提取出测试点,根据测试点设计测试用例

在测试人员分析需求时往往分析功能性需求和非功能性需求


3.1 功能性需求

功能性需求是为了满足软件的基本功能,往往从以下几个方面进行分析考虑


从界面考虑,验证界面功能

比如QQ登陆页面,有许多的按钮对应不同的功能


从业务角度考虑,把功能串起来进行测试

比如增加一条用户信息,然后是查询,修改或者删除


验证功能之间的交互性,一致性

比如微信发朋友圈,你发送的内容要和微信好友在朋友圈看到的一致


一个功能的多个输入

比如登陆功能,要使用不同的账号和密码进行登陆测试


功能的异常测试

功能的易用性,体验性的测试

主要是验证用户在使用上是否符合用户使用习惯,使用起来是否舒适等


功能涉及的算法

比如滴滴打车,一个顾客叫了一个车,系统要根据某些算法算出距该顾客最近的车


3.2 非功能性需求

非功能需求是在功能性需求的基础上做一些限制,满足特定场景的需求,让用户有更好的体验,比如软件的兼容性,性能,安全性,可靠性,可移植性,易用性等


不同的软件对于非功能性的需求往往是不同的,如:


客户端的软件:像word,ppt,xmind,播放器对功能和要求很简单,对性能,安全性要求比较低,对软件的可移植性要求比较高,因为这些不需要联网就可以使用

企业软件:比如聊天软件,像飞Q,飞书,钉钉,对功能有一定要求,对兼容性,安全性,性能要求低,因为企业软件用的用户比较少

商业软件:像QQ,微信等,对功能,性能,安全性,可移植性,易用性要求都很高,因为商业软件使用的用户基数大


4. 设计测试用例的具体方法

设计测试用例的常用方法有:等价类,边界值,错误猜测法,场景设计法,因果图,正交法,下面就对这几种常用设计测试用例的常用方法展开具体的介绍


4.1 等价类

根据输入(特殊情况下考虑输出),把输入划分成若干个等价类,从每一个等价类当中取一个测试用例进行测试,如果这个测试用例通过,我们就说这个测试用例代表的等价类测试通过


等价类可以解决测试用例无法穷举的情况


等价类有有效等价类和无效等价类


有效等价类:符合需求规格说明书的数据

无效等价类:不符合需求规格说明书的数据

注意:测试的时候有效等价类和无效等价类都得测试


示例:注册网易邮箱时,针对账号和密码设计测试用例

image.png


4.2 边界值

对输入和输出的边界针对性的进行测试用例的设计,叫作边界值法


示例:上面的网易注册账号和密码的测试用例


账号要求6~ 18个字符,密码要求8~16个字符,所以在设计账号的测试用例时,可以采用边界值设计账号长度的测试用例为5,7,17,19个字符,设计密码长度的测试用例为7,9,15,17个字符


注意:边界值往往和等价类结合在一起使用


4.3 错误猜测法

测试人员根据自己的经验,知识,个人直觉判断软件哪一部分会出现问题,针对性的设计测试用例


错误猜测法适用于补充测试用例,或者进行探索性测试的时候


示例:在数据库查询关于张三的信息,使用“张三”查询到相关信息,使用“ 张 三 ”就查询不到任何信息


有经验的测试人员可能能猜到开发人员在做查询的时候,把空格也当作有效字符,而实际要把空格去掉再去匹配


示例:在数据库查询500条信息,每条信息都不重复,500条分5页展示,每页展示100条,但是在翻看的时候发现每页都有与前面页相同的信息


有经验的测试人员可能猜测是开发人员在做查询的时候没有对数据进行排序,排序后,就不会出现类似问题了


4.4 场景设计法

把一个个孤立的功能串起来形成一个场景,每一个功能不同的输入会触发流程走向不同的场景,根据这些不同功能的不同输入触发形成的不同场景进行测试用例的设计


示例:ATM机取款流程


ATM机取款流程:插卡——输入密码——输入取款金额——退卡

image.png


ATM机取款流程的测试用例举例:


卡插反:提示无法识别,重新正确插入,操作正常的情况下可以取款成功

卡消磁:提示无效卡,无法取款

卡锁定:提示用户被锁定,请解锁后重新操作

密码输入为空:提示请输入正确密码,输入正确密码取款成功

4.5 因果图法

因果图是一种简化了的逻辑图,能直观地表明程序输入条件(原因)和输出动作(结果)之间的相互关系,因果图法是借助图形来设计测试用例的一种系统方法,


使用场景:当输入有多个,并且不同的输入组合对应着不同的输出,这个时候我们可以用因果图来进行测试用例的分析,根据分析的结果来设计测试用例


因果图的几种关系


恒等:输入为真,输出为真

image.png

与:当输入条件有多个,多个条件都为真的时候,输出为真

image.png

或:当输入条件有多个,有一个条件为真,输出为真

image.png

非:输入为真,输出为假;输入为假,输出为真

image.png


如何使用因果图法来设计测试用例?


分析所有的输入和输出

找出输入和输出之间的逻辑关系

根据输入和输出画出因果图

根据因果图画出判定表

根据判定表去设计测试用例

示例:淘宝618活动,订单已提交,并且购物金额大于300或者有红包,则有优惠,否则无优惠


分析所有的输入和输出

输入:订单已提交,购物金额大于300,有红包

输出:有优惠,没优惠


找出输入和输出之间的逻辑关系

订单已提交,购物金额大于300,有红包,有优惠

订单已提交,购物金额小于300,有红包,有优惠

订单已提交,购物金额大于300,没红包,有优惠

订单已提交,购物金额小于300,没红包,没优惠

订单未提交,没优惠


根据输入输出之间的逻辑关系,画出因果图

根据因果图,画出判定表


根据判定表,写测试用例

订单已提交,金额大于300,有红包,有优惠

订单已提交,金额大于300,没红包,有优惠

订单已提交,金额小于300,有红包,有优惠

订单已提交,金额小于300,没红包,没优惠

订单没提交,金额大于300,有红包,没优惠

订单没提交,金额大于300,没红包,没优惠

订单没提交,金额小于300,有红包,没优惠

订单没提交,金额小于300,没红包,没优惠


4.6 正交法

根据正交法从大量的测试数据中,选取出最优的数据组合,根据最优的数据组合的结果来衡量整个测试的输出结果


正交法的目的是为了减少测试用例的数目


5. 测试用例的粒度

测试用例的粒度指测试用例编写的详细程度


测试用例不能写的过于复杂和过于简单


过于复杂:

测试用例写得过于复杂或详细,会带来两个问题,一个是效率问题,另一个是维护成本问题,还有如果测试用例设计得过于详细,留给测试执行人员的思考空间就比较少,容易限制测试人员的思维


过于简单:

测试用例写的过于简单,则可能失去了测试用例的意义,设计过于简单的测试用例其实并没有真正的进行设计,只是把需要测试的功能模块记录下来而已,它的作用仅仅是在测试过程中作为一个简单的测试计划,提醒测试人员测试的主要功能包括哪些而已,测试用例设计的本质应该是在设计的过程中理解需求,检验需求,并把对软件系统的测试方法的思路记录下来,以便指导将来的测试


测试用例的粒度应该介于两者之间,具体设计应该根据项目的实际情况,测试资源的情况来决定应该设计出何等粒度的测试用例


相关文章
|
8天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
24天前
|
测试技术 API 项目管理
API测试方法
【10月更文挑战第18天】API测试方法
41 1
|
23天前
|
测试技术 UED
软件测试中的“灰盒”方法:一种平衡透明度与效率的策略
在软件开发的复杂世界中,确保产品质量和用户体验至关重要。本文将探讨一种被称为“灰盒测试”的方法,它结合了白盒和黑盒测试的优点,旨在提高测试效率同时保持一定程度的透明度。我们将通过具体案例分析,展示灰盒测试如何在实际工作中发挥作用,并讨论其对现代软件开发流程的影响。
|
12天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
10天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试策略
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和效率的关键工具。本文将探讨自动化测试的重要性、实施策略以及面临的挑战,旨在为软件开发团队提供实用的指导和建议。
|
14天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
27 2
|
19天前
|
测试技术
探索软件测试中的“思维侧翼”——如何以创新思维引领测试策略###
本文旨在探讨软件测试领域中,如何通过培养与运用创新思维,提升测试策略的有效性与效率。不同于传统的技术解析或理论阐述,本文将以“思维侧翼”为喻,启发读者从不同维度审视软件测试,寻找突破常规的思路与方法。我们相信,在快速迭代的软件开发周期中,灵活多变且富有创造力的测试思维,是发现潜在缺陷、保障产品质量的关键。 ###
|
20天前
|
测试技术 定位技术 UED
软件测试的艺术:探索性测试的深度与广度
【10月更文挑战第22天】在软件开发的广阔舞台上,测试扮演着不可或缺的角色。本文将带领读者深入理解探索性测试(Exploratory Testing)的精髓,揭示其在现代软件质量保证中的价值。我们将通过实际案例、生动比喻和具体步骤,展现如何像艺术家一样进行软件测试,确保产品质量的同时,提升测试的效率和乐趣。文章不仅适合初学者建立测试基础,也能帮助资深测试人员深化对探索性测试的理解和应用。
|
18天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
10天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。