1. 软件测试的目的及原则
软件测试是为了发现软件缺陷而执行程序的过程,软件测试是为了证明软件有缺陷,而不是仅仅为了演示软件的正确功能。
软件测试的原则:
Pareto法则:也称为80/20法则
- 一般可以发现80%的缺陷,最后20%的缺陷可能在用户大范围、长时间使用后才逐渐暴露出来。
- 80%的软件缺陷通常集中在20%的模块中
- 20%的缺陷通常消耗80%的维护费用
测试不能证明软件无错,测试无法显示潜在的软件缺陷,因为完全测试软件是不可能的。
软件缺陷的免疫力(杀虫剂怪事):软件会对相同类型的测试产生免疫力,需不断编写新的测试程序,对程序的不同部分进行测试,以找到更多的软件缺陷。
并非所有的软件缺陷都需要修复:时间不够;并不是真正的软件缺陷(当做功能);修复的风险很大;不值得修复
2.软件测试的分类
软件测试主要有两种:
- 静态测试:不运行被测程序,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
- 动态测试:设计一组输入数据,通过运行程序来发现错误,测试任何工程化产品。
其中动态测试又包括黑盒测试和白盒测试
3.黑盒测试
黑盒测试:了解产品的功能,然后构造测试用例,来证实所有的功能是完全可执行的
黑盒测试包括以下方法:
- 等价类划分法
- 边界值划分法
- 错误推测法
- 因果图法
4.白盒测试
白盒测试:知道测试产品的内部结构及处理过程,可以构造测试用例,对所有的结构都进行测试。
白盒测试包括以下方法:
- 逻辑覆盖法
- 基本路径覆盖法
- 循环路径测试
5. 如何构建测试用例
第一步,划分等价类并编号
第二步,设计有效的测试用例,覆盖所有的等价类
第三步,为每个无效等价类设计测试用例
6.软件测试与软件开发的关系
在软件开发的过程中开发编码或需要进行单元测试、集成测试以及确认测试,每个测试需要分别修改详细设计、概要设计以及需求分析
7.单元测试
单元测试需要对模块进行测试,单元测试的任务包括模块接口测试、模块局部数据结构测试、模块边界条件测试、模块边界条件测试、模块执行路径测试以及模块内部错误处理测试。
单元测试应为测试模块开发
- 一个驱动模块:通常被称为“主程序”,驱动模块接受测试数据并将这些数据传递到被测试模块,被测试模块调用后,驱动模块打印“进入-退出”消息
- 若干个桩模块:通常被称为“虚拟子程序”,桩模块代替被测试所调用的模块。
8.集成测试
多模块程序的各模块之间可能有比较复杂的接口,单元测试中往往使用了测试软件,模块组装后的所积累的误差可能达到了不能容忍的地步
集成测试的策略:
- 自顶向下
- 自底向上
9.调试策略
调试策略包括:
- 试探法:凭借经验猜想故障的位置,然后使用适当的调试技术。
- 回溯法:检查错误症状,确定最先发现症状的地方,然后沿着源程序的控制流往回追踪程序代码,直到找到错误根源或确定故障范围为止。
- 对分查找法:如果已经直到每个变量在程序内若干个关键点的正确值,则可以用赋值语句或输入语句在程序“中点”附近加入这些变量的正确值,然后检查程序的输出。如果输出结果是正确的,则故障点在程序“中点”的前半部分,反之,故障在“中点”的后半部分。