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

软件测试基础

文章目录

  • 前言
  • 一、软件测试入门
    • 1.什么是软件测试?
    • 2.测试和开发的区别
    • 3.调试和测试的区别
    • 4.一些常问面试题
    • 5.测试人员需要具备的素质
  • 二、软件测试基础
    • 1.需求
    • 2.测试用例
    • 3.Bug
    • 4.软件的生命周期
    • 5.开发模型
  • 三、Bug
    • 1.如何创建bug
    • 2.Bug的级别
    • 3.Bug的生命周期
    • 4.跟开发产生争执怎么办
  • 四、测试用例
    • 1.测试用例的万能公式
    • 2.设计测试用例的方法
      • (1)等价类
      • (2)边界值
      • (3)因果图(判定表)
      • (4)正交排列
      • (5)场景设计法
      • (6)错误猜测法
  • 五、测试分类
    • 1.按照测试对象划分
      • (1)可靠性测试
      • (2)容错性测试
      • (3)安装卸载测试
      • (4)内存泄漏测试
    • 2.按照是否查看代码划分
      • (1)黑盒测试
      • (2)白盒测试
      • (3)灰盒测试
    • 3.按照开发阶段划分
      • (1)单元测试
      • (2)集成测试
      • (3)系统测试
      • (4)验收测试
      • 冒烟测试
      • 回归测试


前言

记录软件测试的基础知识以及一些测试工具的使用。


一、软件测试入门

1.什么是软件测试?

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

2.测试和开发的区别

开发广度小,专业度高
测试广度大,专业度低一点

3.调试和测试的区别

目的不同:调式是发现问题并且解决问题;测试时发现问题。
角色不同:调试是开发人员来执行;测试是测试人员、开发人员等。
阶段不同:调试主要在编码阶段;测试贯穿于软件的整个生命周期。

4.一些常问面试题

(1)走测试岗位为什么还要学习开发知识?
1)测试人员也需要进行代码编写;
2)学习开发知识是为了更好的提高测试质量。
(2)为什么不走开发岗位而走测试岗位?
1)个人兴趣爱好;
2)对测试的理解;
3)走测试岗位还要学习开发知识;
(3)软件测试的岗位有哪些?(软件测试工程师、测试开发工程师、性能测试工程师)
1)软件测试工程师
2)软件测试开发工程师(开发指开发效能工具,提升测试质量和效率)

5.测试人员需要具备的素质

(1)综合能力:(表达、文字、开发、快速学习)
(2)优秀的测试用例设计能力
(3)掌握自动化测试技术
(4)探索性思维
(5)兴趣(责任和压力)
需要测试人员具备良好的产品思维。

二、软件测试基础

1.需求

(1)用户需求:可简单理解为甲方的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。
(2)软件需求:或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。
开发人员和测试人员的直接工作依据就是软件需求。

2.测试用例

测试用例是为了实施测试而向被测试的系统提供的一组集合,这组集合主要包含:测试环境、操作步骤、测试数据、预期结果等。

3.Bug

当且仅当规格说明(需求文档/产品规格说明书)是存在的并且正确,程序与规格说明之间的不匹配才是错误。需求规格说明书没有提到的功能,判断标准以最终用户为准:当程序没有实现其最终用户合理预期的功能要求时,就是软件错误。

4.软件的生命周期

产品/软件的生命周期:需求分析->计划->设计->编码->测试->运行维护
(1)需求分析:例如市场分析、投入和收益的占比、技术上的实现;
(2)计划:计划项目什么时候开始,什么时候结束,耗时多久;
(3)设计:将一个大的需求拆分成一个个具体可实施的任务,进行技术设计(设计哪些接口,采用什么框架,采用哪些技术等);
(4)编码:开发人员参考需求文档和技术文档等等来进行代码开发;
(5)测试:测试人员参考测试用例来设;
(6)运行维护:修复性维护,对项目中没有发现的问题要及时进行修复;完善性维护,对功能进行完善;预防性维护,为了避免产品在线上运行期间出现意想不到的问题,需要进行一些预防的手段。

软件测试的生命周期:需求分析->测试计划->测试设计与开发->测试执行->测试评估
(1)需求分析:测试人员从用户角度思考问题:软件需求是否合理;技术角度思考问题:技术上是否可行,是否还有优化空间;测试的角度思考问题:是否存在业务逻辑冗余/冲突。
(2)测试计划:开始/结束测试时间,耗时多久。
(3)测试设计与开发:写测试文档,明确标注使用到的测试方法,测试工具,测试形式等;参考需求文档、技术文档等编写测试用例。
(4)测试执行:充分利用测试用例和其他工具对项目尽可能做到全方面的覆盖测试。
(5)测试评估:评估产品是否存在其他的质量问题功能演示。

5.开发模型

(1)瀑布模型
在这里插入图片描述
特点:
1.线性结构,每个阶段只执行一次。
2.是其他模型的基础框架。

缺点:
1.测试置后。(前面各阶段遗留的风险推迟到测试阶段才被发现,导致项目大面积返工,失去及早修复的机会;必须留有足够的时间给测试活动,否则导致测试不充分,把缺陷暴露给用户)
2.周期太长,产品很迟才能够被看到和使用。

适用场景:需求固定的小项目。

(2)螺旋模型
特点:螺旋模型中增加了风险分析和原型。

缺点:
1.项目中可能存在的风险性与风险管理人员技术水平有直接关系。
2.需要人员、资金、时间的增加和投入可能导致项目的成本太高。

适用场景:规模庞大、复杂度高、风险大的项目。

(3)增量模型和迭代模型
增量模型里把大的需求划分成一个个可以独立开发上线的功能。而迭代模型则是先开发基础版本,然后再在基础版本上不断地进行功能的完善。

(4)敏捷模型
1.scrum模型–三个角色五个会议
1)三个角色:产品经理、项目经理、研发团队组成。
2)五个重要会议:
发布计划会议:产品经理从需求池中拿出需求进行发布计划会议,最终确定本次迭代要完成的需求。
迭代计划会议:进行任务拆分,确定责任人,工时的评估。
每日会议:每天进行的会议,明确昨天做了什么,今天要做什么,当前遇到的问题,了解当前的项目进度。每日会议结束需要给出“可交付软件”。
演示会议:产出用户需求,如果产出用户需求则将其放到需求池中。
回顾会议:总结当前迭代周期的不足,并在下一次迭代进行优化。
特点:轻流程、轻文档、重目标、重产出。
在这里插入图片描述

(5)测试模型
V模型
特点:
1.测试过程中存在的不同类型的测试。
2.测试阶段的参考标准以前面对应阶段为准。
缺点:测试后置

W模型(双V模型)
1.有一个开发模型和测试模型
2.前面一个阶段完成,才能进行下一个阶段
特点:W模型重流程,不能迎接变化,不适用于敏捷模型。
优点:测试阶段从需求就开始介入。

三、Bug

1.如何创建bug

创建bug的要素:问题出现的版本、问题出现的环境、出现步骤、预期结果、实际结果。

2.Bug的级别

崩溃、严重、一般、次要(工作中按照公司要求)。

3.Bug的生命周期

测试人员在执行测试的过程中,如有发现Bug,需要在对应的Bug管理平台来创建Bug。
(1)New:测试人员创建一个Bug。
(2)Open:开发人员要去确认是否是Bug,是Bug状态就改为open。
(3)Fixed:开发人员在修复完成之后将Bug状态改为Fixed。
(4)Rejected:开发人员确认不是Bug,状态就改为Rejected。
(5)Delay:确实是Bug之后,如果Bug优先级比较低且开发人员不能立即修复Bug,状态就改为Delay。
(6)Closed:Bug确认修复完成,测试人员将Bug改为closed。
(7)Reopen:Bug确认修复未完成,测试人员将Bug状态改为Reopen。
在这里插入图片描述

不管Bug到哪个分支,最终都要走到终态。

4.跟开发产生争执怎么办

(1)多反思自己,是不是Bug创建的时候描述不太清除。
(2)开发人员对Bug级别不认可,Bug定级一定要有理有据。测试人员需要明确企业Bug定级规范,拿着规范跟开发人员沟通。
(3)合理友好的进行沟通,站在用户的角度反问:如果你是用户,你能接受这种功能吗?
(4)提高自身技术水平,不仅能够发现问题,最好也能够提出解决方案,供开发参考。
(5)如果确实是Bug,友好沟通已经不能解决问题,不要争吵,可以召开Bug评审。

四、测试用例

1.测试用例的万能公式

功能测试+性能测试+界面测试+兼容性测试+易用测试+安全测试
举例:(1)水杯的测试用例。
在这里插入图片描述
(2)登录页面测试用例

2.设计测试用例的方法

基于需求的设计方法

(1)等价类

依据需求输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少
的测试用例达到尽量多的功能覆盖,解决不能穷举测试的问题。
有效等价类:针对需求文档的要求是有意义的集合。
无效等价类:针对需求文档的要求是没有意义的集合。
步骤:
1、确认有效等价类和无效等价类。
2、编写测试用例。

(2)边界值

(3)因果图(判定表)

判定表设计测试用例的步骤:
1、确定输入条件和输出条件。
2、找出输入条件和输出条件之间的关系。
3、画判定表。
4、根据判定表编写测试用例。

(4)正交排列

正交实验设计法指从大量的实验中挑选出适量的、有代表性的点,依据“正交表”从而合理的设计出测试用例。
根据正交表设计测试用例的步骤:
1、找出因素数和水平数;
2、生成正交表;
3、根据正交表来编写测试用例;
4、补充可能存在遗漏但是非常重要的测试用例。

(5)场景设计法

一个思路引导的作用。

(6)错误猜测法

依赖测试人员的工作经验和积累。

五、测试分类

1.按照测试对象划分

(1)可靠性测试

可靠性是指系统正常运行的能力或程度。
可靠性=正常运行时间/(正常运行时间+非正常运行时间)*100%

(2)容错性测试

容错性测试是指

(3)安装卸载测试

工作中很容易遗漏安装和卸载的测试。

(4)内存泄漏测试

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

(1)黑盒测试

纯功能测试,不关心具体是怎么实现的。

(2)白盒测试

关注程序的内部实现。

(3)灰盒测试

介于黑盒和白盒之间。
为什么不能让灰盒测试取代黑盒测试和白盒测试?
灰盒测试没有白盒测试那么详尽,灰盒测试没有黑盒测试覆盖产品的广度大,所以灰盒测试不能取代黑白盒测试。
哪种测试方法用的多?
黑盒测试和白盒测试测试人员都会使用到,在工作中根据具体情况来结合白盒测试和黑盒测试。通常情况下对测试人员来说使用黑盒测试相对要多一点。

3.按照开发阶段划分

(1)单元测试

对程序“最小单元”进行测试。

(2)集成测试

(3)系统测试

(4)验收测试

冒烟测试

开发人员完成开发任务之后,交给测试人员进行测试的第一步。

回归测试

对历史版本、历史功能进行测试,保证功能都是符合要求的,借助自动化来进行回归测试。


相关文章:

软件测试基础

文章目录前言一、软件测试入门1.什么是软件测试?2.测试和开发的区别3.调试和测试的区别4.一些常问面试题5.测试人员需要具备的素质二、软件测试基础1.需求2.测试用例3.Bug4.软件的生命周期5.开发模型三、Bug1.如何创建bug2.Bug的级别3.Bug的生命周期4.跟开发产生争执…...

【算法基础】链表

一、单链表例题:实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k个插入的数后面的数;在第 k� 个插入的数后插入一个数。现在要对该链表进行 M次操作,进行完所…...

[AUTOSAR][Fls模块] Flash Driver Module

Flash Driver Module--jianqiang.xue一、 简介二、 措施方式一:将FLASH操作程序作为Bootloader组件的一部分固化在存储器中方式二:通过通讯口将该部分代码从上位机下载到指定的RAM方式三:将Flash功能函数作为数据运行(推荐!&#…...

如何正确选择好用的投票平台微信公众平台投票链接链接投票平台

“年度人物楷模”网络评选投票_免费链接投票_作品投票通道_扫码投票怎样进行现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发…...

gocd部署应用

产品需要在多个环境部署测试,为了提高部署测试效率,故计划使用CD工具,jenkins确实足够强大,但是使用部署功能是需要安装插件的,再说自己本身只用部署功能,故决定找一个小巧的CD工具,经过一番查找…...

P2P视频聊天技术分析

整个P2P视频过程需要知道双方的媒体类型、流和候选者,所以这里就会用到一下技术: ​ 信令服务器socket.io ​ 状态机 ​ ICE服务器 ​ WebRTC框架 ​ 媒体协商 信令服务器Socket.io 信令服务器说白了作用就是发消息的中转站,A把msg发到…...

MyBatis 的一级、二级缓存机制

目录标题缓存什么是缓存为什么使用缓存什么样的数据能使用缓存,什么样的数据不能使用适用于缓存不适用于缓存MyBatis 一级缓存、二级缓存关系1. 一级缓存1.1 什么是一级缓存mybatis1.2 一级缓存配置1.3 什么情况下会命中一级缓存mybatis清除一级缓存的几种方法1.4 内…...

剑指 Offer 65. 不用加减乘除做加法

摘要 剑指 Offer 65. 不用加减乘除做加法 一、位运算 有符号整数通常用补码来表示和存储,补码具有如下特征: 正整数的补码与原码相同;负整数的补码为其原码除符号位外的所有位取反后加 11。可以将减法运算转化为补码的加法运算来实现。符…...

5年软件测试年薪30w+,我的坎坷之路谁又知道

在深圳做了五年软件测试工作,从之前的一脸懵的点点点,到现在会自动化测试,说一点点非计算机专业人员从事软件测试的心得体会,仅供参考交流。 大部分测试在公司没啥地位,当然如果你懂技术就还行,单纯点点点…...

【Opencv--自适应图像二值化】cv2.adaptiveThreshold()

【Opencv–adaptiveThreshold】自适应阈值图像二值化 文章目录【Opencv--adaptiveThreshold】自适应阈值图像二值化1. 介绍2. adaptiveThreshold函数2.1 函数调用2.2 补充说明3. 代码示例4. 效果4.1 原图(ori.img)4.2 处理后5. 参考1. 介绍 在这里 cv2.…...

洛谷P8601[蓝桥杯][2013年第四届真题]剪格子

题目描述如图 11 所示,33 的格子中填写了一些整数。我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是 60。本题的要求就是请你编程判定:对给定的 mn 的格子中的整数,是否可以分割为两个部分,使…...

配置alias实现快速生成.gitignore文件

git工具:版本控制开发工具。 cscope工具:用于浏览C源码的工具,类似于ctags。在代码根目录下执行cscope -Rbq,然后产生三个索引文件(cscope.out、cscope.in.out和cscope.po.out三个文件)。 在Linux下使用vi…...

MySQL数据库调优————GROUP BY及DISTINCT优化

GROUP BY 三种处理GROUP BY的方式 松散索引扫描(Loose Index Scan)紧凑索引扫描(Tight Index Scan)临时表(Temporary table) 三种方式的性能一次递减 松散索引扫描 无需扫描满足条件的所有索引键即可返…...

LRU缓存算法

双向链表哈希表(非线程安全) https://leetcode.cn/problems/lru-cache/solutions/259678/lruhuan-cun-ji-zhi-by-leetcode-solution/ /*** LRU算法: 哈希表双向链表实现* 1. 双向链表按照被使用的顺序来存储, 靠近头部的节点是最近使用的, 靠近尾部的节…...

@Configuration注解

Configuration注解介绍 Configuration注解,用于标注一个类是一个spring的配置类(同时,也是一个bean),配置类中可以使用ComponentScan、Import、ImportResource 和 Bean等注解的方式定义beanDefinition。 Target(Elem…...

基于springboot+vue的食疗系统

基于springbootvue的食疗系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍&…...

sklearn学习-朴素贝叶斯

文章目录一、概述1、真正的概率分类器2、sklearn中的朴素贝叶斯二、不同分布下的贝叶斯1、高斯朴素贝叶斯GaussianNB2、探索贝叶斯:高斯朴素贝叶斯擅长的数据集3、探索贝叶斯:高斯朴素贝叶斯的拟合效果与运算速度总结一、概述 1、真正的概率分类器 算法…...

分享112个HTML艺术时尚模板,总有一款适合您

分享112个HTML艺术时尚模板,总有一款适合您 112个HTML艺术时尚模板下载链接:https://pan.baidu.com/s/1D3-mfPOud-f3vy9yLl-bmw?pwdfph2 提取码:fph2 Python采集代码下载链接:采集代码.zip - 蓝奏云 时尚平面模特网站模板 潮…...

用GDB远程调试运行于QEMU的程序

1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 测试环境 本文使用 Ubuntu 16.04.4 LTS QEMU 环境进行调试。 3. 用 GDB 调试 QEMU 内程序 3.1 编写用来调试的程序 我们用 ARM32 来进行调试…...

20 堆排序

文章目录1 堆排序的概念2 堆排序基本思想3 堆排序步骤图解说明4 堆排序的代码实现1 堆排序的概念 1) 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn)&#xf…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...