软件测试基础-更高级别的测试、调试、极限测试
更高级别的测试
- 开发过程和测试过程存在一一对应关系
- 模块测试的目的是发现程序模块与其接口规格说明之间的不一致
- 功能测试的目的是为了证明程序未能符合其外部规格说明
- 系统测试的目的是为了证明软件产品与其初始目标不一致
功能测试
- 黑盒测试
- 目的:是为了暴露程序的错误以及与规格说明不一致之处,而不是为了证明程序符合其外部规格说明
系统测试
能力测试
- 判断目标文档提及的每一项能力是否都确实已经实现
容量测试
- 使程序经受大容量数据的检验。
- 需要大量资源
- 机器和工时限制,不能进行过程的容量测试
- 每个程序应该至少进行几次容量测试
强度测试
- 使程序承载高负载或强度的检验
- 高强度:在很短的时间间隔内达到的数据或操作的数量峰值
易用性测试
- 试图发现人为因素或易用性的问题
安全性测试
- 设计测试用例来突破程序安全检查的过程
性能测试
- 特定性能或效率目标,描述为在特定负载和配置环境下程序的响应时间和吞吐量
存储测试
- 软件偶尔会有存储目标
配置测试
- 应该使用每一种类型的设备,以最大和最小的配置来测试程序
兼容性/配合/转换测试
- 当存在新开发的软件替换某些不完善的系统,会涉及到与现有系统的兼容以及从现有系统的转换过程
安装测试
- 安装测试是系统测试中的一个重要部分
可靠性测试
- 可靠性目标:正常运行时间,平均故障间隔时间(MTBF)
可恢复性测试
- 可恢复性目标:平均恢复时间(MTTR)
适用性测试
- 目标:存储转存程序或诊断程序、调试明显问题的平均时间、维护过程以及内部业务文档的质量
文档测试
- 根据文档来确定系统测试用例的形式
- 即一旦涉及完成某个具体的测试情况,应该使用文档来确定系统测试用例的形式
过程测试
- 必须对所有已规定的人工过程,如系统操作员、数据库管理员或最终用户的操作过程进行测试
系统测试的执行
- 不能有程序员来进行测试
- 在所有的测试阶段之中,这是唯一一个明确地不能由负责该程序开发的机构来执行的测试
验收测试
- 将程序预期最初的需求及最终用户当前的需求进行比较的过程
- 测试通常是由程序的客户或最终用户来进行
安装测试
- 在安装软件系统期间会发生很多时间,作为示例的简短列表可以包括:
- 用户必须选择大量的选项
- 必须分配并加载文件和库
- 必须进行有效的硬件配置
- 软件可能要求网络连通,以便与其他软件连接
- 软件测试用例需要检查以确认已选的选项集合互不冲突,系统的所有部件全部存在,所有文件已经创建并包含必须内容,硬件配置妥当
测试的计划与控制
测试结束准则
- 常见准则:
- 用完安排的测试时间后,测试便结束
- 当执行完所有测试用例都未发现错误,测试便结束
- 上述两条准则往往是无效的,以下三类结束准则较为有效
- 最佳准则可能是上述三类的组合
调试
- 调试是执行一次成功的测试之后要进行的工作。成功的测试指的是可以证明程序没有实现预期功能。
- 从执行了一个成功的测试用例,发现了一个问题开始
- 确定程序中可疑错误的准确性和位置
- 修改错误
暴力调试法
利用内存信息输出调试
根据一般的“在程序中插入打印语句”建议来调试
使用自动化的调试工具进行调试
特点
- 忽略思考的过程
归纳法调试
演绎法调试
回溯法调试
测试法调试
调试的原则
定位错误的原则
- 动脑筋
- 遇到僵局稍后解决
- 遇到困境描述给他人
- 测试工具是第二手段
- 避免使用试验法
修改错误的技术
- 存在一个缺陷的地方,可能还存在其他缺陷
- 应纠正错误本身,而不是其症状
- 正确纠正错误的可能性并非100%
- 正确修改错误的可能性随着程序规模的增大而降低
- 改正错误可能会引入新的错误
- 修改错误的过程也是临时回到设计阶段的过程
- 应该修改源代码而不是目标代码
错误分析
- 错误出现在什么地方?
- 谁制造了这个错误?
- 哪些做得不正确?
- 如何避免该错误的出现?
- 为什么错误没有早些发现?
- 该如何更早地发现错误?
极限测试
极限编程基础
- XP重视采取简单的设计、在开发人员和客户之间建立联系、不断地测试代码库、重构以适应规格说明的变更,以及寻求用户的反馈。XP更倾向于适合中小规模的软件开发,这些软件的规格说明的变更非常频繁,接近实时的沟通也是可能的。
- 避免了大规模项目的综合征
- 避免了编写不必要的功能
- 将精力集中在测试上,测试先行
极限测试:概念
- 极限测试分为单元测试和验收测试
极限单元测试
- 是极限测试中才用的主要测试方法
- 简单规则
- 所有代码模块在编码开始之前必须设计好单元测试用例
- 在产品发布之前必须通过单元测试
- 极限测试中的单元测试与普通单元测试的最大区别
- 极限测试中的单元测试必须在模块编码之前就完成设计和生成
- 这样能够迫使我们在代码编写之前, 首先理解规格说明,避免混淆
验收测试
- 目的是判断应用程序是否满足如功能性和易用性等其他需求。在设计/计划阶段,由开发人员和客户来设计验收测试
- 验收测试也是回归测试的一种形式