软件测试
软件测试
测试是为了证明“程序有错”,而无法证明“程序正确”
软件质量
只有极少数软件应该追求“零缺陷”,对绝大多数软件而言,商业目标决定了质量目标,而不该把质量目标凌驾于商业目标之上
- 航空、航天等系统对质量要求极高,任何缺陷都有可能导致机毁人亡,所以人们不惜一切代价去消除缺陷
绝大多数普通软件的缺陷并不会造成机毁人亡的重大损失;日常工作中用到的软件几乎都是有缺陷的
- 评审:通常是简单地读程序或对照错误检查表进行检查
- 走查:按照所提交的测试用例,人工模仿计算机运行一遍,并记录跟踪情况
静态代码分析
无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷
如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等
主要技术:缺陷模式匹配、类型推断、模型检查、数据流分析等
动态程序分析
性能分析
以收集程序运行时的信息为手段研究程序行为的分析方法
- 目的在于决定程序的哪个部分应该被优化,从而提高程序的速度或者内存使用效率。
- 抽样、代码注入
测试方法分类
- 按实施步骤
- 单元测试
- 集成测试
- 确认测试
- 系统测试
- 按使用的测试技术
- 静态测试:走查/评审
- 动态测试:白盒/黑盒
- 按软件组装策略
- 非增量测试:整体集成
- 增量测试:自顶向下、自底向上、三明治
单元测试(Unit Testing)
对软件基本组成单元进行的测试
测试内容
- 接口
- 局部数据结构
- 独立路径
- 边界条件
- 错误处理路径
集成测试(Integration Testing)
在单元测试的基础上,将所有模块按照总体设计的要求组装成为子系统或系统进行的测试。
- 整体集成方式(非增量式集成)
- 把所有模块按设计要求一次全部组装起来,然后进行整体测试
- 增量式集成
- 逐步将新模块加入并测试
- 自顶向下
- 从主控模块开始,按软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起
- 自底向上
- 从软件结构最底层的模块开始组装测试
- 三明治集成
- 一种混合增量式集成策略,综合了自顶向下和自底向上两种方法的优点
确认测试(Validation Testing)
检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准
系统测试(System Testing)
将已经集成好的软件系统作为一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他元素结合在一起,在实际运行环境下进行的一系列测试
- 功能测试
- 压力测试
- 安全性测试
- 恢复测试
- GUI测试
- 安装测试
验收测试(Acceptance Testing)
是以用户为主的测试,一般使用用户环境中的实际数据进行测试。
回归测试(Regression Testing)
验证对系统的变更没有影响以前的功能,并且保证当前功能的变更是正确的
This post is licensed under CC BY 4.0 by the author.