软件测试
程序员文章站
2024-03-22 12:51:46
...
软件测试的目标
Glen Myers关于软件测试目的提出以下观点:
- 测试是为了发现错误而执行程序的过程
- 测试是为了证明“程序有错”,而不能证明“程序正确”
- 一个好的测试用例在于能够发现至今未发现的错误
- 一个好的测试是发现了至今未发现的错误的测试
软件测试的原则
有如下几点:
- 应当把“尽早的和不断的测试”作为软件开发者的座右铭
- 程序员应避免检查自己的程序
- 测试从小规模开始,逐渐扩大到大规模
- 设计测试用例时,应包括合理的输入和不合理的输入,以及各种边界条件,特殊情况要制造极端状态和意外状态
- 充分注意测试中的聚集现象:测试过程中80%的错误,可能集中在20%的代码里
- 对测试结果要有确认过程
- 制定严格的测试方案,排除测试的随意性
- 注意回归测试的关联性,往往修改一个错误会导致更多错误
- 妥善保存一切测试过程文档,测试重现往往要靠测试文档
测试用例的定义
测试用例(Testing case):
- 测试用例是为特定的目的而设计的一组测试输入,执行条件和预期的结果。
- 测试用例是执行的最小测试实体。
- 测试用例就是设计一个场景,使软件程序在这种场景下,必须能够正常运行并且达到程序执行的预期结果。
测试用例的特征
- 最有可能抓住错误的。
- 不是重复的,多余的。
- 一组相似测试用例中最有效的。
- 既不是太简单,也不过于复杂
测试用例的设计原则
1. 测试用例的代表性:
- 能够代表并覆盖各种合理的和不合理的,合法的和非法的,边界的和越界的以及极限的输入数据,操作和环境设置等。
2. 测试结果的可判定性:
- 测试执行结果的正确性是可判定的,每一个测试用例都应有对应的预期结果。
3. 测试结果的可再现性:
- 对同样的测试用例,系统的执行结果应是一样的。
软件测试人员
软件测试方法的分类
按实施步骤分:
- 单元测试(Unit Testing)
- 集成测试(Integration Testing)
- 确认测试(Validation Testing)
- 系统测试(System Testing)
- 验收测试(Verification Testing)
按使用的测试技术分:
- 静态测试: 走查 / 评审
- 动态测试: 白盒 / 黑盒
按软件组装策略分:
- 非增量测试:整体集成
- 增量测试:自顶向下、自底向上、三明治
1. 单元测试
定义:
- 单元测试是对软件基本组成单元的测试,有时也称为“组件测试”。
- 单元测试一般是由编写该单元代码的开发人员执行,该人员负责设计和运行一系列的测试以确保该单元符合需求。
目的:
- 目的是验证开发人员所书写的代码是否可以按照其所设想的方式执行而产出符合预期值的结果,确保产生符合需求的可靠程序单元。
环境:
- 驱动模块(driver):模拟被测模块的上一级模块,接收测试数据,把这些数据传送给所测模块,最后再输出实际测试结果。
- 桩模块(stub):模拟被测单元需调用的其他函数接口,模拟实现子函数的一些功能。
2. 集成测试
- 在单元测试的基础上,将所有模块按照总体设计的要求组装称为子系统或者系统进行的测试。
- 集成测试的对象是模块间的接口,其目的是找出在模块接口上和系统体系结构上的问题。
集成测试策略:
- 基于层次的集成:自顶向下和自底向上
- 基于功能的集成:按照功能的优先级逐步将模块加入系统中
- 基于进度的集成:把最早获得的代码进行集成
- 基于使用的集成:通过类的使用关系进行集成
整体集成测试 , 增量式集成测试,三明治集成测试
3. 确认测试
- 检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。
4. 系统测试
- 系统测试是将已经集成好的软件系统作为一个元素,与计算机硬件,外设,某些支持软件,数据和人员等其他元素结合在一起,在实际运行环境下进行的一系列测试。
系统测试方法:
- 功能测试,协议一致性测试
- 性能测试,压力测试,容量测试,安全测试,恢复性测试
- 备份测试,GUI测试,健壮性测试,兼容性测试,可用性测试
- 可安装性测试,文档测试,在线帮助测试,数据转换测试
功能测试(Functional Testing):
- 功能测试是系统测试中最基本的测试,不理会软件内部的实现逻辑,主要根据软件需求规格说明和测试需求列表,验证产品的功能实现是否符合需求规格。
- 功能测试主要发现以下错误:
1. 是否有不正确或者遗漏的功能?
2. 功能实现是否满足用户需求和系统设计的隐藏需求?
3. 能否正确的接受输入?能否正确的输出结果?
- 常用的测试技术:
- 黑盒测试方法:等价类划分,边界值测试
压力测试(Press Testing)
- 压力测试是检查系统在资源超负荷情况下的表现,特别是对系统的处理时间有什么影响。
- 压力测试采用边界值和错误猜测方法,且需要工具的支持。
安全性测试(Security Testing):
- 安全性测试检查系统对非法入侵的防范能力。
- 安全测试期间,测试人员假扮非法入侵者,采用各种办法突破防线。
恢复测试(Recovery Testing):
- 恢复测试是检验系统从软件或者硬件失败中恢复中的能力,采用各种人工干预的方式使软件出错,从而检验系统的恢复能力。
GUI测试(Graphic User Interface Testing):
- GUI测试一是检查用户界面实现与设计的符合情况,二是确认用户界面处理的正确性。
- GUI测试提倡界面与功能的设计分离,其重点关注在界面层和界面与功能接口层上。
- GUI自动化测试工具
• WinRunner,QARun,QARobot,Visual Test
- 常用的测试技术
• 等价类划分、边界值分析、基于状态图方法、错误猜测法
安装测试(Installation Testing):
- 系统验收之后,需要在目标环境中进行安装,其目的是保证应用程序能够被成功的安装。
5. 验收测试
- 验收测试是以用户为主的测试,一般使用用户环境中的实际数据进行测试。
- 在测试过程中,除了考虑软件的功能和性能外,还应对软件的兼容性,可维护性,错误的恢复功能等进行确认。
α 测试与β 测试
- α测试与β测试是产品在正式发布前经常进行的两种测试;
• α测试是由用户在开发环境下进行的测试;
• β测试是由软件的多个用户在实际使用环境下进行的测试。
6. 回归测试
– 回归测试是验证对系统的变更没有影响以前的功能,并且保证当前功能的变更是正确的。
– 回归测试可以发生在软件测试的任何阶段,包括单元测试、集成测试和系统测试,其令人烦恼的原因在于频繁的重复性劳动。
– 回归测试应考虑的因素:
• 范围:有选择地执行以前的测试用例;
• 自动化:测试程序的自动执行和自动配置、测试用例的管理和自动输入、测试结果的自动采集和比较、测试结论的自动输出。