软件测试(概念篇)

前言

从这篇博客开始,我们将开始正式学习测试,在开始第一次软件测试之前,我们需要先了解软件测试的一些基本概念。

这些基本概念将帮助我们更加明确工作的目标,以便于更快的融入到测试团队中去

在这里我们将回答以下问题:
什么是需求
什么是bug
什么是测试用例
开发模型和测试模型
配置管理和软件测试


衡量软件测试结果的依据 - 需求

在理解需求之前,我们需要了解一件事:软件是如何诞生的?

上市之后,就是我们见到的软件了。
下面,我们就来了解需求是什么?


需求的概念

需求:满足用户的期望或正式规定的文档(合同、标准、规范)所具有的条件和权限。
需求:包含用户需求和软件需求。

用户需求通常是简略的。【对应着上述中的 “用户的期望”】
软件需求,是用户需求的细化,以及具体的实现细节,最后演变成文档。【正式规定的文档】

这里提出一个很简单的问题:用户需求 和 软件需求 之间的关系,是怎样的?

软件需求 是 用户需求转化而来的。
又或者说:软件需求 是 用户需求 的 进一步的细化和分解。 


案例 - 用户需求 - 平台支持邮箱注册


从软件测试人员角度看需求

需求是测试人员进行软件测试工作的依据。

在具体设计测试用例的时候,首先需要搞清楚每一个业务需求对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,然后针对每个测试需求点设计测试用例。
过程如下:
业务需求—>软件功能需求点—>测试需求点—>测试用例

以“用户登录”为例,来阐述下整个过程

通过这样的方式,我们就可以有条不紊的完成我们职责。
而且,漏掉某一项测试的概率也会非常小。
既然漏掉了,再根据这个 按照需求制作的表格,一个个查证,很快就能锁定,并且补上对应测试。


为什么需求对软件测试人员如此重要

从软件功能需求出发,无遗漏的识别出测试需求是至关重要的,这将直接关系到用例的测试覆盖率
对于识别出的每个测试需求点,需要采用具体的设计测试用例的方法来进行测试用例的设计

其实还有一个非常重要的点:如何快速理解需求 ?

在未来的工作,通过参加公司的需求讨论会就行了,一般都会阐述这个需求的背景。
就类似公司一个公开的 学习 + 培训 的“课程”。


测试用例的概念

测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。
测试用例解决了两大问题:测什么,怎么测

案例

大家乍一看,可能就会觉得,这个测试用例很正常。
唯一缺点:就是不够详细。

是的,没有错!
测试用例,就如同 上图给标题一样“正确的用户名密码可以成功登录邮箱”,它是一个非常模糊 和 片面的说法。
而我们通过将其划分成 4 个部分,来将这个测试用例进行初步的划分,
而且,划分出的这几个部分,其实也是可以进行细分的!
划分成一个个测试点

测试用例 和 测试点,两者其实是一样的。
只不过测试点,更加详细和具体。


软件错误(BUG)的概念

只有当软件需求规格说明书(软件需求文档)存在并且合理,软件的功能不符合规格说明书,就是软件错误(BUG)。
如果软件需求规格说明书不存在,而用户的需求存在,并且合理,那么,软件的功能 和 用户的需求 不相符合,就是软件错误(BUG)。

简单来说:软件需求文档 和 用户的需求,就像是一个“圈 / 规则”。
跳出这个圈 / 打破这个规则,你的代码就是有问题的(存在BUG)。

记住!无论是哪种方式,一定要是合理的。

不合理,即代表代码是无法实现出 整个软件 / 软件上的某项功能 ,
以后在工作的时候,就经常会遇到 用户提出的一些不合理的需求。
通常 用户提出的需求,都是会存在 一些 看似美好的想法,但是实际上却实现不了。
那么,就会导致做出来的东西 与 期望中的效果,完全不同!


开发模型和测试模型

软件开发的生命周期

软件开发的生命周期,其实就是一个软件从无到有的过程:

需求分析  >>
  计划(如何进行开发软件,规定一个范围,一个方向)  >>
  设计(正式开始设计软件的具体功能…) >>
  代码实现 >>

   功能测试 >> 

(测试通过了)进行线上的运行维护

开发的五大模型

瀑布模型(Waterfall Model)

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

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

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

瀑布模型的一个最大缺陷在于:
可以运行的产品很迟才能被看到。
这会给项目带来很大的风险,尤其是集成的风险。
因为如果在需求引入的一个缺陷要到测试阶段甚至更后的阶段才发现,通常会导致前面阶
段的工作大面积返工,业界流行的说法是:“集成之日就是爆炸之日”。

尽管瀑布模型存在很大的缺陷,
例如,在前期阶段未发现的错误会传递并扩散到后面的阶段,而在后面阶段发现这些错误时,可能已经很难回头再修正,从而导致项目的失败。但是目前很多软件企业还是沿用了瀑布模型的线性思想,在这个基础上做出自己的修改。例如细化了各个阶段,在某些重点关注的阶段之间掺入迭代的思想。

在瀑布模型中,测试阶段处于软件实现后,这意味着必须在代码完成后有足够的时间预留给测试活动,否则将导致测试不充分,从而把缺陷直接遗留给用户。

简单来说:瀑布模型,一旦是开始项目操作,中途是没有 “刹车 和 回炉” 的操作。(非常头铁)
之所以称为 瀑布模型,你见过瀑布的水逆流而上吗?或者说,你见过瀑布的水,流到一半静止的吗?
采用 瀑布模型,是没有“后悔药”可以吃的。


螺旋模型(Spiral Model)

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

优点:
1、强调严格的全过程风险管理。
2、强调各开发阶段的质量。
3、提供机会检讨项目是否有价值继续下去。

缺点:
1、引入非常严格的风险识别、风险分析和风险控制,这对风险管理的技能水平提出了很高
的要求。这需要人员、资金和时间的投入。


增量模型 && 迭代模型

增量开发能显著降低项目风险,结合软件持续构建机制,构成了当今流行的软件工程最佳实践之一。

增量开发模型,鼓励用户反馈,在每个迭代过程中,促使开发小组以一种循环的、可预测的方式驱动产品的开发。
因此,在这种开发模式下,每一次的迭代都意味着可能有需求的更改、构建出新的可执行软件版本,意味着测试需要频繁进行,测试人员需要与开发人员更加紧密地协作。

增量通常和迭代混为一谈,但是其实两者是有区别的。
增量是逐块建造的概念,
例如画一幅人物画,我们可以先画人的头部,再画身体,再画手脚……

而迭代是反复求精的概念,同样是画人物画,我们可以采用先画整体轮廓,再勾勒出基本雏形,再细化、着色。


简单来说:
假设我们要实现一个系统,该系统需要 4个模块 ABCD。

增量模型: 将4个模块分为两个部分【AB,CD】,先完成 AB 模块,然后再来完成 CD 模块。【使每部分的开发联系起来】

迭代模型:先将4个模块的基础 框架搞定,然后在这个基础上,继续完善4个部分的一些代码。【你可以理解为盖房子,先打好基础,然后再一层层完善。】


敏捷模型

2001年,以Kent Beck、Alistair Cockbum、Ward Cunningham、Martin Fowler等人为首的“轻量”过程派聚集在犹他州的Snowbird,决定把“敏捷”(Agile)作为新的过程家族的名称。

在会议上,他们提出了《敏捷宣言》我们通过身体力行和帮助他人来揭示更好的软件开发方式。经由这项工怍,我们形成了如下价值观。

个体与交互重于过程和工具
可用的软件重于完备的文档
客户协作重于合同谈判
响应变化重于遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者。
核心思想:轻流程,轻文档,重目标,重产出,响应变化,

由敏捷宣言可以看出:
敏捷其实是有关软件开发的社会工程(Social Engineering)的。
敏捷的主要贡献在于他更多地思考了如何去激发开发人员的工作热情,这是在软件工程几十年的发展过程中相对被忽略的领域。
敏捷开发有很多种方式,其中 scrum(敏捷开发) 是比较流行的一种。


软件测试模型

V 模型

特点:
1、左边每一个阶段 和 右边的阶段,都是一一对应的
2、左边的每个阶段是右边测试每一个阶段的依据

3、它和瀑布模型一样,是串行执行。

其实 测试V模型 就是 开发的瀑布模型的变种。
因此,瀑布模型的缺点,V模型也有。
1、就像瀑布一样,水(阶段)只能往下流(只能顺着执行,不可能回头)。
2、测试介入晚,前期的问题,后期才发现,导致前期问题不能及时解决


W 模型

W 模型,也称作双V模型。

看图说话:就是两个 V 模型 组成的。

特点:

1、开发一个V,软件测试一个V【双卡双待】
换个说法:软件开发 和 软件测试 是 同步进行的。
这样做,就解决了 V 模型的缺陷:W模型能够及时发现,并处理前期出现的问题。

缺点:

它仍然是 串行执行的过程,它是不支持 需求的变化。
也就是说:W模型是不支持敏捷开发的。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue v-for

目录 前言:Vue.js 中的 v-for 指令 详解:v-for 指令的基本概念 用法:v-for 指令的实际应用 1. 列表渲染 2. 动态组件 3. 表单选项 4. 嵌套循环 5. 键值对遍历 解析:v-for 指令的优势和局限性 优势: 局限性&a…

希捷推出Exos系列24TB硬盘:配备增强型缓存 性能提高三倍

希捷推出了全新的Exos 24TB硬盘。其基于传统的CMR构建,为3.5英寸规格,转速为7200 RPM。 同时,Exos系列24TB硬盘拥有10片磁盘,每片磁盘的容量为2.4TB,是希捷存储密度最高的硬盘,适用于超大规模企业和数据中心…

s27.linux运维面试题分享

第一章 计算机基础和Linux安装 1.冯诺依曼体系结构组成部分 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。2.Linux哲学思想(或Liunx基本原则、思想、规则) 一切都是一个文件(包括硬件)。小型,单一用途的程序。连…

贪心算法(1)--经典贪心算法

目录 一、活动安排问题 二、最优装载问题 三、分数背包问题 四、多机调度问题 一、活动安排问题 1、策略 活动安排问题:设有n个活动的集合E{1,2,...,n},每个活动i都有一个使用该资源的起始时间和一个结束时间,且。如果选择了活动i则它在…

网络编程的学习初篇

网络原理初始 网络原理和网络编程[重要] 网络能够跨主机通信! 我们未来工作,很可能是成为后端开发工程师,写服务器,和客户端通信,肯定会涉及到网络. 网络初始 计算机网络的由来 ~~ 计算机网络这是计科相关专业最核心的专业课!!! 计算机是咋来的??最初是用来计算弹道导弹的轨…

Kubernetes技术与架构-Ingress Controller

Ingress Controller控制器是实现Ingress对象的定义的组件,也即网关,负责Kubernetes集群内流量的分发,Kubernetes可以运行多个Ingress Controller控制器实例,不同的Ingress定义可以使用不同的Ingress Controller控制器实现&#xf…

搞个微信小程序002:个人信息

新建一个用于&#xff0c;和001中一样&#xff0c;然后&#xff0c;就改掉两个文件&#xff1a; index.wxml: <view><!-- 头像区域 --><view class"top"><view class"user-img"><image src"/images/tx.png"><…

PostgreSQL 插件 CREATE EXTENSION 原理

PostgreSQL 提供了丰富的数据库内核编程接口&#xff0c;允许开发者在不修改任何 Postgres 核心代码的情况下以插件的形式将自己的代码融入内核&#xff0c;扩展数据库功能。本文探究了 PostgreSQL 插件的一般源码组成&#xff0c;梳理插件的源码内容和实现方式&#xff1b;并介…

mybatis写sql

批量查询 <select id"getPreIds" resultType"java.lang.String"parameterType"java.util.List">SELECT pre_batch_id FROM public.mine_data_quality_check_record WHERE deleted0<if test"list ! null">AND pre_batch…

codeshell安装配置

codeshell安装配置 1 注意事项1.1 Python版本问题 2 codeshell环境搭建2.1 codeshell使用软件各版本2.2 软件下载2.3 codeshell使用环境安装2.3.1 python-3.10.9-amd64.exe安装2.3.2 Anaconda3-2022.10-Windows-x86_64.exe安装2.3.3 创建环境2.3.4 Pytorch安装2.3.5 transforme…

C++初阶 入门(2)

目录 一、缺省函数 1.1什么是缺省函数 1.2为什么要有缺省函数 1.3使用缺省函数 1.4测试代码 二、函数重载 2.1什么是函数重载 2.2为什么要有函数重载 2.3什么情况构成函数重载 2.4函数重载例子及代码 三、引用 3.1什么是引用 3.2如何引用 ​3.3常引用(可略过) 3…

CCF CSP认证历年题目自练Day38

题目 试题编号&#xff1a; 201409-3 试题名称&#xff1a; 字符串匹配 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   给出一个字符串和多行文字&#xff0c;在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感…

酒类商城小程序怎么做

随着互联网的快速发展&#xff0c;线上购物越来越普及。酒类商品也慢慢转向线上销售&#xff0c;如何搭建一个属于自己的酒类小程序商城呢&#xff1f;下面就让我们一起来看看吧&#xff01; 一、登录乔拓云平台 首先&#xff0c;我们需要进入乔拓云平台的后台&#xff0c;点击…

《向量数据库》——Zilliz X Dify.AI ,快速打造知识库 AI 应用

Zilliz 大模型生态矩阵再迎新伙伴!近日,Zilliz 和 Dify.AI 达成合作,Zilliz 旗下的产品 Zilliz Cloud、Milvus 与开源 LLMOps 平台 Dify 社区版进行了深度集成。 01. Zilliz Cloud v.s. Dify Dify 作为开源的 LLMs App 技术栈,在此前已支持丰富多元的大型语言模型的接入,…

【React Router】React Router学习笔记

React Router学习笔记 React Router1.什么是React Router?2.为什么要用React Router?3.基础3.1 路由配置3.2 路由匹配原理3.3 History3.3.1 browerHistory3.3.2 hashHistory3.3.3 createMemoryHistory3.3.4 实现示例 3.4 默认路由(IndexRoute)与IndexLink3.4.1 IndexRoute3.4…

[SQL开发笔记]WHERE子句 : 用于提取满足指定条件的记录

SELECT DISTINCT语句用户返回列表的唯一值&#xff1a;这是一个很特定的条件&#xff0c;假设我需要考虑很多中限制条件进行查询呢&#xff1f;这时我们就可以使用WHERE子句进行条件的限定 一、功能描述&#xff1a; WHERE子句用于提取满足指定条件的记录&#xff1b; 二、WH…

报错解决:libcudart.so和libprotobuf.so链接库未找到

报错解决&#xff1a;libcudart.so和libprotobuf.so链接库未找到 libcudart.so链接库未找到原因解决方法 libprotobuf.so链接库未找到原因解决方法 此博客介绍了博主在编译软件包时遇到的两个报错&#xff0c;主要是libcudart和libprotobuf两个动态链接库未找到的问题&#xff…

Nginx安装配置项目部署然后加SSL

个人操作笔记记录 第一步&#xff1a;把 nginx 的源码包nginx-1.8.0.tar.gz上传到 linux 系统 第二步&#xff1a;解压缩 tar zxvf nginx-1.8.0.tar.gz 第三步&#xff1a;进入nginx-1.8.0目录 使用 configure 命令创建一 makeFile 文件。 直接复制过去运行 ./configur…

【RocketMQ系列十二】RocketMQ集群核心概念之主从复制生产者负载均衡策略消费者负载均衡策略

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

KingBase库模式表空间和客户端认证(kylin)

库、模式、表空间 数据库 数据库基集簇与数据库实例 KES集簇是由单个KES实例管理的数据库的集合KES集簇中的库使用相同的全局配置文件和监听端口、共享相关的进程和内存结构同一数据库集簇中的进程、相关的内存结构统称为实例 数据库 数据库是一个长期存储在计算机内的、有…