当前位置: 首页 > news >正文

软件测试基础学习

注意:

各位同学们,今年本人求职目前遇到的情况大体是这样了,开发太卷,学历高的话优势非常的大,公司会根据实际情况考虑是否值得培养(哪怕技术差一点);学历稍微低一些但是技术熟练的话也不会缺少offer!

为了能拿到满意offer,努力学习吧!!!

基本概念

自动化测试,也叫软件测试自动化。要学习软件测试自动化,首先就需要清楚什么是软件测试。

软件测试

因为当局者迷,旁观者清的道理,软件开发是个复杂而周期性的过程,期间很容易产生或遗留下错误,而对于开发人员自己所编写与开发的应用程序(软件),往往有很多问题是他们自己发现不了,所以如果直接把存在不足的、有错误、有漏洞的应用程序直接运营上线提供给用户使用,那么很可能会给企业带来商业风险或影响企业受益,所以就需要软件测试人员进行软件测试了。

而软件测试(Software Testing)就是为了尽快尽早地发现软件的各种软件缺陷而展开的贯穿整个软件生命周期、对软件(包括阶段性产品)进行验证和确认的活动过程。这个过程是在规定的条件下对程序进行测试操作并对其是否能满足设计要求进行评估,以达到发现、纠正程序错误,衡量和提升软件质量的目的。通俗点说,软件测试就是通过各种各样的手段或工具来尽可能的找到软件的不足和错误。

软件测试只能查找出软件中的错误或不足,但不能证明程序中没有错误,而且软件测试不能完全消灭软件的错误,只能尽早尽量多的发现软件中的错误与不足。

软件生命周期是指从软件产品的可行性分析到软件不再使用而结束的时间。如果把软件看成是有生命的事物,那么软件的生命周期可分为6个阶段:需求分析、计划、设计、编码开发、测试、运行维护

测试分类

软件测试从不同的角度有着不同的分类方式。

在实际开发中,往往我们都是根据实际情况采用多种不同的测试手段、测试方式来对软件测试测试的。

软件缺陷

软件缺陷,通常又被叫做bug或者defect,即为软件或程序中存在的某种破坏正常运行能力的问题、错误,其存在的最终表现为用户所需要的功能没有完全实现,不能满足或不能全部满足用户的需求。

  • 产品内部来说,软件缺陷是软件产品开发或维护过程中所存在的错误、误差等各种问题。

  • 产品外部来说,软件缺陷是系统所需要实现的某种功能的没有或不足。

出现原因

bug出现的原因一般有如下几种情况,也就是说符合以下情况的问题都属于bug:

原因描述
功能遗漏软件未实现用户或产品需求要求的或应有的功能。
异常错误软件出现了不应该出现的错误。
功能冗余软件出现了用户或产品需求没有要求的功能。
体验度低软件的使用过程过于复杂或难以理解、软件运行缓慢导致用户体验不好。
缺陷管理

缺陷管理也叫bug管理,一般会集成到项目管理工具中,常用的项目管理工具:Teambition、禅道、pingcode、飞书、钉钉等。大部分的项目管理工具内置的缺陷管理功能都会对缺陷划分成不同类型、严重等级、优先级别,以及不同的状态。

缺陷类型
bug类型描述
功能缺陷软件中的功能没有实现或不完善而导致 使用过程出现异常错误、逻辑错误等问题。
界面缺陷用户界面外观缺失或不足,影响了用户正常使用的问题。 如:名称过长时被遮挡、文字部分被遮挡、图片只展示部分等。
需求缺陷需求规格说明书未明确或存在遗留需求的问题。
性能问题不满足系统可测量的属性值,如执行时间、处理速度等。 如:一个功能被用户使用时没有响应,或需要用户等待时间过久等。
接口缺陷与其他组件、模块或程序、调用参数或参数列表等不匹配、出现冲突问题。 如传参个数与接口不匹配、传参类型与接口不匹配等。
兼容性缺陷软件运行环境不匹配的问题 如操作系统、浏览器、网络环境等不匹配
易用性缺陷新用户对软件难以快速熟悉或难以快速上手使用的问题。
代码错误不满足需求、功能实现错误;对产品或项目质量有影响的bug
配置相关由于提供的配置不当或者配置不能够满足实际要求而出现的问题
安装部署由于部署安装引起的问题
安全相关出现安全隐患问题,如存在SQL注入,xss攻击等。
标准规范不符合相关的国际、国家标准规范或业界规范等
严重等级
等级描述
致命缺陷(S1)软件任何一个主要功能完全丧失,用户数据受到破坏,软件崩溃、 悬挂或者危及用户人身安全。如软件崩溃造成硬件设备漏电等
严重缺陷(S2)软件的主要功能部分丧失,数据不能保存,软件的次要功能完全丧失, 系统所提供的功能或服务受到明显的影响。如软件的某个菜单不起作用
一般缺陷(S3)软件的次要功能没有完全实现,但不影响用户的正常使用。 如软件内的某些内容输入有误或无法输入。
较小缺陷(S4)用户体验不好或操作不方便,但不影响功能使用和运行。 如软件内出现错别字或排版有问题等。
优先级别
优先级描述
立即解决(P1)针对软件的致命缺陷,往往需要立即修复。
优先解决(P2)针对软件的严重缺陷,影响了测试,需要优先修复。
等候解决(P3)针对软件的一般缺陷,需要正常排队等待修复。
建议解决(P4)针对软件的较小缺陷,可以在开发人员有时间时再进行修复。

生命周期

从发现bug到关闭bug的这个时间段,我们称之为缺陷(bug)的生命周期。

在整个bug处理的流程上,一般会把bug划分成多个不同状态。

状态描述
新建(New)当bug首次被发现时,测试人员会确认并记录下来,并将bug的状态为New
已指派(Assigned)当bug被指认为New之后,将其传递给开发组,开发组将确认这是否是bug,如果是则开发组的leader会将bug指派给某位开发人员处理,并将bug的状态 设定为“Assigned”。
重新指派(Reassigned)bug被重新指派给某位开发人员处理处理。
已打开(Open)一旦开发人员开始处理bug,就将bug的状态设为“Open”。
已修复(Fixed)当开发人员进行处理(并认为已经解决)之后,就可以将bug的状态设置为“Fixed”并将其提交给开发组leader,然后leader将bug返还给测试组。
等待再测试(Pending Reset)当bug被返还到测试组后,会将bug的状态设置为“Pending Reset”
再测试(Reset)测试组的leader将bug指定给某位测试人员进行再测试,并将bug的状态设置为“Reset”。
已关闭的(Closed)如测试人员经过再次测试之后确认bug已被解决,会将bug的状态设置为 “Closed”。
再次打开的(Reopen)如果经过再次测试发现bug仍然存在的话,测试人员将bug再次传递给开发组,并将bug的状态设置为“Reopen”
拒绝中(Pending Reject)如果测试人员传递到开发组的bug被开发组认为不是bug时,这种情况下开发组可以拒绝,将bug的状态设置为“Pending Reject”并返还给测试组。
被拒绝的(Rejected)测试组的负责人接到拒绝的bug时,如果发现并不能算作bug时,测试组负责人将bug的状态设置为“Rejected”。当然,无法重现,bug信息不足或重复的bug,有时候也会被拒绝。
延期(Postponed)对于一些特殊的bug的测试需要搁置一段时间,这种情况下,bug的状态就被设置为“Postponed“。

缺陷报告

缺陷报告,也叫bug报告,是软件测试人员重要的产出物之一,也是主要工作之一。一份高质量的缺陷报告可以帮助开发人员快速定位问题,修复Bug;也便于测试人员对缺陷进行统计、分析和跟踪管理,是测试人员和开发人员重要的沟通工具。开发中针对需求,测试bug,最怕的就是口口相传。

缺陷报告的基本组成:缺陷ID缺陷标题,发现者,前置条件,是否可重现,操作系统,发现时间,所属项目,所属模块,所属版本,缺陷状态,严重等级优先级别附件描述重现步骤,预期效果,实际效果等。注意:加粗部分为BUG六要素。

参考模板:

缺陷报告就是软件测试的结果产出物,而如何验证和测试缺陷?那就要继续往下学习更多内容了。

测试原则

原则描述
测试显示软件存在缺陷测试只能证明软件中存在缺陷,但并不能证明软件中不存在缺陷,即零缺陷是不可能的。 软件测试是为了降低存在缺陷的可能性,即便是没有找到缺陷,也不能证明软件是完美的。
穷尽测试是不可能的现在软件的规模越来越大,复杂度越来越高,想做到完全性的测试是不可能的。 测试人员可以根据严重等级、优先级、场景、目的来分类别进行集中和高强度的测试,从而保证软件的质量。
测试尽早介入测试人员越早介入软件开发流程越好,最好在需求阶段就开始介入,使缺陷在需求或设计阶段就被发现, 缺陷发现越早,修复的成本就越小,反之,越晚发现修复成本就越高。
缺陷存在集群现象(二八定律)80%的缺陷往往存在于20%的模块中。一般项目复杂功能往往会占据所有功能的20%左右,而这20%的复杂功能往往有可能会包含大部分的缺陷。一个功能模块发现的缺陷频率越高,那存在的未被发现的缺陷出现频率也越高,故发现的缺陷与未发现的缺陷成正比。
杀虫剂悖论反复使用相同的杀虫剂会导致害虫对杀虫剂产生免疫而无法杀死害虫,软件测试也一样。如果一直使用相同的测试方法或手段,可能无法发现新的bug。为了解决这个问题,测试用例应当定期修订和评审,增加新的或不同的测试用例帮助发现更多的缺陷。
测试依赖于环境测试在不同环境(操作系统,浏览器,解释器)下是不同的。所以不应该以完全相同的⽅法去测试两个不同的系统。
不存在缺陷的谬论与第一条类似,期望仅仅发现并修复⼤量缺陷就能确保系统的成功,这是⼀个谬论。

测试自动化

著名的敏捷开发布道师 Mike Cohn(迈克·科恩) 在他的着作《Succeeding with Agile》(中文名:《Scrum敏捷软件开发》)一书中提出了测试金字塔的概念。

根据 Mike Cohn 的测试金字塔,测试的组合应该至少由以下三层组成 (自下往上分别是):

  • 单元测试(Unit Tests)

  • 服务测试(Services Tests)

  • 用户界面测试(UI Tests)

意思是,应该把测试不同粒度的测试分布到整个软件不同层次中,而随着层次越高,编写的测试内容应该越少,也就是写许多小而快的低层次单元测试,适当写一些更粗粒度的中层次接口测试或集成测试,写很少的高层次UI测试、系统测试或验收测试。

所以,根据测试金字塔理论,接下来我们按部就班对测试自动化的内容进行学习。

代码示例(昨天刚学的断言语句):

# 以下是要测试的函数,这个函数将两个数字相加
def add_numbers(a, b):return a + b# 以下是单元测试的示例
import unittestclass TestAddNumbers(unittest.TestCase):# 在setUp中进行一些初始化操作,如果需要的话def setUp(self):# 在这里可以添加一些准备工作,例如设置测试环境pass# 编写测试用例:测试两个正整数相加是否正确def test_add_positive_numbers(self):result = add_numbers(3, 5)self.assertEqual(result, 8)  # 使用assertEqual断言来检查结果是否等于预期值# 编写测试用例:测试负数相加是否正确def test_add_negative_numbers(self):result = add_numbers(-2, -4)self.assertEqual(result, -6)# 编写测试用例:测试零相加是否正确def test_add_zero(self):result = add_numbers(0, 0)self.assertEqual(result, 0)# 在tearDown中进行一些清理操作,如果需要的话def tearDown(self):# 在这里可以添加一些清理工作,例如关闭测试环境passif __name__ == '__main__':unittest.main()

运行结果:

相关文章:

软件测试基础学习

注意: 各位同学们,今年本人求职目前遇到的情况大体是这样了,开发太卷,学历高的话优势非常的大,公司会根据实际情况考虑是否值得培养(哪怕技术差一点);学历稍微低一些但是技术熟练的…...

移动手机截图,读取图片尺寸

这个代码的设计初衷是为了解决图片处理过程中的一些痛点。想象一下,我们都曾遇到过这样的情况:相机拍摄出来的照片、网络下载的图片,尺寸五花八门,大小不一。而我们又渴望将它们整理成一套拥有统一尺寸的图片,让它们更…...

服务器应用程序不可用的原因是什么引起的

服务器应用程序不可用的原因是什么引起的 服务器应用程序不可用的原因是什么引起的?其实服务器应用程序不可用可能是由多种原因引起的。主要包括软件故障、网络问题、硬件故障、安全问题、配置错误、容量不足、数据库问题等,具体详细服务器应用程序不可用的原因如下…...

使用SPY++查看窗口信息去排查客户端UI软件问题

目录 1、使用SPY++查看窗口的信息 2、使用SPY++查看某些软件UI窗口用什么UI组件实现的...

Flink CDC MySQL同步MySQL错误记录

1、启动 Flink SQL [appuserwhtpjfscpt01 flink-1.17.1]$ bin/sql-client.sh2、新建源表 问题1:Encountered “(” 处理方法:去掉int(11),改为int Flink SQL> CREATE TABLE t_user ( > uid int(11) NOT NULL AUTO_INCREMENT COMME…...

深入了解 Linux 中的 AWK 命令:文本处理的瑞士军刀

简介 在Linux和Unix操作系统中,文本处理是一个常见的任务。AWK命令是一个强大的文本处理工具,专门进行文本截取和分析,它允许你在文本文件中查找、过滤、处理和格式化数据。本文将深入介绍Linux中的AWK命令,让你了解其基本用法和…...

【RuoYi项目分析】网关的AuthFilter完成“认证”,注意是认证而不是权限

文章目录 1. 功能介绍2. AuthFilter的配置3. AuthFilter实现分析4. 资料参考 过滤器的功能是检验经过网关的每一个请求,检查 token 中的信息是否有效。 注意是“认证检查”,而不是“权限” 1. 功能介绍 1、在用户完成登录后,程序会把用户相关…...

excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中,并按照文件名保存在新文件的不同sheet中

excel将文件夹下面的表格文件指定名称的sheet批量导出到指定文件中,并按照文件名保存在新文件的不同sheet中 import pandas as pd import ositems os.listdir("./") sheetname"" for item in items:if item.__contains__(xls):dfpd.read_exc…...

IIS管理器无法打开。启动后,在任务栏中有,但是窗口不见了

找到IIS管理器启动程序的所在位置 并在cmd命令行中调用 inetmgr.exe /reset 进行重启 先查看IIS管理器属性,找到其位置 管理员模式打开cmd命令行,并切换到上面的文件夹下运行Inetmgr.exe /reset 运行完成后可以重新看到IIS窗口 原因:由于某…...

使用VBA实现快速模糊查询数据

实例需求:基础数据保存在Database工作表中,如下图所示。 基础数据有37个字段,上图仅展示部分字段内容,下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字,包…...

spring boot flowable多人前加签

1、前加签插件 package com.xxx.flowable.cmd;import com.xxx.auth.security.user.SecurityUser; import com.xxx.commons.ApplicationContextHolder; import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; import org.apache.co…...

结构体运算符重载

1.降序 struct Point{int x, y;//重载比较符bool operator < (const Point &a) const{return x > a.x;//当前元素大时&#xff0c;是降序} };2.升序 struct Point{int x, y;//重载比较符 // bool operator < (const Point &a) const{ // return x…...

幽默直观的文档作者注释

注释是程序中非常重要的一部分&#xff0c;在不同的编程语言中&#xff0c;注释的风格和语言描述会有所不同。以下是一些常用的注释风格和语言描述&#xff1a; 直观注释&#xff1a;这种注释使用简洁、明了的语言&#xff0c;帮助读者快速地理解代码。例如&#xff0c;代码中…...

前端开发网站推荐

每个人都会遇见那么一个人&#xff0c;永远无法忘却&#xff0c;也永远不能拥有。 以下是一些可以用来查找和比较前端框架的推荐网站&#xff1a; JavaScript框架比较&#xff1a; 这些网站提供了对不同JavaScript框架和库的详细比较和评估。 JavaScripting: 提供了大量的JavaS…...

【C语言】通讯录管理系统(保姆级教程+内含源码)

C系列文章目录 目录 C系列文章目录 前言 一&#xff0c;模块化编程 二&#xff0c;系统框架构建 1.成员信息的创建 2.菜单实现 3.系统功能声明 三、系统功能实现 1.初始化通讯录 2.增加联系人 3.显示所有联系人 4.根据姓名查找位置 5.删除指定联系人 6.查找指定联…...

python自动解析301、302重定向链接

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 使用模块requests 方式代码如下&#xff1a; import requests url_string"http://******" r requests.head(url_string, streamTrue) print r.h…...

【未解决问题】opencv 交叉编译 ffmpeg选项始终为NO

opencv 打不开视频的原因 在交叉编译时候&#xff0c;发现在 pc 端能用 opencv 打开的视频&#xff0c;但是在 rv1126 上打不开。在网上查了很久&#xff0c;原因可能是 ffmpeg 造成的。 解决opencv源代码编译找不到ffmpeg-CSDN博客 交叉编译 ffmpeg 尝试了一天还是第二个博客…...

Python实用技术二:数据分析和可视化(2)

目录 一&#xff0c;多维数组库numpy 1&#xff0c;操作函数&#xff1a;​ 2&#xff0c;numpy数组元素增删 1&#xff09;添加数组元素 2&#xff09;numpy删除数组元素 3&#xff09;在numpy数组中查找元素 4&#xff09;numpy数组的数学运算 3&#xff0c;numpy数…...

24Hibench

1. Hibench 官网 ​ HiBench is a big data benchmark suite that helps evaluate different big data frameworks in terms of speed, throughput and system resource utilizations. It contains a set of Hadoop, Spark and streaming workloads, including Sort, WordCou…...

VC++父进程交互式操作子进程标准输入输出

父进程接管子进程的标准输入输出和错误,实现对子进程的交互操作。比如子进程是一个类似mysql这种可以交互的命令,执行操作后输出结果,父进程根据结果分析决定执行下一步的命令,从而替代人工的输入。 通过父进程创建子进程,使用管道重定向子进程的输入输出错误可以实现 在 …...

一步一招,教你如何制作出成功的优惠促销微传单

在当今的数字化时代&#xff0c;几乎所有的事情都可以在互联网上完成&#xff0c;包括制作宣传单。有很多在线工具可以帮助我们轻松制作出精美的商场促销宣传单。下面就以乔拓云为例&#xff0c;详细介绍如何简单几步制作出让人眼前一亮的商场促销宣传单。 1. 注册并登录乔拓云…...

27、Flink 的SQL之SELECT (Pattern Recognition 模式检测)介绍及详细示例(7)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Git使用【上】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析3 前言 先前有些git命令我在我的其它文章里面已经写过&#xff0c;若要查看可参考【Linu…...

flink的序列化基准测试

背景&#xff1a; flink提供了在本地环境使用jmh测试不同序列化方法的性能差异&#xff0c;本文就是基于这个https://github.com/apache/flink-benchmarks这个性能测试&#xff0c;总结几个结论&#xff0c;以便后面使用时避免掉坑 基准测试 我们本次运行的是SerializationF…...

Error: node: unknown or unsupported macOS version: :dunno 错误解决

一、原因 今天安装 brew install node报错了&#xff0c;错误信息如下&#xff1a; 二、解决方案 1&#xff09;查找homebrew-cask安装位置 echo $(brew --repo homebrew/homebrew-cask) // 输出 /opt/homebrew/Library/Taps/homebrew/homebrew-cask2&#xff09;使用 gi…...

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理②

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理② 第十八章 Linux系统对中断的处理 ②18.3 Linux中断系统中的重要数据结构18.3.1 irq_desc数组18.3.2 irqaction结构体18.3.3 irq_data结构体18.3.4 irq_domain结构体18.3.5 irq_chip结构体 18.4 在设备树中指定中断_在…...

Kolmogorov-Smirnov正态性检验

Kolmogorov-Smirnov正态性检验是一种统计方法&#xff0c;用于检验数据集是否服从正态分布。其基本原理和用途如下&#xff1a; 基本原理&#xff1a; 假设检验&#xff1a;Kolmogorov-Smirnov检验基于一个假设&#xff0c;即待检验的数据集服从特定的理论正态分布。计算累积…...

BI神器Power Query(25)-- 使用PQ实现表格多列转换(1/3)

实例需求&#xff1a;原始表格包含多列属性数据,现在需要将不同属性分列展示在不同的行中&#xff0c;att1、att3、att5为一组&#xff0c;att2、att3、att6为另一组&#xff0c;数据如下所示。 更新表格数据 原始数据表&#xff1a; Col1Col2Att1Att2Att3Att4Att5Att6AAADD…...

windows系统一键开启和关闭虚拟化

说明 跟虚拟化相关的三个程序 一键开启脚本 REM 开启 Hyper-V 服务 pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txtfor /f %%i in (findstr /i . hyper-v.txt 2^>nul) do dism /online /norestart /add-package:"%Sy…...

NSSCTF做题(5)

[NSSCTF 2022 Spring Recruit]babyphp 代码审计 if(isset($_POST[a])&&!preg_match(/[0-9]/,$_POST[a])&&intval($_POST[a])){ if(isset($_POST[b1])&&$_POST[b2]){ if($_POST[b1]!$_POST[b2]&&md5($_POST[b1])md5($_POST[b2])){…...

如何使用ftp上传网站/搜索引擎快速优化排名

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、简介二、电机执行器类型1.力控电动电机执行器2.液压执行机构3.系列弹性执行机构三、执行电机设计1.模块化2.电控性能要求3…...

无棣网页设计/郭生b如何优化网站

1.数组 public class Test{public static void main(String args[]){int[] intArray new int[] {1,4,3,2,5};//等价于 : int intArray[] new int[] {1,2,3,4,5};System.out.println(intArray.length); //打印长度//使用java.util.Arrays工具类 来操作 数组System.out.pr…...

关于网站的建设论文/建个网站需要多少钱

传送门&#xff1a;https://loj.ac/problem/10145 简单的平衡树 ———————————————————————————————————— 1 #include<bits/stdc.h>2 using namespace std;3 const int maxn1e510;4 int n,minv,lk;5 struct node6 {7 int val,lc,r…...

国外直播做游戏视频网站有哪些/软文发稿网

大致思路&#xff1a; 题意大概就是&#xff1a;一个环上N个站点&#xff0c;每个站点可以加油gas[i]&#xff0c;每个站点到其下一个站点要消耗cost[i]&#xff0c;问你能否找到一个起点能够走过环上所有点&#xff08;终点起点&#xff09; 思路就是&#xff0c;可以理解到…...

在那里做网站/企业网址搭建

题目连接 题目大意 给你一个01串&#xff0c;要你用最少的变化次数使得所有的1相邻的距离为k。变化的方式为1->0,0->1.要你求最少的变化次数 题目思路 emm完全没啥思路&#xff0c;看了题解&#xff0c;其实就是你要想这些数字1都是modk等于一个定值&#xff0c;那么…...

阿拉善盟北京网站建设/seo推广小分享

摘要&#xff1a; 在这篇文章中&#xff0c;你将学会&#xff0c;如何利用百度地图API进行标注。如何使用API新增的打车费用接口。 ------------------------------------------------------------------------------------------------------- 哇&#xff0c;好久没有上来了。…...