系列文章目录
前言
【 第1章 软件测试概述 】
1.1 软件、软件危机和软件工程
1.1.1 基本概念
- 软件 = 程序 + 数据(库) + 文档
- 软件测试:为了尽快尽早地发现在软件产品中所存在的各种软件缺陷而展开的贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程
- 软件危机的表现:
- 软件生产供不应求
- 软件生产率随软件规模与复杂性提高而下降
- 软件开发的进度与成本失控
- 软件系统实现的功能与实际需求不符
- 软件难以维护
- 软件文档配置没有受到足够的重视
- 软件危机的表现:
- 软件生产供不应求
- 软件生产率随软件规模与复杂性提高而下降
- 软件开发的进度与成本失控
- 软件系统实现的功能与实际需求不符
- 软件难以维护
- 软件文档配置没有受到足够的重视
1.1.2 软件工程的目标及其一般开发过程
- 微观目标:生产出满足需求的软件(成本、时间、质量、可维护性等)
- 宏观目标:提高软件质量和生产率,最终实现软件的工业化生产
- 一个软件产品从形成概念开始,经过开发、测试、使用和维护,直到最后退出使用的全过程称为软件生存周期
- 软件定义:计划和需求分析
- 软件开发:概要设计、详细设计和实现
- 软件测试:单元测试、集成测试、系统测试和验收测试
- 软件使用和维护:改正性维护、适应性维护和完善性维护
1.1.3 软件过程模型
- 瀑布过程模型
- 1970年温斯顿•罗伊斯(Winston Royce)提出
- 瀑布过程模型强调阶段的划分及其顺序性、各阶段工作及其文档的完备性
- 是一种严格线性的、按阶段顺序的、逐步细化的开发模式
- 螺旋过程模型
- 螺旋过程模型的基本思路是,依据前一个版本的结果构造新的版本
- 这个不断重复迭代的过程形成了一个螺旋上升的路径
- 增量过程模型
- 增量过程模型是用一种几乎连续的过程小幅度地推进项目
- 增量过程模型是用一种几乎连续的过程小幅度地推进项目
- 快速原型过程模型
- 快速原型过程模型首先是快速进行系统分析,在设计人员和用户的紧密配合下,快速确定软件系统的基本要求,尽快实现一个可运行的、功能简单的原型系统,然后通过对原型系统逐步求精,不断扩充完善得到最终的软件系统
1.2 软件缺陷与软件故障
1.2.1 基本概念
- 软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。其结果是软件运行于某一特定条件时出现软件故障,这时称软件缺陷被激活
- 软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态,此时若无适当措施(容错)加以及时处理,便产生软件失效
- 软件缺陷(software bug)的主要类型:
- 软件未达到产品说明书中已经标明的功能;
- 软件出现了产品说明书中指明不会出现的错误;
- 软件未达到产品说明书中虽未指出但应当达到的目标;
- 软件功能超出了产品说明书中指出的范围;
- 软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不良。
1.2.2 典型案例
( PASS )
1.3 软件测试的概念
1.3.1 软件测试的定义
- 定义1 :正向逆向思维共存
- Bill Hetzel,1973年
- 测试就是建立一种信心,确信程序能够按预期的设想运行
- 定义2:正向逆向思维共存
- Glenford Myers,1979年
- 软件测试是为发现错误而执行程序的过程
- 定义3 :注重软件质量评价
- Bill Hetzel,1983年
- 测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量
- 定义4:注重软件质量评价
- Craig & Jaskiel ,2002年
- 测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命周期过程
- IEEE标准术语:
- 突出用户重要作用
- “使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别”
- 软件缺陷在开发前期发现比在开发后期发现,在资金、人力上节约90%
- 软件缺陷在推向市场前发现比在推出后发现,在资金、人力上节约90%
- 软件测试应该从软件生命周期的第一个阶段开始,并贯穿于整个的软件生命周期
- 检验各阶段的成果是否接近预期目标,尽可能早的发现错误并加以修正
1.3.2 软件测试的目的:保证软件产品的最终质量
- 测试是一个程序的执行过程,其目的在于发现错误
- 一个好的测试用例很可能会发现至今尚未察觉的错误
- 一个成功的测试是发现至今尚未察觉的错误的测试
- 直接目的:发现软件缺陷
- 最终目的:验证用户需求
- 附加目的:改进开发过程
1.3.3 软件测试的基本原则
- 穷尽测试是不可能的,测试需要终止
- 穷尽测试:对所有输入数据的各种可能进行排列组合试验的测试
- 测试工作具有创造性,但很困难
- 测试是破坏性工作?重复性的工作?
- 测试需要有创造性和洞察力、广泛的知识、测试经验和正确的测试方法
- 测试工作应由独立的专业的软件测试机构完成
- 程序员应避免测试自己编写的程序
- 编写软件组织不应测试自己编写的软件
- Pareto原则
- 程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比
- 错误总是倾向于聚集存在
- 寄生虫现象
- 杀虫剂现象
- 测试需尽早介入,且贯穿于整个生命周期
- 设计测试用例时应考虑各种情况
- 测试用例的编写不仅应当根据有效和预期的输入情况,而且应当根据无效和未预料到的输入情况
- 检查程序是否“未做其应该做的”,还要检查程序是否“做了其不应该做的”
- 计划测试工作时不应默许假定不会发生错误
- Glenford Myers (1979): “Testing is the process of executing a program or system with the intent of finding errors.”
1.3.4 软件测试的局限性
- 输入/状态空间的无限性
- 故障敏感性和巧合正确性
- 代码对测试包隐藏故障的能力称为故障敏感性
- 错误的代码执行时,却产生了正确的结果,被称为巧合正确性
- 系统缺陷的不确定性
- 由于无法确切知道系统的缺陷数量及所在的位置,对修正这些缺陷而带来的新的缺陷也是不可预测的,所以系统质量是不容易把握的
1.4 软件质量与质量模型
1.4.1 软件质量的含义
- 能满足给定需求的特性(功能、性能)
- 具有所期望的各种属性的组合的程度,即软件结构良好,合理利用系统资源,易读、易于理解,并易于修改、维护
- 能满足用户综合期望的程度,软件系统具有友好的用户界面,便于用户使用
- 软件的组合特性。软件生存周期中各阶段文档齐全、规范,便于配置、管理
1.4.2 软件质量模型
- McCall 模型 (1979年)
- ISO/IEC 9126-1991 模型
- 新的ISO/IEC 9126 模型
- ISO/IEC 25010-2011 模型
1.5 软件测试的分类
- 软件测试知识体系
- 按测试执行方式
- 静态测试:不需要执行所测试的程序,查询代码是否符合规范,对程序的数据流和控制流进行分析
- 动态测试:选择实际测试用例运行所测试程序,模拟用户输入
- 按测试对象
- 黑盒测试:
- 行为测试、功能测试、基于需求的测试、数据驱动测试
- 需求覆盖率
- 白盒测试:
- 结构测试、基于代码的测试、逻辑驱动测试
- 代码覆盖率
- 灰盒测试:白盒 + 黑盒
- 黑盒测试:
- 按照测试过程
- 按测试目的
- 功能测试、健壮性测试、接口测试、性能测试、强度测试、压力测试、
- 用户界面测试、安全测试、可靠性测试、安装 / 卸载测试、文档测试、恢复测试、兼容性测试
- 按测试执行手段
- 自动化测试 和 手工测试
- 自动化测试 和 手工测试
1.6 软件测试过程模型
- V模型
- W模型
- 增加对每个阶段的验证和确认
- W模型由两个V字型模型组成,分别代表测试与开发过程
- W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的
- 重点:验证(v&v)、准备
- H模型
- H模型将测试活动完全独立出来,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来
- H模型揭示了软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地进行
1.7 测试的生命周期
1.7.1 软件测试过程中的活动及内容
- 根据需求制定测试计划、测试方案
- 测试用例设计、脚本编写,进行用例评审
- 执行测试并提交Bug,验证Bug
- 测试分析与总结
- 版本发布
- 软件测试过程图
(1) 测试项目启动
- 软件项目详细流程图
(2) 软件测试需求分析
- 重要性:
- 进行测试计划等准备工作的前提
- 完成测试任务、保证测试质量和进度的基础
- 开发测试用例的依据
- 原则:
- 测试需求项可核实
- 测试需求指明正常和异常的输入条件
- 测试需求不涉及具体的测试数据
- 测试需求的状态
- 只知道大致需求,具体细节还有待细化
- 已经初步确定,等待评审
- 已经确定的,并经过团队评审,在可预期未来不会发生变更
- 已经评审完毕正在进行设计、实现测试用例的测试需求
- 完成设计、实现测试用例的测试需求
(3) 软件测试计划制定
- 测试计划要点:
- 测试范围的界定
- 分配资源、人员
- 安排进度
- 测试策略
- 测试目标
- 测试何时终止?
- 当时间用光时
- 当继续测试没有产生新的失效时
- 当继续测试没有发现新缺陷时
- 当无法考虑新测试用例时
- 当达到所要求的覆盖时
- 当所有缺陷都已经清楚时
(4-1) 软件测试设计
- 测试过程设计
- 测试内容——如何展开?测试类型?
- 测试顺序——功能→性能→可靠性→安全性
- 测试用例设计
- 纯数据型
- 文件型
- 操作序列型
- 程序型(构件库或API函数库)
(4-2) 软件测试开发
- 准备测试脚本
- 测试数据自动生成
- 测试流程自动化
- 测试准备和搭建测试环境
(5) 软件测试执行
- 手工测试
- 按事先准备好的手工过程进行测试,测试者输入数据、观察输出、记录发现的问题
- 自动化测试
- 启动测试工具,执行测试用例,并将结果记录在日志文件中
(6) 软件测试评估
- 测试结果的评估
- 信息比较:将测试结果与期望输出进行比较
- 通过各种量化方法,对测试的有效性及结果的可信性提供量化的依据
- 覆盖评测:对测试完全程度的评测,包括基于需求的覆盖和基于代码的覆盖
- 质量评测:对测试软件的可靠性、稳定性以及性能的评测,建立在对测试结果的评估和对测试过程中确定的缺陷分析的基础上
- 发现错误数的统计
- 测试各个阶段发现的错误数
- 各个功能点的错误统计数
1.7.2 软件测试过程管理
- 软件测试过程管理图
- 惠普应用程序生命周期管理流程图
- ALM应用程序生命周期管理模块示意图
【 第一章 软件测试概述 】总结
①熟悉软件工程的一般开发过程和常见过程模型
②掌握软件测试的概念、目的和原则
③熟悉软件测试的分类
④熟悉软件测试过程模型和软件测试的生命周期
【 第一章 在线测试 】
- 某网上购物软件,与京东、淘宝等现有主流系统操作流程一致,符合最终用户的使用习惯和操作模式,主要目的是为了改善ISO/IEC 9126质量模型中的 易用性 质量特性
- ALM服务器在Win 7操作系统下安装不成功,该软件缺陷与ISO/IEC 9126质量模型中定义的哪个质量特性相关可移植性
- 软件过程哪个阶段产生缺陷的数量最多 需求分析阶段
- 为了提高软件测试的效率,以下做法正确的是 选择易于暴露软件缺陷的数据作为测试用例
- 经验表明,在程序设计中,某模块与其他模块相比,若该模块已发现并改正的错误数目较多,则该模块中残留的错误与其他模块相比,通常应该较多
- 由于热键冲突,在打开金山词霸时,Excel的区域选择功能失效,该软件缺陷与ISO/IEC 9126质量模型中定义的哪个质量子特性相关 共存性
- 不运行被测程序,仅通过分析或检查等其他手段达到检测目的的测试方法称为 静态测试
- 以下对测试需求的描述中,错误的是 为了确保测试的顺利进行,测试需求一经团队评审,在测试期间不允许发生任何变更
- 测试需求必须指明正常和异常的输入条件
- 测试需求描述为一般规则,不涉及具体的测试数据
- 测试需求项必须有可观测的输出结果
- 以下测试工具中,使用Application Lifecycle Management可实现自动化的软件测试过程管理
- 在软件测试过程模型中,H模型将软件测试作为与开发过程并行进行的一个独立流程,贯穿于整个软件的生命周期中,并通过测试就绪点将测试准备活动和测试执行活动清晰的体现出来
- 以下选项不包括在软件测试计划中的有 测试内容及用例
- 风险及应急措施
- 测试资源及进度安排
- 测试范围及目标
- 需求分析与系统设计阶段完成后,测试人员需对需求规格说明书进行确认和验证,并为 系统测试 阶段做准备工作。
- 以下选项中对软件测试的理解错误的是___。
- 以证明程序正确为目的的软件测试,会不自觉的挑选容易通过的测试数据,不利于软件缺陷的暴露
- 软件测试是软件工程的一个重要阶段,发生于代码编写完成之后,运行维护之前 (答案)
- 软件测试是重复性的枯燥工作,不需要任何技术含量 (答案)
- 软件测试过程中由测试人员发现并提交的所有缺陷,程序员都必须要修复。 (答案)
- 软件测试的目的是发现缺陷,而调试的目的是定位和解决缺陷,两者代表了测试人员和开发人员的职责,有着本质的不同
- H模型将测试活动分为测试准备和测试执行两部分,以下活动中只属于测试准备阶段的有___.
- 测试结果审查和分析
- 制定测试计划 (答案)
- 测试项目启动 (答案)
- 测试设计和测试开发 (答案)
- 测试需求分析 (答案)
- 测试实施和执行
- 对于某网上购物系统而言,测试人员通过LoadRunner进行负载测试,并分析该系统是否存在性能问题。则本次测试采用了以下哪些测试技术 。
- 静态测试
- 手工测试
- 动态测试 (答案)
- 自动化测试 (答案)
- 在IEEE所提出的软件工程标准术语中,软件测试被定义为:“使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚 加粗样式 与 实际结果 之间的差别”。其中前者代表了最终用户的需求,而后者代表了系统的实现。
- 2001年在新的ISO/IEC 9126《产品质量-质量模型》中定义的软件质量包括3部分,其中反映在软件开发过程中软件质量特性的是 内部质量 。
- 软件缺陷 是存在于软件之中的不希望出现或不可接受的偏差,导致软件在运行于某一特定条件时会被激活为 软件故障 。
- 某网上购物软件无法打开手机照相机,用以完成拍照识物功能,该软件缺陷与ISO/IEC 9126质量模型中定义的哪个质量子特性相关 互操作性 。
- 相对于V模型,W模型在软件测试准备阶段增加了软件开发各个阶段中应同步进行的 验证 和 确认 活动(中文定义)。其中前者强调过程的正确性,后者强调结果的正确性。
- 按测试对象进行分类,软件测试可分为 白盒测试 和 黑盒测试 ,其中前者又被称之为逻辑驱动测试。