【软件测试】最佳软件测试基础入门教程

news2024/11/28 6:43:49

目录

    • 前言
    • 一、顺序式开发模型
    • 二、 瀑布模型
    • 三 、V型模型
    • 四、迭代和增量开发模型
    • 五、 项目和产品背景下的软件开发

前言

软件开发生命周期的测试

本章简要介绍了软件开发项目中常用的生命周期模型,并解释了测试在每个模型中扮演的角色。它讨论了各种测试级别和测试类型之间的区别,并解释了这些在开发过程中的应用位置和方式。

大多数软件开发项目是按照事先选择的软件开发生命周期模型来计划和执行的。这种模型也被称为软件开发过程模型,或者更简洁地称为开发模型。

这样的模型将项目划分为独立的部分、阶段或迭代,并将由此产生的任务和活动安排在相应的逻辑顺序中。此外,该模型通常描述了每项任务所分配的角色,以及项目的哪位参与者负责每项任务。在各个阶段要使用的开发方法通常也会被详细描述。

每个开发模型都有自己的测试概念,
这些概念在意义和范围上可能有很大的不同。下面几节将从测试人员的角度详细介绍流行的开发模式。

  • 生命周期模型的类型

目前使用的两种基本的开发模式是顺序式和迭代式/增量式。下面的章节包括对这两种类型的讨论。

一、顺序式开发模型

顺序式开发模型将开发过程中涉及的活动以线性方式安排。这里的假设是,当开发模型的所有阶段都完成后,产品及其特征集的开发就完成了。这个模型没有考虑到各阶段或产品迭代之间的重叠。以这种方式运行的项目的计划交付日期可能在未来几个月甚至几年。

二、 瀑布模型

每个开发阶段只有在前一个阶段完成后才能开始。然而,该模型可以在相邻的阶段之间产生反馈回路,要求在前一个阶段进行修改。图3-1显示了罗伊斯的原始模型中所包含的阶段:

在这里插入图片描述

这个模型的主要缺点是,它把测试作为一个单一的活动捆绑在项目的最后。测试只有在所有其他开发活动完成后才进行,因此被看作是一种 “最终检查”,类似于检查出厂的货物。在这种情况下,测试并不被看作是在整个开发过程中进行的活动。

三 、V型模型

V模型是瀑布模型的延伸 [ISO/IEC 12207])。这个模型的出现对开发过程中的测试方式产生了巨大而持久的影响。每个测试人员和每个开发人员都应该学习V模型,了解它是如何整合测试过程的。即使项目是基于不同的开发模式,这里说明的原则仍然可以应用。

其基本思想是,开发和测试是具有同等价值的相应活动。在图中,它们由 "V "的两个分支来说明:

在这里插入图片描述

  • 我们是否正确的建立了系统?

验证(Verification)包括检查测试对象是否完全和正确地履行了它的规格。换句话说,测试对象(即相应开发阶段的输出)被检查是否按照其规格(相应阶段的输入)"正确 "开发。

  • 我们是否建立了正确的系统?

确认(Validation)包括检查测试对象在其预期的环境中是否真正可用。换句话说,测试人员检查测试对象是否真正解决了分配给它的问题,以及它是否适合其预期用途。
实际上,每个测试都包括这两个方面,尽管验证的份额随着每个抽象层次的增加而增加。组件测试主要侧重于验证,而验收测试则主要是确认。

  • V型模式的特点:

    • 开发和测试活动分别进行(用左边和右边的分支表示),但对项目的成功同样重要。

    • 有助于直观地了解测试的验证/确认方面。

    • 区分了协作测试的层次,即每个层次都是针对其相应的开发层次进行测试。

    • 尽早测试的原则

    • V型模型给人的印象是测试在开发过程的后期开始,在实施之后。这是不对的! 在模型的右侧分支的测试级别代表了测试执行的不同阶段。测试准备(计划、分析和设计)必须在左侧分支的相应开发步骤中开始。

四、迭代和增量开发模型

  • 迭代开发

迭代开发的基本思想是,开发团队可以利用他们从以前的开发阶段获得的经验,以及现实世界和客户对早期系统版本的反馈,在未来的迭代中改进该产品。这种改进可以采取故障修正或改变、扩展或增加特定功能的形式。所有这些方案的主要目标是一步一步地改进产品,以便越来越准确地满足客户的期望。

  • 增量开发

增量开发背后的理念是按预先计划的阶段开发产品,每完成一个阶段就提供一个功能更全面的产品版本(增量)。增量的大小可以有很大的不同–例如,从改变一个简单的网页布局到增加一个具有额外功能的完整新模块。增量开发的主要目的是尽量缩短上市时间–即发布一个简单的产品版本(或一个功能的简单版本),以尽快为客户提供一个产品或功能的工作版本。然后,根据客户的反应和愿望,不断地提供进一步的改进。

  • 迭代-增量式开发

在实践中,这两种方法论的边界是模糊的,它们通常被称为迭代-增量开发。两者的一个决定性特征是,每个产品的发布都能使你从客户和/或终端用户那里获得定期的、早期的反馈。这减少了开发一个不符合客户期望的系统的风险。
迭代-递增组合模型的例子有:螺旋模型、快速应用开发(RAD)、Rational统一流程(RUP)和进化开发。

  • 敏捷软件开发

所有形式的敏捷软件开发都是迭代-递增的开发模式。最著名的敏捷模型是: 极限编程(XP),看板,以及Scrum。近年来,Scrum已经成为其中最流行的一种,并得到了极大的普及。

在这里插入图片描述

  • 根据迭代的节奏进行测试

创建新的增量/版本的速度因模式不同而不同。非敏捷的迭代增量项目倾向于预见六个月到一年的发布周期,有时甚至更长,相反,敏捷模式试图将发布周期减少到每季度、每月、甚至每周的节奏。

在这里,测试必须适应这样短的发布周期。例如,这意味着每个组件都需要可重复使用的测试用例,这些测试用例可以很容易地在每个新的增量中立即重复。如果不满足这个条件,你就有可能减少系统的可靠性,从增量到增量。

每个增量还需要新的测试用例,涵盖任何额外的功能,这意味着你需要维护和执行的测试用例的数量(在每个版本)随着时间的推移而增加。发布周期越短,所有的测试用例在所有分配的发布时间框架内得到满意的执行仍然很关键,但变得更加困难。因此,在使你的测试适应敏捷开发时,测试自动化是一个重要工具。

  • 持续集成和持续部署

一旦你建立了可靠的自动化测试环境,你就可以把它用于每一个新的构建。当组件被修改时,它会被集成到之前的完整构建中,然后再进行一次新的自动化测试运行。任何出现的故障都应该在短期内修复。这样一来,项目总是有一个完全集成和测试的系统在其测试环境中运行。这种方法被称为 “持续集成”(CI)。

这种方法可以用 “持续部署”(CD)来加强: 如果测试运行(在CI期间)是无故障的,经过测试的系统会自动复制到生产环境中,并安装在那里,从而以准备运行的状态部署。

  • 持续交付=持续测试

将CI和CD结合起来的结果是叫做 "持续交付 "的过程。只有当你有基本自动化的测试环境,使你能够进行 "持续测试 "时,这些技术才能成功应用。

五、 项目和产品背景下的软件开发

对开发和测试的计划和可追溯性的要求因环境不同而不同。生命周期模型对特定产品的开发是否合适,也取决于其开发和使用的背景。以下基于项目和产品的因素在决定使用哪种模式时起着作用:

公司的业务重点、项目目标和风险状况。例如,如果进入市场的时间是主要要求。

正在开发的产品的类型。一个小的(也许是部门内部的)系统的开发过程没有大型项目的要求那么高。我们的VSR-II案例研究项目。这样的大型产品往往是使用多种模型开发的。

产品使用的市场条件和技术环境。例如,为物联网(IoT)使用而开发的产品系列可以由多种类型的对象(设备、服务、平台等)组成,每一种对象都使用特定的、合适的生命周期模型来开发。由于物联网对象被长期大量使用,如果它们的操作使用(分发、更新、退役等)被反映在生命周期模型中的特定阶段或任务目录中,那是有意义的。这使得开发这种系统的新版本特别具有挑战性。

产品风险。例如,在设计和实施车辆制动系统时涉及的安全方面。

组织和文化方面。例如,国际团队内部沟通产生的困难会使迭代或敏捷开发更加困难。
案例研究: VSR-II项目中的混合开发模式

VSR-II项目的目标之一是使其 “尽可能的敏捷”,所以DreamCar模块和所有基于浏览器的前端组件和子系统都是在敏捷Scrum环境下开发的。然而,由于它们是安全关键型的,ConnectedCar组件将使用传统的V型模式开发。

原型开发也是项目早期的一个选择,一旦实验阶段完成,你可以在项目的其余部分改用渐进式方法。

  • 定制

开发模型可以而且应该被调整和定制,以便在特定的项目中使用。这种适应过程被称为 “定制”。

定制可以涉及结合测试层次或某些测试活动,并特别组织它们以适应手头的项目。例如,当把现成的商业软件集成到更大的系统中时,集成测试阶段的互操作性测试(例如,当与现有的基础设施或系统集成时)可以由客户而不是供应商进行,验收测试(功能和非功能的操作和客户验收测试)也是如此。更多细节见3.4和3.5节。

然后,量身定制的开发模型包括对所有项目参与者具有约束力的所需活动、时间尺度和目标的看法。任何详细的计划(时间表、人员配置和基础设施分配)都可以利用并建立在定制的开发模型上。

  • 好的测试的属性

无论你选择哪种生命周期模型,你的定制应该支持良好和有效的测试。你的测试方法应该包括以下属性:

  • 测试及其相关活动尽可能早地包括在生命周期中–例如,起草测试用例和建立测试环境(见上文早期测试的原则)。
  • 每一个开发活动,都有相应的测试活动计划和执行。
  • 测试活动被专门计划和管理,以适应它们所属的测试级别的目标。
  • 测试分析和测试设计在相应的开发阶段开始。
  • 一旦工作产品(需求、用户故事、设计文档、代码等)存在,测试人员就会参与讨论,完善它们。测试人员应该尽早并持续地参与这个完善的过程。

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

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

相关文章

python-PyQt项目实战案例:制作一个简单的图像处理工具

文章目录 1.设计UI2.编写功能代码2.1 初始化ui界面及类成员参数2.2 添加菜单栏2.3 建立信号/槽连接 3.主要功能代码及效果4.设置图像自动调节长宽尺寸但不改变长宽比例参考文献 1.设计UI 对于UI的设计可以通过qt designer直接绘制,也可以通过编写python代码实现。当…

10万+收藏!10万转发!AI绘画如何助力育儿赛道引爆短视频平台?

在自媒体领域,内容创作的竞争日益激烈,但育儿自媒体一直是一块热门且持久的“金矿”,吸引了无数创作者投身其中。然而,如何在这片红海中脱颖而出,成为了许多创作者面临的难题。而AI绘画的出现,无疑解决了创…

约束使用方法:

设置主键: 该列的值用来唯一标识表中每一行,用于强制表的实体完整性。这样的列定义为表的主键,也就是说主键的列中不允许有相同的数据。 设置默认: CREATE TABLE pet( #not null 非空 ZEROFILL 补零 先补零,在非空 id…

解锁机器人视觉与人工智能的潜力,从“盲人机器”改造成有视觉能力的机器人(上)

正如人类依赖眼睛和大脑来解读世界,机器人也需要自己的视觉系统来有效运作。没有视觉,机器人就如同蒙上双眼的人类,仅能执行预编程的命令,容易碰撞障碍物,并犯下代价高昂的错误。这正是机器人视觉发挥作用的地方&#…

k8s1.27部署ingress 1.11.2

k8s1.27部署ingress 1.11.2 要求: 1、使用主机网络。 2、多节点部署,以来标签:isingressistrue ingress1.11.2支持版本 官方参考链接: https://github.com/kubernetes/ingress-nginx/ 官网yaml https://raw.githubuserconten…

DYNPRO_SYNTAX_ERROR 主屏幕调用子屏幕,程序运行时错误

文章目录 问题描述问题查找和解决 问题描述 问题查找和解决

比特币社区心心念念的BTCFi进展如何了?——比特币与DeFi的未来

比特币在去中心化金融(DeFi)中的角色正在发生深刻变革。作为全球首个加密货币,比特币的主要用途从最初的点对点支付正逐渐转向更复杂的金融应用。通过BTCFi(比特币与DeFi的结合),比特币生态系统正加速崛起&…

QD1-P16 HTML 按钮标签(button)

本节学习 HTML 常用标签&#xff1a;button ‍ 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p16 ‍ ​<button>​ 标签在 HTML 中用于创建按钮&#xff0c;它是一个交互式元素&#xff0c;通常用于提交表单或触发某个脚本。以下是 <button>​ 标签的一些基本…

基于FPGA的DDS信号发生器(图文并茂+深度原理解析)

篇幅有限&#xff0c;本文详细源文件已打包 至个人主页资源&#xff0c;需要自取...... 前言 DDS&#xff08;直接数字合成&#xff09;技术是先进的频率合成手段&#xff0c;在数字信号处理与硬件实现领域作用关键。它因低成本、低功耗、高分辨率以及快速转换时间等优点备受认…

C++ stack和queue的使用介绍和模拟实现

内容摘要&#xff1a; 本文介绍了stack和queue的构造函数和一些成员函数&#xff0c;并模拟实现了stack和queue&#xff0c;分析了为什么选择deque作为适配器默认封装的对象 stack的介绍 栈是只能够在一端进行插入和删除的&#xff0c;这就是我们一直常说的“后进先出”&#x…

未来10年,哪些行业将被AI彻底颠覆?

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;许多行业的工作方式正在发生显著变化。一些原本依赖人工处理的任务&#xff0c;正逐渐由AI接手并优化。在未来&#xff0c;AI将不仅仅是辅助工具&#xff0c;它可能会彻底改变某些行业的运作模式&#xff0c;…

通过AI技术克服自动化测试难点(下)

前面的文章里我们对可以应用到测试中的AI技术做了整体介绍&#xff0c;详细介绍了OpenCV技术、OCR技术和神经网络&#xff0c;本文我们继续为大家介绍卷积神经网络、数据集以及AI技术在其他方面和测试相关的创新。 卷积神经网络整体上的原理是这样的&#xff0c;首先在底层特征…

筛选因数快速法+map

前言&#xff1a;老是忘记怎么快速筛选因数&#xff0c;我们只需要枚举小于sqrt&#xff08; num &#xff09; 的数&#xff0c;这样可以降低很多复杂度&#xff0c;而且我们的因数一定是成对出现的&#xff0c;所以我们遇到一个因数的时候x&#xff0c;判断 x 2 x^2 x2 是否…

Java基础知识全面总结

第一章&#xff1a;类与对象 第一课&#xff1a;什么是面向对象编程 1.面向对象编程和面向过程编程的区别 无论是面向过程编程还是面向对象编程都是用于解决一个实际问题&#xff0c;当面向过程编程在解决一个问题时&#xff0c;更多的情况下是不会做出重用的设计思考的&…

FreeRTOS-内存管理

FreeRTOS-内存管理 一、内存管理简介二、内存管理实验 一、内存管理简介 在使用FreeRTOS创建任务、队列、信号量等对象时&#xff0c;有动态创建和静态创建(本质上内存分配的问题)FreeRTOS提供了5种动态内存管理算法&#xff0c;分别为heap_1、heap_2、heap_3、heap_4、heap_5…

二叉树的遍历 and 基本操作实现

二叉树的遍历 and 基本操作实现 1.二叉树的遍历前序遍历中序遍历后序遍历层序遍历 2.基本操作实现2.1 获取节点个数2.2 获取叶子节点的个数2.3 获取第K层节点的个数2.4 获取二叉树的高度2.5 检测值为value的元素是否存在 1.二叉树的遍历 二叉树由于其特殊结构&#xff0c;有四…

qt的5.sql和opencv 2024.10.11

1.QSqlQuery的增删改查 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QSqlQueryModel> #include <QTableView> #include <QLineEdit> #include <QSpinBox> #include <QPushButton> #includ…

如何阻止Chrome自动登录到网站

在数字化时代&#xff0c;浏览器的便利性极大地提高了我们的在线体验。然而&#xff0c;这种便利性有时也会带来隐私和安全方面的担忧。例如&#xff0c;Chrome浏览器可能会在某些网站上自动登录&#xff0c;这对于共享设备或公共计算机来说可能是个问题。本文将指导您如何阻止…

【C++】第三节:类与对象(中)

1、类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器…

【网络安全】将两个 Self-XSS 转变为可利用的 XSS

未经许可,不得转载。 文章目录 Self-XSS-1Self-XSS-2Self-XSS-1 目标应用程序为某在线商店,在其注册页面的First Name字段中注入XSS Payload: 注册成功,但当我尝试登录我的帐户时,我得到了403 Forbidden,即无法登录我的帐户。 我很好奇为什么我无法登录我的帐户,所以我…