软件测试基础

目录

一.基础

1.概念

1.1 什么是软件测试?

1.2 什么是需求?

1.3 什么是测试用例?

1.4 为什么需要测试用例?

1.5 什么是BUG?

1.6 软件生命周期

2.开发模型

2.1 瀑布模型

2.2 螺旋模型

2.3 增量模型、迭代模型

2.4 敏捷模型

3.测试模型

3.1 V模型

3.2 W模型(双V模型)

4.软件测试

4.1 生命周期

4.2 BUG

4.2.1 描述BUG

4.2.2 bug级别

4.2.3 bug的生命周期

5.设计测试用例

5.1 测试用例要素

5.2 基于需求的测试方法

5.3 黑盒测试

5.3.1 等价类划分法

5.3.2 边界值法

5.3.3 因果图法(判定表)

5.3.4 正交表法

5.3.3 场景设计法

5.3.6 错误猜测法

6.面试题

6.1 如何模拟弱网

6.2 接口如何测试?

6.3 测试用例设计万能公式

6.3.1 功能

6.3.2 界面

6.3.3 易用

6.3.4 兼容

6.3.5 性能

6.3.6 安全

6.3.7 网络

二、分类

1.按照测试对象划分

1.1 界面测试

1.2 可靠性测试

1.3 容错性测试

1.4 文档测试

1.5 兼容性测试

1.6 安装卸载测试

1.7 安全测试

1.8 性能测试

1.9 内存泄漏测试

2.按照是否查看代码分类

2.1 黑盒测试

2.2 白盒测试

2.3 灰盒测试

3.按照开发阶段划分

3.1 单元测试(白盒)

3.2 集成测试(白盒+黑盒)

3.3 系统测试(黑盒)

3.4 回归测试

3.5 冒烟测试

3.6 验收测试(交付测试)

4.按测试实施划分

5.按照测试地域划分

6.按照是否手工测试

6.1 手工测试

6.2 自动化测试


一.基础

1.概念

1.1 什么是软件测试?

软件测试就是验证软件产品特性是否满足用户的需求

测试是伴随整个生命周期的,是为了发现问题

测试手段:等价类划分法、边界值法......

1.2 什么是需求?

需求通常是由两部分(用户需求+软件需求)构成。

用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略,通常就是一句话。例如:开发一个博客系统。

软件需求:通常是一个文档,详细描述了用户需求如何实现,日常工作中可以使用软件需求进行开发和测试。

1.3 什么是测试用例?

测试用例就是一组集合(包括测试环境、测试数据、预期结果、操作步骤......)

以博客系统举例:

测试环境:Windows系统+Chrome浏览器+本地

测试数据:账户,密码

操作步骤:输入账号,输入密码,点击登录

预期结果:登录成功

1.4 为什么需要测试用例?

a.测试用例提高测试人员工作效率/降低测试人员工作的重复性问题

b.测试用例是建立自动化的基础

1.5 什么是BUG?

当前仅当规格说明是存在且正确的,程序与规格说明之间的不匹配才是错误的。

当程序没有实现其最终用户合理预期的功能要求时,就是软件错误。

预期结果  !=  执行结果

1.6 软件生命周期

需求分析  ->  计划  ->  设计  ->  编码  ->  测试  ->  运行维护

需求分析:分析需求是否合理,需求是否完整

计划:谁开发、开发时间、谁测试、测试多久

编码:编写代码

测试:发布一个测试报告

2.开发模型

2.1 瀑布模型

特点:线性的

优点:每个阶段做什么,产出什么,很清晰

缺点:周期很长

使用类型:小型的项目

2.2 螺旋模型

优点:每个阶段都会进行风险分析,避免一些线上问题发生

缺点:风险分析可能分析错,需要人力财力的投入

适用项目:适用于比较大的项目,风险比较多

2.3 增量模型、迭代模型

增量:登录开发完成->创建课程->上课

迭代:登录开发一部分->创建课程开发一部分->开发上课模块一部分

适用场景:大项目,需求不明确

2.4 敏捷模型

scrume模型:

三大角色:

scrum由product owner(产品经理PO)、scrum master(项目经理SM)和team(研发团队)组成。

team:后端开发,前端开发,UI设计师,测试

流程:

产品经理负责收集用户需求,来自客服反馈,来自用户

项目经理负责对需求进行优先级划分,计划项目什么时候开始,什么时候结束

每日站会:汇报昨天工作有没有完成,如果没有完成,遇到了什么问题,今天计划做什么

演示:各个部分进行

3.测试模型

软件测试中有两个比较重要的模型,V模型和W模型

3.1 V模型

特点:左边开发,右边测试,类似于瀑布模型

优点:测试被划分成许多类型

缺点:测试人员介入太晚,发现问题时机太晚

3.2 W模型(双V模型)

特点:开发一个v测试一个v

优点:测试人员尽早介入了需求

缺点:测试人员和开发人员一定程度上还是串行的,不能拥抱变化,不能适用于敏捷

4.软件测试

4.1 生命周期

需求分析 -> 测试计划 -> 测试设计、测试开发 -> 测试执行 -> 测试评估

需求分析:需求是否完整,需求是否正确

测试计划:软件由谁测试,什么时候开始测试,什么时候结束测试,测试哪些模块

测试设计、测试开发:写测试用例(手工测试用例,自动化测试用例),编写测试工具

测试执行:执行测试用例

测试评估:测试报告

4.2 BUG

4.2.1 描述BUG

描述bug的基本要素:问题出现的版本、问题出现的环境、问题出现的步骤、预期结果、实际结果

4.2.2 bug级别

崩溃、严重、⼀般、次要

4.2.3 bug的生命周期

5.设计测试用例

5.1 测试用例要素

四个重要要素

测试环境、操作步骤、测试数据、预期结果

测试用例要素不需要执行结果,因为执行结果需要执行完之后才能的出来

测试用例的好处?

避免重复测试,提高测试效率,节省测试时间,手工测试用例是自动化测试用例的前提

5.2 基于需求的测试方法

需求文档->梳理需求(掌握需求)->针对文档设计测试用例(基于需求设计测试用例)

如何通过基于需求设计测试用例

5.3 黑盒测试

5.3.1 等价类划分法

将输入数据集合划分成许多类别,测试的时候,从每一类中抽取出一个测试点,如果测试通过就代表这一类测试通过

有效等价类:满足用户需求输入集合,有效等价类

无效等价类:不满足用户需求的输入集合,无效等价类

举例:用户名(必填,录入用户名,6-15位)

有效等价类:6-15位

无效等价类:小于6位和大于15位

等价类思想设计测试用例步骤:

aa.充分理解需求

bb.划分有效等价类,划分无效等价类

cc.从有效等价类抽取其中一个数据进行测试

5.3.2 边界值法

边界点:

上点:边界上的点

内点:边界内的点

离点:边界值附近的点(闭区间区间外距离上点最近的点,开区间区间内距离上点最近的点)

边界值法设计测试用例:

aa.充分理解需求

bb.找边界点

cc.针对边界点设计测试用例

5.3.3 因果图法(判定表)

判断表是另一种表达逻辑判断的工具

关系:

与:所有条件必须满足,如果一个条件不满足,此时结果为假

或:满足其中一个条件,结果为真,如果条件全部为假,结果就为假

恒等:条件为真,结果一定为真

非:条件为假,结果才为真

如何设计测试用例:

aa.分析所有可能的输入和可能的输出

bb.找出输入和输出之间的对应关系

cc.设计判定表

dd.根据判定表设计测试用例

5.3.4 正交表法

名词

因素:变量

水平:变量取值

性质:

如何通过正交表设计测试用例:

充分理解需求->确定因素水平->画正交表->补充正交表->将正交表转换成测试用例

举例:姓名、邮箱、密码、确认密码、验证码必须全部输入,才能进行注册

因素:姓名、邮箱、密码、确认密码、验证码

水平:填写,不填写

工具:allpirs

5.3.3 场景设计法

主事件流 次事件流

通常情况下,需要把用户经常用到的功能模块串联到一起测试

5.3.6 错误猜测法

错误猜测法是对被测试软件设计的理解,过往经验以及个⼈直觉,推测出软件可能存在的缺陷,从⽽针对性地设计测试⽤例的⽅法。

这个⽅法强调的是对被测试软件的需求理解以及设计实现的细节把握,还有个⼈的经验和直觉。

错误推测法和⽬前流⾏的“探索式测试⽅法”的基本思想⼀致,这类⽅法在敏捷开发模式下的投⼊产出⽐很⾼,被⼴泛应⽤于测试。

6.面试题

6.1 如何模拟弱网

可以借助许多工具,Fiddler

6.2 接口如何测试?

工具,代码

postman

6.3 测试用例设计万能公式

功能、页面、性能、易用、性能、安全、网络、中断……

6.3.1 功能

物体:这个物体主要是干啥的

软件:软件实现功能

6.3.2 界面

物体:外表、大小、材质、容量……

软件:页面、字体大小、字体颜色、页面布局……

6.3.3 易用

经验:操作简单,使用流畅

人性化

6.3.4 兼容

物体:物体除了本质的功能,还有没有其他功能

软件:操作系统、设备、浏览器版本……

6.3.5 性能

物体:使用寿命

软件:响应时间,吞吐量,并发数

6.3.6 安全

物体:物体材质是否有毒,物体会不会对人体健康造成威胁

软件:SQL注入,xss漏洞,输入有毒的脚本

6.3.7 网络

2g、3g、4g、5g WIFI 弱网

二、分类

1.按照测试对象划分

1.1 界面测试

简称UI测试

按照界面的需求(⼀般是UI设计稿)和界面的设计规则,对我们软件界面所展示的全部内容进行测试和检查,⼀般包括如下内容:

验证页面内容显示的完整性,⼀致性,准确性,友好性。比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示;

验证整个页面布局和排版是否合理,不同板块字体的设计,图片的展示是否符合需求;

对页面不同控件的测试,比如,对话框,文本框,滚动条,选项按钮等是否可以正常使用,有效

和无效的状态是否设计合理;

页面的布局和色调符合当下时事的发展。

1.2 可靠性测试

可靠性(Availability)即可⽤性,是指系统正常运行的能力或者程度,一般用正常向用户提供软件服务的时间占总时间的百分比表示。

可靠性 = 正常运行时间/(正常运行时间+非正常运行时间)*100%

可用性指标⼀般要求达到4个或5个“9”,即99.99%或者99.999%

1.3 容错性测试

容错性测试是指系统能够处理异常,用户的错误操作而不至于系统崩溃,从而能够提高系统的可用性。

1.4 文档测试

测试文件、开发文件、产品文件

1.5 兼容性测试

兼容性测试需求是指明确测试的兼容性环境,考虑软、硬件的兼容,就软件兼容来说可以考虑以下:

1.系统自身版本的兼容,用户已有数据的兼容,数据兼容是重中之重,对用户来说,数据是最有价值的。

2.测试与应用环境的兼容性,比如操作系统,应用平台,浏览器的兼容

3.测试与第三方系统以及第三方数据的兼容性

1.6 安装卸载测试

应用市场、浏览器、下载apk包、技术脚本/命令 下载或者卸载

1.7 安全测试

安全性是指信息安全,是指计算机系统或网络保护用户数据隐私,完整,保护数据正常传输和抵御黑客,病毒攻击的能

1.8 性能测试

要进行软件产品的性能问题,要对产品的性能需求进行分析,然后基于系统的性能需求和系统架构,

完成性能测试的设计和执行,最后要进行持续的性能调优。

1.9 内存泄漏测试

没有关闭文件等等

2.按照是否查看代码分类

2.1 黑盒测试

黑盒测试就是在完全不考虑程序逻辑和内部结构的情况下,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当的接收输入数据而输出正确的结果,满足规范需求。

所以,黑盒测试又称之为数据驱动测试,只注重软件的功能

黑盒测试的优点:

不需要了解程序内部的代码以及实现,不关注软件内部的实现。

从用户角度出发设计测试用例,很容易的知道用户会用到哪些功能,会遇到哪些问题,锻炼测试⼈员的产品思维

测试用例是基于软件需求开发文档,不容易遗漏软件需求⽂档中需要测试的功能。黑盒测试的缺点是不可能覆盖所有代码。

黑盒测试用到的测试方法有,等价类,边界值,因果图,场景法,错误猜测法

2.2 白盒测试

白盒测试又称为结构测试或逻辑测试,它⼀般用来分析程序的内部结构,针对程序的逻辑结构来设计测试用例进行测试。

白盒测试主要分为静态测试和动态测试两种。静态测试常见于桌面检查、代码审查、代码走查、代码扫描工具

动态测试方法主要包含六种测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖

2.3 灰盒测试

灰盒测试,是介于白盒测试与黑盒测试之间的⼀种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输⼊的正确性,同时也关注程序内部的情况。

3.按照开发阶段划分

3.1 单元测试(白盒)

单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。又称为模块测试。

在Java中是一个一个类方法。

测试方法:白盒测试-语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖

3.2 集成测试(白盒+黑盒)

集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试⼯作。集成主要目的是检查软件单位之间的接口是否正确。

3.3 系统测试(黑盒)

3.4 回归测试

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产⽣错误。

在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。随着系统的庞⼤,回归测试的成本越来越大,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。

回归测试主要由人工测试和自动化测试进行。通过测试自动化可以提高回归测试效率 。

3.5 冒烟测试

冒烟测试的对象是每⼀个新编译的需要正式测试的软件版本,目的是确认软件主要功能和核心流程正常,在正式进行系统测试之前执行。冒烟测试⼀般在开发人员开发完毕后提交给测试人员来进行测试时,先进行冒烟测试,保证基本功能正常,不阻碍后续的测试。

冒烟测试在系统测试之前

3.6 验收测试(交付测试)

产品上线之前的最后一个流程。

测试阶段:系统测试之后

测试对象:整个系统(包括软硬件)

测试人员:主要是最终用户或者需求方

测试依据:用户需求,验收标准

测试方法:黑盒测试

测试内容:同系统测试

4.按测试实施划分

5.按照测试地域划分

按照测试地域划分,⼀般会将测试划分为国际化测试和本地测试

国际化测试需要关注软件的一些特性:

布局、时间、日期、数字格式、货币、机器型号.......

6.按照是否手工测试

6.1 手工测试

手工测试就是由人去⼀个⼀个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的⼀个步骤。

优点:

对测试人员技术要求没有自动化技术要求高

可以进行发散性测试

缺点:

效率低

人员,时间成本比起自动化测试都比较高

6.2 自动化测试

就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说自动化测试是把以人为驱动的测试行为转化为机器执行的⼀种过程。自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化。自动化测试按照测试对象来分,还可以分为接口测试、UI测试等。接口测试的ROI(产出投入比)要比UI测试高。

优点:

节省成本

提高测试人员执行工作效率

保障软件的质量

缺点:

对测试人员技术要求比较高

不能发散性测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/338093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零到一建设数据中台 - 关键技术汇总

一、数据中台关键技术汇总 语言框架:Java、Maven、Spring Boot 数据分布式采集:Flume、Sqoop、kettle 数据分布式存储:Hadoop HDFS 离线批处理计算:MapReduce、Spark、Flink 实时流式计算:Storm/Spark Streaming、…

(CPU/GPU)粒子继承贴图颜色发射

GetRandomInfo节点(复制贴进scratch pad Scripts) Begin Object Class/Script/NiagaraEditor.NiagaraClipboardContent Name"NiagaraClipboardContent_22" ExportPath/Script/NiagaraEditor.NiagaraClipboardContent"/Engine/Transient.NiagaraClipboardConten…

安装软件缺少dll文件怎么办,分享多种解决dll问题的方法

在计算机使用过程中,我们经常会遇到安装软件时提示缺少dll文件的问题。这种情况通常会导致软件无法正常运行或启动。为了解决这个问题,我总结了以下五种方法,希望对大家有所帮助。 一,了解DLL文件是什么 动态链接库(D…

连通块中点的数量-java

本次我们通过连通块中点的数量来加深我们对并查集的基本操作和原理,并且知道如何在并查集中添加附属信息。 目录 前言☀ 一、连通块中点的数量☀ 二、算法思路☀ 1.无向图🌙 2.在a b之间连一条边,a b可能相等🌙 3.询问a和b是否在一…

Java | Leetcode Java题解之第122题买卖股票的最佳时机II

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProfit(int[] prices) {int ans 0;int n prices.length;for (int i 1; i < n; i) {ans Math.max(0, prices[i] - prices[i - 1]);}return ans;} }

一维时间序列信号的小波模极大值分解与重建(matlab R2018A)

数学上称无限次可导函数是光滑的或没有奇异性&#xff0c;若函数在某处有间断或某阶导数不连续&#xff0c;则称函数在此处有奇异性&#xff0c;该点就是奇异点。奇异性反映了信号的不规则程度&#xff0c;因为信号的奇异点和突变部分往往携带者重要信息&#xff0c;因此信号的…

传感器和变送器的区别介绍

从它的名称来看&#xff0c;传与感二字。传是指传输&#xff0c;感是指感知。实际上是先有感知&#xff0c;其次转换&#xff0c;最后传输。因此传输是目的&#xff0c;转换是手段&#xff0c;感知是基础。把能够将被测变量&#xff08;温度、压力、液位、流量&#xff09;感知…

Go-Admin后台管理系统源码(GO+VUE)编译与部署

1.克隆源码: # Get backend code git clone https://github.com/go-admin-team/go-admin.git# Get the front-end code git clone https://github.com/go-admin-team/go-admin-ui.git3.下载并安装GO开发环境: 3.编译管理后台后端 # Enter the go-admin backend project cd ./…

数据结构——经典链表OJ(二)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…

Rasa.3X中使用lookup实现对实体的抽取

rasa3.6的DIETClassifier实体提取器不准确&#xff0c;使用RegexEntityExtractor的实体提取器替换。在实战过程解决以下两个问题&#xff1a; 1、RegexEntityExtractor实体提取器的应用 首先在domain.yml中明确对应的实体以及意图&#xff1a; version: "3.0" ent…

认识JAVA中的异常

目录&#xff1a; 一. 异常概念与体系结构 二. 异常的处理 三. 自定义异常类 一. 异常概念与体系结构: 1 异常的概念:在 Java 中&#xff0c;将程序执行过程中发生的 不正常行为 称为异常&#xff0c; 如&#xff1a;算数异常&#xff1a; ArithmeticException System.out.pri…

Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 本篇博客讲解朴素Dijkstra算法&#xff0c;第二篇博客讲解堆优化Dijkstra算法Dijkstra求最短路篇二(全网…

Day45 动态规划part05

LC1049最后一块石头重量II(未掌握) 未掌握分析&#xff1a;其实本题跟LC416分割等和子集类似&#xff0c;本质上题目的要求是尽量让石头分成重量相同的两堆&#xff0c;相撞之后剩下的石头最小&#xff0c;也就是01背包问题weight和value都是stones数组&#xff0c;题目可以看…

卷积神经网络-奥特曼识别

数据集 四种奥特曼图片_数据集-飞桨AI Studio星河社区 (baidu.com) 中间的隐藏层 已经使用参数的空间 Conv2D卷积层 ReLU激活层 MaxPool2D最大池化层 AdaptiveAvgPool2D自适应的平均池化 Linear全链接层 Dropout放置过拟合&#xff0c;随机丢弃神经元 -----------------…

调用上传文件接口出现格式错误

一、造成这种错误的可能有很多 1.检查一下传递格式 2.检查一下接口要求的格式 二、举个例子 这两个有什么区别&#xff1f; 那就是json、和form-data&#xff0c;一定要看仔细接口 如果还是按照json的方式去传就会报错 三、更改header里Content-Type的类型 json等的heade…

【YOLOv5/v7改进系列】引入ODConv——即插即用的卷积块

一、导言 提出了一种称为全维度动态卷积(ODConv)的新颖设计&#xff0c;旨在克服当前动态卷积方法的局限性并提升卷积神经网络(CNN)的性能。以下是该论文提出的全维度动态卷积设计的优点和存在的缺点分析&#xff1a; 优点&#xff1a; 增强特征学习能力&#xff1a; ODConv通…

Qt QScript 之 C++/JavaScript相互调用

文章目录 Qt Script什么是ECMAScriptQt 中JavaScriptclass 详解Basic UsageQObject对脚本引擎可用使用信号槽connect 三种模式访问属性, 子对象使c++对象可用于用Qt Script编写的脚本C++ 类成员函数可用于脚本C++ 类属性可用于脚本对脚本中的c++对象信号的反应函数对象和本机函…

DASK==python并行计算

文档10 Minutes to Dask — Dask documentation demo代码 import numpy as np import pandas as pd import dask.dataframe as dd import dask# 设置调度器为多线程 dask.config.set(schedulerthreads) # 创建一个示例的Pandas DataFrame index pd.date_range("2021-09…

nginx优化

1.前端history模式404问题&#xff1a; location / {try_files $uri $uri/ /index.html; }这段代码的作用是&#xff0c;当用户刷新页面时&#xff0c;Nginx会先检查当前URL是否存在&#xff0c;如果不存在&#xff0c;就会尝试访问index.html&#xff0c;从而可以正常显示页面…

面试二十七、 CAS和Atomic

CAS锁机制&#xff08;无锁、自旋锁、乐观锁、轻量级锁&#xff09;-CSDN博客 1. ABA问题 在C中&#xff0c;可以使用std::atomic和版本号来解决ABA问题。C标准库没有直接提供类似Java的AtomicStampedReference&#xff0c;但可以通过将版本号和指针组合在一起实现类似的效果。…