【软件测试基础】

news2024/11/15 1:58:48

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

欢迎志同道合的朋友一起加油喔🤺🤺🤺


目录

1、什么是软件测试(CASE)

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

1.2 软件测试的特点:

2、软件测试和开发的区别

2.1 软件测试与调试的区别:

2.2 软件测试的岗位

3. 什么是需求

4. 认识测试用例

4.1 测试用例的概念 

4.2 为什么要设计测试用例

5. 关于BUG的常见问题

5.1 什么是BUG

5.2 如何描述一个BUG(面试题)

5.3 BUG的生命周期 

5.4 如何定义bug的级别  

5.5 因为BUG和开发人员发生冲突的解决方法 

6. 软件开发和测试的生命周期

7. 开发模型

7.1 瀑布模型

7.2 螺旋模型

7.3 增量模型,迭代模型

7.4 敏捷开发模型 

8. 测试模型

8.1 V模型

8.2 W模型(双V模型)

9. 一个优秀的软件测试人员所具备的素质



1、什么是软件测试(CASE)

最常见的理解是:软件测试就是找BUG,发现缺陷,从而保证软件的质量!!!

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

早期,人们更多的将测试看成是对软件产品“检验”,检查软件的每个功能是否运行正常。

1983年,Bill Hetzel将软件测试定义为:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了其预期的效果。

从这话我们可以看出以下两点:

  • 测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性。
  • 测试的活动是以测试人员“预期的结果”为依据,这里的“预期结果”指的是需求定义。

1.2 软件测试的特点:

软件测试只是一个样本试验,具有不可穷尽性。

2、软件测试和开发的区别

1.工作内容
开发:通过不同的编程语言,最终做出软件(coding)
测试:写测试用例,执行,发送测试报告,编写自动化测试用例,开发相关的测试工具
2.技能区别
测试:技能广度的掌握(因为测试人员要对产品进行全方面的测试,外观是否好看,WEB的UI自动化,后端的接口进行测试,性能,安全…)

开发:   技能深度的掌握(因为开发要写出高效的代码)
3.开发前景
开发:初级开发工程师 -> 中级开发工程师 -> 高级开发工程师 -> 架构师 -> CTO
测试:初级测试工程师 -> 中级测试工程师 -> 高级测试工程师 -> 架构师 -> 项目经理
4.薪资:
通常情况下,大厂测试和开发薪资是一样的。中小厂的测试薪资比开发略低

2.1 软件测试与调试的区别:

1.角色
调试:开发自己调试
测试:测试 + 开发一起执行(通常情况下,黑盒测试由测试人员执行,部分白盒测试、系统测试是由开发人员执行)
2.阶段
调试:开发的时候才调试
测试:测试是伴着整个软件的生命周期的(测试介入的时间比调试早的)
3.目的
调试:确保程序做了程序员想它做的事情
测试:确保程序解决了它该解决的问题
4.手段        
调试:debug,分析代码逻辑
测试:等价类划分法、边界值法、黑白盒测试...

2.2 软件测试的岗位

  • 软件测试工程师: 主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等
  • 测试开发工程师: 根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量,测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决能力尤为重要
  • 性能测试工程师: 针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本
  • 安全测试工程师: 主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性
  • 其他:系统测试工程师、嵌入式测试工程师、硬件测试工程师

3. 什么是需求

需求就是用户的期望或者满足合同(文档,标准,规范)所需要的条件或者权限

需求包含了两个方面:

  1. 用户需求:可以简单的理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务,该需求一般比较简略
  2. 软件需求:从用户需求转化而来,是用户需求的细化和具体实现细节

用户需求不一定是正确的、合理的、需要进行用户需求的提取和分析(产品经理来提取),如果说用户需求是合理的,而且有开发的必要,产品经理就会将用户需求转变成软件需求文档

说明:软件需求是测试人员进行测试工作的基本依据

软件测试人员如何深入了解需求?

  1. 从需求分析阶段就开始介入了解需求
  2. 站在用户的角度
  3. 参加需求评审会议
  4. 查阅文档
  5. 多交流多沟通

4. 认识测试用例

4.1 测试用例的概念 

测试用例就是向被测试系统发起的一组集合,包含测试环境,测试数据,测试步骤,预期结果

示例:

4.2 为什么要设计测试用例

  1. 测试用例可以衡量需求覆盖率
  2. 测试用例可以复用,提高工作效率
  3. 测试用例具有借鉴意义
  4. 测试用例可以用于回归测试
  5. 防止遗漏测试的需求 
  6. 测试用例是建立自动化的基础

自动化就是把测试人员双手解放,让代码代替人员执行测试.

5. 关于BUG的常见问题

5.1 什么是BUG

当且仅当程序规格说明书(软件需求)存在并合理,如果软件功能和软件需求不符合,就说是软件错误(BUG)

当软件需求不存在,用户需求存在并合理,软件功能和用户功能不符合,就说是软件错误

5.2 如何描述一个BUG(面试题)

对于如何描述一个BUG,可以从以下几点来进行描述

1、发现问题的版本
开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障。并且版本的标识也有利于统计和分析每个版本的质量。
2、问题出现的环境
环境分为硬件环境和软件环境,如果是web项目,需要描述浏览器版本,客户机操作系统等,如果是app项目,需要描述机型、分辨率、操作系统版本等。详细的环境描述有利于故障的定位。
3、错误重现的步骤
描述问题重现的最短步骤。
4、预期行为的描述
要让开发人员指导怎么样才是正确的,尤其要以用户的角度来描述程序的行为是怎样的。如果是依据需求提出的故障,能写明需求的来源是最好的。要相信:测试人员是最懂需求的。
5、错误行为的描述
描述错误的现象。crash等可以上传log,UI问题可以有截图。
6、其他
某些公司会有一些其他的要求,例如故障的分类:功能故障,界面故障,兼容性故障等。有些有优先级的分类,严重影响测试需要开发人员优先修改的,可以设置优先级为高。
7、不要把多个bug放到一起
在无法确认是同一段代码造成的故障时,不要将bug放在一起提交。

5.3 BUG的生命周期 

每个公司、每一个工具对bug生命周期的定义都是不一致的,下面仅是一个常见的例子。
测试人员应该跟踪一个Bug的整个生命周期,从Open到Closed的所有状态。

  •  New:新发现的Bug,未经评审决定是否指派给开发人员进行修改。
  •  Open:确认是Bug,并且认为需要进行修改,指派给相应的开发人员。
  •  Fixed:开发人员进行修改后标识成修改状态,有待测试人员的回归测试验证。
  •  Rejected:如果认为不是Bug,则拒绝修改。
  •  Delay:如果认为暂时不需要修改或暂时不能修改,则延后修改。
  •  Closed:修改状态的Bug经测试人员的回归测斌验证通过,则关闭Bug。
  • Reopen:如果经验证Bug仍然存在,则需要重新打开Bug,开发人员重新修改。
  • 无效的bug:open->closed   open->rejected->closed

缺陷状态变更流程每个项目团队的实际做法可能不大一样。并且需要结合实际的开发流程和协作流程来使用。

例如,测试人员新发现的Bug,必须由测试组长评审后才决定是否Open并分派给开发人员。测试人员Open的Bug可以直接分派给Bug对应的程序模块的负责人,也可以要求都先统一提交给开发主管,由开发主管审核后再决定是否分派给开发人员进行修改。 Bug的跟踪以及状态变更应该遵循一些基本原则:
1、测试人员对每一个缺陷的修改必须重新取一个包含更改后的代码的新版本进行回归测试,确保相同的问题不再出现,才能关闭缺陷。
2、对于拒绝修改和延迟修改的Bug,需要经过包含测试人员代表和开发人员代表、用户方面的代表(或代表用户角度的人)的评审

问题:如果发现了一个BUG,开发人员修改了,但是测试人员又复现了这个BUG,是哪些原因可能导致的?

  1. 测试环境不一样
  2. 开发人员没有理解到,没有修改成功
  3. 开发人员修改后没有提交代码到远程,测试人员仍然测试的是旧代码 

5.4 如何定义bug的级别  

1、Blocker(崩溃):
阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。
2、Critical(严重):
系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)。
3、Major(一般):
功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等(该问题实际测试中存在最多)
4、Minor(次要):
界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)

5.5 因为BUG和开发人员发生冲突的解决方法 

  • 检查自己的BUG描述,看看是否自己将BUG描述清楚
  • 站在用户角度考虑问题 应该让开发人员了解到Bug对用户可能造成的困扰,这样才能促使开发人员更加积极地、高质量地修改Bug。
  • BUG的定级要有理有据,符合公司规范
  • 提高自身的技术和业务水平. 不光要提出问题, 最好也能提出解决方案
  • 找产品经理去讨论问题的解决方案 
  • 如果开发不接受,不要争吵,可以发起第三方会议

第三方会议参加者一般是测试人员、开发人员和项目经理

开会前:一定要明确问题原因,问题是什么,解决方案是什么

开会后:确定问题要不要解决,什么时候解决,谁去解决

6. 软件开发和测试的生命周期

 软件开发的生命周期

  1. 需求分析:分析需求是否合理,需求是否完整
  2. 计划:什么时候开始、什么时候结束、耗时多久
  3. 设计: 将大的需求转变为一个个可具体执行的任务。进行开发设计(开发哪些接口、使用什么开发框架、使用什么技术)
  4. 开发:开发人员参考需求文档和技术文档等等来进行代码开发
  5. 测试:进行测试,写测试报告
  6. 运行维护:如果项目有问题,测试人员需要协助开发定位问题 + 解决问题 

 软件测试的生命周期(软件测试的流程)

  1. 需求分析:验证需求的合理性与正确性,细化需求,根据需求提炼测试点
  2. 测试计划:确定测试范围,目表,测试人员,测试环境,时间等
  3. 测试设计:开发测试用例
  4. 测试执行:执行测试,提交BUG
  5. 测试报告: 本次迭代的测试情况进行分析和总结,如写了多少测试用例,执行了多少,发现了多少BUG,修改了多少,剩余BUG的解决方案,测试的覆盖率

7. 开发模型

7.1 瀑布模型

  • 特点:阶段性强,每一个阶段比较独立,因此是线性顺序进行的软件开发模式,看重前期的需求分析和后期的测试阶段
  • 优点:   每个阶段做什么,产出什么十分清晰
  • 缺点:测试在编码后才开始介入,导致前期的问题到后期才发现,失去错误补救机会
  • 适用的项目:  小型的项目

7.2 螺旋模型

螺旋模型适合项目庞大,前期风险大,不是很明确的项目 

  • 特点:强调每一个迭代的测试质量和风险分析,抗风险能力很强
  • 优点:每个阶段都会进行风险分析,尽早的发现问题
  • 缺点:风险管控人力物力投入多,成本较大 
  • 适用项目:适用于比较大的项目,风险较多的

7.3 增量模型,迭代模型

比如同一个系统四个模块A,B ,C,D要花两周开发完

  • 增量模型:第一周开发A,B模块,第二周开发C,D模块
  • 迭代模型:第一周开发A,B,C,D的基础功能模块,第二周开发A,B,C,D的其他功能模块

特点:抗风险能力强

说明:通常开发将两个模型结合使用,在迭代的基础上使用增量

7.4 敏捷开发模型 

敏捷开发是一种以人为本、迭代、循序渐进的软件开发方法,强调在整个软件开发过程中与客户进行频繁的沟通和协作。敏捷开发的核心在于不断地快速迭代、交付、反馈和改进,以适应需求变化和市场竞争的挑战。敏捷模型的流程通常有以下价值观:

  1. 个体与交互重于过程和工具 (个体之间面对面交流)
  2. 可用的软件重于完备的文档 (文档: 开发文档,需求文档)
  3. 客户协作重于合同谈判 ()
  4. 响应变化重于遵循计划
  5. 在每对比对中,后者并非全无价值,但我们更看重前者 (强调前者,并没有否定后者)

特点:轻文档,轻流程,重目标,重产出,拥抱变化(用户可以随时更改需求)

敏捷开发有很多方式,scrum是比较流行的一种

scrum里的角色

scrum由产品经理(product owner),项目经理(scrum master),研发团队(team)组成

  • PO:将用户需求转化为user story(用户故事)
  • SM:管理整个团队,负责召开各种会议,协调项目,为研发团队服务
  • Team:由各种技能的人员组成,通过紧密协同,完成每一次迭代的目标,交付产品

scrum的基本流程

  1. 发布计划会议:产品经理收集需求形成userstory,讲解,排出本迭代需要进行开发的userstory形成sprint backlog
  2. 迭代计划会议:分析userstory,把userstory分解成一个个任务,分配开发人员,指定开发计划
  3. 每日例会:团队成员回答昨天干了什么,遇到的问题,今天的计划
  4. 产品演示会议:甲方,用户演示产品,PO把不足的地方收集整理形成新的user story
  5. 回顾计划会议:回顾整个迭代过程,把不足的地方找出,在下一次迭代过程中改进,优化迭代流程

8. 测试模型

8.1 V模型

  •  特点:每一个阶段独立性强,左边是开发,右边是测试,左边每一个阶段是右边测试阶段的依据,和右边每一个测试阶段一一对应
  •  缺点:瀑布模型的变种,编码后才进行测试,前期的错误后期才发现,会失去错误及时补救机会

8.2 W模型(双V模型)

  •  特点:开发一个v,测试一个v,测试一开始就介入,可以保证前期的问题及时发现和纠正
  •  缺点:测试人员和开发人员一定程度上还是串行的,一个阶段完了之后才会进行下一个阶段
  •  V模型和W模型都不支持敏捷开发 (因为不能拥抱变化)

9. 一个优秀的软件测试人员所具备的素质

  • 综合能力:沟通能力,编程能力,学习能力,文字描述能力
  • 自动化开发能力:开发自动化脚本和工具的能力
  • 编写测试用例的能力:能够设计出高效的发现缺陷和保证产品质量的优秀测试用例
  • 具有探索性思维,发散思维,对软件测试有浓厚的兴趣并且对工作有责任感和压力

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亲测解决:项目无法编译/打包,提示找不到符号的问题

我在对服务进行打包的过程中遇到了“Error…找不到符号”的问题,但是我的项目是能够正常启动的,为什么会出现这个问题呢? 有的博主说是因为我没有正常打包,然后我又学习了一遍如何对项目进行打包…但是然并卵(然而并没…

【Java数据结构】——第十节(下).选择排序与堆排序

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:Java初阶数据结构 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目…

一文3000字从0到1手把手教你基于PostMan的接口自动化测试

临近下半年,公司任务也不是很多,趁这个机会老大让我研究了一下PostMan的脚本自动化测试。作为一个前端开发,说实话,对于PostMan的操作,仅仅限于新建请求->填写url地址和参数->send发送,然后看看返回值…

智能排班系统 【开源说明】

文章目录 引言说明讲讲开源开源要做什么了解开源协议项目的信息脱敏写好项目说明文档修改.gitignore 项目不完善点说明管理系统前端页面自适应做得不好部分页面体验不好 管理系统后端接口缺乏数据校验数据管理接口查询不够完善接口可以更加完善 开源仓库地址其他文章引用说明前…

【我的创作纪念日】—— 纪念四年的坚持

这是一篇和技术无关的博客,但对我而言,它承载了不菲的价值 普通且宁静的一天,被一条消息戳中,于是,写一篇分享帖,纪念我这 1460 天的坚持初衷: 前言:对过去的回顾 4 年前的我&#…

南京邮电大学算法与设计实验二:贪心算法(最全最新,与题目要求一致)

三、实验原理及内容 实验原理: 1、用贪心法实现求两序列的一般背包问题。要求掌握贪心法思想在实际中的应用,分析一般背包的问题特征,选择算法策略并设计具体算法,编程实现贪心选择策略的比较,并输出最优解和最优解值。…

图的遍历,最小生成树,最短路径算法的手算。

1.图的遍历 按照某种规则沿着图中的边对图中的所有顶点访问一次且仅访问一次。 注:图是一种特殊的树。 1.广度优先遍历BFS 不难看出,图的广度优先就是参照的树的层次遍历算法。 2.深度优先遍历 从某个顶点开始V,访问这个顶点V相邻的任意…

【音视频开发】视频编码格式:YUV

文章目录 分类标准分类 简介 参考:YCbCr与YUV 分类标准 首先,我们可以将 YUV 格式按照数据大小分为三个格式,YUV 420,YUV 422,YUV 444。由于人眼对 Y 的敏感度远超于对 U 和 V 的敏感,所以有时候可以多个 …

位运算符及其相关操作详解

位运算符详解 前言:由于位运算符是直接对二进制数操作,因此对二进制、八进制、十六进制不甚了解的小伙伴建议先看这篇二进制、八进制、十六进制与十进制的相互关系,这样阅读本篇时将事半功倍 总览 位运算是对计算机存储的二进制序列的相应位进…

【笔试强训选择题】Day17.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 前言 目…

南京邮电大学算法与设计实验三:动态规划法(最全最新,与题目要求一致)

实验原理: 1、用动态规划法和备忘录方法实现求两序列的最长公共子序列问题。要求掌握动态规划法思想在实际中的应用,分析最长公共子序列的问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较,并输出它们的…

Linux之NetLink学习笔记

1.NetLink机制 NetLink是一种基于应用层跟内核态的通信机制,其特点是一种异步全双工的通信方式,支持内核态主动发起通信的机制。该机制提供了一组特殊的API接口,用户态则通过socket API调用。内核发送的数据再应用层接收后会保存在接收进程socket的缓存…

MediaPipe虹膜检测:实时虹膜跟踪和深度估计

包括计算摄影(例如,人像模式和闪光反射)和增强现实效果(例如,虚拟化身)在内的大量实际应用都依赖于通过跟踪虹膜来估计眼睛位置。一旦获得了准确的光圈跟踪,我们就可以确定从相机到用户的公制距离,而无需使用专用的深度传感器。反过来,这可以改善各种用例,从计算摄影…

《Kali渗透基础》01. 介绍

kali渗透 1:渗透测试1.1:安全问题的根源1.2:安全目标1.3:渗透测试1.4:标准 2:Kali2.1:介绍2.2:策略2.3:安装 3:Kali 初步设置3.1:远程连接3.1.1&a…

深度学习之全过程搭建卷积神经网络(CNN)

大家好,我是带我去滑雪! 本期将尝试使用CIFAR-10 数据集搭建卷积神经网络,该数据集由 10 个类别的 60000 张 32x32 彩色图像组成,每个类别有 6000 张图像。 下面开始全过程搭建CNN识别彩色图片: 目录 (1&a…

【Linux】冯诺依曼与操作系统

目录 一、冯诺依曼结构体系1、冯诺依曼结构体系简介2、为什么要有内存呢? 二、操作系统1、操作系统如何对硬件进行管理?2、操作系统为什么要对软硬件进行管理? 一、冯诺依曼结构体系 1、冯诺依曼结构体系简介 在现实生活中,我们…

KEYSIGHT MSOS204A 2GHZ 4通道DSOS204A高清晰度示波器

KEYSIGHT是德DSOS204A/MSOS204A高清晰度示波器 附加功能: 2 GHz 带宽(可升级) 4 个模拟通道和 16 个数字通道 最大存储深度:800 Mpts(2 通道),400 Mpts(4 通道) 最大…

菱形继承、菱形虚拟继承、以及菱形虚拟继承的模型结构内部。

1. 单继承:一个子类只有一个直接父类。 多继承:一个子类有两个或以上直接父类。 菱形继承:菱形继承是多继承的一种特殊情况。 下面是代码和对象模型结构,可以看出菱形结构存在哪些问题,如下: #define _CR…

学习经验分享【30】Pycharm插件chatgpt,用来辅助编写代码

在Pycharm中发现ChatGPT插件,很好用,免费安全,大家可以作为编代码的辅助工作,也可用来玩GPT的接口。具体方法如下 实现效果如下: 更多精彩内容敬请持续关注。如果本博文对你有帮助的话,欢迎点赞、评论区留言…

BUUCTF-一叶障目 解析

打开文件发现一张png图片,里面没有内容,使用tweakpng打开 tweakpng报错 ,说明crc校验值对不上 有两种可能,一是crc值被修改,二是图片的宽高被修改(在ctf中多半是后者) 先尝试修改crc值为55900…