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

前言

软件开发生命周期的测试

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

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

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

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

  • 生命周期模型的类型

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

一、顺序式开发模型

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

二、 瀑布模型

每个开发阶段只有在前一个阶段完成后才能开始。然而,该模型可以在相邻的阶段之间产生反馈回路,要求在前一个阶段进行修改。图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节。

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

  • 好的测试的属性

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

  • 测试及其相关活动尽可能早地包括在生命周期中–例如,起草测试用例和建立测试环境(见上文早期测试的原则)。
  • 每一个开发活动,都有相应的测试活动计划和执行。
  • 测试活动被专门计划和管理,以适应它们所属的测试级别的目标。
  • 测试分析和测试设计在相应的开发阶段开始。
  • 一旦工作产品(需求、用户故事、设计文档、代码等)存在,测试人员就会参与讨论,完善它们。测试人员应该尽早并持续地参与这个完善的过程。
说明: 一、由于附件大小的限制,已将文件打成两个包发布(保证内容完整),请需要的朋友分开下载,谢谢合作。 二、请自行下载超星阅读器 简介:   我所见过的最好最经典的软件测试入门书,有一个别名叫“软件测试的本质”。书中没有讨论太多的软件测试理论,只包含了一部分常用的、基本的知识。从什么是软件测试、为什么要作软件测试开始,逐步引入基本的和高级的测试技术和方法,然后开始把读者引入实际工作中,讲述了一般的测试过程中要经历哪些阶段,要作哪些具体的工作,如何开展测试工作,如何找到缺陷并提交缺陷。甚至还包括了对测试人员的职业指导。建议所有的测试人员都读一读。 编辑推荐: 本书与同类书相比,具有一个显著的特点,就是浅显易懂。虽然整本书涉及的范围相当广泛,但是作者始终没有忘记,是读者的书,而不是他本人在自言自语。能够在如此庞杂的学科中流畅讲解、层层剖析,可见作者深厚的技术功底和对软件测试、软件工程的透彻理解。 目录 第一部分 软件测试综述 第1章 软件测试背景 第2章 软件开发过程 第3章 软件测试的实质 第二部分 测试基础 第4章 检查产品说明书 第5章 闭着眼睛测试软件 第6章 检查代码 第7章 带上X光眼镜检查软件 第三部分 运用测试技术 第8章 配置测试 第9章 兼容性测试 第10章 外国语言测试 第11章 易用性测试 第12章 测试文档 第四部分 加强测试 第14章 自动测试测试工具 第15章 臭由轰炸和Beat测试 第五部分 使用测试文档 第16章 计划测试工作 第17章 编写和跟踪测试案例 第18章 报告发现的问题 第19章 评价成效 第六部分 软件测试展望 第20章 软件质量评判 第21章 软件测试员职业指导 附录测验问题解答
目录 一 软件测试 从零开始 5 1.1 引言 5 1.2 测试准备工作 5 1.2.1 向有经验的测试人员学习 5 1.2.2 阅读软件测试的相关书籍 6 1.2.3 走读缺陷跟踪库中的问题报告单 6 1.2.4 走读相关产品的历史测试用例 6 1.2.5 学习产品相关的业务知识 6 1.3 识别测试需求 7 1.3.1 主动获取需求 7 1.3.2 确认需求的优先级 8 1.3.3 加入开发小组的邮件群组 8 1.3.4 与开发人员为邻 8 1.4 测试用例设计 8 1.4.1 测试用例的基本格式 8 1.4.2 重用同类型项目的测试用例 9 1.4.3 利用已有的软件 Checklist 9 1.4.4 加强测试用例的评审 10 1.4.5 定义测试用例的执行顺序 10 1.5 测试用例执行 10 1.5.1 搭建软件测试环境,执行测试用例 10 1.5.2 测试执行过程应注意的问题 11 1.5.3 及时更新测试用例 11 1.5.4 提交一份优秀的问题报告单 12 1.6 测试结果分析 12 1.7 总结 13 二 软件测试的常识 13 2.1 引言 13 2.2 软件测试常识 13 2.2.1 测试是不完全的(测试不完全) 13 2.2.2 测试具有免疫性(软件缺陷免疫性) 14 2.2.3 测试是 “ 泛型概念 ” (全程测试) 14 2.2.4 80-20 原则 14 2.2.5 为效益而测试 15 2.2.6 缺陷的必然性 15 2.2.7 软件测试必须有预期结果 15 2.2.8 软件测试的意义 - 事后分析 15 2.2.9 结论: 15 三 浅谈软件开发中的注意事项 16 3.1 项目设计 16 3.2 设计变化和需求变化 16 3.3 代码编写 17 3.3.1 源程序文件结构 17 3.3.2 界面设计风格的一致性 17 3.3.3 编辑风格 17 3.3.4 命名规范 18 3.4 BUG修补 18 3.5 开发人员的测试 18 四 软件测试的若干问题 19 4.1 前言 19 4.2 博弈的各方 19 4.3 测试的过程 20 4.4 测试所具备的素质 20 4.5 自动化测试 20 4.6 测试的误区 21 五 浅谈功能测试用例模板设计 21 5.1 Excel 模版 21 5.2 测试用例状态转换分析 23 六 如何提高软件质量 23 6.1 什么是质量 24 6.2 流程对质量的贡献 25 6.3 流程与技术 27 6.4 全面质量管理 28 6.5 关注测试 29 6.6 成功的铁三角 30 6.7 国际上流行的质量标准 30 6.8 如何起步 32 七 ISO和CMM,我们该选择谁 32 7.1 管理水平的适用性 33 7.2 复杂度的适用性 33 7.2.1何谓研发过程复杂度 34 7.2.2 何谓组织机构复杂度 34 7.3 量化管理的适用性上 35 7.4 结论 36 八 如何做好单元测试 36 8.1 前言 36 8.2 组织结构应该保证测试组参与单元测试 36 8.3 加强单元测试流程规范性 37 8.3.1 制订单元测试的过程定义 37 8.3.2 单元测试工作产品必须纳入配置管理 38 8.3.3 必须制订覆盖率指标和质量目标来指导和验收单元测试 38 8.3.4 加强详细设计文档评审 39 8.4 单元测试者技能的提高 39 8.4.1 加强对单元测试人员的技能培训 39 8.4.2 必须引入工具进行辅助 40 8.4.3 单元测试者加强对被测软件的全面了解 40 8.5 结尾 40 九 漫谈人机界面测试 41 9.1 一致性测试 41 9.2 信息反馈测试 42 9.3 界面简洁性测试 42 9.4 界面美观度测试 42 9.5 用户动作性测试 43 9.6 行业标准测试 43 9.7 小结 44 十 基于Web的系统测试方法 44 10.1 功能测试 45 10.1.1 链接测试 45 10.1.2 表单测试 45 10.1.3 Cookies测试 45 10.1.4 设计语言测试 45 10.1.5 数据库测试 46 10.2 性能测试 46 10.2.1 连接速度测试 46 10.2.2 负载测试 46 10.2.3 压力测试 46 10.3 可用性测试 47 10.3.1 导航测试 47 10.3.2 图形测试 47 10.3.3 内容测试 47 10.3.4 整体界面测试 47 10.4 客户端兼容性测试 48 10.4.1 平台测试 48 10.4.2 浏览器测试 48 10.5 安全性测试 48 10.6 总结 49 十一 为盈利而测试 49 11.1 引言 49 11.2 什么是软件测试 50 11.3 六个误区 50 11.3.1 误区一:忽视对正常输入的测试 50 11.3.2 误区二:忽视设计阶段的参与与评估 50 11.3.3 误区三:忽视测试计划与测试文档的建立及维护 51 11.3.4 误区四:忽视缺陷的分析,报告及跟踪 51 11.3.5 误区五:错误的测试目标及测试终止条件 51 11.3.6 误区六:不懂得合理调配使用测试人员的知识技能结构 51 11.4 软件质量与软件测试 52 11.5 软件测试的经济目的 54 11.5.1 满足用户需求,提高产品的竞争力,最终提高产品的销售量 54 11.5.2 尽早发现缺陷,降低后继质量成本 54 11.6 何时应当停止测试 56 十二 整体性能测试剖析 57 十三 性能测试工具之研究 62 13.1 性能测试的意义 62 13.2 性能测试工具综述 63 13.3 性能测试工具的体系架构 64 13.4 虚拟用户产生器 Vugen 65 13.5 Proxy 二次捕获的问题 67 13.6 关联的问题 68 13.7 脚本的问题 70 13.8 Conductor 和 Player 部分 71 13.9 Conductor 和 Player 的技术要点 72 13.10 数据分析工具 Analysis 72 13.11 结束语 72 十四 性能测试原理及性能测试实例分析 73 14.1 软件测试中的性能测试 73 14.1.1 性能测试的含义 73 14.1.2 性能测试的分解 73 14.2 一个性能测试实例 74 14.2.1 被测系统 74 14.2.2 对被测系统进行性能测试 75 14.5 总结 80 十五 软件GUI测试中的关注点 80 15.1 不能不说的二个问题 81 15.1.1 软件测试中的“二八”原则 81 15.1.2 软件黑盒测试解决的问题 81 15.2 软件黑盒测试常见错误类型及说明 81 15.2.1 用户界面错误 81 15.2.2 功能性 81 15.2.3 人机交互 82 15.3 命令结构和录入 87 15.3.1 不一致性 87 15.3.2 “最优化” 87 15.3.3 菜单 89 15.4 遗漏的命令 90 15.4.1 状态转换 90 15.4.2 危机预防 90 15.4.3 由用户进行的错误处理 91 15.4.4 其他问题 91 15.5 程序僵化 92 15.5.1 用户可调整性 92 15.5.2 控制方式 93 15.6 性能 94 15.6.1 降低程序速度 94 15.6.2 缓慢回应 94 15.6.3 如何减少用户吞吐量 94 15.6.4 反应拙劣 94 15.6.5 没有提前输入 95 15.6.6 没有给出某个操作会花很长时间的警告 95 15.6.7 程序太多提示和询问 95 15.6.8 尽量使用简单命令和提示 95 15.7 输出 95 15.7.1 不能输出某种数据 95 15.7.2 不能重定向输出 95 15.7.3 与一个后续过程不兼容的格式 96 15.7.4 必须输出的很少或很多 96 15.7.5 不能控制输出布局 96 15.7.6 荒谬的精度输出级别 96 15.7.7 不能控制表或图的标记 96 15.7.8 不能控制图形的缩放比例 96 15.8 错误处理 96 15.8.1 错误预防 96 15.8.2 错误检测 97 15.8.3 错误恢复 98 15.8.4 边界相关的错误 99 15.8.5 计算错误 100 15.9 小结 100 十六 软件测试技术 100 16.1 软件测试基础 101 16.1.1 测试目标 101 16.1.2 测试原则 101 16.1.3 可测试性 102 16.2 测试用例设计 104 16.3 白盒测试 104 16.4 基本路径测试 105 16.4.1 流图符号 105 16.4.2 环形复杂性 106 16.4.3 导出测试用例 106 16.4.4 图矩阵 108 16.5 控制结构测试 108 16.5.1 条件测试 108 16.5.2 数据流测试 110 16.5.3 循环测试 111 16.6 黑盒测试 112
评论 88
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从零开始的-CodeNinja之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值