【笔记】软件测试

文章目录

  • 引论
    • 为什么要进行软件测试
    • 什么是软件测试
    • 软件测试和软件开发的关系
    • 软件测试与软件质量保证(SQA)的关系
    • 4 种导向
  • 软件测试基本概念
    • 软件缺陷定义
    • 修复软件缺陷的代价
    • 软件测试的分类(重点)
    • 静态测试(重点)
    • 动态测试(重点)
    • 回归测试(重点)
    • 压力测试(重点)
    • 软件工作的工作范畴
  • 软件测试方法
    • 白盒测试
    • 黒盒测试
    • 什么是测试用例
    • 为什么要设计测试用例
    • 白盒测试方法的分类(重点)
    • 求环路复杂度的 3 种方法
    • 为什么需要求环路复杂度
    • 构造基本路径集合的方法
    • 黒盒测试方法的分类(重点)
    • TODO
  • 软件测试流程和规范
    • TMM
    • TPI
    • CTP
    • STEP
  • 单元测试
    • 概念(重点)
    • 测试方法(重点)
    • 单元测试的依据(重点)
    • 单元测试的主要目标(重点)
  • 集成测试
    • 概念(重点)
    • 测试依据(重点)
    • 主要目标(重点)
    • 驱动程序和桩程序(重点)
  • 系统测试
    • 概念(重点)
    • 测试依据(重点)
    • 确认测试(重点)
  • 验收测试
    • 概念(重点)
    • 测试内容(重点)
    • 测试依据(重点)
    • α测试(重点)
    • β测试(重点)
  • 软件本地化测试
    • I18N
    • L10N
    • G11N
  • 软件测试自动化
    • 内涵(重点)
    • 实现原理(重点)
    • 自动化测试的引入和应用
    • 自动化测试框架
    • 功能测试工具
    • 性能测试工具

引论

为什么要进行软件测试

  • 产品质量的保证
  • 控制成本的关键
  • 软件可靠性确认
  • 让企业具备国际竞争力的实力

什么是软件测试

正向思维:

  • 软件测试就是为程序能够按预期设想那样运行而建立足够的信心。
  • 软件测试是一系列活动以评价一个程序或系统的特性或能力并确定是否达到预期的结果。
  • 测试是为了验证软件是否符合用户需求,即验证软件产品是否能正常工作。

反向思维:

  • 测试是为了证明程序有错,而不是证明程序无错误。
  • 一个好的测试用例是在于它能发现至今未发现的错误。
  • 一个成功的测试是发现了至今未发现的错误的测试。

软件测试是由“验证(Verification)”和“有效性确认(Validation)”活动构成的整体。

  • 验证”是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性。
  • “有效性确认”是确认所开发的软件是否满足用户真正需求的活动。

软件测试和软件开发的关系

结束标准:用例全部测试;覆盖率达到标准;缺陷率达到标准;其他指标达到标准。

软件测试的分类(重点)

按测试阶段或层次:单元测试、集成测试、系统测试、验收测试。

按目标或特性:功能测试、强壮性测试、性能测试、适用性测试、安全性测试、可靠性测试。

按方法:白盒测试、黑盒测试。

静态测试(重点)

静态测试就是静态分析,对模块的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和仿真运行。静态测试包括对软件产品的需求和设计规格说明书的评审、对程序代码的复审等。静态分析的查错和分析功能是其他方法所不能替代的,可以采用人工检测和计算机辅助静态分析手段进行检测,但越来越多地采用工具进行自动化分析。

动态测试(重点)

动态测试是通过真正运行程序发现错误,通过观察代码运行过程,来获取系统行为、变量实时结果、内存、堆栈、线程以及测试覆盖率等各方面的信息,来判断系统是否存在问题,或者通过有效的测试用例,对应的输入输出关系来分析被测程序的运行情况,来发现缺陷。

回归测试(重点)

为保证软件中新的变化(新增加的代码、代码修改等)不会对原有功能的正常使用有影响而进行的测试。也就是说,满足用户需求的原有功能不应该因为代码变化而出现任何新的问题。

压力测试(重点)

压力测试,也称负载测试,是用来检查系统在不同负载(如数据量、并发用户、连接数等)条件下的系统运行情况,特别是高负载、极限负载下的系统运行情况,以发现系统不稳定、系统性能瓶颈、内存泄漏、CPU 使用率过高等问题。

软件工作的工作范畴

  • 软件测试工作的组织与管理:制定测试策略、测试计划,确认所采用的测试方法与规范,控制测试进度,管理测试资源。
  • 测试工作的实施:编制符合标准的测试文档,搭建测试环境,开发测试脚本、与开发组织协作实现各阶段的测试活动。

软件测试方法

白盒测试

白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。

黒盒测试

黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

什么是测试用例

为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。

为什么要设计测试用例

测试用例构成了设计和制定测试过程的基础。

测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,对产品质量和测试流程也就越有信心。判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和执行的测试用例的数量为依据的。

测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。

测试设计和开发的类型以及所需的资源主要都受控于测试用例。

测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。最佳方案是为每个测试需求至少编制两个测试用例:一个测试用例用于证明该需求已经满足,通常称作正面测试用例;另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。

测试用例是软件测试的核心。

白盒测试方法的分类(重点)

  • 语句覆盖:语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次。
  • 判定覆盖:判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。
  • 条件覆盖:条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
  • 路径覆盖。
  • 判定-条件覆盖。
  • 条件组合覆盖。
  • 基本路径测试法。

求环路复杂度的 3 种方法

为什么需要求环路复杂度

构造基本路径集合的方法

黒盒测试方法的分类(重点)

  • 等价类划分法(等价分类法):分为有效等价类和无效等价类。有效等价类是有意义的、合理的输入数据,可检查程序是否实现了规格说明中所规定的功能和性能。无效等价类与有效等价类的意义相反。
  • 边界值分析法:确定边界情况(输入或输出等价类的边界),选取正好等于、刚刚大于或刚刚小于边界值作为测试数据。
  • 因果图法。
  • 判定表法!

TODO

有限自动机 堆栈 的 状态图、状态表、状态转化树

软件测试流程和规范

TMM

过程能力描述了遵循一个软件测试过程可能达到的预期结果的范围。

TMM的建立,得益于:充分吸收 CMM 的精华、基于历史演化的测试过程、业界的最佳实践。

TPI

TPI 是基于连续性表示法的测试过程改进的参考模型,是在软件控制、测试知识以及过往经验的基础上开发出来的。

CTP

关键测试过程(Critical Test Process,CTP)评估模型主要是一个内容参考模型,一个上下文相关的方法,并能对模型进行裁剪。

STEP

STEP(Systematic Test and Evaluation Process,系统化测试和评估过程)是一个内容参考模型,认定测试是一个生命周期活动,在明确需求后开始直到系统退役。

单元测试

概念(重点)

定义:单元测试是对软件基本组成单元(如函数、类的方法等)进行的测试。

时机:一般在代码完成后由开发人员完成,QA 人员辅助。

概念:模块、组件、单元。

测试人员:程序人员和开发人员。

测试方法(重点)

检查每一条独立执行路径的测试,保证每条语句被至少执行一次。

检查局部数据结构完整性。

检查模块接口是否正确。

检查临界数据处理的正确性。

预见、预设的各种出错处理是否正确有效。

单元测试的依据(重点)

单元测试的依据是详细设计和概要设计。

单元测试是对软件基本组成单元进行测试,依据是软件详细说明书。

单元测试测试的不仅仅是代码,还要接口测试、局部数据接口测试、独立路径测试、独立路径测试、边界条件测试、错误处理测试、功能测试、性能测试、内存使用测试等。

单元测试的主要目标(重点)

单元模块被正确编码。

信息能否正确地流入和流出单元。

在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。

在为限制数据加工而设置的边界处,能否正确工作。

单元的运行能否做到满足特定的逻辑覆盖。

单元中发生了错误,其中的出错处理措施是否有效。

集成测试

概念(重点)

集成测试是将软件集成起来,对模块之间的接口进行测试。

顾名思义,集成测试是将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。

模块内的集成,主要是测试模块内各个接口间的交互集成关系。

子系统内的集成,测试子系统内各个模块间的交互关系。

系统内的集成,测试系统内各个子系统和模块间的集成关系。

集成测试的测试人员:有经验的测试人员和开发者共同。

集成模式和经典代表:非渐增式测试模式,先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式;渐增式测试模式,把下一个要测试的模块同已经测试好的模块结合进来进行测试,测试完后再把下一个应该测试的模块结合起来测试。渐增式测试又可以根据每次添加模块的路线分为自顶向下测试、自底向上测试和混合测试等方式。

测试依据(重点)

概要设计书,详细设计说明书,主要是概要设计说明书。

主要目标(重点)

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。

目标在于检验与软件设计相关的程序结构问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响; 把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。

驱动程序和桩程序(重点)

驱动程序:对底层或子层模块进行测试所编写的调用这些模块的程序。

桩程序:对顶层或上层模块进行测试时所编写的替代下层模块的程序。

系统测试

概念(重点)

系统测试(特征测试):检验系统所有元素之间协作是否合适,整个系统的性能和功能是否达到要求。其测试内容包括:功能测试,非功能测试与回归测试等。

系统测试的测试人员:软件测试工程师。

系统测试的内容:功能测试、回归测试、非功能性测试。

非功能性测试(特征测试)包含哪些内容:性能测试、压力测试、容量测试、安全性测试、可靠性测试、容错性测试。

测试依据(重点)

需求说明书、概要设计说明书、详细设计说明书,最重要的是需求说明书。

确认测试(重点)

确认测试又称有效性测试。

有效性测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。任务是验证软件的功能和性能及其他特性是否与用户的要求一致。

对软件的功能和性能要求在软件需求规格说明书中已经明确规定,它包含的信息就是软件确认测试的基础。

验收测试

概念(重点)

验收测试:检查软件是否符合合同要求,包括需求规格说明、设计规格说明和用户手册等。

测试内容(重点)

易用性测试:用户界面和可用性测试。

兼容性测试:软件兼容性测试、数据共享兼容性测试、硬件兼容性测试。

安装测试和可恢复性测试、文档测试等:安装与卸载测试、可恢复性测试。

验收测试的内容:正确性、完备性、易理解性、一致性。

验收测试的测试人员:用户和测试部门共同完成。

测试依据(重点)

国家规范、行业标准、合同条款、用户确认的需求规格说明书。

α测试(重点)

α测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。

β测试(重点)

经过α测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户 告异常情况、提出批评意见。然后软件开发公司再对β版本进行改错和完善。

软件本地化测试

I18N

TODO

L10N

TODO

G11N

TODO

软件测试自动化

内涵(重点)

自动化测试(automated test)是相对手工测试而存在的一个概念,由手工逐个地运行测试用例的操作过程被测试工具自动执行的过程所代替。

测试工具的使用是自动化测试的主要特征。

测试自动化指“一切可以由计算机系统自动完成的测试任务都已经由计算机系统或软件工具、程序来承担并自动执行”。

实现原理(重点)

代码分析:类似于高级编译系统,在工具中定义类/对象/函数/变量等定义规则、语法规则等,在分析时对代码进行语法扫描,找出不符合编码规范的地方。

对象识别 (Windows 对象 、Mac 对象、Web DOM对象)。

脚本技术:线性脚本、结构化脚本、数据驱动脚本、关键字驱动脚本。

自动比较技术:静态比较和动态比较,简单比较和复杂比较,敏感性测试比较和健壮性测试比较,比较过滤器。

测试自动化系统的构成:测试工具的分类、测试工具的选择、测试自动化普遍存在的问题、自动化测试的引入和应用。

自动化测试的引入和应用

找准测试自动化的切入点。

把测试开发纳入整个软件开发体系。

测试自动化依赖测试流程和测试用例。

软件测试自动化的投入较大。

进行资源的合理调度。

自动化测试框架

TODO

功能测试工具

QTP。

性能测试工具

Loadrunner。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月11日
下一篇 2022年5月11日

相关推荐