软件测试——测试用例设计&测试分类详解

1. 测试用例的基本要素

在学习测试用例的基本要素之前,我们先回顾一下前面的一些知识:

  • 什么是测试用例?
    向被测试系统发起的一组集合,包含,测试环境,测试步骤,测试数据,预期结果

  • 为什么测试人员为何要写测试用例?(带给我们的好处)
    1.测试用例是测试执行的依据 2. 测试用例可以复用,在进行回归测试的时候不用重新编写 3.测试用例可以衡量需求的覆盖率! 4.后人可以借鉴 5.手工测试用例是自动化测试的依据!

2. 测试用例的设计方法

2.1 基于需求设计测试用例

需要做到以下几点

  • 分析需求,验证需求的正确性和合理性,逻辑自洽,无二义性
  • 细化需求,提取出测试项,从每一个测试项目中提取出测试点,根据测试点去具体设计测试用例

在分析测试需求时,一般分为功能性测试需求非功能性测试需求

2.11 功能性需求测试分析

功能性需求包括以下几个方面:

  1. 界面功能的全面性测试(界面从上到下,从做到右)
  2. 按照业务的场景把一个个独立的功能串起来进行测试,比如:淘宝APP中的购物场景,我们需要先 搜索商品——加入购物车——结算——付钱,这一系列就是把相关的功能串起来进行测试。注意:我们不能光关注某一个孤立的功能
  3. 同一个功能不同的输入数据进行测试: 例如,QQ登录系统测试用例,输入不同的账号和密码,对应不同的结果,登录方式…
  4. 功能之间的交互性和一致性,不能有冲突: 同一个系统不同角色之间的交互。拿淘宝举例,同一系统(淘宝),不同角色(买家和卖家)
  5. 同一功能的异常数据,错误操作测试:如:输入账号为空,输入错误的手机号…
  6. 功能相关的算法的验证(白盒测试:需要看代码,对代码进行直接测试)

举个例子:我们要如何去分析这个日历页面,才能做到毫无保留把相关功能分析完

页面分析:从上到下,从左到右,依次去分析每个测试点

在这里插入图片描述

2.12 非功能性需求测试分析

非功能性需求包括以下几个方面

非功能测试就是测试在软件本身有的功能上做的一些限制

具体有:可靠性测试,容错性测试,性能,安全测试,易用性测试,兼容性测试,可移植性测试

不同的应用软件对于以上非功能的要求不太一样

在这里插入图片描述

2.2 具体的设计测试用例的方法

等价类(非常重要)

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

等价类为了解决测试:无法穷举的情况

应用场景:

在这里插入图片描述
等价类可以划分为:1.有效等价类 2.无效等价类

  1. 有效等价类:符合需求数据规格说明的数据集合
  2. 无效等价类:不符合需求规格说明的数据集合

举个例子便于理解:
在这里插入图片描述

边界值

针对输入和输出的边界进行测试用例设计,边界值要取边界上的值,和边界左右两边的值:6~15位,边界值:5 6 15 16

tips:等价类和边界值结合在一起进行测试用例的设计

错误猜测法

根据软件测试人员的经验,知识的积累,直觉,对自己认为有错误的模块进行专门的测试用例的设计,类似于探索性测试,适用于用例设计后,作为补充,加强去设计测试用例

错误猜测法更依赖个人(知识,经验,直觉),它适合于测试用例都设计完了,作为一种补充的设计用例的方法

场景法

很多软件不同的场景,是基于不同的事件的触发,不同事件的触发,导致场景走向不同的事件流。把不同的功能点串起来形成一个场景。不同的功能点又有不同的输出,不同的输出导致不同的测试场景。

幻想ATM取款机场景(如何测试):插卡——输入密码——输入取款钱数——取卡——退卡

在这里插入图片描述

补充tips:事务:事务是一系列密切相关的操作集合,如果所有操作成功,我们就说这个事务成功了,如果其中一个操作失败,我们就说这个事务执行失败
这里的取款过程———事务

因果图法

常考!

因果图是一种逻辑图恒等,与,或,非,用因果图来设计用例,叫做因果图法。
使用场景:当我们有很多输入,不同的输入或者不同的输入组合针对不同的输出,这个时候我们可以用因果图法来进行测试用例的设计

1)恒等
在这里插入图片描述

2)与 (^):多个不同的输入同时为真,输出才为真
在这里插入图片描述
拿结婚来举例:以后结婚,对于男生来说:有车有房才能结婚
在这里插入图片描述

3)或 (v):多个输入中其中一个为真,输出为真
在这里插入图片描述

4) 非:输入为真,输出为假

在这里插入图片描述

5)因果图法设计测试用例的步骤

  1. 分析出所有的输入和输出
  2. 找出输入和输出之间的组合关系
  3. 根据关系面画出因果图
  4. 根据因果图画出判定表
  5. 根据判定表写出测试用例

通过一个小练习来更好的理解因果图法:

在这里插入图片描述
判定表和测试用例:
在这里插入图片描述

正交法

根据正交性来设计测试用例,从大量试验数据中根据正交原则取出最优的数据的组合,根据最优数据组合试验的结果,来分析整个测试的结果


3. 测试分类

3.1 按照测试对象划分

分为以下几个部分

1)界面

用户是通过界面和软件之间进行交互的,界面设计的好坏,直接影响了用户对软件的印象

  1. 界面测试 测试 软件界面功能是否完整性,准确,是否和UI设计稿一致
  2. 测试 软件的排版布局是否合理(图片,文字)
  3. 测试 界面的自适应性,界面适应不同的页面大小(文字没有重叠,消失,功能都在,可以正常使用,图片清晰排版合理),界面从小到大的变化过程中,功能完整,文字完整,图片完整,不出现叠加,消失,功能无法使用的情况
  4. 测试 界面的控件功能正常,对话框滚动条,按钮的有效状态和失效状态时可以区分(有效高亮,失效置灰不能点击)
  5. 测试 界面设计(颜色,布局)考虑当下时事(比如过年,界面喜庆等)

界面常见的错误

  1. 不合适的快捷键在这里插入图片描述
  2. 文字的丢失
    在这里插入图片描述
  3. 截断

在这里插入图片描述
4. 文字没有对齐
在这里插入图片描述

5. 文字自动换行在这里插入图片描述
6. 文字的重叠在这里插入图片描述
7. 不合适的快捷键(重复的快捷键)在这里插入图片描述


2)可靠性

可靠性指软件正常运行的能力,软件正常运行的时间和总体运行的时间百分比。可靠性= 软件 正常运行的时间 /(非正常运行的时间+正常运行的时间)

影响软件可靠性的因素:网络,软件环境(安装),硬件环境,无论是那个环境,环境的异常都会使得软件运行异常

注意:

不同的软件对可靠性要求不一样,非实时性软件可靠性一般为 99.99% ,特殊的软件对可靠性要求高,99.999% (军事系统)

###000 如何去测试软件的可靠性
如一个周,出现故障的时间记下来,利用公式去计算百分比(可靠性 = 软件正常运行的时间 / 非正常运行时间 + 正常运行时间

3) 容错性

概念:系统发生异常,或者由于错误操作导致软件系统发生错误,软件自我消化掉错误,或者进行修改,不让客户感知,叫做容错性

1.常见的容错性处理:

  • 数据容错性:取款机输入小于100的钱数,时间,25时72分,年月日,二月份30天 其他月份32天
  • 效验容错性:前后空格(自动化过滤);校验忽略大小写字母(验证码,自动转化大小写);同一个表格或者文件前后信息的效验(身份证,学号,自动前后效验)
  • 界面容错性:复杂操作的提升;危险操作的警告提示;危险按钮的屏蔽
  • 环境容错性: 软件错在环境发生故障,软件有备用方案,可以让用户无感知切换,(网络,电,硬件环境,软件部署和软件环境),PlanB(B计划)

2.灾难恢复性测试:

  • 人为让系统发生故障,看系统自身,对于用户数据和回复是否快速

4) 文档测试

软件开发的相关文档的测试

文档测试的关注点:文档的术语是否专业,完整性,一致性,正确性,易用性(容易看懂)

5) 兼容性测试

  1. 软件自身版本的兼容性:软件向前向后的兼容性,软件开发的新功能不能影响旧功能的使用不能影响后续功能的开发
  2. 软件对于数据的兼容性(特别是用户数据):设计功能的时候,要考虑用户已有的数据
  3. 软件对应用平台的兼容性(安装的软件环境,硬件环境,APP,浏览器):
    • APP : IOS Android 不同品牌的手机 不同型号
    • web : 不同浏览器,不同浏览器在不同电脑设备上
  4. 软件对于第三方软件或者第三方数据的兼容性(相关软件):比如 淘宝和支付宝互相兼容

6) 易用性测试

易用性测试又可以称为用户体验测试

简单理解为 设计的软件 比较容易使用,易用性,从以下几点测试

  1. 用户体验测试:

    • 安装软件的界面:
    • 标识:在这里插入图片描述
  2. 直观性:用户期望的操作存在用户课件范围之内

  3. 灵活性: 比如 键盘,有九宫格,全键盘,手写,拼音,对于不同习惯的人,要设计不同的 输入方式

  4. 舒适性:比如下载个东西,你给个进度条,让用户知道还需要多久才能下载好,不然你下载个东西,用户一点感知都没有,岂不淡疼?

  5. 实用性:

7) 安装卸载

  1. 不同的安装卸载途径(安装方式),安装卸载软件正常:安装径一般在:APPstore 安装包 第三方(蒲公英,软件小助手) 命令行
  2. 安装或者卸载过程中是否能暂停或取消,暂停后继续还是否可以正常安装和卸载
  3. 安装过程中空间不足,有提示
  4. 正常卸载软件,如果卸载取消了,不影响软件正常使用
  5. 安装过程中出现异常,软件可以正常处理(断电,网络连接异常等)

8) 安全测试

安全性指信息安全,软件用户的数据,隐私,以及数据传输过程中的安全性,防止病毒侵入和黑客攻击

安全性测试属于非功能性测试很重要的一个方面,系统常见的安全漏洞和威胁如下:

  • 输入域:能够检测带病毒的字符串或者文件
  • 防止输入注入:XSS/SQL 注入
  • 权限分配要合理
  • 传输文件/数据,防止拦截
  • 防止爬虫,爬取信息
  • 防止黑客攻击

9) 性能测试

我们在使用软件的时候有时会碰到软件网页打开时越来越慢,查询数据时很长时间才显示列表,软件运行越来越慢等问题,这些问题都是系统的性能问题引起的

要进行软件产品的性能问题,要对产品的性能需求进行分析,然后基于系统的性能需求和系统架构,完成性能测试的设计和执行,最后要进行持续的性能调优。常见的性能问题如下:

  • 资源泄露
  • 资源瓶颈
  • 线程死锁,线程阻塞
  • 查询速度慢或效率低
  • 受外部影响越来越大

衡量一个系统性能好坏的关键性指标有,用户响时间,事务平均响应时间(TPS),吞吐率,每秒点击次数,内存和CPU使用率等

10) 内存泄漏测试

内存泄露产生的原因:

  • 程序中写的有问题,没法回收内存
  • API函数使用不正确,无法回收内存
  • 对分配的内存没有及时回收,造成内存泄漏

检查代码是否资源泄露:人工检查,工具检查


3.2 按是否查看代码划分

在软件测试岗位的面试中,常常被面试官问到的概念就是黑盒和白盒的测试了,下面就来彻底讨论一下。

什么是黑盒测试

不去关心代码内部的逻辑结构,不去查看代码,只关心软件功能的外部的输入和输出是否满足用户的需求,相当于把软件的内部实现屏蔽了

优点:

  • 不用去关心软件内部的实现,不用去看代码
  • 站在用户的角度去设计测试用例(用户不关系代码,只关心功能,是否满足自己的需求),容易培养产品思维
  • 设计测试用例是根据软件需求来设计的不容易遗漏需求

黑盒测试的方法

等价类,边界值,场景法,因果图,错误猜测法,正交法

什么是白盒测试

分析代码的逻辑结构,查看代码是否规范,代码的风格是否和公司的设计一致,对代码进行测试,看代码是否实现了需求。

单元测试(可以做)——>白盒测试

白盒测试的测试方法

主要包含六中测试方法:

语句覆盖,逻辑覆盖,逻辑覆盖,判定覆盖,条件覆盖,判定组合覆盖,判定和条件覆盖,条件和条件组合

补充:等价类和边界值 有时也会用在 白盒测试

如下图: a > 1 adn b = 0
在这里插入图片描述

在这里插入图片描述

什么是灰盒测试

灰盒测试介于白盒和黑盒之间,既关心程序的输入和输出,也关心程序内部的实现

3.3 按照开发阶段划分

在这里插入图片描述
特点:

  • 越往底层走,测试效率越高
  • 越往底层走,定位问题越容易
  • 越往底层走,测试独立性越高,耦合性变低

分为4个阶段:

1.单元测试阶段:指的是对软件组成的一个小的单元进行测试查看测试单元的功能是否正常

  • 测试阶段分为:测试前(TDD–》test Driven - Development),测试后
  • 测试方法:白盒测试
  • 测试人员:白盒测试工程师,开发人员
  • 测试依据详细设计文档
  • 测试内容:接口测试,局部数据结构测试路径测试,边界测试

在这里插入图片描述

2.集成测试阶段:按照一定的逻辑和策略把单元模块组合在一起,形成一个具有完全功能的大模板。

  • 测试阶段:单元测试
  • 测试方法:灰盒测试
  • 测试对象:黑盒测试工程师/白盒测试工程师
  • 测试依据:概要设计文档
  • 测试内容:模块功能的正确性,组成模块的单元之间的接口测试,全局数据结构测试,单个模块的功能缺陷对整个模块的影响

3.系统测试阶段:对软件系统进行全面的功能和非功能测试

  • 测试阶段:集成测试以后
  • 测试对象:整个软件系统
  • 测试方法:黑盒测试
  • 测试人员:黑盒测试工程师
  • 测试依据:需求设计文档
  • 测试内容:系统的功能,界面,可靠性,容错性,易用性,可移植性,兼容性,安全性,性能,安装卸载(新软件)
  • 回归测试:当系统引入新代码的时候,测试人员往往需要验证新的代码对旧功能参数的影响,所做的测试叫做回归测试(增加新功能的时候和修改BUG的时候,会进行回归测试)
  • 冒烟测试:在软件开发完成后,要对软件的基础功能和核心流程进行测试,测试通过后,才可以进入正式测试环境,如果测试不通过,测试人员有权利打回,让开发重新修改直到冒烟成功(冒烟测试由测试/开发人员进行测试)

4.验收测试阶段:软件上线前最后一次测试,也称为交付测试

  • 测试阶段:系统测试之后
  • 测试对象:整个软件系统
  • 测试依据:用户需求
  • 测试人员:用户
  • 测试方法:黑盒测试
  • 测试内容:同系统测试(文档测试)

3.4 按照实施组织划分

1.α测试:在β测试之前进行的,把用户或者非测试和开发的人请到开发现场进行测试

  • 测试环境:开发现场
  • 测试人员:非开发和测试的人
  • 优缺点:优点:有问题可以直接反馈给开发人员 缺点:受制于开发人员

2.β测试:让实际用户在实际使用环境中进行测试,测试完成后对问题进行统一汇总反馈

α和β测试的区别:

  1. 测试环境不同
  2. 测试时间集中成都不同
  3. α测试优先于β测试

3.第三方测试:是软件的第三方测评机构,按照软件行业的标准规范对软件进行测试(了解即可)
4.按照代码是否运行

  • 静态测试:不运行代码,通过检查代码的风格,格式是否符合公司的规范标准,检查代码的逻辑结构是否满足需求要实现的功能
  • 动态测试:运行代码,给程序响应的输入,看是否得到期望的输出

3.5 按照是否手工划分

1.手工测试:按照测试用例,公共去测试系统的功能
缺点:量大容易出错;效率低:有些极端情况无法测试到
优点:进行探索性测试,比较灵活
2.自动化测试:机器按照认为设定好的预设条件运行,这些预设包括正常的异常的,去检查软件系统有没有符合设定的条件(自动化测试用例把手工测试用例转化成脚本运行的)

3.6 按照地域划分

补充:

软件国际化:进行软件设计和开发的时候,使用一种工程技术,使得软件在转化为不同的国家语言的时候,可以不用修改源码,适应不同的语言,不同国家人民的风俗习惯等

  • 软件国际化测试:

    • 外观上看界面功能没有缺失,正常使用
    • 是否适应这国家人的使用习惯,文字,日期,风俗习惯,度量单位,货币,重量单位
    • 不同分辨率下,软件的正常展示和使用
    • 不同硬件设备
  • 软件本地化:具体到某一个国家


猜你喜欢

转载自blog.csdn.net/Biteht/article/details/125283840