软件测试基础回顾
软件测试的定义
软件测试是为了发现错误而执行程序的过程
使用人工或者自动的手段来运行或者测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异
软件测试的目的
想以最少的人力,物力和时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患带来的商业风险
软件测试的要素和目标
image.png软件测试的原则
-
测试显示缺陷的存在,但不能证明系统不存在缺陷
-
穷尽测试是不可能的,应设定及时终止的条件
-
测试应该尽早进行
-
缺陷具备群集特性
-
测试的杀虫剂悖论
-
测试的二八原则
-
测试活动依赖于测试背景
软件测试的分类
按测试阶段来分类
测试阶段大体上来说可分为单元测试,集成测试,系统测试,验收测试,
每个阶段又分为以下五个步骤:
测试计划,测试设计,用例设计,执行结果,测试报告
初始测试集中在每个模块上,保证源代码的正确性,该阶段成为单元测试,主要用白盒测试方法。
接下来是模块集成和集成以便组成完整的软件包。集成测试集中在证实和程序构成问题上。主要采用黑盒测试方法,辅之以白盒测试方法。
软件集成后,需要完成确认和系统测试。确认测试提供软件满足所有功能、性能需求的最后保证。确认测
试仅仅应用黑盒测试方法。
单元测试、集成测试、系统测试的侧重点
-
单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在
与程序的其他部分相隔离的情况下进行测试,测试重点是系统的模块,包括子程序的正确性验证等。 -
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。测试重点是模块间的衔接以及参数的传递等。
-
系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明
书中指定功能的有效方法。测试重点是整个系统的运行以及与其他软件的兼容性。
单元测试
单元测试定义
对软件的最小可测试的基本组成单位进行检查和验证测试
单元测试的原则
-
尽可能保证各个测试用例是相互独立的
-
一般由代码的开发人员来实施,用以检验所开发的代码功能符合自己的设计要求
单元测试的好处
-
能尽早的发现缺陷
-
有利于重构
-
简化集成
-
减少文档
-
用于设计验证
单元测试的限制
-
不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误
-
单元测试存在投路和产出的平衡
单元测试框架
集成测试
集成测试定义
在单元测试的基础上,测试将在所有软件单元按照概要设计规格说明的要求组装成模块,子系统或系统的过程中进行的测试,检查各部分工作是否达到或实现相应的技术指标及要求,其主要目的是检查软件单位之间的接口是否正确
集成测试的方案
-
Big Bang
-
自顶响下
-
自第向上
-
核心系统集成
-
持续集成
系统测试
系统测试的定义
将经过集成测试好的软件,进行彻底的测试,以验证软件系统的正确性和性能等是否能满足其技术指标,保证系统正常运行
验收测试
验收测试的定义
针对用户需求,业务流程的正式测试,确定该软件系统满足验收标准
验收测试的方案
alpha测试
- Alpha测试(a测试)是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环
境下进行的受控测试,Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场
立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性
能和支持。尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系
统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。有关的手册(草
稿)等应该在Alpha测试前准备好。
Beta测试
- Beta测试(B测试)是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在
测试现场,Beta测试不能由程序员或测试员完成。因而,Beta测试是在开发者无法控制的环境下进行的软
件现场应用。在Beta测试中,由用户记下遇到的所有问题,包括真实的以及主管认定的,定期向开发者报
告,开发者在综合用户的报告后,做出修改,最后将软件产品交付给全体用户使用。Beta测试着重于产品
的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能
开始Beta测试。由于Beta测试的主要目标是测试可支持性,所以Beta测试应该尽可能由主持产品发行的人
员来管理。
按测试手段来分类
黑盒测试,白盒测试
静态测试,动态测试
手工测试,自动化测试
黑盒测试
image.png把测试对象看做一个不能打开的黑盒子,完全不考虑程序内部的逻辑结构和内部特性,通过相关暴露出来的接口来对程序进行测试,黑盒测试只检查程序的功能是否能符合它的功能说明,程序是否能适当的接受输入数据,并产生正确的输出,黑盒测试着重于程序的外部结构,不考虑内部的逻辑。
黑盒测试又叫功能测试或数据驱动测试,黑盒测试的目的:
-
是否有不正确或遗漏的功能
-
在接口中,输入是否能正确的接受,能否输出正确的结果
-
是否有数据结构错误或外部信息(例如数据文件)访问错误
-
性能上是否能够满足预期要求
-
是否有初始化或终止性错误
黑盒测试的优缺点
优点:
-
容易实施,不需要关注内部的实现
-
更贴近用户的角度
缺点:
-
测试覆盖率低
-
针对黑盒自动化测试,费用率较低,维护成本较高
白盒测试
image.png把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致,
白盒测试也被称为结构测试或逻辑驱动测试,白盒测试的目的:
-
对程序模块的所有独立的执行路径至少测试一遍
-
对所有的逻辑判定,取“真”于取“假”的两种情况都至少测试一遍
-
在循环的边界和运行的界限内执行循环体
-
测试内部数据结构的有效性
白盒测试的优缺点
优点:
-
迫使测试人员仔细去思考软件的实现,理解原理
-
可以检查每条代码中的分支和原理
-
揭示隐藏在代码中的错误
-
对代码的测试比较彻底
缺点:
-
昂贵
-
无法检测代码中遗漏的路径和数据敏感性错误
-
不能直接验证需求的正确性
白盒测试可以分为:
-
语句覆盖:可执行语句至少被执行一次
-
判断覆盖:每个判断的取真分支和取假分支至少经历一次
-
条件覆盖:每个条件的取值至少满足一次
-
判断条件覆盖:判断和条件都满足
-
条件组合覆盖:每个条件的所有可能都至少出现一次,并判定结果至少出现一次,和条件覆盖的区别:不是简单的要求每个条件出现“真”和“假”两种结果,而是要求这些结果所有可能至少出现一次。
-
路径测试:执行所有可能的执行路径
-
基本路径测试: 路径测试执行了每个路径。每个判定的结果肯定要经历一次。
灰盒测试
介于黑,白盒测试之间,关注输出对于输入的正确性,同时也关注内部表现。
静态测试
静态测试方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程
序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来检查软件是否符合编程标准,借以发现编写的不足之处,减少错误出现的概率。
动态测试
运行被测程序,检查运行结果与预期结果的差异,并分析运行效率,正确性和健壮性。
手工测试
由专门的测试人员从用户的视角来验证软件是否满足设计要求的行为,更适合针对深度的测试和强调主观判断的测试。
自动化测试
使用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查
image.png按测试模型来分类
瀑布模型
image.png image.png image.png image.png image.png image.png敏捷测试
image.png image.png image.png image.png基于脚本的测试(ST),探索式测试( ET)
image.png基于风险的测试(RBT)
image.png按测试类型来分类
功能测试,性能测试,安全测试,兼容性测试,文档测试,可靠性测试,易用性测试,本地化测试,部署测试,无障碍测试
功能测试
image.png性能测试
image.png image.png安全测试
image.png image.png image.png兼容性测试
image.png文档测试
image.png可靠性测试
image.png易用性测试
image.png本地化测试
image.png部署测试
image.png无障碍测试
image.png其他分类
回归测试,冒烟测试,A/B测试,
回归测试
image.png冒烟测试
image.pngA/B测试
image.png