软件测试一页开卷
L如果你害怕失敗,那你很有可能會失敗。 If you’re afraid to fail, then you’re probably going to fail.
软件与软件测试概要
软件组成
软件由以下四部分组成:
- 程序:实际的代码部分。
- 数据库:用于存储数据的系统。
- 文档:用户手册、设计文档等。
- 服务:软件运行所依赖的各种服务。
软件测试定义
软件测试是为了发现软件中的缺陷,验证软件是否满足需求规格说明书中所述的功能和性能的过程。
软件缺陷
- 五个方面:
- 功能缺陷
- 性能缺陷
- 界面缺陷
- 安全缺陷
- 兼容性缺陷
- 四个组成部分:
- 需求设计
- 代码实现
- 测试验证
- 运维监控
- 各组成比例:
- 需求设计:30%
- 代码实现:30%
- 测试验证:20%
- 运维监控:20%
- 经典例子:千年虫问题(Y2K问题),由于对年份只使用两位数,导致在2000年出现日期处理错误。
测试用例定义
测试用例(Test Case)是为了验证软件需求是否正确实现而设计的一组输入、执行条件及预期结果。
测试用例定义1-15:
- 用例标识
- 用例名称
- 用例描述
- 优先级
- 预置条件
- 测试输入
- 操作步骤
- 预期结果
- 实际结果
- 测试环境
- 测试数据
- 测试时间
- 测试人员
- 相关文档
- 备注
必须给出:用例标识、用例名称、用例描述、预置条件、操作步骤、预期结果、实际结果。
软件测试计划定义
软件测试计划是指为了确保软件产品质量而制定的详细测试方案,包含了测试目标、测试范围、测试策略、资源安排、进度计划、风险分析和应对措施等内容。
测试计划内容
测试计划包含以下七个方面:
- 测试目标
- 测试范围
- 测试策略
- 资源安排
- 进度计划
- 风险分析
- 应对措施
静态测试
静态测试是指不执行程序代码,通过代码审查、走查、静态分析工具等方法来发现软件缺陷。
静态测试内容:
- 代码审查
- 走查
- 代码规范检查
- 静态分析工具
动态测试
动态测试是指在程序执行过程中,通过输入数据、观察输出、监控系统行为等方式来发现软件缺陷。
动态测试内容:
- 功能测试
- 性能测试
- 兼容性测试
- 安全测试
白盒测试
白盒测试是指测试者了解程序内部结构,根据代码逻辑设计测试用例,进行代码覆盖度分析。
白盒测试策略:
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 路径覆盖
- 分支覆盖
- 基本块覆盖
黑盒测试
黑盒测试是指测试者不关心程序内部结构,根据需求规格说明书设计测试用例,验证软件功能和性能。
黑盒测试策略:
- 等价类划分
- 边界值分析
- 错误推测
- 因果图
- 状态迁移测试
软件测试过程
软件测试过程包括以下阶段:
- 单元测试
- 集成测试
- 系统测试
- 验收测试
工程师素质
工程师应具备两项意识、三颗心、四种能力、五个特性。
两项意识:
- 质量意识
- 安全意识
三颗心:
- 责任心
- 细心
- 耐心
四种能力:
- 分析能力
- 解决问题能力
- 学习能力
- 沟通能力
五个特性:
- 专业性
- 创新性
- 协作性
- 适应性
- 持续改进性
黑盒测试与白盒测试详解
黑盒测试的等价类测试
确定等价类的六个原则:
- 覆盖全部输入域
- 划分为有效等价类和无效等价类
- 等价类之间互斥
- 每个等价类内部等效
- 等价类应尽量小
- 等价类应有实际意义
等价类测试用例设计:根据上述原则,设计测试用例覆盖所有等价类。
黑盒测试的边界值分析法
边界值分析基本思想是选择输入域边界附近的值进行测试,因为这些值容易出错。
边界值分析测试用例(以三角形为例):
- 三角形三边边界值分别为a, b, c
- 测试用例数目公式:4(极值数目)*n(变量数目)+1
白盒测试的六种逻辑驱动覆盖法
六种逻辑覆盖法:
- 语句覆盖:确保每条语句至少执行一次。
- 判定覆盖:确保每个判定条件的每个分支至少执行一次。
- 条件覆盖:确保每个条件的每种可能取值至少执行一次。
- 判定/条件覆盖:确保每个判定和每个条件的每种可能取值至少执行一次。
- 路径覆盖:确保每条可能执行的路径至少执行一次。
- 基本块覆盖:确保每个基本块至少执行一次。
注意:语句覆盖最弱,路径覆盖最强。
单元测试
单元测试是对软件的最小可测试单元(如函数、方法、模块)进行验证,以确保其功能正确。
单元测试与集成测试、系统测试的区别
- 单元测试与集成测试的区别:
- 单元测试关注单个模块
- 集成测试关注模块之间的接口和交互
- 单元测试与系统测试的区别:
- 单元测试关注单个功能
- 系统测试关注整个系统的功能和性能
集成测试
集成测试是将单个模块组装成系统或子系统进行测试,验证它们之间的接口和交互是否正确。
集成测试方法:
- 大爆炸法
- 增量法(自顶向下、自底向上)
系统测试
系统测试是对整个系统进行全面测试,验证系统是否满足需求规格说明书中的所有功能和性能要求。
JUnit4框架
JUnit4注解:
- @BeforeClass:表示整个类运行前会运行的方法
- @AfterClass:表示整个类运行后会运行的方法
- @Before:每个测试用例运行前会运行的方法,会重复运行
- @After:每个测试用例运行后会运行的方法,会重复运行
- @Test:对应的测试方法
JUnit5框架
JUnit5注解变更:
- @BeforeClass变为**@BeforeAll**
- @AfterClass变为**@AfterAll**
- @Before变为**@BeforeEach**
- @After变为**@AfterEach**
- @Test不变