软件测试基础
软件测试
软件测试概述
什么是软件测试?
软件测试IEEE中定义是:使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
总结:为发现错误而执行程序的过程;评价程序或系统属性为目的的活动,是对软件质量的度量。
什么是软件缺陷?
- 软件未实现规格说明书中的功能
- 软件功能超出规格说明书范围
- 软件未达到应达到的目标
- 软件难以理解,不易使用,运行速度缓慢
软件测试对象
- 程序
- 文件
- 数据
软件测试的过程模型
软件测试的生命周期
软件测试的测试方法
是否执行软件:静态分析、动态测试
是否了解程序内部结构:黑盒测试(又称功能测试、数据驱动测试)、白盒测试(又称结构测试、逻辑驱动测试)、灰色测试
根据阶段和作用:单元测试(函数功能是否实现)、集成测试(各个模块之间调用还有接口函数的传递是否正确)、系统测试(需求规格是否被实现)、验收测试(用户是否可以接受)
根据目的:功能测试、性能呢个测试、安全测试、兼容性测试
常被面试的概念:
- 回归测试:修改后的代码再测试,改好了同时不引起其他错误的测试
- 冒烟测试:软件测试基本功能是否完成
- 阿尔法测试:用户在开发环境下测试
- 贝达测试:用户在用户环境下测试
软件测试的基本原则
- 尽早不断进行软件测试
- 避免测试自己的程序
- pareto原则
- 测试用例由输入和预期输出结果组成
- 程序修改后要进行回归测试
- 穷举测试不可能
黑盒测试技术
黑盒测试概述
什么是黑盒测试?
黑盒测试:不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。
黑盒测试主要发现的错误
- 功能不正确或遗漏
- 界面出错
- 数据库访问错误
- 性能错误
- 初始化或终止错误
黑盒测试步骤
为什么要设计测试用例?
良好的测试用例可以缩短实施测试时间,确保测试的系统性、全面性,提高测试的可复用性。
黑盒测试用例设计方法-等价类划分法
把程序的所有可能输入数据划分为若干子集,每一子集的代表性数据在测试中的作用等价于这一子集的其他值。每一个子集就是一个等价类。等价类需要考虑有效等价类和无效等价类。
设计步骤:1. 划分等价类 2. 确定测试用例。
黑盒测试用例设计方法-边界值法
长期测试经验表明:大量错误发生在输入或输出范围的边界上,而不是发生在输入输出范围内部。因此,对各种边界设计测试用例,能取得良好的效果。
黑盒测试用例设计方法-判定表驱动法
判定表(Decision table)是分析和表达教为复杂逻辑条件下软件状态和行为的有效工具。
用它可以设计出完整的测试用例集合,将复杂问题的各种可能情况罗列出,使测试内容变得简单明了而避免遗漏。
设计步骤:
- 确定规则的个数,条件数为n,规则个数=2^n;
- 列出所有的条件桩和动作桩;
- 填入条件项;
- 填入动作项;
- 简化判定表,合并相似规则。
黑盒测试用例设计方法-因果图法
设计步骤:
- 从程序规格中找出因(条件项)和果(结果项),并分析因果关系,以及因因、果果之间的约束关系,绘制因果图。
- 通过因果图转为判定表
- 将判定表中不符合约束条件的规则去除
- 然后将判定表简化,将每一规则转化为一个测试用例
黑盒测试用例设计方法-正交实验法
正交试验法是从大量试验点中挑出适量的,有代表性的点,利用正交表,合理地安排实验的一种科学实验设计方法。
常用正交表:
- 分析影响测试项的因素
- 分析每个因素的取值方式
- 设计或者选择一个合适的正交表
- 把正交表中的元素转换为因素的实际取值,每行转换为一个测试用例。
黑盒测试用例设计方法-场景法
- 事件触发时序不同形成不同场景。
- 事件流分为基本流和备选流。基本流描述最正常的一种场景,备选流描述执行过程中的异常或偶尔发生的情况。
- 场景法是通过用例场景描述业务操作流程,遍历业务流程上所有基本流和备选流。
设计步骤:
- 分析程序基本流、备选流
- 根据基本流、备选流生成场景
- 每一个场景对应一个测试用例
白盒测试技术
白盒测试概述
白盒测试又称为逻辑驱动测试,测试用例是根据选用的覆盖标准来确定。
白盒测试用例设计方法-逻辑覆盖法
设计步骤:
- 选择逻辑覆盖标准
- 按照覆盖标准列出所有情况
- 选择确定测试用例
逻辑覆盖法以程序内部逻辑结构为基础的测试技术,它考虑的是测试数据对逻辑的覆盖。
判定覆盖(Decision Coverage,DC):设计若干个测试用例,使程序中的每一个真分支和假分支至少执行一次。
条件覆盖(Condition Coverage,CC):设计若干个测试用例,使每个逻辑条件的可能取值至少执行一次。
判定-条件覆盖(Decision Condition Coverage,DCC):设计若干个测试用例,使每个条件的所有可能取值至少执行一次,同时所有的判定可能结果也至少执行一次。
条件组合覆盖:设计若干个测试用例,使每个判定的所有条件组合情况至少出现一次。
白盒测试用例设计方法-基本路径测试法
它是程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径的集合,从而设计测试用例的方法。设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次。
设计步骤:
- 导出程序的控制流图
- 计算程序的圈复杂度
- 确定线性独立路径集合
- 生成测试用例
自动化测试
自动化测试优缺点及适用情况
自动化测试优点
- 提高测试质量
- 提高测试效率
- 提高测试覆盖率
- 完成手工测试不能完成的任务
- 测试重复性
- 更好地利用资源
自动化测试局限
- 不要希望所有的测试全部自动化,只有重复繁琐的活动才可能需要自动化
- 很多时候手工测试必不可少,如果软件不稳定时,必须要先进行手工测试,且手工测试可以处理更多的意外事件,自动化测试工具不一定可以处理(如网络连接中断)
- 自动化测试不能发现大量的新缺陷,自动化测试重点在回归测试。
什么情况下测试应该自动化?
- 接口、单元测试等易于实现自动化的测试
- 压力测试
- 自动化测试用例会被反复使用
- 项目周期较长、需求变动不频繁
什么情况下测试不应该自动化?
- 只运行一次的测试
- 周期短的项目
- 人体感官和易用性的测试
- 未经过详细准备的测试
- 不稳定的软件
- 涉及物理交互
自动化测试工具
单元测试工具:JUnit NUnit CppUnit
性能测试工具:LoadRunner Jmeter
功能测试工具:QTP robot winrunner selenium Katalon
白盒测试
静态测试工具:Logiscope PRQA
动态测试工具:DevPartner Rational purify