初识软件测试

news2024/9/27 2:36:07

作者:~小明学编程 

文章专栏:测试开发

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

什么是软件测试?

软件测试和软件开发的区别?

调试和测试的区别?

优秀的测试人员应该具备哪些素质?

需求

用户需求

软件需求

什么是BUG

测试用例的概念

软件的生命周期

开发模型

瀑布模型

螺旋模型

增量迭代模型

敏捷模型

测试模型

软件测试V模型

软件测试W模型

软件测试的生命周期

软件测试的流程

如何描述一个BUG

定义BUG的级别

BUG的生命周期

​编辑与开发人员产生争执怎么办


什么是软件测试?

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

通俗的来说 : 软件测试就是执行和运行软件的过程,为了发现软件功能和需求不相符合的地方,或者寻找实际输出和预期输出之间的差异。

1.验证软件的功能是否能正常的执行。

2.验证软件的功能是否能满足用户的需求。

软件测试和软件开发的区别?

  • 软件开发主要是以编码为主而软件测试是以测试为主。
  • 一般情况下软件开发的广度小,但是专业度高,而软件测试的广度高但是专业度低。
  • 一般比研发轻松,但敏捷模式下差距不大,产品发布前压力比较大 。
  • 测试要求更广泛:业务能力,设计和架构分析能力,测试手段和工具使用,用户模型分析和理解,编程能力。

调试和测试的区别?

目的:调试是为了解决程序的bug,而测试是为了找出程序的bug。

参与角色:调试是开发人员参与的,而测试是测试和开发人员都有。

执行阶段:调试是在编码阶段进行的而测试则贯穿软件的整个生命周期。

优秀的测试人员应该具备哪些素质?

1.思维模式:

逆向思维:开发盖房子,测试拆房子。不走寻常路。

例如我们在打游戏的时候一个分数最多显示99999这个时候我就想要知道如过我超过这个分数会怎么样。

发散性思维:探求多项答案。

在做力扣的时候遇到一些测试案例很多的里面会有各种奇奇怪怪的测试样例,这个时候就很佩服出这些样例的人。

2.兴趣:

因为自己比较喜欢测试这个方向,相比于盖房子我觉得拆房子发现房子的问题更加的有趣。

3.性格特征:

 好奇心,成就感,敏感,不浮躁,善于怀疑。

4.能力:

 快速学习能力,沟通能力,文字能力,开发能力。

5.责任感和压力:

责任感:测试往往是产品的最后一个检验者;测试的工作成效很难衡量,测试用例执行、bug数目的多少都无法说明产品是否能够交给用户使用。所以,责任感是最重要的测试必备素质之一。

压力:来自开发人员、用户、上级、自己的压力。测试人员的压力比想象中的要大。

需求

用户需求

可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成
的任务。该需求一般比较简略

软件需求

或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。
大多数公司在进行软件开发的时候会把用户需求转化为软件需求,开发人员和测试人员工作的直接依据就是软件需求。

什么是BUG

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

测试用例的概念

测试用例是为了实施测试而向被测试系统提供的一组集合,包括,测试标题,测试步骤,前置条件,测试预期,测试环境,测试平台等。

测试用例主要解决了两个问题:测试什么,怎么测。

测试用例 ecsp-439:
用户注册成功
步骤动作:期望的结果:
进入注册页面,选择注册系统展现注册页面
输入符合要求的单位名称、单位邮箱、密码、确认密
码、组织机构代码、验证码,并确认同意《用户注册
协议》,提交注册信息
系统进行注册操作,发送激活邮件。注册
成功后,跳转到注册成功页面,并提示用
户进行激活操作。
进入注册用的邮箱,进行激活操作激活成功
用注册的邮箱和密码,进行登录操作登录成功,系统展示欢迎页面
测试方式手工
重要性重要
测试环境CHROME,IE10+
测试前提系统运行正常,邮件服务器已开启
功能模块注册登录

软件的生命周期

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

开发模型

瀑布模型

瀑布模型在软件工程中占有重要地位,是所有其他模型的基础框架。瀑布模型的每一个阶段都只执行一次,因此是线性顺序进行的软件开发模式。

优点:强调开发的阶段性; 强调早期计划及需求调查; 强调产品测试。

缺点:

  • 依赖于早期进行的唯一一次需求调查,不能适应需求的变化。
  • 由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程。
  • 风险往往迟至后期的测试阶段才显露,因而失去及早纠正的机会。

螺旋模型


 

 一般在软件开发初期阶段需求不是很明确时,采用渐进式的开发模式。螺旋模型是渐进式开发模型的代表之一。
这对于那些规模庞大、复杂度高、风险大的项目尤其适合。这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟随开发的迭代而迭代。因此,回归测试的重要性就不言而喻了。

  • 优点: 强调严格的全过程风险管理。 强调各开发阶段的质量。 提供机会检讨项目是否有价值继续下去。
  • 缺点: 引入非常严格的风险识别、风险分析和风险控制,这对风险管理的技能水平提出了很高的要求。这需要人员、资金和时间的投入。

增量迭代模型

增量开发能显著降低项目风险,结合软件持续构建机制,构成了当今流行的软件工程最佳实践之一。增量开发模型,鼓励用户反馈,在每个迭代过程中,促使开发小组以一种循环的、可预测的方式驱动产品的开发。因此,在这种开发模式下,每一次的迭代都意味着可能有需求的更改、构建出新的可执行软件版本,意味着测试需要频繁进行,测试人员需要与开发人员更加紧密地协作。
增量通常和迭代混为一谈,但是其实两者是有区别的。增量是逐块建造的概念,例如画一幅人物画,我们可以先画人的头部,再画身体,再画手脚……而迭代是反复求精的概念,同样是画人物画,我们可以采用先画整体轮廓,再勾勒出基本雏形,再细化、着色。

敏捷模型

敏捷宣言:

个体与交互重于过程和工具:轻流程,强调人与人之间面对面的高效交流。
可用的软件重于完备的文档:轻文档,重产出。
客户协作重于合同谈判
响应变化重于遵循计划:用户可能会增加功能或者修改功能。
在每对比对中,后者并非全无价值,但我们更看重前者。

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

scrum里面的角色:scrum由product owner(产品经理)、scrum master(项目经理)和team(研发团队)组成

  1. 其中product owner负责整理user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
  2. scrum master 负责召开各种会议,协调项目,为研发团队服务。
  3. 研发团队则由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品。

scrum的流程:

  1. 发布会议:产品经理将会告诉我们我们有哪些需求,制定我们的需求列表。
  2. 迭代计划会议:把需求一一的列举出来,分解出所有的需求并且将这些需求分给开发人员,划分负责人,初步工时。
  3. 每日例会:报告一下我们每个负责人所负责的需求都做到哪了,并且这个过程遇到了哪些问题。
  4. 演示会议:经过一段时间的开发,我们的需求已经全部都做完了,然后我们的负责人需要给用户进行演示这个软件到底该怎么去使用,在这个过程中我们的用户可以提出修改,或者添加需求然后我们再次经历前面一轮。
  5. 回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果。

测试模型

软件测试V模型

  • 优点:明确的标注了测试过程中存在的不同类型的测试,并且清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系。
  • 缺点:仅仅把测试作为在编码之后的一个阶段,未在需求阶段就进入测试,导致发现问题的时间较晚。
     

软件测试W模型

W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分
别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。

  • 优点:有利于尽早地全面的发现问题。
  • 缺点:需求、设计、编码等活动被视为串行的;测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作,无法支持敏捷开发模式,对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。

软件测试的生命周期

软件测试的流程

软件测试的生命周期: 需求分析→测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估。

需求分析阶段 :阅读需求,理解需求,分析需求点,参与需求评审会议。

测试计划阶段 :主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试 范围,进度安排,人力物力分配,整体测试策略的制定。
设计测试阶段适当的了解设计,搭建测试用例框架,根据需求和设计编写测试用例。
测试执行阶段 :搭建环境准备数据,执行 冒烟测试 (预测试)然后进入正式测试(系统测试、回归测试、交叉测试、自由测试),bug 管理直到测试结束。
测试评估阶段 :输出测试报告,确认是否可以上线。

如何描述一个BUG

一个合格的BUG描述应该具备下面几个部分:

1.发现问题的版本:开发人员需要知道出现问题的版本,才能够获取对应版本的代码来重现故障。并且版本的标识也有利于统计和分析每个版本的质量。

2.问题出现的环境:环境分为硬件环境和软件环境,如果是web项目,需要描述浏览器版本,客户机操作系统等,如果是app项目,需要描述机型、分辨率、操作系统版本等。详细的环境描述有利于故障的定位。

3.错误重现的步骤:描述问题重现的最短步骤。

4.预期行为的描述:要让开发人员知道怎么样才是正确的,尤其要以用户的角度来描述程序的行为是怎样的。如果是依据需求提出的故障,能写明需求的来源是最好的。

5.错误行为的描述:描述错误的现象。crash等可以上传log,UI问题可以有截图。

定义BUG的级别

bug的定义每个公司都不一致,在定义级别之前需要查看公司规范。

一般情况下我们将BUG分为四个等级:

1.崩溃:阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)。

2.严重:系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)。

3.一般:功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等(该问题实际测试中存在最多)。

4.次要:界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)。

BUG的生命周期


与开发人员产生争执怎么办

1、先检查自身,是否bug描述不清楚

如果能正确地、高质量地录入一个Bug,那么基本上已经成功地与开发人员沟通了一大半的关于Bug的信息。但是总有“书难达意”的耐候,这时就需要测试人员主动与开发人员进行沟通了。 如果测试人员发现在写完一个缺陷后,好像还有很多关于Bug的信息没有表达出来,或者很难用书面语言表达出来时,就应该在提交Bug后,马上找相关的程序员解释刚才录入的Bug,确保程序员明白Bug描述的意思,而不要等待开发人员找自己了解更多的信息。

2.站在用户角度考虑问题

应该让开发人员了解到Bug对用户可能造成的困扰,这样才能促使开发人员更加积极地、高质量地修改Bug。在争执时,可以问一句:如果你是用户,你可以接受么?

3.提高自身的技术和业务水平. 不光要提出问题, 最好也能提出解决方案

提高自身的业务和技术水平,不但要做到能提出问题,还能够提出解决问题的思路。这样才能更让人信服。在工作中,你会发现同一个bug,资深测试工程师提出和初级测试工程师提出,两者的结果完全不同,两者最大的差别是资深测试工程师往往会提出解决方案。而长此以往,权威性逐渐的建立起来,那么开发人员看到bug的第一反应,就是这是一个bug,而不是这是一个bug吗?

4.发起Bug评审

Bug评审要注意的问题 缺陷的评审应该包括以下两个层面

● 决定如何处理Bug。

● 分析缺陷产生的原因,找出预防的对策。
 

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

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

相关文章

cherry-pick的定义和使用方法

1、定义 使用遴选(cherry-pick)命令,Git 可以让你将任何分支中的个别提交合并到你当前的 Git HEAD 分支中。当执行 git merge 或者 git rebase 时,一个分支的所有提交都会被合并。cherry-pick 命令允许你选择单个提交进行整合。 …

正点原子STM32(基于HAL库)3

目录RTC 实时时钟实验RTC 时钟简介RTC 框图RTC 寄存器硬件设计低功耗实验电源控制(PWR)简介电源系统电源监控电源管理PVD 电压监控实验PWR 寄存器硬件设计睡眠模式实验硬件设计停止模式实验PWR 寄存器硬件设计待机模式实验PWR 寄存器硬件设计ADC 实验ADC…

全国产加固以太网交换机选择技巧

全国产加固交换机用于连接以太网设备:首先接收由某台设备发出的数据帧,然后再将这些帧传送到与其它以太网设备相连的适当交换机端口上。随着它传送这些帧,学习并掌握以太网设备的位置,并用这些信息来决定该用哪些端口来传送帧&…

83. 深度循环神经网络及代码实现

1. 回顾:循环神经网络 2. 更深 再看公式: 3. 总结 深度循环神经网络使用多个隐藏层来获得更多的非线性性 4. 代码简洁实现 实现多层循环神经网络所需的许多逻辑细节在高级API中都是现成的。 简单起见,我们仅示范使用此类内置函数的实现方式…

虚拟机本地搭建Hadoop集群教程

Hadoop概述 狭义下Hadoop是Apache的一套开源软件,用java实现,广义上是围绕Hadoop打造的大数据生态圈 http://hadoop.apache.org Hadoop核心组件: HDFS(分布式文件存储系统):解决海量数据存储YARN&#…

Spring 常用组件

一. Spring 解决了什么问题 Spring 核心功能是整合,提供一个管理组件的容器, 以 Bean的形式管理组件及对象。Spring 采用分层架构和组件化设计,允许分层,插件化选择组件。二. Spring 整体架构 Spring4架构图 三. Spring 组件 1.…

Spring | 整合MyBatis中SqlSessionTemplate和MapperScannerConfigurer类的使用

0️⃣初始配置&#x1f6a9;pom.xml导入依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…

大数据开发工程师考试分享

在2022年年尾伴随着疫情政策的放开&#xff0c;压抑了3年的活力与生机正在悄然地蓄势待发。回顾这一整年&#xff0c;我们经历了核酸考验&#xff0c;互联网裁员危机&#xff0c;以及正面面对新冠等等。总之&#xff0c;在这一年无论是生活还是工作&#xff0c;大家都面临了不同…

大公司VS小公司,怎样选择更有前途?

你好&#xff0c;我是王喆。 学完上一讲&#xff0c;你已经知道了如何选择一个有前景的职业方向。在大方向确定好之后&#xff0c;接下来的问题就是如何在这个方向上进行具体的职业发展规划了。 我想你一定听说过很多牛人的“职场升级”故事&#xff1a;工作3年升到P7&#x…

春节不打烊,这份安全应急指南请收好!

春节作为中国的传统节日&#xff0c;不仅是各个企业的营销重点周期&#xff0c;也是黑灰产高发节点之一。尤其是伴随着互联网的兴起&#xff0c;春节红包逐渐成为主流营销节目&#xff0c;从支付宝的集五福到各种各样的红包活动&#xff0c;不断翻新的营销花样让黑灰产们赚的盆…

JUC面试(三)——CAS

CAS CAS的全称是Compare-And-Swap&#xff0c;它是CPU并发原语&#xff0c;自旋锁 它的功能是判断内存某个位置的值是否为期望值&#xff0c;如果是则更改为新的值&#xff0c;这个过程是原子的 CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中…

深度学习 GAN生成对抗网络-1010格式数据生成简单案例

一、前言 本文不花费大量的篇幅来推导数学公式&#xff0c;而是使用一个非常简单的案例来帮助我们了解GAN生成对抗网络。 二、GAN概念 生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;包含生成器&#xff08;Generator&#xff09;和鉴…

HyperLogLog和Set比较 !!!

HyperLogLog和Set比较 HyperLogLog HyperLogLog常用于大数据量的统计&#xff0c; 比如页面访问量统计或者用户访问量统计&#xff0c;作为一种概率数据结构&#xff0c;HyperLogLog 以完美的精度换取高效的空间利用率。Redis HyperLogLog 实现最多使用 12 KB&#xff0c;并提…

docker推送镜像至阿里私有镜像仓库

文章目录一、注册阿里私有镜像仓库二、将公共镜像推送至私有镜像仓库1、首先拉取到mysql镜像2、登录阿里云Docker Registry&#xff08;这里的信息要更换成自己的&#xff09;3、将mysql镜像推送至Registry4、查看5、拉取镜像三、将正在启动的容器导出并推送至私有仓库1、将启动…

二分查找的最多比较次数

答案 对于二分搜索次数最多的问题&#xff0c;计算公式为&#xff0c;其中a , b , n 均为整数 当顺序表有n个关键字时候&#xff0c;查找失败&#xff0c;至少需要比较a次关键字 查找成功&#xff0c;至少需要b次 举例 已有从小到大排序的10000个数据&#xff0c;用二分查…

密码框限制xxs注入字符处理

<template><a-form-model-item ref"password" prop"password"><a-input-passwordplaceholder"请输入登录密码"v-model"cusForm.password"/></a-form-model-item> </template><script> export def…

「自控原理」3.2 二阶系统时域分析

本节介绍二阶系统的时域分析&#xff0c;主要介绍欠阻尼情况下的时间响应与动态性能指标 文章目录概述极点的表示方法无阻尼响应临界阻尼响应过阻尼响应欠阻尼响应欠阻尼系统的单位阶跃响应动态性能与极点分布的关系例题改善二阶系统动态性能的措施概述 二阶系统时间响应比较重…

elementUI如何设置input不可编辑

打开一个vue文件&#xff0c;添加一个input标签。如图&#xff1a; 添加disabled设置不可编辑。如图&#xff1a; 保存vue文件后使用浏览器打开&#xff0c;页面上显示的input已经实现不可编辑效果。如图&#xff1a; 参考&#xff1a;elementUI如何设置input不可编辑-百度…

出现死锁的场景分析及解决方法

在上一篇互斥锁的时候最后使用Account.class作为互斥锁&#xff0c;来解决转载问题&#xff0c;所有的账户转账操作都是串行的&#xff0c;性能太差。 我们可以考虑缩小锁定的范围&#xff0c;使用细粒度的锁&#xff0c;来提高并行度。例如用两把锁&#xff0c;转出账本一把&…

Python - 数据容器set(集合)

目录 集合的定义 集合的常用操作 添加新元素 add 移除元素 remove 从集合中随机取出元素 pop 清空集合 clear 取出2个集合的差集 difference 消除2个集合的交集 difference_update 2个集合合并 union for循环遍历 set的实用应用 集合的定义 不支持元素的重复&#…