测试理论基础学习

2023-11-02

软件测试概述

一、软件测试的定义

软件测试是为了发现错误而针对某个程序或系统的执行过程,其目的在于检验它是否满足规定的需求。

二、软件测试的原则

1、穷举测试是不可能的
2、测试用例的设计是关键
3、缺陷具有免疫性→测试用例要不断更新
4、对发现错误较多的程序段,应进行更深入的测试

三、测试的生命周期

1、计划:标志测试条件(确定测试什么)和测试的优先级

(1)安排进度
(2)分配资源、人员
(3)确定测试的起始点和结束点

2、设计:设计测试用例(确定怎么测试)

(1)设计测试流程

1)测试过程
2)测试类型

(2)设计测试用例

测试用例由输入数据 和预期结果组成
1)数据
2)文件
3)操作序列
4)预期结果

测试用例的特性:有效性、经济性、可修改性
测试用例的基本要素:

(1)用例编号
(2)用例名称
(3)测试背景
(4)前置条件
(5)优先级
(6)重要级
(7)测试数据
(8)测试步骤
(9)预期结果
(10)实际结果
(11)备注

3、开发:测试开发(设计脚本、数据等)
4、执行:执行测试用例
5、评估:将测试结果与期望结果进行比较

测试结果的评估:
(1)错误数据统计
(2)缺陷报告单:缺陷的编号、被测软件版本、优先级、严重程度、缺陷描述、测试步骤、修复缺陷人员等

软件缺陷的级别:
(1)致命的
(2)严重的
(3)一般的
(4)微小的
(5)建议

四、软件测试的分类

1、方法

(1) 白盒测试
(2)黑盒测试

2、测试阶段或层次

(1)单元测试
(2)集成测试
(3)系统测试
(4)验收测试

3、目标或特性

(1)功能测试
(2)强壮性测试
(3)性能测试
(4)适用性测试
(5)可靠性测试

4、是否执行被测试软件

是:动态测试
否:静态测试

5、执行时是否需要人工干预

手工测试
自动化测试

6、测试实施组织

开发方测试(α测试)
用户测试
第三方测试

7、其他

回归测试
随机测试
变异测试
蜕变测试
组合测试

8、非功能性测试

安装测试
兼容性测试
性能测试
文档和帮助测试
保密性测试
压力测试
故障恢复测试

静态测试

静态测试:通过检查和评审对软件进行测试的方法。
评审的目的:在项目早期发现缺陷;降低项目失败风险;分享知识
评审分类:培训评审;预备评审;同行评审;状态评审

一、同行评审

1、类型

审查
小组评审
走读
桌面评审
临时评审

白盒测试

基本路径测试
基于控制流的测试
针对循环的测试
基于数据流的测试
变异测试

白盒测试又称为结构测试或逻辑驱动测试,是针对被测试程序单元内部如何工作的测试,特点是基于被测试程序的源代码,而不是软件的需求规格说明

一、基本/独立路径测试法

1、流图
流图又称程序图或控制流图,流图只有两种图形符号:结点和控制流线。结点用带标号的圆圈表示,可以代表一个或多个语句、一个处理框或一个判断框。控制流线用带箭头的弧线表示,代表程序中控制流。流图是一个可表示为G=<N,E>的有向图,其中,N表示图中的结点,而E表示图中的有向边
2、圈复杂度
计算公式:
① V(G)=m-n+2 其中:m表示有向图G中有向边的个数;n表示有向图中的结点数
② V(G)=强连通的流图在平面上围成的区域数
③ V(G)=二值判定结点数+1
3、基本(独立)路径法
一条路径是独立路径,那么其应满足:
(1)是一条从入口节点到出口节点的路径;
(2)该路径至少包含一条其它基本路径没有包含的边
圈复杂度 = 独立路径数的上限

二、基于控制流的测试

1、基于控制流的测试充分性准则
2、基于控制流的覆盖准则

语句覆盖
判定覆盖(分支覆盖)
条件覆盖
判定/条件覆盖
修正的判定/条件覆盖
条件组合覆盖
路径覆盖
覆盖率=(被覆盖的测试项数)/被测试项总数

(1)语句覆盖和块覆盖
语句覆盖又称为代码行覆盖,指选择足够多的测试用例,使得程序中的每一条可执行语句至少被执行一次

(2)判定覆盖
判定覆盖又叫分支覆盖,即设计若干测试用例,使得程序中的每个判定表达式每种可能的结果值都应该至少执行一次,也就是说每个判定的“真”值分支和“假”值分支都至少执行一次

(3)条件覆盖
即设计足够多的测试用例,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。也就是说,每个判定中的条件取“真”值和“假”值都需执行一次

(4)判定/条件覆盖
设计足够多的测试用例,使得判定表达式中的每一个条件都取到各种可能的值,同时每个判定表达式也都取到各种可能的结果

(5)条件组合覆盖
设计足够多的测试用例,使得每个判定表达式中的条件的各种组合可能都至少被执行一次

(6)改进的判定/条件覆盖
一个基于改进的条件/判定覆盖概念的充分性准则又> 称为MC/DC覆盖,满足MC/DC覆盖的测试用例要求> 如下:

1)每一个基本块都被覆盖了。
2)每一个简单条件都取过真值和假值。
3)每一个判定都得出过所有可能的输出结果。
4)每一个简单条件对表达式的输出结果的影响是独立的→对n个条件取值的组合,其中只有一个条件(假设名为A)取值不同,其他n-1个条件的取值完全相同,最后表达式的结果一真一假(也就是A的取值独立影响了最终的结果)

(7)路径覆盖
设计足够多的测试用例,使得程序中的所有可能的路径都至少被执行一次
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、关于循环语句的测试

1、基本的循环结构

(1)先判断再循环
(2)先循环再判断

2、循环测试

(1)Z路径覆盖测试

只考虑执行零次循环体和执行一次循环体这两种情况

(2)循环边界条件测试

对循环次数变量进行边界值测试,一般覆盖 7 个边界值点(假设最大循环次数为n):
1)直接跳过循环体
2)只执行一遍循环体
3)执行两遍循环体
4)执行m遍循环体(2<m<n-1)
5)执行n-1遍循环体
6)正好执行n遍循环体
7)超出最大循环次数

3、嵌套循环的测试
① 对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;
② 逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取“典型”值。
③ 反复进行,直到所有各层循环测试完毕。
④ 对全部各层循环同时取最小循环次数,或者同时取最大循环次数。

4、串接循环的测试
① 如果相连接的循环体互相独立,按照简单循环测试每一个循环体;
② 如果相连接的循环体1的循环变量的最终结果是循环体2循环变量的初始值,那么采用嵌套循环的方法来测试(靠前认为是内层循环)

三、数据流测试

1、c-use 和p-use

(1)如果一个变量被用在赋值语句的表达式、输出语句中,或者被当作参数传递给调用函数,或者被用在下标表达式中,都称为该变量的c-use
(2)如果一个变量被用在条件表达式中(比如if和while语句),则称为变量的p-use

2、数据流图
在这里插入图片描述

黑盒测试

一、黑盒测试的基本概念

黑盒测试又称为功能测试或数据驱动测试。此方法不需要了解程序的内部逻辑结构和内部特性,而是注重于程序的外部结构,主要对软件功能要求、软件界面外部数据库访问软件初始化等方面进行测试。测试者只要从程序接口处进行测试,以程序需求说明为测试依据,测试程序是否满足用户的需求,因此是从用户观点出发的测试

二、黑盒测试方法

等价类划分法 ;边界值分析法 ;决策表法 ;因果图法 ;正交测试法

1、等价类划分法

(1)有效等价类
(2)无效等价类

设计测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步直到所有有效等价类均被测试用例所覆盖
设计测试用例,使其只覆盖一个无效等价类,重复这一步,直到所有无效等价类均被覆盖

划分等价类的原则:
(1)按区间划分
(2)按数值划分
(3)按集合划分
(4)按限制条件或者限制规则划分
(5)按处理方式划分

在这里插入图片描述

2、边界值分析法

测试时输入变量取值:
(1)最小值(min)
(2)略高于最小值(min+)
(3)正常值(nom)
(4)略低于最大值(max-)
(5)最大值(max)
n个变量将产生4n+1个测试用例

健壮性测试:边界分析测试的一种扩展
测试时输入变量取值:
(6)比最小值要小(min-)
(1)最小值(min)
(2)略高于最小值(min+)
(3)正常值(nom)
(4)略低于最大值(max-)
(5)最大值(max)
(7)比最大值要大(max+)
n个变量将产生6n+1个测试用例

在这里插入图片描述
在这里插入图片描述

3、决策表法

决策表又称为判定表,是分析和表达多逻辑条件下执行不同操作的情况的工具。能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏,设计出完整的测试用例集合

决策表的组成:
由条件桩、动作桩、条件项和动作项四个部分组成
条件桩:列出了问题得所有条件。
动作桩:列出了问题规定可能采取的操作。
条件项:列出针对它左列条件的取值。
动作项:列出在条件项的各种取值情况下应该采取的动作。
规则:任何一个条件组合的特定取值及其相应要执行的操作。

决策表分类:
有限项(条目)决策表:每个条件只有两个值
扩展项(条目)决策表:条件项的取值有多个

一条规则对应一个测试用例, 条件项构成了测试用例的输入,相应的动作项则是预期结果

决策表中的不相关项:
条件桩中其中一个条件取不同值,其余条件取相同值,此时动作桩中的结果相同,则称为不相关项,可以将这两项进行合并。
不相关项(条件中桩中的那个条件)用“-”表示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、因果图法

因果图,也称作依赖关系模型。主要用于描述软件输入条件(原因)与软件输出结果(结果)之间的依赖关系。

因果图的基本符号和约束:
(1)因果关系符号有:对应关系、否定关系、选择关系和并列关系
(2)约束关系符号有:互斥关系、包含关系、唯一关系、要求关系和屏蔽关系

一半先画出因果图,然后转化为决策表
简单问题直接使用决策表,复杂问题再利用因果图转化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5、正交测试法

正交实验法用在软件测试上,就是从大量的测试数据中挑选适量的,有代表性的进行实际测试,从而合理地安排测试的一种设计方法

正交表的组成因素:
(1)因素 (Factors)。欲考察的变量称为因素(变量)。在软件测试中,是指有多少个输入参数、变量或者配置。
(2)水平 (Levels)。任何单个因素能够取得的值的个数。在软件测试中,是指一个参数、变量或者配置允许取值的个数。
(3)强度(Strength)。变量间的相互关系。当强度为2时,只考虑变量两两之间(前面例子中的2组合测试)的影响,如果强度为3,同考虑3个变量对结果的影响;当强度增加时,用例的个数会急剧增加。
(4)行数(Runs)。实验次数的多少,在测试中就是指多少个用例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、总结

黑盒测试主要检查下面几个方面的内容:

(1)正确性:计算结果,命名方面
(2)可用性:是否可以满足软件的需求说明
(3)边界条件:输入部分的边界值
(4)性能:程序的性能取决于两个因素:运行速度的快慢和需要消耗的系统资源
(5)压力测试
(6)错误恢复:错误处理,页面数据验证,包括突然间断点,输入错误数据等
(7)安全性测试:对系统的安全进入、安全操作及相关权限进行测试。特别是一些商务网站,或者跟钱有关,或者和公司秘密有关的web更是需要这方面的测试
(8)兼容性:不同浏览器,不同应用程序版本在实现功能时的表现

黑盒测试的流程:

1、测试计划
2、测试设计
3、测试开发
4、测试执行
5、测试评估

软件测试过程

在这里插入图片描述

1、单元测试

单元测试的考虑点:

(1)算法和逻辑
(2)模块接口
(3)数据结构
(4)边界条件
(5)独立的路径
(6)错误处理
(7)输入数据
(8)常量或局部变量
(9)标识符定义
(10)程序风格
(11)注释

在这里插入图片描述

驱动模块:驱动模块用来模拟被测单元的上层模块的程序模块
桩模块:桩模块又称为存根模块,它用来模拟被测单元的子模块

模块接口:
(1)对模块自身的接口做正确性检查:确定形式参数个数、数据类型、顺序是否正确;确定返回值类型,检查返回值的正确性。
(2)检查调用其他模块的代码的正确性;调用其他模块时给定的参数类型正确与否、参数个数正确与否、参数顺序正确与否。检查返回值正确与否,有没有误解返回值所表示的意思

2、集成测试

集成测试的必要性
①一个模块可能对另一个模块产生不利的影响
②将子功能合成时不一定产生所期望的主功能
③独立可接受的误差,在多个模块组装后可能会被放大,超过可接受的误差限度
④可能会有单元测试中未发现的接口方面的错误
⑤在单元测试中无法发现时序问题
⑥在单元测试中无法发现资源竞争问题
⑦共享数据或全局数据的问题
⑧数据单位、环境参数不统一的问题

集成测试的方法:
(1)非增式测试(非增量式一次性集成)
(2)增式测试(增量式集成)

实施方法:
1)自顶向下结合
2)自底向上结合

在这里插入图片描述

3、系统测试

系统测试的分类:
(1)功能测试(首要)
(2)性能测试
(3)兼容性测试
(4)安装卸载测试
(5)安全测试
(6)可靠性稳定性测试
……

4、验收测试(交付测试)

验收测试应当由最终用户或者扮演、模拟最终用户来执行测试过程

验收测试的分类
(1)通用软件:α测试(内测) 和 β测试(公测)
(2)专用软件:最终用户正式验收

回归测试

回归测试是指,在对软件代码进行修改之后,重新对其进行测试,以确认修改是正确的,没有引入新的错误,并且不会导致其他未修改的代码产生错误

回归测试的两种情况:
(1)纠正型回归测试
(2)增量型回归测试

回归测试需要测试的对象不仅仅是软件中发生了修改的部分,还需要对整个软件重新进行测试

自动化测试

分类:
(1)根据测试方法不同:白盒测试工具、黑盒测试工具
(2)根据测试的对象和类型不同:单元测试工具、功能测试工具、负载测试工具、性能测试工具、Web测试工具、数据库测试工具、回归测试工具、嵌入式测试工具、页面链接测试工具、测试设计与开发工具、测试执行和评估工具、测试管理工具

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试理论基础学习 的相关文章

  • Python之Numpy学习(4)

    使用数组进行文件输入和输出 主要介绍三个文件文件操作函数 numpy save numpy savez 和numpy save numpy save file arr 存储的文件是以 npy为后缀 通过notepad无法打开 与该函数对应的
  • Ansible自动化运维工具之playbook剧本编写含lnmp

    1 playbook的相关知识 1 1 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式 其功能更强大灵活 简单来说 playbook是一个非常简单的配置管理和多主机部署系统 不同于任何已经存在
  • GAN与CycleGAN的结构解析

    原文链接 当下神经网络三大主流子领域 CNN RNN和GAN 今天咱们主要分享一下生成对抗网络 GAN的一些核心思想 并以CycleGAN为例进行阐述 借自 https github com eriklindernoren Keras GA

随机推荐

  • epoll及总结

    使用方法 基本与poll相同 生成对象改为epoll 将所有事件类型改为EPOLL类型 epll特点 epoll 效率比select poll要高 epoll监控数量比select 要多 epoll的触发方式比pollduo EPOLLET
  • RK3288:LINUX 系统编译报“recipe for target '_all' failed” 处理办法

    make Entering directory home xuzui 3288 linux buildroot GEN home xuzui 3288 linux buildroot output rockchip rk3288 Makef
  • 深入探索前端之道:JavaScript深拷贝与浅拷贝的解析与实现

    引言 前端开发中 数据的复制是一个常见的操作 尤其是在处理对象和数组时 我们需要考虑的是一个浅拷贝还是深拷贝 那么 什么是深拷贝和浅拷贝 它们在前端开发中有什么作用 如何实现这两种拷贝 这是我们在本文将讨论的问题 浅拷贝 浅拷贝是一种数据复
  • shiro和thymealeaf整合

    shiro和thymealeaf整合 一 加入依赖
  • 服务器Raid5磁盘阵列数据恢复步骤和数据恢复方法

    磁盘阵列数据恢复故障描述 客户的一台HP DL380 G4服务器 服务器使用hp smart array控制器挂载了一台国产磁盘阵列 磁盘阵列由14块146G SCSI硬盘组成一组RAID5 操作系统为LINUX 构建了NFS FTP 作为
  • Android DataBing详解

    转载于http blog csdn net qdjdeveloper article details 62236309 前几天小试牛刀写了一篇 Android DataBinding 初探 只是简单的介绍了一下 DataBinding 的几
  • 解决在谷歌浏览器上倍速播放视频适用B站 慕课MOOC 百度网盘(弃用) 谷歌内置播放器最高16倍速

    方法一 代码 1 百度网盘 已失效 videojs getPlayers video player html5player tech setPlaybackRate 2 0 2 B站 MOOC慕课 通用 document querySele
  • emacs evil-matchit实现verilog配对的代码跳转

    背景 emacs插件evil matchit 参考文档 背景 vim里常使用 进行跳转 遇到代码段较长的情况 跳转方便而且有助于debug vim 实现begin end 配对 使用matchit插件 岁月长河 博客园 http www c
  • C++ OpenSSL 3.0.8 AES加解密

    2023年后 openssl进入3 0版本 openssl的加解密代码也出现了一些变化 例如编译时会有如下错误 error C4996 AES set encrypt key Since OpenSSL 3 0 如果使用OpenSSL 1
  • 算法:图解递归算法的应用场景和使用途径

    文章目录 什么是递归 使用递归的原因 如何理解递归 递归的使用写法 典型例题和分析 汉诺塔问题 合并两个有序链表 反转链表 两两交换链表中的节点 pow 总结 什么是递归 递归就是函数自己调用自己的情况 在二叉树 快排 归并中都有较为广泛的
  • LeetCode题目笔记——1604. 警告一小时内使用相同员工卡大于等于三次的人

    文章目录 题目描述 题目难度 中等 方法一 排序 哈希表 代码 Python 代码 C 总结 题目描述 力扣公司的员工都使用员工卡来开办公室的门 每当一个员工使用一次他的员工卡 安保系统会记录下员工的名字和使用时间 如果一个员工在一小时时间
  • microPython在STM32跑一跑

    1 看这个文章在STM32F4 Disco上试用MicroPython MicroPython开源版块 电子工程世界 论坛 于是在DISCOVERY板卡上面代码就能跑起来了 灯可以闪烁 让灯闪烁的代码可以通过串口输入进去 也可以通过通过生成
  • 【TCP/IP】 以太网流量控制------pause流控

    关键字 以太网 数据链路层 PAUSE帧 流量控制 文章目录 关键字 一 以太网的流量控制 二 pause流控的原理和实现 1 pause流控原理 2 pause消息格式 3 pause流控处理逻辑 4 pause流控芯片上的实现 三 pa
  • 网络层设备 —— 路由器

    一 路由器 二 输入端口对线路上收到的分组的处理 三 输出端口将交换结构传送来的分组发送到线路 四 路由表和转发表 1 路由表 根据路由选择算法得出 主要用途是路由选择 其结构需
  • QObject类的对象树机制、qt内存回收机制、deleteLater、 delete与ui关系

    catalog 错误范例 version qt的delete deleteLater机制 deleteLater具体使用 delete与ui关系 错误范例 class MyWidget QWidget QPushButton btn QTa
  • mysql常见面试题

    一 联合索引是什么 为什么需要注意联合索引中的顺序 什么是最左前缀匹配原则 MySQL可以使用多个字段同时建立一个索引 叫做联合索引 在联合索引中 如果想要命中索引 需要按照建立索引时的字段顺序挨个使用 否则无法命中索引 最左前缀匹配原则
  • windows下将tomcat设置为系统服务以便自动启动

    在window sever服务器部署程序的时候 最好是将程序设置为服务 单纯用cmd启动可能会面临被误关掉的风险 写下此日志留作教训 添加为服务 第一步 使用cmd命令进入到tomcat文件下的bin目录 第二步 输入service ins
  • 52 最佳实践-安全最佳实践-sVirt保护

    文章目录 52 最佳实践 安全最佳实践 sVirt保护 52 1 概述 52 2 开启sVirt保护 52 2 1 开启主机的SELinux 52 2 2 创建开启sVirt功能的虚拟机 52 2 3 确认sVirt开启成功 52 最佳实践
  • Blender interface界面介绍

    Blender interface界面介绍 Blender的主界面 cycles 渲染引擎 有噪点 但是他的渲染效果会很好 因为他是光线追踪 模拟真实的漫反射 实时渲染 evee 2 08过后软件才出的 渲染图层 场景 世界 其中 会用到很
  • 测试理论基础学习

    软件测试概述 一 软件测试的定义 软件测试是为了发现错误而针对某个程序或系统的执行过程 其目的在于检验它是否满足规定的需求 二 软件测试的原则 1 穷举测试是不可能的 2 测试用例的设计是关键 3 缺陷具有免疫性 测试用例要不断更新 4 对