【软件测试】 初识软件测试

news2025/1/29 14:02:35

文章目录

  • 🌴什么是软件测试
  • 🎋软件测试和开发的区别
    • 🚩软件测试与调试的区别
  • 🌳软件测试的发展
  • 🎄软件测试岗位
  • 🍀软件测试在不同类型公司的定位
  • 🎍一个优秀的软件测试人员具备的素质
  • 🌲软件测试的发展前景
  • ⭕总结

🌴什么是软件测试

最常见的理解是:软件测试就是找BUG,发现缺陷

现实生活中在很多情况下我们都在默默进行测试:
刚新买来一部手机,我们要干什么?
一场考试, 做完一遍题目之后, 进行一遍检查, 就是在"测试"
买一台电视, 安装好之后打开试试看能不能正常使用, 也是在 "测试“

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

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

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

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

  • 测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性

  • 测试的活动是以测试人员“预期的结果”为依据,这里的“预期结果”指的是需定义

软件测试的特点

由于每个人的需求是不同的,就会出现各种各样的情况

所以特点为:软件测试只是一个样本试验,具有不可穷尽性

🎋软件测试和开发的区别

相信很多人都知道开发和测试,那么他们之间的区别是什么呢?

接下来我将从以下方面为大家介绍一

难易程度来说

  • 开发广度小,专业度高。

  • 测试广度大,专业度低

工作环境

  • 基本类似

薪水

  • 中小企业总体比研发低,自动化等专业测试领域和研发基本无差距。
  • 大厂研发测试基本无差别

发展前景

  • 自动化测试、安全测试等领域发展前景和研发基本一致。

繁忙程度

  • 敏捷模式下差距不大,产品发布前压力比较大

技能要求

  • 测试要求更广泛:业务能力,设计和架构分析能力,测试手段和工具使用,用户模型分析和理解,编程能力

我们知道程序员在写代码的时候,自己会进行调试,那么调试与测试有什么区别呢?

🚩软件测试与调试的区别

目的不同

  • 调试(Debug):确保程序做了程序员想它做的事情

  • 测试(Testing):确保程序解决了它该解决的问题

参与角色不同

  • 测试由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、单元/集成测试主要是由开发人员执行。

  • 调试由开发人员完成。

执行的阶段不同

  • 测试贯穿整个软件开发生命周期

  • 调试一般在开发阶段

这里可能涉及了一些专业名词,这里不懂得小伙伴可以自己搜索,或者关注博主后续得创作

知道了测试与开发得区别后,我们一起来了解一下测试得发展史吧

🌳软件测试的发展

  1. 软件调试为主,发生在20世界50年代。

  2. 1957年Charles Baker对调试和测试进行了区分。这是软件测试史上一个重要的里程碑,标志已经有独立的软件测试了。

  3. 1979年,《软件测试的艺术》中给出了软件测试的定义:测试是为发现错误而执行程序的过程。它意味着软件测试不仅要证明软件做了该做的事情,也要保证它没做不该做的事情。

  4. 1983年,美国国家标准局(National Bureau of Standards)发布了VV&T,VV&T提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)。这些意味着软件测试正作为一门独立的,专业的,具有影响力的工程学发展起来了。

  5. 预防为主是当下软件测试的主流思想之一

软件测试已经贯穿到了整个软件开发的生命周期当中

了解了发展史后,我们一起来看看软件测试在公司招聘中都有那些岗位吧

🎄软件测试岗位

  • 软件测试工程师:工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等;

  • 测试开发工程师:根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量。测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作;测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。

  • 性能测试工程师:针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。

  • 安全测试工程师:主要分析产品可能会出现的安全问题,做各个方面的渗透测试,提高产品的安全性

  • 其它:系统测试工程师,嵌入式测试工程师,硬件测试工程师。

🍀软件测试在不同类型公司的定位

  1. 无组织性

最简单的软件测试组织形式就是没有任何组织的测试,几个人就把所有软件测试工作做完,这样做没有任何分工、没有任何层次结构。

简单的软件测试组织带来的问题是:软件测试依附在软件开发的组织下,不能真正发挥软件测试的威力。

一两个人的软件测试缺乏交流和思维的碰撞,导致测试人员的进步非常有限。缺乏测试的组织,导致测试无计划进行,测试人员疲于应付各项突如其来的测试任务,测试经验也得不到很好的总结。

  1. 专职VS.兼职

按照测试人员的职责明确程度,可以划分成兼职测试和专职测试两大类。目前在很多软件企业,尤其是小规模的软件企业,往往没有专职的测试人员。在做测试工作的同时还要兼顾软件幵发、配置管理、技术文档编写、用户教育、系统部署实施等工作。

即使是在一些比较大规模的软件企业,拥有专门的质量部门,也会有兼职的情况,最常见的兼职工作是测试+配置管理,或者测试+QA。这种方式的好处是节省成本,可以充分利用资源。但是这样测试人员缺乏专门的独立的发展空间,不利于测试的纵深方向的发展,很难把测试做得精细,也不利于测试经验的积累和测试知识的传播。

当然,由于目前软件企业的现状,很多企业还是使用这种方式。新入行的测试人员来说,可以认为这是对自己很好的锻炼机会。

测试本身的要求就是知识面要广,而这些工作有助于从不同层面、不同角度、不同角色的位置考虑软件的相关问题

  1. 项目性VS.职能性

按测试人员参与项目的形式来划分,可分成项目型职能型

项目型的测试组织是指测试人员作为项目组成员之一紧密地结合到项目中,与项目组其他人员紧密协作,一般是从头到尾跟着项目走。当然,也有些项目是到了中后期才考虑把测试人员加入到项目中。这种类型的测试组织一般不会有测试组长,测试的管理由项目的主管或项目经理负责。

当然,在一些大的项目中,会划分出幵发组长、也会划分出测试组长,但是最终报告的对象都是项目经理。

因此项目经理是负责测试资源调配和测试计划的主要人员。

职能型的测试组织是指测试人员参与到项目中是以独立的测试部门委派的方式进入的。

在这种结构中,一个测试人员有可能不仅仅测试一个项目的产品,可能会同时测试多个项目的产品。测试人员也可能不是长期稳定地从头到尾参与一个项目。
测试人员不向项目主管或项目经理报告工作,而是向自己所在的部门经理报告工作。并且这种结构的项目经理也可能是虚拟的,或者由多个部门经理共同担当。

这两种方式各有利弊。项目型的好处是测试人员参与的力度很强,能深入了解项目方方面面的信息,有利于稳定持续有效地测试出更多细节问题;但是同时也有弊端,就是测试人员受项目负责人的管理,在对待Bug的处理意见上往往受到约束,同时由于过于亲密,很可能出现“网开一面”,不能严格要求的惜况。

并且由于缺乏独立的组织,测试人员的知识可能局限在项目组内传播,不利于测试经验在不同项目组之间的传播。某些测试人员在这种组织中可能会感到孤独和无助。

而职能型的好处是能避免项目型的部分问题,并且能节省部分测试资源,充分利用各个项目阶段之间的时间差来合理利用测试资源;但是也不可避免地存在一些问题。例如,深入程度不够,尤其是对项目涉及的领域知识和业务知识理解可能不够深入,导致测试的问题比较表面

项目性
在这里插入图片描述
职能性
在这里插入图片描述

  1. 综合性

尽管独立的测试部门会有一些不可避免的问题,例如参与项目的深入程度,容易导致“扔过墙”的测试。但是很多软件企业还是倾向于建立一个相对独立的软件测试组织。一个理想的软件测试组织可以是综合和兼容了几种结构方式的组织。

例如,可以将项目型结构和职能型结构组合并加以改造。测试部门是独立的部门,测试部门经理根据各项目组中项目经理的请求,结合公司对项目的投入和重点方向,决定委派哪些测试人员加入到项目组,并且长期稳定、持续地跟进项目,在项目的各个阶段都参与并做测试的相关工作内容。

测试人员作为一种服务资源供项目组调用,测试的结果和报告作为评估软件产品质量的必要参考信息,为项目经理做出产品发布的决定提供参考价值。
在这里插入图片描述
了解了这些之后我们接下来谈一谈一个优秀的软件测试人员具备那些素质

🎍一个优秀的软件测试人员具备的素质

1、综合能力

  • 沟通能力

  • 测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测是工程师是否可以获得更好发展的“敲门砖”。

  • 快速学习的能力

  • 对不同业务需求和功能的快速学习与理解能力。 对于测试新技术和新方法的学习能力。

  • 开发能力

  • 文字能力

2、掌握自动化测试技术

  • 掌握自动化测试技术,可以把你从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。

3、优秀的测试用例设计能力

测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例

想要提高测试用例设计的能力,博主有以下几点建议:

  1. 掌握设计测试用例的方法
  2. 积累,总结
  3. 阅读好的测试用例设计案例

4、探索性思维

探索性思维是指,测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验,知识,直觉,进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的的测试关注点

5、有责任感和一定的压力

责任感是任何工作的都需要的,对于测试工作者而言:

测试往往是产品质量的最后个把关者;由于测试工作成效很难衡量,测试用例执行、bug数目的多少都无法说明产品的质量是否合格;所以,责任感是最重要的测试必备素质之一。

抗住压力对于测试工作者也很重要,特别是属于互联网行业需要能够抗住各种压力。

6、兴趣

俗话说得好,兴趣是最好的老师

最后我们来看一下软件测试的发展前景

🌲软件测试的发展前景

  1. 软件测试就业形势:人才缺口大。

目前几乎每个大中型IT企业的软件产品在发布前都需要大量的质量控制、测试和文档工作,而这些工作必须依靠拥有娴熟技术的专业软件人才来完成。软件测试工程师就是这样的一个企业重头角色。业内人士分析,该类职位的需求主要集中在沿海发达城市,其中北京和上海的需求量分别占去33%和29%。民企需求量更大,占总需求量的19%,外商独资欧美类企业需求排列第二,占15%。

然而,现状是:一方面企业对高质量的测试工程师需求量越来越大,另一方面国内原来对测试工程师的职业重视程度不够,使许多人不了解测试工程师具体是从事什么工作。由于我国企业对软件测试技术的认知较晚,因此这方面的专业技术人才在国内还很稀缺。据调查显示,目前国内软件测试人才缺口已达到30万,中国软件业每年新增约20万测试岗位就业机会,但是企业、学校培养出的软件测试人才不足需求量的1/10,并且需求与供给间的差距仍在进一步拉大。

  1. 软件测试职业规划:发展方向多元化。
  • 方向一:技术工程师

软件测试绝对不是外行人认为的点点点,水很深,技术性也很强,大家就算学习班学完2-3个月,也仅仅至少掌握了一半而已,需要以后不断回头再学习,MySQL,linux, 各种工具的应用,学会1-2种编程语言等等,等你技术不断成熟,不断全面,高薪还会远吗?

  • 方向二:产品经理

除了掌握基本的软件测试知识和技能,将要从大的方面,从用户的角度来看待问题, 如果有机会的话可以多跟着公司的产品经理或业务经理,学学他们如何跟客户交流,了解用户的需求,如果有机会到外场跟客户面对面交流那是最好了,可以面对面地了解用户对我们软件的感受,了解我们业内的竞争者的情况,从而提升我们自身软件的水平。

  • 方向三:领导管理

能做到测试经理的人,一般技术水平都在公司里出类拔萃,除了拥有过人的技术能力,更要学会管理团队,分配项目的整个流程等更加全面的领导能力,一般做到经理的职位至少需要5-6年的积累沉淀。现在就业者员选择一个公司除了看薪水待遇外,更多的是看我能从工作中学到多少,工作的本身是让你干活的,你想想真正学到东西更多的是需要一个好的上司来安排好工作,来引导你学习。如果公司的领导者本身就水平有限,那么人们就会对整个公司的认同感大打折扣。由于工作的特殊性,测试人员不但需要对软件的质量进行检测,而且对于软件项目的立项、管理、售前、售后等领域都要涉及。

在这过程中,测试人员不仅提升了专业的软件测试技能,还能接触到各行各业,进而在项目管理、沟通协调、市场需求分析等能力上得到很好的锻炼,从也进一步为自己的多元化发展奠定基础。

  1. 软件测试职业成长:经验越丰富越吃香 。

之所以说软件测试工程师的职位经验越丰富越吃香,是因为工作的时间越长积累的项目经验越多,在测试中会更加敏锐的发现软件中的bug。因此,软件测试工程师的薪资还会随着工作年限的增长而持续增长。

  1. 软件测试薪资待遇:工资高晋升空间大。

从需求分析到产品开发再到产品维护,都离不了软件测试。但由于软件测试的重要性是近几年才被充分认识到的,高校教育和企业培养都还没有跟上,致使软件测试人才严重供不应求,出现跑步上岗、快速提升的状态,薪资也逐步走高

⭕总结

如果对软件测试感兴趣的小伙伴接下来可以跟随博主的脚步,一起学习并掌握一个软件测试人员所需要具备的技能,成为一个优秀的软件测试工程师吧!

关于《【软件测试】 初识软件测试》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

105AspectRatio调整宽高比组件_flutter

AspectRatio组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比。 AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由宽 度和比率决定的,类似于 BoxFit 中的 contain,按照固定比率去尽量占满区域。 …

【Redis】Java Spring操作redis

目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法,分成了几个类别,分门别类的来组织的。 此处提供的一些接口风格,和原生的Re…

利达卓越:发挥金融力量,促进团队发展

随着中国经济的快速增长和金融改革的逐步深化,我国金融业取得了令人瞩目的发展。作为经济的重要支柱,我国金融业的规模和实力不断扩大,已经成为全球最大的金融市场之一。利达卓越是一支由管理精英组成的团队,专注于金融行业的投资…

Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记

中科大、西安交大、南开大学发表在ICCV2023的论文,作者里有李重仪老师和中科大的Jie Huang(ECCV2022的FEC CVPR2022的ENC和CVPR2023的ERL的一作)喔,看来可能是和Jie Huang同一个课题组的,而且同样代码是开源的&#xf…

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法,通过对大量数据的学习和分析&…

数据结构与算法-(8)---队列(Queue)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

若依 ruoyi 路径 地址 # 井号去除

export default new Router({mode: history, // history 去掉url中的# 、hash 包含#号scrollBehavior: () > ({ y: 0 }),routes: constantRoutes })

嘉立创专业版新建元件

以2*24(2mm)排母为例 文件-新建-元件 新建器件 填上元件的基本信息,保存 选择库设计 填好参数,生成符号 给元件添加封装 需要先设计一个封装 选择header-V 填写参数,生成符号 保存即可。 再次进入元件的封装管理…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

抖音开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好,我是小悟 关于抖音开放平台第三方代小程序开发的两个事件接收推送通知,是开放平台代小程序实现业务的重要功能。 授权事件推送和消息与事件推送类型都以Event的值判断。 授权事件推送通知 授权事件推送包括:推送票据、授权成功、授…

java 基础 IO字符流

1.汉字存储占多少字节: public class IoTest {public static void main(String[] args) {String str "abcd";String str1 "吴危险学java";System.out.println("字符串转为byte数组:" Arrays.toString(str.getBytes())…

C# RestoreFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

Python Opencv实践 - 车辆统计(1)读取视频,移除背景,做预处理

示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…

【Jenkins使用】Jenkins 与 Git

一、概述 Jenkins 与 Git 的结合使用,可以理解为是 Jenkins 的一个强大之处。为什么要这么说,简要说明一下这个工作模式就能理解: 一个软件项目,开发过程中通常都会使用到一些源码管理工具,来达到团队协作的目的。而 …

C++ --STL

STL STL(Standard Template Library,标准模板库)STL从广义上分为: 容器(container)算法 (algorithm)迭代器 (iterator) 容器 和 算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用模板类或者模板函数 1、ST…

SystemC入门学习-第8章 测试平台的编写

之前的章节,一直把重点放在用SystemC来描述硬件电路上,即如何编写SystemC 的RTL。本章的注意力集中在验证和编写测试平台上。 重点包括: 如何生成时钟信号和激励波形如何编写有响应能力的测试平台如何记录仿真结果 8.1 编写测试平台 测试平…

【Shell】Shell脚本入门

Shell脚本入门 疑问 linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等? 答: 使用linux的内核操作计算机的硬件 Shell介绍 通过编写Shell命令发送给linux内核去执行, 操作就是计算机硬件. 所以Shell命令是用户操作计算机硬件的桥梁, Shell是命令, 类似于windows系统…

Java 抽象类与接口

一、抽象类 1.1 抽象类的声明 可以这样认为,抽象类就是普通类抽象化的结果,它与普通类相比,同样具有属性、方法等,唯一的区别就是抽象类具有抽象的效果,即无法被实例化(如果可以被实例化,就失…

源代码漏洞监测【软件代码缺陷性检测】

本文仅供思路参考、交流 一、题目要求 利用树、图、序列等对软件源代码进行代码表征。利用深度学习实现对代码有无漏洞的分类实现检测漏洞类型调研过程 调研了一些论文,发现目前的一些论文,例如FUNDED、SemVulDet、SEVulDet、SySeVR都只能实现二分类,即有无代码漏洞,但是这…

qgis c++二次开发初始化介绍

前言 上篇文章qgis二次开发环境搭建(qgis-3.28.6qt5.15) 的末尾介绍了如何新建一个Qt工程,链接QGIS库并调用Qgis::releaseName(),工程代码在仓库qgis_cpp_api_apps中。 但是要调用更复杂的QGIS函数需要添加一些初始化函数,下边将介绍如何初…