对于刚接触测试工作的我来说,能在工作的闲暇给自己充电,学学新的工具、技术是极好的,但是研究一段时间之后,发现自己在测试基本原理和概念这块很有缺陷,所以打算梳理梳理自己的知识结构,也和大家多分享测试这个职业的一些理论基础。
由于篇幅过长,本文章可能会连载几次哦。
软件测试概念
早期定义:
软件测试是对程序能够预期运行建立起一种信心;
经典定义:
测试是为了发现错误而执行程序的过程;
IEEE(国际电子电器工程协会)定义:
使用人工或者自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异;
软件测试的测试对象:
涵盖方方面面;
五大要素以及两个目标:
质量、人员、流程、技术、资源
测试覆盖率,测试效率
软件测试遵循的原则:
ISTQB(国际软件测试认证委员会)
测试显示却缺陷的存在,但不能证明系统不存在缺陷;
穷尽测试是不可能的,应设定及时终止的条件;
测试应该尽早进行;
缺陷具备群集特性;
测试的杀虫剂悖论;(测试用例不定期评审、修改、增加不同的测试方法)
测试二八原则;(80%时间用在20%的重点模块)
测试活动依赖于测试背景;
软件测试的分类:
按照测试阶段:
单元测试:对软件中最小的可测试单元进行检查和验证
原则:尽可能保证各个测试用例是相互独立的;
一般单元测试是有开发人员来实施,用来检验开发的代码是否符合设计要求;
益处:能尽早的发现缺陷;
有利于重构;
简化集成;
文档(代码即文档)
用于设计(体现测试思路)
限制:不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误
每一行的代码,一般需要3~5行的测试代码才能完成单元测试
框架:Xunit
集成测试:在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或者实现相应技术指标以及要求的活动;
集成测试的主要实施方案:
Bigbang 组装所有单元,再做测试;
自顶向下 主程序按层级向下;
自底向上 最底层模块,逐层组装测试;
核心系统集成
高频集成(持续集成)
集成测试与单元测试的区别:
对象不同、测试依据不同、测试方法
系统测试:是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行;
关注点:
关注系统本身的使用;
关注系统与其他相关系统的联通;
关注系统在不同使用压力下的表现;
关注系统在真是使用环境下的表现;
系统测试和集成测试的不同:
对象不同、测试时间、测试内容、测试角度(系统偏向业务方面)
验收测试:(交付测试)针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准,由用户、客户或者其他授权机构决定是否接收系统;
细分:用户验收测试、运行验收测试、合同规范验收测试
Alpha 开发提供环境,用户测试
Beta 在用户环境测试
按照测试手段分类:
黑盒测试,白盒测试;
黑盒测试优点:
容易实施,不需要关注内部的实现;
更贴近用户的使用角度;
黑河测试的缺点:
测试覆盖率比较低,一般只覆盖代码量的40%;
针对黑盒的自动化测试,复用率较低,维护成本较高;
关注点:
是否有不正确或者遗漏的功能;
在接口上,输入输出是否正确;
是否有数据结构或者外部信息访问错误;
性能是否能够满足要求;
黑河测试的主要设计方法:
白盒测试
主要的逻辑单位:
语句、条件、条件组合、分支、路径
白盒测试的优点:
迫使测试人员仔细思考软件的实现,理解原来;
可以检测代码中的每条分支和路径;
可以揭示隐藏在代码中的错误;
对代码的测试比较彻底;
缺点:
昂贵(工作量大,成本高);
无法检测代码中遗漏的路径和数据敏感性错误;
不能直接验证需求的正确性;
白盒测试的主要测试方法:
灰盒测试:介于白盒黑盒测试之间,关注输出对于输入的正确性,同时关注内部表现;
静态测试,动态测试;
静态测试:静态测试是指无需执行被测程序,而是通过评审软件文档或代码,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的概率;
方法:
互审、走查、会议(不正式-》正式)
动态测试:动态测试是指通过运行被测程序,检查运行结果于预期结果的差异,并分析运行效率、正确性和健壮性等。
手工测试,自动化测试;
手工测试:有专门的测试人员从用户视角来验证软件是否满足设计要求的行为,更适合针对深度的测试和强调主观判断的测试;
如:众包测试、探索式测试;
自动化测试:使用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查;
如:单元测试、接口测试、性能测试等;
按测试模式分类
瀑布模型、敏捷测试、基于脚本的测试、基于风险的测试、探索式测试等;
传统的瀑布模型;
项目计划》需求分析》软件设计》程序开发》软件测试》集成维护;
优点:
强调需求、设计的作用;
前一阶段完成后、只需关注后续阶段;
为项目提供了按阶段划分的检查点,里程碑清晰;
文档规范;
缺点:
难以适应需求频繁变更
项目周期后端才能看到成果;
强制的里程碑、完成时间点;
文档工作量大;
敏捷测试
Agile Testing --遵循敏捷宣言的一种测试实践;
2001提出敏捷宣言--
个体与交互重于过程和工具;
可用的软件重于完备的文档;
客户协作重于合同谈判;
响应变化重于遵循计划;
在每一对比较中,后者并非全无价值,但我们更看重前者。
敏捷测试强调从客户的角度进行测试、重点关注迭代测试新功能,不再强调测试阶段、尽早测试,不间断测试,具备条件及测试,强调持续反馈、预防缺陷重于发现缺陷;