1-软件测试答疑

news2024/11/18 7:50:52

目录

1.什么是软件测试?

1.1.生活中测试场景

1.2.软件测试定义

1.3.为什么要有软件测试?/重要性

1.4.练习:软件系统登录功能如何测试?

1.5.软件测试的特点

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

2.1.工作内容

2.2.技能要求

2.3.难易程度

2.4.工作环境

2.5.薪水

2.6.发展前景

2.7.繁忙程度

3.软件测试与调试的区别

3.1.角色

3.2.阶段

3.3.目的

3.4.手段

4.软件测试的发展

5.软件测试岗位

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

6.1.无组织性

6.2.专职VS兼职

6.3.项目性VS职能性

6.4.综合性

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

7.1.技能相关

7.2.非技能相关

PS:如何提高测试用例设计的能力?

8.软件测试的学习方式及内容


1.什么是软件测试?

1.1.生活中测试场景

  • 刚新买来一部手机,我们要干什么?
  • 一场考试,做完一遍题目之后,进行一遍检查,就是在 "测试"。
  • 买一台电视,安装好之后打开试试看能不能正常使用,就是在 "测试"。
  • 货架上选了一件衣服,看衣服是否好看(衬托肤色、气质),看是否凸显身材?【外观测试】,看衣服的材质(丝绸)【材质测试】价钱是否合适?【价格测试】......就是在"测试"。

1.2.软件测试定义

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

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

最终交付的产品是否和用户本来的需求一致,如果不一致,则需要找出不一致的点,交给开发修改,直到满足用户需求。

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

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

从这段话可以看出以下两点:

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

注:测试时要测试满足需求的数据和不满足需求的数据,测试人员要从正、反两方面来进行测试。

1.3.为什么要有软件测试?/重要性

若软件代码写完后,不进行测试,直接上线,会报警,出现各种问题。

但若在代码写完后,交给测试,测试通过后,再上线,会避免刚才出现的问题。

测试就是保障软件质量的。

许多公司,把测试部门叫做"质量保障部"。

1.4.练习:软件系统登录功能如何测试?

  • 不限登录方式:短信验证码、账户登录、面部识别、指纹识别、声控、第三方登录(QQ、微信)
  • 限定登录方式:账户、密码:账号正确,密码错误,登录失败;账号错误,密码正确,登录失败。
  • 一个用户在多台电脑登录。
  • 网络异常情况登录。
  • SQL注入。
  • ......

1.5.软件测试的特点

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

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

2.1.工作内容

  • 开发:通过不同的编程语言编码做出软件(coding)。
  • 测试:写测试用例,执行测试用例,发送测试报告,编写自动化测试用例、开发相关测试工具。看软件是否满足用户需求。

2.2.技能要求

  • 开发:技能深度的掌握,因为要写出高效的代码。
  • 测试:技能广度的掌握,因为要对产品进行全方位测试:外观是否好看,web的UI自动化测试,APP的UI自动化测试,后端接口进行测试,性能,安全相关......业务能力,设计和架构分析能力,测试手段和工具使用,用户模型分析和理解,编程能力。

2.3.难易程度

  • 开发广度小,专业度高。
  • 测试广度大,专业度低。

测试:

  • appium:测试app的
  • 抓包工具:Charles,fiddler
  • 测试接口:soupUI,postman,jmeter
  • 性能测试:loadrunner,jmeter
  • 自动化测试脚本:Python,java,unittest,TestMg(框架)

2.4.工作环境

  • 基本类似。

2.5.薪水

  • 中小企业测试总体比研发略低;大厂研发测试基本无差别。
  • 自动化等专业测试领域和研发基本无差距。
  • 甚至测试/开的薪资高于研发。

2.6.发展前景

  • 开发:初级开发工程师->中级开发工程师->高级开发工程师->架构师->CTO
  • 测试:初级测试工程师->中级测试工程师->高级测试工程师->架构师->项目经理
  • 自动化测试、安全测试等领域测试发展前景和研发基本一致。

2.7.繁忙程度

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

3.软件测试与调试的区别

3.1.角色

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

3.2.阶段

  • 测试贯穿整个软件开发生命周期(需求->计划->设计->编码->测试->运维)。测试介入的时间比调试要早。
  • 调试一般在开发阶段。

3.3.目的

  • 测试(Testing):确保程序解决了它该解决的问题,验证软件是否实现了用户需求的功能。发现问题,提供解决方案,由开发解决问题。
  • 调试(Debug):确保程序做了程序员想它做的事情。发现问题,解决问题。

3.4.手段

  • 测试:黑盒测试:等价类划分法、边界值法...;白盒测试:语句覆盖、条件覆盖...。
  • 调试:debug,分析代码逻辑。

4.软件测试的发展

  1. 软件调试为主,发生在20世界50年代。
  2. 1957年Charles Baker对调试和测试进行了区分。 这是软件测试史上一个重要的里程碑,标志已经有独立的软件测试了。
  3. 1979年,《软件测试的艺术》(经典!值得一读!)中给出了软件测试的定义:测试是为发现错误而执行程序的过 程。 它意味着软件测试不仅要证明软件做了该做的事情,也要保证它没做不该做的事情。
  4. 1983年,美国国家标准局(National Bureau of Standards)发布了VV&T,VV&T提出了测试界很有名的两个名词:验证(Verification)和确认(Validation)。 这些意味着软件测试正作为一门独立的,专业的,具有影响力的工程学发展起来了。
  5. 预防为主是当下软件测试的主流思想之一。软件测试已经贯穿到了整个软件开发的生命周期当中了。

5.软件测试岗位

  • 软件测试工程师:工程师的主要工作一般包含需求分析、编写测试计划和测试方案、设计测试用例、执行测试用例、跟踪BUG、编写测试报告等。涉及到开发的工作内容较少。
  • 测试开发工程师:在测试工程师的工作内容上,增加了开发的工作。根据项目的特点来开发一些自动化测试的脚本,或自动化测试的工具,或者是软件测试工作中用到的提高工作效率的小工具什么的,从而能够更有效地进行测试,提高软件产品的质量。 测试开发工程师工作的目的就是为了更高效,更快捷地让测试工程师进行测试工作。测试开发岗位一般要求一定的开发能力,解决问题的能力尤为重要。 开发工程师开发出来的软件面向的对象是外部用户,测开工程师开发出来的软件面向的对象是公司内部测试人员。
  • 性能测试工程师:针对系统进行性能测试,包括使用工具和编写性能自动化测试脚本。
  • 安全测试工程师:主要分析产品可能会出现的安全问题,SQL注入、黑客攻击等做各个方面的渗透测试,提高产品的安全性。
  • 其它:系统测试工程师,嵌入式测试工程师,硬件测试工程师,游戏测试工程师,自动化测试工程师(设计自动化测试用例,开发自动化测试框架)。

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

6.1.无组织性

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

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

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

6.2.专职VS兼职

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

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

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

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

6.3.项目性VS职能性

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

项目型的测试组织是指测试人员作为项目组成员之一紧密地结合到项目中,与项目组其他人员紧密协作,一般是从头到尾跟着项目走。当然,也有些项目是到了中后期才考虑把测试人员加入到项目中。 这种类型的测试组织一般不会有测试组长,测试的管理由项目的主管或项目经理负责。当然,在一些大的项目中,会划分出开发组长、也会划分出测试组长,但是最终报告的对象都是项目经理。因此项目经理是负责测试资源调配和测试计划的主要人员。

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

这两种方式各有利弊。项目型的好处是测试人员参与的力度很强,能深入了解项目方方面面的信息,有利于稳定持续有效地测试出更多细节问题;但是同时也有弊端,就是测试人员受项目负责人的管理,在对待Bug的处理意见上往往受到约束,同时由于过于亲密,很可能出现“网开一面”,不能严格要求的惜况。并且由于缺乏独立的组织,测试人员的知识可能局限在项目组内传播,不利于测试经验在不同项目组之间的传播。某些测试人员在这种组织中可能会感到孤独和无助。

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

项目性:

职能性:

6.4.综合性

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

例如,可以将项目型结构和职能型结构组合并加以改造。测试部门是独立的部门,测试部门经理根据各 项目组中项目经理的请求,结合公司对项目的投入和重点方向,决定委派哪些测试人员加入到项目组, 并且长期稳定、持续地跟进项目,在项目的各个阶段都参与并做测试的相关工作内容。测试人员作为一 种服务资源供项目组调用,测试的结果和报告作为评估软件产品质量的必要参考信息,为项目经理做出 产品发布的决定提供参考价值。

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

7.1.技能相关

  • 编程能力。
  • 掌握自动化测试技术:可以把你从大量重复性的手工劳动中解放出来,这样可以把更多的精力花在更多类型的测试上。
  • 优秀的测试用例设计能力:测试用例设计能力是指,无论对于什么类型的测试,都能够设计出高效地发现缺陷,保证产品质量的优秀测试用例。
  • 快速学习的能力:对不同业务需求和功能的快速学习与理解能力。 对于测试新技术和新方法的学习能力。

7.2.非技能相关

  • 沟通能力:测试工程师的沟通能力会直接影响事务开展的效率。良好清晰的沟通能力,是一个技术优秀的测是 工程师是否可以获得更好发展的“敲门砖”。
  • 文字表达能力:编写测试用例,编写测试文档,描述bug。
  • 探索性思维:探索性思维是指,测试工程师在执行测试的过程中不断学习被测系统,结合自己的经验,知识,直觉, 进行系统的错误猜测和逻辑推理,整理和分析出更多有针对性的的测试关注点。案例:测试一台自动售票机。 正向,逆向,边界,压力,性能,耗电量,断电,外观,没零钱.....
  • 兴趣。为啥选软件测试?是因为它简单吗?不是,因为自身对软件测试感兴趣,业余时间学习了开发相关知识,是为自动化开发测试脚本和工具储备知识,更好与开发人员沟通。
  • 有责任感和一定的抗压力:责任感是任何工作的都需要的,对于测试工作者而言,测试往往是产品质量的最后个把关者。由于测试工作成效很难衡量,测试用例执行、bug数目的多少都无法说明产品的质量是否合格。所以,责任感是最重要的测试必备素质之一。压力,测试工作者,特别是属于互联网行业需要能够抗住各种压力。担任班委。

PS:如何提高测试用例设计的能力?

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

8.软件测试的学习方式及内容

  • 学习方法: 以实践为主,理论为辅。
  • 学习内容: 概念--基础-用例-进阶-管理-项目实践-工具(禅道-持续集成-功能自动化-性能自动化)

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

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

相关文章

spring监视器actuator

引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><…

第五章 神经网络与手写体识别

文章目录 第五章 神经网络5.1神经元模型5.2感知机与多层网络5.3误差逆传播算法5.4全局最小和局部最小5.5其他常见神经网络5.5.1RBF网络5.5.2ART网络5.5.3SOM网络5.5.4级联相关网络5.5.5Elman网络5.5.6Boltzmann机 5.6深度学习5.7实验&#xff1a;手写数字识别 第五章 神经网络 …

【QT】——QJson类的使用

目录 1.Json的格式 1.1.Json数组 1.2.Json对象 2.QJson 2.1 QJsonObject 2.2 QJsonValue 2.3 QJsonArray 2.4 QJsonDocument 3.示例 3.1 写操作 3.2 读操作 1.Json的格式 Json的基本概念 Json 是一种数据格式&#xff0c;和语言无关&#xff0c;在什么语言中都可以…

Host is not allowed to connect to this MySQL server

问题:win10 系统上运行node&#xff0c;运行提示&#xff1a;Host is not allowed to connect to this MySQL server。 在windows10上面装完MySQL8.0.28&#xff0c;发现本地可以使用Navicat进行连接 &#xff0c;但是在vue项目中调用node接口连接mysql却报错Host is not all…

Python学习笔记(十五)————文件操作相关

目录 1&#xff09;文件编码 2&#xff09; 文件的读取 ①open()打开函数 ② mode常用的三种基础访问模式 ③读操作相关方法 read()方法&#xff1a; readlines()方法&#xff1a; readline()方法&#xff1a;一次读取一行内容 for循环读取文件行 close() 关闭文件对象 wi…

simulink 结构体 bus creator

目录 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Concatenate 结构体数据存文件 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Co…

【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获&#xff1a;开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟的就是慢SQL&#xff0c;至少跑1天&#xff0c;看看生产的慢SQL情况&#xff0c;并将它抓取出来explain 慢SQL分析show Profile。&#xff08;比explain还要详细…

手搭手入门Spring boot+Mybatis+达梦数据库(国产数据库)

环境介绍 软件版本DM数据库dm8_20230418_x86_win_64IDEAIntelliJ IDEA 2022.2.1JDK1.8Spring Boot2.7.13mybatis2.3.1 达梦&#xff08;国产数据库&#xff09;可以将数据库名和表名自动转换为大写(注意&#xff01;&#xff01;创建达梦数据库实例的时候配置是否有勾选大小写…

Android Glide自定义AppGlideModule,让Glide在app启动后基于定制化GlideModule加载,kotlin

Android Glide自定义AppGlideModule&#xff0c;让Glide在app启动后基于定制化GlideModule加载&#xff0c;kotlin project的build.gradle: buildscript {repositories {maven {url uri("https://plugins.gradle.org/m2/")}}dependencies {classpath("org.jet…

Maven高级(二)--继承与版本锁定

一.继承 1.目的&#xff1a;不同模块中经常需要用到同一个依赖&#xff0c;这样要在每个pom.xml中都引入对应的坐标&#xff0c;继承可以用来解决依赖引入重复的问题。 2.实现&#xff1a;我们可以在创建一个父工程&#xff0c;然后将多个模块来继承这个父工程。然后再将各个模…

功能需求-前端在合同页面显示图片印章

需求描述 需要在项目中的合同页面的指定位置显示一个配置好的图片印章&#xff0c;实现好的效果&#xff0c;如下&#xff1a; 实现方案 使用使用CSS的绝对定位position来实现&#xff0c;代码如下&#xff1a; <div id"FatherBuyer"><img :src"s…

SpringAOP切面是否可以改变被代理方法的返回类型?

SpringAOP切面能不能改变被代理方法的返回类型&#xff1f; 注意&#xff0c;这里的AOP使用的aspectjweaver <!--AOP核心依赖aspectjweaver--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></de…

【C++】 Qt-线程进程

文章目录 进程&#xff08;process&#xff09;线程&#xff08;Thread&#xff09;创建线程 进程&#xff08;process&#xff09; 在任务管理器中能看到进程Tab页下&#xff0c;将所有进程分为三类&#xff1a; 应用&#xff1a;打开的正在运行的软件。后台进程&#xff1a…

STM32寄存器点亮LED灯

一&#xff1a; 如何寄存器点灯 1&#xff1a;看单片机的原理图 找到LED灯 这个灯是 PB5引脚 看原理图可以看出 让GPIOB5输出低电平 就能点亮那么我们得让打开控制GPIOB5的时钟让GPIOB5 输出模式让GPIOB5低电平 二&#xff1a;看中文参考手册配置寄存器 2.1&#xff1a;打开管…

python与深度学习——基础环境搭建

一、安装jupyter notebook Jupyter Notebook是一个开源的交互式笔记本环境&#xff0c;可以用于编写和执行代码、创建可视化效果、展示数据分析结果等。我们在这里用它实现代码运行和观察运行结果。安装jupyter notebook实质上是安装Anaconda,后续还要在Anaconda Prompt中使用c…

AI视频智慧安监平台EasyCVR每次重启服务短时间播放后又无法播放,是什么原因?

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的设备接入、视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成。 有用户反馈&#xff0c;EasyCVR每次重启服务后&#xff0c;可以短…

操作系统11:虚拟存储器

目录 1、虚拟存储器概述 &#xff08;1&#xff09;常规存储管理方式的特征和局部性原理 1.1 - 常规存储器管理方式的特征 1.2 - 局部性原理 1.3 - 虚拟存储器的基本工作情况 &#xff08;2&#xff09;虚拟存储器的定义和特征 2.1 - 虚拟存储器的定义 2.2 - 虚拟存储器…

【缓存中间件】Redis哈希槽的概念

数据分布理论 分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题&#xff0c;即把数据集划分到多个节点上&#xff0c;每个节点负责整体数据的一个子集。。 需要重点关注的是数据分区规则。常见的分区规则有哈希分区和顺序分区两种&#xff0c;哈希分区离散…

项目集成支付宝报错:调试错误,请回到请求来源地,重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数

问题 项目集成支付宝报错&#xff1a;调试错误&#xff0c;请回到请求来源地&#xff0c;重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数 详细问题 笔者按照支付宝沙箱支付快速集成版进行操作&#xff0c;操作完成访问所集成的支付宝&#xff0c;页面如下 …

微信小程序做登录密码显示隐藏效果

wxml 注意&#xff1a;在html中的input是通过切换type的属性值来实现隐藏显示的 在微信小程序的input里面type没有password属性 是通过password属性的true或者false来设置是否为密码框 <view class"input-item"><text class"tit">密码</…