测试过程
- 制定测试计划。内容主要有测试内容、进度安排、测试所需环境和条件、测试培训安排等
- 编制测试大纲。明确、详尽地规定测试中针对系统的每一项功能或特征所必须完成的基本测试项目和测试完成标准。
- 设计并生成测试用例,产生测试设计说明文档。主要有被测试项目、输入数据、测试过程和预期输出结果等
- 实施测试。
- 生成测试报告。对测试进行概要说明,列出测试结论,指出缺陷和错误,给出建议。
测试策略
有效的软件测试分为4步:单元(模块)测试、集成测试、确认(验收)测试和系统测试
单元测试(白盒测试)
在模块编写完成且无编译错误后进行。侧重于对模块中的内部处理逻辑与数据结构。
单元测试内容
1 模块接口。测试模块的输入参数和形式参数在个数、属性、单位上是否一致;调用其他模块时,所给出的实际参数和被调用模块的形式参数在个数、属性、单位上是否一致;调用标准函数时,所使用的参数在属性、数目和顺序上是否正确;全局变量在各模块中的定义和用法是否一致;输入是否仅改变了形式参数;开/关的语句是否正确;规定的IO格式是否与输入/输出语句一致;在使用文件之前是否已经打开文件或使用文件之后是否已经关闭文件。
2 局部数据结构。变量的说明是否合适;是否使用了尚未赋值或尚未初始化的变量;变量的初始值或默认值是否正确;变量名是否有错。
3 重要的执行路径。发现是否有计算、比较或控制流方面错误。
4 出错处理。好的设计应该能够预测到出错条件并且有对出错处理的路径。
5 边界条件。
集成测试
集成测试有两种方法:一种非增量集成,另一种增量集成
- 增量集成策略
1 自顶向下集成测试。自顶向下集成测试时一种构造软件体系结构的增量方法。模块集成顺序为从主控模块(主程序)开始,沿着控制层逐步向下,以深度优先或广度优先的方式将从属主控模块的模块集成到结构中。
2 自底向上集成测试。自底向上集成测试就是从原子模块(程序结构最底层构件)开始进行构造和测试。
3 回归测试。重新执行已测试过的某些子集,以确保变更没有传播不期望的副作用。
4 冒烟测试。在测试中发现问题,找到了一个Bug,然后开发人员会来修复这个Bug。这时想知道这次修复是否真的解决了程序的Bug,或者是否会对其它模块造成影响,就需要针对此问题进行专门测试,这个过程就被称为Smoke Test。
确认测试
测试集中于用户可见动作和用户可识别的系统输出
- α测试与β测试。
α测试
是由有代表性的最终用户在开发者的场所进行。开发者在用户后面观看,并记录错误和使用问题。β测试
在一个或多个最终用户场所执行。最终用户记录测试过程中遇到的所有问题(现实存在或想象的),并定期报告给开发者。接到问题测试报告后开发人员对软件进行修改,然后准备向用户发布软件产品。
系统测试
系统测试是将已确认的软件、计算机硬件、外设和网络等因素结合在一起,进行信息系统的各种集成测试和确认测试,目的在于通过与系统的需求分析比较,发现所开发的系统与用户需求不符或矛盾的地方。
1 恢复测试。通过各种方式强制地让系统发生故障,并验证能否安装要求从故障中恢复过来,并在规定的时间内开始进行事物处理,而且不对系统造成任何伤害。
2 安全性测试。验证建立在系统内的保护机制是否能够实际保护系统不受非法入侵。测试过程中,测试人员模拟非法入侵者,采用各种方法冲破防线。
3 压力测试。压力测试要求以非正常的数量、频率或容量等方式执行系统。
4 性能测试。测试软件在集成环境中的运行性能。
5 部署测试。在多种运行环境中测试软件。
测试方法
软件测试方法分为静态测试和动态测试。静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。动态测试是指运行程序发现错误,可采用黑盒测试和白盒测试。
黑盒测试
黑盒测试也称功能测试,在完全不考虑软件的内部结构和特征的情况下,测试软件的外部特性。
常用的黑盒测试技术有等价类划分、边界值分析、错误推测和因果图的等。
1 等价类划分。将程序的输入域划分为若干等价类,然后从每个等价类中选取一个代表性数据作为测试用例。
2 边界值分析。输入的边界比中间值更加容易发生错误。
3 错误推测。基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例。即列举程序中所有可能的有的错误和容易发生的错误的特殊情况,根据他们选择测试用例。
4 因果图。从自然语言描述的程序规格说明中找到因(输入条件)和果(输出或程序状态的改变),通过因果图转换为判定表。
白盒测试
白盒测试也称结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的要求。
白盒测试常用的测试技术是逻辑覆盖、循环覆盖和基本路径测试。
1 逻辑覆盖。逻辑覆盖考察测试数据运行被测试程序时的覆盖程度,主要的逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖6种。
- 语句覆盖。语句覆盖指选择足够的测试数据,使被测试过程中的每条语句至少执行一次。
- 判定覆盖。判定覆盖指设计足够的测试用例,使得被测试程序中的每个判定表达式至少获得一次“真”值和“假”值。
- 条件覆盖。条件覆盖指构造一组测试用例,是的每一判定语句中的每个逻辑条件的各种可能的值至少满足一次。
- 判定/条件覆盖。判定/条件覆盖指设计足够的测试用例,使得判定中的每个条件的所有可能值(真/假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次。
- 条件组合覆盖。条件组合覆盖指设计足够多的测试用例,使得每个判定条件的各种可能值的组合都至少出现一次。
- 路径覆盖。路径覆盖指覆盖被测试程序中所有可能的路径。-
2 循环覆盖。执行足够的测试用例,使得循环中的每个条件都得到验证。
3 基本路径覆盖。在程序控制流图的基础上通过分析控制流图的环路复杂性,导出基本可执行路径集合,从而设计测试用例。