软件测试理论

一、软件测试分类

 1.按测试阶段划分

  • 单元测试(模块测试)

针对软件设计中的最小单位(程序模块),进行正确性检查的测试工作。单元测试需要从程序内部结构出发设计测试用例。多个模块可以平行的独立进行单元测试。

单元定义:C中指一个函数,Java中指一个类,图形化的软件中指一个窗口/一个菜单。

  • 集成测试(组装测试)

在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。

  • 系统测试

将整个软件系统看作一个整体进行测试,测试依据是软件需求说明书。

  • 验收测试

检验软件是否符合用户需求的测试。

(1)α测试

内测版本;软件开发者内部交流;bug较多,普通用户最好不要安装。

(2)β测试

公测版本,对所有用户开放。

(3)γ测试

接近与正式发布的版本。

2.按是否查看源代码

  • 黑盒测试

只测试功能,不关注功能的具体实现方式。

  • 白盒测试

盒子打开,研究里面的源代码和程序结构。

  • 灰盒测试

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

3.按是否运行

  • 静态测试

不运行软件,静态观察软件是否符合预期。

  • 动态测试

运行软件,在运行过程中测试。

4.按是否自动化

  • 人工测试

测试人员手动进行测试。

  • 自动化测试

利用代码或者工具帮助人工进行测试。

5.其他分类

  • 冒烟测试

对系统进行最基本的功能测试,保证基本的功能和流程能走通。

  • 回归测试

当修复一个bug后,把之前的测试用例在新的代码下进行测试。

  • 随机测试

对被测软件的一些重要功能进行复测,也包括测试当前的测试用例没有覆盖到的部分。

  • 探索性测试

同时设计测试和执行测试。测试人员通过测试来不断学习被测系统。

二、软件质量模型

 功能性、可靠性、易用性、效率、维护性、可移植性。

三、软件开发模型

1.瀑布模型

  • 需求分析:需求说明书;需求的可实现性。
  • 概要设计:用到的技术点;大致模块划分。
  • 详细设计:详细到可以为编码作支持;类和函数的设计;各个接口的细节;数据库表、字段的关系。
  • 编码:依据详细设计进行编码操作。
  • 软件测试
  • 软件维护:上线后也是需要持续维护。

特点:线性模型(每一步都是按顺序来执行);文档驱动(每一步都有文档产出)。

优点:每个阶段很清晰;当前阶段完成后,只需关注后续阶段。

缺点:依赖于需求,不适应需求的变化;风险到项目后期才体现,失去早期纠正的机会。

2.快速原型模型(了解)

一边确定需求,一边实现。

优点:克服瀑布模型的缺点,更好地满足用户需求并减少需求不明确带来的风险。

缺点:适合小型系统开发。

3.螺旋模型(了解)

优点:引入风险分析。

缺点:风险分析需要专业知识和人员。

四、测试过程模型

1.v模型

是软件开发中瀑布模型的变种。

优点:包含了底层和高层的测试过程;每个步骤都是文档驱动的。

缺点:和开发的瀑布模型一样,不能适应需求的改变,灵活性较低。

2.w模型

优点:测试伴随着整个开发周期,不仅要测代码,还要测文档;更早的介入测试,可以尽早发现并解决问题。

缺点:使用起来技术复杂度高。

五、测试用例

测试用例(Test Case)是为特定目的而设计的一组测试输入、执行条件和预期结果的文档。

测试用例八大要素:

  1. 用例编号
  2. 用例标题
  3. 测试项目
  4. 用例级别
  5. 预置条件
  6. 测试输入
  7. 执行步骤
  8. 预期结果

两个重要原则:1.能看懂;2.能执行。

如:

六、测试用例设计方法

1.等价类划分法

等价类:在所有测试的数据中,具有某种共同特征的数据子集。

等价类分为:

有效等价类:满足需求的。

无效等价类:不满足需求的。

案例:计算两个-99到99之间整数的和

 等价类操作步骤:

  1. 明确需求
  2. 确定有效等价类和无效等价类
  3. 编写测试用例

案例1:QQ账号:6-10位自然数

案例2:某城市电话号码有三部分组成。分别是:

地区码:空白或三位数字。

前缀:非‘0’且非‘1’开头的三位数字。

后缀:四位数字。

正向用例:一条测试用例尽可能覆盖多种情况。

逆向用例:每一条无效数据,对应一条单独的测试用例。

2.边界值分析法

上点:边界上的点。

离点:离上点最近的点。

内点:范围内的点。

开区间[]、闭区间()

例如:对于闭区间,上点是有效数据,离点是无效数据。

对于开区间,上点是无效数据,离点是有效数据。

不管开区间还是闭区间,内点都是有效数据。

案例1:使用边界值的方法设计添加标题的测试用例(要求:标题长度>0且标题长度<=30)

注意:此案例并未涉及划分等价类。

使用边界值分析法设计测试用例的操作步骤:

  1. 明确需求。
  2. 确定有效和无效等价类。
  3. 确定边界值。
  4. 编写测试用例。

案例2:QQ账号:6---10位自然数

本案例需要同时考虑边界值和等价类,以选取的5个点为讨论依据。

本案例只有内点考虑了无效等价类,作为无效数据。

3.判定表法

有多个输入和多个输出,而且输入与输入之间有相互的组合关系,输入和输出之间有相互的依赖关系。

判定表通常由四个部分组成:

条件桩:列出所有输入,顺序无关。

动作桩:列出所有输出,顺序无关。

条件项:列出条件桩中所有能出现的组合。

动作项:根据不同条件项的组合产生的动作结果。

注:判定表中贯穿条件项和动作项的一行就是一条规则。

使用判定表步骤

  1. 先明确需求
  2. 画判定表
    1. 列出条件桩和动作桩。
    2. 列出条件项的不同组合。
    3. 根据条件项列出动作项。
  3. 编写测试用例
    1. 判定表中的一条规则对应一条测试用例。

注意:

  • 不能直接用判定表去执行测试。
  • 通过判定表编写测试用例,用测试用例去执行测试操作。

案例1

案例2:

4.因果图法

“因”——输入条件,“果”——输出结果

什么是因果图法:

用图解方法表示输入的各种组合关系,写出判定表,从而设计相应的测试用例。

适用范围:适用于分析程序输入条件的各种组合情况,以及输入与输出之间的依赖关系。

因果图法中的基本符号:

 c表示原因,e表示结果。

因果图法的基本步骤:

  1. 明确需求。
  2. 画出因果图。
  3. 将因果图转化为判定表。
  4. 生成测试用例。

案例

5.正交表法

使用最小的测试过程集合获得最大的测试覆盖率。

适用范围:

当可能的输入数据或者输入数据的组合数量很大时,由于不可能为每个输入组合创建测试用例,可以采用这种方法。

特点:

均匀分散,齐整可比。

正交表的概念:

  • 一种特制的表,一般的正交表标记为:$L_n(m^k)$
  • n表示行数
  • k表示表的列数
  • m是列的取值个数

如:$L_9(3^4)$

行数:9,列数:4,列的取值个数:3,叫4因素3水平

使用正交排列法步骤

  1. 明确需求
  2. 画出正交表
    1. 确定列数(因素数)
    2. 确定正交表每列的取值个数(水平数)
    3. 根据因素数和水平数可以确定行数
  3. 写出测试用例,正交表的一行代表一条测试用例。

案例1:字符属性设置

窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值

  • 字体:仿宋、楷体、华文彩云。
  • 字符样式:粗体、斜体、下划线。
  • 颜色:红色、绿色、蓝色。
  • 字号:20号、30号、40号。

  • 列数/因素数:4(编号除外)
  • 水平数:3(每个列的取值个数)
  • 行数:9

 变式:

水平数取值:字体2,样式4,颜色3,字号4 

最大值为4,故应选样式或者字号作为基准。

本题选择样式作为基准:

案例2:用户筛选

假设有一个用户筛选功能,有三个输入分别是体型、年龄段、性别,体型有三个取值(胖、适中、瘦),年龄段有三个取值(老人、青年、儿童),性别有两个取值(男、女),请设计测试用例

判定表法与正交排列法案例

判定表法:

条件桩:男,高,富

动作桩:高富帅,奋斗青年,屌丝青年,白富美,奋斗美女,屌丝美女

正交表法:

人物:刘备,关羽,张飞,赵云

地点:北京,上海,广州,深圳

动作:吃饭,睡觉,喝酒

正交表:3因素4水平

6.场景法

用流程图描述用户的使用场景,用覆盖流程路径来设计测试用例。

从流程图开始到结束,有几条路就是几个路径;一个路径对应一条测试用例。

使用意义

  • 用户角度:用户平时使用的不是单个功能,而是多个功能组合起来进行使用。
  • 测试人员角度:平时测试的都是单个功能点进行测试,容易忽略多个功能的组合测试。

使用步骤

  • 明确需求
  • 画出流程图
  • 根据流程图编写测试用例

案例1:乘坐地铁

7.错误推测法

  • 凭测试工程师的直觉和经验来推测项目中可能出现bug地方,进行测试。
  • 时间紧张,突发事件。

七、软件缺陷

缺陷定义:软件或程序中存在的各种问题。

缺陷判定标准

  • 软件未达到需求规格说明书标明的功能。
  • 软件出现了需求规格说明书指明不会出现错误的地方。
  • 软件的功能超出了需求规格说明书指明的范围。
  • 软件出现了需求规格说明书虽未指明,而应该达到的目标。
  • 软件测试人员认为软件难以理解,不易使用,运行速度慢,或者最终用户体验不好。

缺陷产生的根源

  • 需求变更
  • 交流不充分
  • 软件的复杂性
  • 进度压力

缺陷信息

  • 缺陷编号
  • 缺陷状态
    • new新建
    • open打开(reopen关闭的缺陷,再次打开)
    • fixed修复
    • closed关闭
    • rejected拒绝
    • postpone拖延
  • 缺陷标题
  • 严重程度
    • 5-critical最高优先级
    • 4-veryhigh非常高优先级
    • 3-high高
    • 2-medium中
    • 1-low低
  • 优先级
    • 5-urgent最高
    • 4-veryhigh非常高
    • 3-high高
    • 2-medium中
    • 1-low低
  • 所属模块
  • 缺陷的详细描述

缺陷报告注意事项

  • 缺陷报告不能有缺陷。
  • 简洁、准确、完整。
  • 一个缺陷一个报告。
  • 避免提交不确定的测试问题,缺陷一定是可重现的。
  • 避免出现模糊的词汇。
  • 不能有个人感情色彩。
  • 复现bug过程一定要详细。

案例:两个整数相加

 

-9999和9999是上点,是无效的,只需结合有效等价类(整数);

-9998和9998是离点,是有效的,只需结合有效等价类(整数);

100是内点,既需要结合有效等价类(整数),又要结合无效等价类(小数/字母/中文/符号/空)。

测试用例:

 缺陷报告:

缺陷跟踪流程

new新建状态:新提交的缺陷为新建状态。

open打开状态:确认缺陷有效后为打开状态。

fixed修复状态:经开发人员修改后,缺陷变为已修复(待验证)状态。

closed关闭状态:测试人员对缺陷进行回归测试,验证问题是否修复。如果问题已经修复,则测试人员将该缺陷的状态设置为关闭状态(验证通过)。

reopen重新打开状态:如果已经关闭的问题再次出现,则测试人员将该缺陷的状态修改为重新打开。

缺陷分析需要注意的点

  • 哪个模块问题最多
  • 哪个测试工程师测试的缺陷最多
  • 各类缺陷数量占比
  • 开发是否可以及时修复缺陷
  • 开发人员一次修复缺陷占比
  • 软件是否可以正常发布

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

用Locust做性能测试是一种什么样的体验

01 Locust介绍 Locust 一个开源性能测试工具&#xff0c;使用Python代码来定义用户行为&#xff0c;用它可以模拟百万计的并发用户访问你的系统。 性能工具对比&#xff1a; LoadRunner 是非常有名的商业性能测试工具&#xff0c;功能非常强大。使用也比较复杂&#xff0c;目…

【软考中级备考笔记】数据的表示和校验码

2024/2/18 – 数据的表示和校验码 天气&#xff1a;阴雨 春节假期结束后第一个工作日&#xff0c;开始备考中级软件工程师。 希望在今年5月底的软考中取得中级证书 视频地址&#xff1a;https://www.bilibili.com/video/BV1Qc411G7fB 1. 计算机的总体架构 从下图中可以看出&am…

【网站项目】155在线考试与学习交流网页平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

RocketMQ订阅关系不一致和不能消费时如何排查?

订阅关系不一致 调整任意一个实例的订阅关系和另一个保持一致 消费者不能消费消息 它是最常见的问题之一&#xff0c;也是每个消息队列服务都会遇到的问题 1.确认哪个消息未消费。在这时消费者至少需要手机消息id、消息key、消息发送时间段三者之一 2.确认消息是否发送成功…

6.s081 学习实验记录(九)lock parallelism

文章目录 一、Memory allocator简介提示实验代码实验结果 二、Buffer cache简介提示实验代码实验结果 该实验将重构某些代码以提高并发度。 首先切换到lock分支&#xff1a; git fetchgit checkout lockmake clean 一、Memory allocator 简介 user/kalloctest 这个程序会对…

安装 Windows 7

1.镜像安装 镜像安装:安装Windows 7 2.安装过程(直接以图的形式呈现) 等待安装成功即可

2.18作业

通过字符设备驱动分步注册过程实现LED驱动的编写&#xff0c;编写应用程序测试 头文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio…

Jetpack Compose 第 1 课:可组合函数

点击查看&#xff1a;Jetpack Compose 教程 点击查看&#xff1a;Composetutorial 代码 简介 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;可以帮助您简化并加快 Android 界面开发。 在本教程中&a…

视觉开发板—K210自学笔记(五)--按键控制LED

本期我们来遵循其他单片机的学习路线开始去用板子上的按键控制点亮LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的&#xff0c;需要查看第二节的文档&#xff0c;看看开发板原理图到底是按键是跟哪个IO连在一起。然后再建立输入按键和GPIO的映射就可以开始变成了。 …

Instagram 账号被封怎么办?如何申诉拿回账号?

不知道各位在玩转海外社媒平台时有没有遇到过Instagram账号异常的情况&#xff0c;比如会出现账号受限、帖子发不出去、账号被封号等情况?Instagram账号如果被封不用马上弃用&#xff0c;我们可以先尝试一下申诉&#xff0c;看看能不能把账号解封。所以今天将会出一篇Instagra…

综合布线实训室建设方案2024

综合布线实训室概述 随着智慧城市的发展&#xff0c;人工智能、物联网、云计算、大数据等新鲜行业的兴起&#xff0c;网络布线系统是现代智慧城市、智慧社区、智能建筑、智能家居、智能工厂和现代服务业的基础设施和神经网络&#xff0c;实践表明网络系统的故障 70%发生在布线…

生成式 AI - Diffusion 模型的数学原理(4)

来自 论文《 Denoising Diffusion Probabilistic Model》&#xff08;DDPM&#xff09; 论文链接&#xff1a; https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 文章目录 一、 q &#xff08; x t ∣ x t − 1 &#xff09; q&#xff08;x_{t} \mid x_{t-1} &#xff…

JVM常见问题笔记分享

文章目录 1 JVM组成1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f;1.2 什么是程序计数器&#xff1f;1.3 你能给我详细的介绍Java堆吗?元空间(MetaSpace)介绍 1.4 什么是虚拟机栈1.5 堆和栈的区别1.6 能不能解释一下方法区&#xff1f;1.5.1 概述1.5.2 常量池1…

C++题目打卡2.18

从今天开始我们又将讲4天题目。 题目列表 1.分配T4 2.组合T5 #分配T4 这里很明显是&#xff08;200 110&#xff09; - 330的差值最小。 我们先想到了一个想法就是输入时哪个堆大,加那个。 #include <bits/stdc.h> using namespace std; int main(){int n, ans1 0, …

Win11家庭版,鸿蒙DevEco 模拟器启动失败,成功解决了

本人电脑系统&#xff1a;Windows 11 家庭版 正常安装模拟器后&#xff0c;启动失败&#xff0c;查了各种方法&#xff0c;最终发现是电脑虚拟机未启动导致的。 官方给出的解决方法&#xff08;对我无效&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; 我的…

MySQL之select查询

华子目录 SQL简介SQL语句分类SQL语句的书写规范SQL注释单行注释多行注释 select语句简单的select语句select的算数运算select 要查询的信息 from 表名;查询表字段查询常量查询表达式查询函数 查询定义别名as安全等于<>去重distinct连接字段concat 模糊查询运算符比较运算…

Linux网络----防火墙

一、安全技术和防火墙 1、安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安…

代码随想录第33天|● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

文章目录 1005.K次取反后最大化的数组和贪心思路&#xff1a;代码&#xff1a; 34. 加油站思路一&#xff1a;全局贪心代码&#xff1a; 思路二&#xff1a;代码&#xff1a; 135. 分发糖果思路&#xff1a;两边考虑代码&#xff1a; 1005.K次取反后最大化的数组和 贪心思路&am…

Stackoverflow(1)-根据RequestBody的内容来区分使用哪个资源

如果使用Spring&#xff0c;可以通过RequestBody将请求体的json转换为Java对象&#xff0c;但如果URI相同&#xff0c;而请求体的内容不同&#xff0c;应该怎么办&#xff1f;问题来源(stackoverflow)&#xff1a;Spring RequestBody without using a pojo?稍微研究了一下&…