软件测试笔记
一、介绍
软件测试是为了尽可能多地发现软件系统中的错误而不是证明软件的正确性。
1、软件缺陷是什么?
软件在使用过程中存在的任何问题都叫软件的缺陷,简称bug。
缺陷的判定标准
软件未实现需求说明书中明确要求的功能——少功能
软件出现了需求说明书中指明不应该出现的错误——功能错误
软件是现实的功能超出需求说明书指明的范围——多功能
软件未实现需求说明书中虽未明确指明但应该实现的要求——隐性功能错误
软件测试人员认为软件难以理解,不易使用,运行缓慢,用户体验不好——不易使用
缺陷的等级可以划分为:轻微、一般、严重、致命。
2、软件测试的定义
软件测试是为了发现错误而运行程序的过程。
测试是使用人工或自动的手段来运行或检测某个系统的过程,其目的在于检验它是否满足约定的需求或是比较预期结果与实际结果的差别。
3、软件测试的目的
为了发现软件中的错误。
以检验软件是否满足用户需求为目标。
一个成功的测试是发现了至今尚未发现的错误。
4、软件测试的原则
(1)要尽早并且不断地进行测试
(2)测试用例应由测试输入数据及与之对应的预期输出结果两部分组成
(3) 程序员应避免检查自己的程序
(4) 设计周密的测试用例
(5) 注意测试中错误集中的现象
(6) 严格执行测试计划,排除测试的随意性
(7) 对测试错误结果一定要有一个确认的过程
(8) 妥善保存测试计划、测试用例、出错统计和最终分析报告
二、软件测试生命周期(过程)
软件测试是由测试计划、单元测试、集成测试、系统测试、验收测试等组成的。
1、测试计划
软件测试伴随在如那件开发的整个生命周期。
软件生命周期:需求分析→系统设计→编码→软件测试→系统发布→软件运行使用→软件维护。
2、单元测试:最基本的测试活动,多采用 白盒测试 技术
测试对象软件设计的最小单位——模块。
单元测试的依据是详细设计,主要用于验证各个独立模块的功能正确性。
系统中多个模块可以并行地进行测试。
驱动模块: 负责提供测试输入,调用被测模块,并接收输出以验证功能正确性。
被测模块: 是单元测试的核心,直接被测试的代码模块。
桩模块: 用于模拟被测模块依赖的其他模块,帮助实现测试的隔离性。
3、集成测试
在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
集成测试策略最主要的有三种:
大爆炸集成,自顶向下集成方式,自底向上集成方式。
4、系统测试
对最终软件系统进行全面测试。
(1)功能测试:检查产品是否达到产品需求说明书中规定的功能。
(2)性能测试
负载测试: 通过不断增加负载的方式,关注系统在正常工作情况下的性能瓶颈和负载能力。
压力测试: 关注系统在高负载或超出最大负载时的表现。
(3)安全测试
(4)强度测试
(5)健壮性测试
(6)用户界面测试
(7)兼容测试
(8)安装测试
(9)回归测试:根据修复好了的缺陷再重新进行的测试。目的是一方面验证以前出现过但已经修复好的缺陷不再重新出现;另一方面验证再修复缺陷的同时没有引入新的错误。
5、验收测试
软件系统的功能和性能满足用户需求。
Alpha测试:就是指内测,是在开发者环境进行的测试,环境是可控的,用户少,时间集中。
Beta测试:就是指公测,是在用户环境下进行的测试,环境不可控,用户比较多,时间不集中。
三、测试技术
1、代码检查
(1)代码会审
一组人阅读、讨论和争议对程序进行静态分析的过程。
(2)走查
以小组为单位进行代码阅读,区别是使用了计算机把测试数据沿程序的逻辑结构走一遍。
2、黑盒测试(功能测试)
代码不可见,UI功能可见
主要依据:用户需求规格说明书和详细设计说明书。
(1)等价类划分
有效等价类:有意义的,合理的输入数据所构成的集合。
无效等价类:不合理的或无意义的输入数据所构成的集合。
使用场景:有数据输入(编辑框)的地方。
例1.注册邮箱
邮箱名要求6~18个字符,可使用字母、数字、下划线、需以字母开头。
等价类表
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
---|---|---|---|---|
6~18个字符 | 1 | 少于6个字符 多于18个字符 空 | 2 3 4 | |
邮箱名 | 包含字母、数字、下划线 | 5 | 除字母、数字、下划线外的特殊字符 非打印字符 中文字符 | 6 7 8 |
以字母开头 | 9 | 以数字或下划线开头 | 10 |
测试用例
编号 | 输入数据 | 覆盖等价类 | 预期输出 |
---|---|---|---|
1 | test_123 | 1、5、9 | 合法输入 |
2 | test | 2、5、9 | 非法输入 |
3 | test_123456789_123456789 | 3、5、9 | 非法输入 |
4 | NULL | 4 | 非法输入 |
5 | test&&123 | 1、6、9 | 非法输入 |
6 | test 123 | 1、7、9 | 非法输入 |
7 | test测试123 | 1、8、9 | 非法输入 |
8 | 123_test | 1、5、10 | 非法输入 |
(2)边界值分析
边界范围节点:选取正好等于、刚好大于、刚好小于边界的值作为测试数据
上点:边界上面的点(正好等于)
离点:离边界最近的点
内点:范围内的点
(3)错误推测法
根据经验,列举出程序中所有可能有的错误和容易发生错误的特殊情况,并根据它们设计测试用例。
(4)因果图法
因————原因,输入条件
果————结果,输出结果
因果图法就是通过画图的方法表达输入和输出的关系(因果关系)
Ci表示原因,通常置于图的左部;Ei表示结果,通常在图的右部。
例 某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
1) 根据题意,原因和结果如下:
原因:
1——第一列字符是A;
2——第一列字符是B;
3——第二列字符是一个数字。
结果:
21——修改文件;
22 ——给出信息L;
23——给出信息M。
2) 其对应的因果图如下:
11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。
(5)判定表驱动
解决什么问题?(多条件限制依赖关系如何测试)
实施——画表格——列出条件列出操作
3)根据以上因果图建立判定表。
(6)正交试验法
是研究多因素、多水平的一种实验方法,它利用正交表来对实验进行设计,通过少数实验代替全面的实验。
行数:正交表中的行的个数,即试验的次数,也是通过正交实验法设计的测试用例的个数。
因素:正交表中列的个数,即要测试的功能点。
水平数:任何单个因素能够取得的值的最大个数,即要测试功能点的输入值。
7因素,2水平,8行。
例 某所大学通信系共2个班级,刚考完某一门课程,想通过“性别”、“班级”和“成绩”这三个查询条件对通信系这门课程的成绩分布,男女比例或班级比例进行人员查询:
根据“性别”=“男,女”进行查询
根据“班级”=“1班,2班”查询
根据“成绩”=“及格,不及格”查询
按照传统设计——全部测试
分析上述测试需求,有3个被测元素,被测元素我们称为因素,每个因素有两个取值,我们称之为水平值(也就是2)。
如果是普通的全面测试,则如下(2^3=8次)
若采用正交测试
利用正交表设计测试用例,我们得到的测试用例个数是n=3*(2-1)+1=4(这个公司就是(因素数*(最大水平数-1)+1)),对于三因素两水平的刚好有L4(2^3)的正交表可以套用
于是用正交表试验法得出4个测试用例如下(正交测试表的类型一般都会给出来)
3、白盒测试(结构测试,单元测试):动态测试、静态测试
代码层面
(1)语句覆盖
设计测试用例,使得程序中每条语句至少被执行一次。
(2)判定覆盖
设计测试用例,使得程序中的每个判断的”真“和”假“都至少被执行一次。
(3)条件覆盖
设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值。
(4)判定/条件覆盖
设计测试用例,使得被测程序中的每个判断本身的判定结果(真假)至少满足一次,每个逻辑条件的可能值也至少被满足一次。就是既满足判定覆盖,也满足条件覆盖。
(5)条件组合覆盖
设计测试用例,使得被测程序中的每个判定中条件结果的所有可能组合至少执行一次。
(6)路径覆盖
设计测试用例,覆盖程序中所有可能的路径。
4、设计测试用例
测试用例包括两部分:测试输入数据、预期输出数据。
四、习题集
1、针对水杯,设计测试用例
①外观:是否与图片宣传一致,是否美观、有没有明显划痕、形变
②密封性:颠倒、倾斜是否会漏水
③容量:实际容量是否与包装标注的一致
④使用便捷性:设计的手柄是否合理,重量是否适中,喝水是否方便
⑤保温性/保冷性:保温/保冷时长可以达到预期时长否
⑥耐用性:抗摔否
⑦安全性:使用的材质是否对人体有害,是否符合国家标准
⑧清洁性:测试水杯是否容易清洗掉污渍,杯口和杯身连接处是否容易清洁
⑨环保性:使用的材质是否可回收,是否符合环保标准
⑩杯盖开启性:杯盖易于开启,且密封性要好
2、输入三个数a、b、c分别作为三边的边长构成三角形。程序判断所构成的三角形类型。请为该程序 设计测试用例,满足判断覆盖。
三角形类型 | a | b | c |
---|---|---|---|
等边三角形 | 7 | 7 | 7 |
等腰三角形 | 7 | 7 | 5 |
一般三角形 | 3 | 4 | 5 |
非三角形 | 3 | 4 | 1 |
3、C/S:客户端/服务器
B/S:浏览器/服务器
4、冒烟测试
冒烟测试就是用较少的人,在较短的时间内,测试程序的主要功能,如果通过再进行正式的测试。
5、静态和动态测试
静态测试是不运行被测程序本身而寻找程序中可能存在的错误或评估程序代码的过程。通过分析或者检查源程序的语法、结构、过程、借口等来检查程序的正确性,找出问题。这些问题包括:参数不匹配、不适当的分支嵌套和循环嵌套、未使用过的变量、空指针的引用等。
文档的测试一般也是用静态测试。
静态测试可以用手工,也可以用工具实现。静态测试工具一般是对代码进行语法检查,找出不符合编码规范的地方,根据某种模型评价代码的质量,生成系统的调用关系图等,常见的工具有Telelogic公司的Logiscope、PR公司的PRQA等。
动态测试是运行被测试程序,输入相应的测试数据,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。
6、黑盒测试、灰盒测试和白盒测试
黑盒测试又称为功能测试、数据驱动测试或者基于规格说明书的测试,注重测试软件的功能需求。测试人员不关心程序具体如何实现,根据软件的规格对软件进行各种输入,观察软件的各种输出结果,发现软件的缺陷。因为这类测试不考虑软件的内部运作原理,因此软件对用户来说就像一个黑盒子。
灰盒测试是介于黑盒测试与白盒测试之间的测试方法,在执行白盒测试的时候考虑使用黑盒测试的方法。
白盒测试又称结构测试、逻辑驱动测试或基于程序代码的测试。根据软件内部的工作原理分析来进行测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量。
相关文章:

软件测试笔记
一、介绍 软件测试是为了尽可能多地发现软件系统中的错误而不是证明软件的正确性。 1、软件缺陷是什么? 软件在使用过程中存在的任何问题都叫软件的缺陷,简称bug。 缺陷的判定标准 软件未实现需求说明书中明确要求的功能——少功能 软件出现了需求说…...

Elasticseach RestClient Api
Elasticsearch RestclientApi基础用法 查询 索引库 初始化 添加依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>创建链接 package com…...

【网络安全学习】漏洞扫描:-04- ZAP漏洞扫描工具
**ZAP(Zed Attack Proxy)**是一款由OWASP组织开发的免费且开源的安全测试工具。 ZAP支持认证、AJAX爬取、自动化扫描、强制浏览和动态SSL证书等功能。 1️⃣ 安装zap工具 现在的kali版本不一定会预装zap,我们可以自行安装,安装也十分简单。 apt-get …...
fffdddd
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;entity GJL isport(clk, reset: in std_logic;btn_green, btn_red: in std_logic; -- 新增控制按键r1, r2, y1, y2, g1, g2: out std_logic;ledag: out std_logic_…...
SpringSecurity实战入门——授权
权限系统的作用 例如一个学校图书馆的管理系统,如果是普通学生登录就能看到借书还书相关的功能,不可能让他看到并且去使用添加书籍信息,删除书籍信息等功能。但是如果是一个图书馆管理员的账号登录了,应该就能看到并使用添加书籍信息,删除书籍信息等功能。 总结起来就是…...
Linux 网络请求工具:curl
文章目录 Linux 网络请求:curl1. 安装2. 常规用法3. 传输速率4. FTP5. 代理 Linux 网络请求:curl 1. 安装 若系统没有 curl 命令,可以直接通过 yum 或者 dnf 安装: yum -y install curl # 查看版本,确认安装结果 cu…...

leetcode 二分查找·系统掌握 寻找旋转排序数组中的最小值II
题目: 题解: 本题比普通的寻找旋转排序数组中的最小值多了一个数组中的元素可以重复这一点。 这会时原来的思路出现一个漏洞(大家感兴趣可以看看我做普通版寻找旋转排序数组最小值的思路),就是旋转后的数组中的第二个…...
Flink 容错
Apache Flink 的容错机制是确保数据流应用程序在出现故障时能够恢复一致状态的关键机制。这一机制主要通过创建分布式数据流和操作符状态的一致快照来实现,这些快照被称为检查点(Checkpoint)。以下是 Flink 容错机制的主要特点和关键点&#…...

OpenAI策略:指令层级系统让大模型免于恶意攻击
现代的大模型(LLMs)不再仅仅是简单的自动完成系统,它们有潜力赋能各种代理应用,如网页代理、电子邮件秘书、虚拟助手等。然而,这些应用广泛部署的一个主要风险是敌手可能诱使模型执行不安全或灾难性的行动,…...

芝麻清单助力提升学习工作效率 专注时间完成有效的待办事项
芝麻清单助力提升学习&工作效率 专注时间完成有效的工作。今天我们给大家带来一个专注清单,一个更高效的学习和工作的方法! 我们都知道,专注做一个事情,会有效的提升效率,让事情更高效的完成。如果是学习的话&…...
Docker 容器操作命令
文章目录 前言1. 创建并运行容器2. 列出容器3. 停止容器4. 启动已停止的容器5. 重启容器6. 进入容器7. 删除容器8. 查看容器日志9. 导出和导入容器10. 管理网络11. 数据卷操作12. 设置容器自启动 前言 Docker 容器操作是 Docker 使用过程中非常重要的一部分。以下是一些常见的…...
华为配置创建vlan及划接口,trunk干道,DHCP池塘配置
1、创建 vlan [SWA]vlan 10 [SWA-vlan10]quit [SWA]vlan batch2to3510 批量创建vlan2-3,5.10 2、 接口划入 vlan 单个接口修改接口模式为 access [SWA]interface GigabitEthernet 0/0/5 [SWA-GigabitEthernet0/0/5]port link-type access 批修改为 access [H…...

vue3 computed与watch,watchEffect比较
相同点 都是要根据一个或多个响应式数据进行监听 不同点 computed 如要return回来一个新的响应式值,且这个值不允许直接修改,想要修改的话可以设置set函数,在函数里面去修改所依赖的响应式数据,然后计算属性值会基于其响应式依…...

论文:R语言数据分析之机器学习论文
欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 一、研究背景 全球范围内,乳腺癌是导致癌症发病率和死亡率的主要疾病之一。根据2018年…...

【C++】STL中优先级队列的使用与模拟实现
前言:在前面我们学习了栈和队列的使用与模拟实现,今天我们来进一步的学习优先级队列使用与模拟实现 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C学习 👈 💯代码仓库:卫…...

C#开发-集合使用和技巧(二)Lambda 表达式介绍和应用
C#开发-集合使用和技巧 Lambda 表达式介绍和应用 C#开发-集合使用和技巧介绍简单的示例:集合查询示例: 1. 基本语法从主体语句上区分:1. 主体为单一表达式2. 主体是代码块(多个表达式语句) 从参数上区分1. 带输入参数的…...
Qt底层原理:深入解析QWidget的绘制技术细节(2)
(本文续上一篇《Qt底层原理:深入解析QWidget的绘制技术细节(1)》) QWidget绘制体系为什么这么设计【重点】 在传统的C图形界面框架中,例如DUILib等,控件的绘制逻辑往往直接在控件的类的内部,例如PushButt…...

【Gradio】表格数据科学与图表-连接到数据库
简介 本指南解释了如何使用 Gradio 将您的应用程序连接到数据库。我们将连接到托管在 AWS 上的 PostgreSQL 数据库,但 gradio 对您连接到的数据库类型及其托管位置完全不可知。因此,只要您能够编写 Python 代码来连接到您的数据,您就可以使用…...

艾多美用“艾”为生命加油,献血活动回顾
用艾为生命加油 6月10日~16日,艾多美中国开启献血周活动,已经陆续收到来自烟台总部、山东、广东、河南、四川、重庆、贵阳,乌鲁木齐,吉林,等地区的艾多美员工、会员、经销商发来的爱心助力,截止到目前&…...

人工智能在气象预报领域的崛起:GraphCast引领新纪元
最近,谷歌推出的天气预测大模型GraphCast在全球范围内引起了广泛关注,其卓越的表现不仅刷新了人们对AI能力的认知,更预示着传统天气预报工作模式的深刻变革。 GraphCast是一款基于机器学习技术的天气预测工具,它通过深度学习和大数…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...