软件测试含义
?使用人工或者自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的找出与预期结果之间的差异。
软件测试对象
?软件需求
?软件概要设计
?软件详细设计
?软件源码
?软件运行环境
?可运行程序
软件测试的五大要素和两个目标
五大要素
?质量
?人员【决定了资源、技术、流程】
?资源【测试中的硬件设备、网络环境、测试数据、测试周期、测试时间等】
?流程【测试计划、测试用例、测试执行、测试报告等进入进出过程中的规范】
?技术【测试方法、测试技术、工具等,技术是手段】
两大目标
?测试覆盖率【提高测试覆盖率,有效的保证软件质量】
?测试效率【提升测试效率】
软件测试遵循原则
?测试能显示缺陷的存在,但不能保证系统不存在故障
?穷尽测试是不可能的,应设定测试终止条件
?测试应及早进行【缺陷收入成本在研发前期最小,越往后成本越大】
?缺陷具备群集特性【一个模块中我们发现了越多的缺陷,说明这个模块的问题越多,重点关注问题发生的多的模块】
?杀虫剂悖论【在测试中,若采用同样的测试用例、测试方法,很难找出问题,应定期进行测试用例评审与修改】
?测试的二八原则【把80%的精力放到20%的重点模块上,达到测试效率及资源的最佳比例】
?测试活动依赖于测试背景
软件测试的分类
?按测试阶段分类
-
单元测试
- 对软件中的最小的可测试单元进行检查。
- 设计原则:尽可能的保证各个测试用例是相互独立的;
-
集成测试
- 是在单元测试的基础上,测试在将所有的软件单元按照概要设计的啊哟求组装成模块、子系统或者系统的过程中,各个部分是否达到或实现相应的技术指标及要求的活动。
-
系统测试
- 是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。
- 一般包括性能测试,功能测试。
- 系统测试关注点:
- 1.关注系统本身的使用;
- 2.关注系统与其他系统的关联性;
- 3.关注系统在不同使用压力下的表现(cpu/大并发)
- 4.关注系统在真实使用环境下的表现;
-
验收测试
- 交付测试。针对用户需求、业务流程的正式测试,确定系统是否满足验收标准,有用户、客户或其他授权机构决定是否接受系统。
- 一般包括用户验收测试,运行验收测试、合同和规范验收测试。
-
Alpha 测试
由开发者提供场所和环境进行测试
-
Beta 测试
用户的场所和环境进行测试
?按测试手段分类
-
手动测试+自动化测试【按测试执行方式】
-
黑盒测试+白盒测试【按测试对象可见度】
-
黑盒测试
-
只检查程序外部结构;功能是否正确实现;输入是否有正确输出。主要从用户角度,通过事件驱动来完成。
- 测试点:是否有不正确或遗漏的功能;在接口上,输入是否能有正确的接收和输出;是否有数据结构的错误或外部信息;性能是否能满足需求。
-
黑盒测试的设计方法
-
等价类划分法//针对程序有很多的输入,把所有的输入条件,把等价的分成一类,通过典型的数据进行测试
-
边界值分析法//特殊的等价类划分,关注边界点(开发人员在编写程序在边界值上很容易出现错误)
-
错误推测法//基于经验或直觉,针对性的设计用例(特殊字符,文件不存在等)
-
因果图法//拿到程序的需求规格说明书,把输入和输出形成因果图,形成判定表来编写测试用例;
-
正交试验分析法//筛选输入数据
-
状态迁移图法//通过梳理软件功能点的状态迁移关系来设计输入数据;(数据的变迁关系图)
-
流程分析法//梳理程序的逻辑施行路径来设计测试用例
-
-
-
-
静态测试+动态测试【按测试状态】
?按测试模式分类
-
传统瀑布模型
- 项目计划(项目计划书)-需求分析(需求规格说明书)-软件设计(概要设计/详细设计)-程序开发(产品版本)-软件测试(测试报告,测试结果)-集成维护(用户反馈)
- 每一个阶段都是以上一个阶段的输出作为下一个阶段的输入
- 优点:强调需求、设计的作用阶段分布明确,里程碑清晰文档规范
- 缺点:难以适应需求的频繁变化项目周期后半段才能看到成果强制的里程碑、完成时间点文档工作量大、缺陷发现较晚,成本较高
-
敏捷测试
- 强调从客户角度进行;重点关注迭代测试新功能,不强调测试阶段;尽早测试,不间断测试,具备条件即测试;强调持续反馈;预防缺陷重于发现缺陷;
?按测试类型分类
-
功能测试
- 根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作性以确保它们能满足需求。
-
性能测试
- 负载测试:在测试过程中逐步增加负载,并且记录被测系统相应的结果;
- 压力测试:测试系统在极限情况下的工作情况,确定系统所能承受的最大极限;
- 稳定性测试:对系统进行连续的、长时间的测试,以确定系统在较长时间运行下的稳定性;
- 性能指标:并发用户数;每秒事物数;系统响应时间;设备性能(CPU/磁盘IO/网络IO);
-
部署测试
- 也称为安装测试。主要验证系统安装过程,并确保软件经过安装后可以正常使用;
-
文档测试
-
安全测试
- 对软件产品进行测试以确保其符合产品安全需求和质量标准;
- 渗透测试:通过模拟对软件系统的恶意攻击行为来评估系统安全性的一种测试。
-
兼容性测试
- 软件本身的兼容性;(新版本对历史版本的配置、功能、历史数据的兼容)
- 不同平台下的兼容;(不同版本的平台等)
- 软件对运行设备的兼容性
- 软件互操作性(同一个厂商会有不同的软件,软件交互时的功能;和其他软件交互是的兼容)
-
易用性测试
-
本地化测试
- 测试内容:语言、书写习惯;时区、日期格式、货币;当地风俗、法律法规;政治敏感问题
-
无障碍测试
-
可靠性测试
- 硬件可靠性(硬件产品在设计、应用过程中受外界因素的影响;温度、湿度等)
- 回归测试
-
- 软件功能修改后,对软件进行重新测试以确保修改没有引入新的错误或导致其他部分产生错误;回归测试的重点在关键模块和重点功能组件;
- A/B测试
-
-
通过为页面提供2个版本给用户使用并记录相关用户行为数据,来确定更优化的一种测试方案。
-
-
- 实施要点:多个方案并行;每次测试仅改动一个变量;按照某种规则进行优胜劣汰;