一、软件测试的目的和原则
1、目的
发现错误,源代码、文档
2、原则
- 软件测试必不可少
- 测试用例应由测试输入数据和对应的预期输出结果这两部分组成
- 程序员应避免检查自己的程序
- 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
3、测试信息流
- 软件配置
- 测试配置
- 测试工具
- 测试结果分析
- 排错(调试)
- 修正后的文档在测试
4、测试与软件开发各阶段的关系
二、软件测试用例设计
1、黑盒测试
(功能测试,数据驱动,把测试对象看成黑盒,主要测试功能,检查程序模块间的接口)
1、等价类划分(有效等价类,无效等价类)
2、边界值分析:选一个或几个特定值,是这个等价类的每个边界都作为测试的目标;考虑输入和输出条件(输出等价类)
3、错误推测法:列举出程序中所有可能出现的错误
4、因果图:原因和结果明确,最终生成判定表。基本符号用Ci表示原因,用Ei表示结果,“0”表示某状态不出现,“1”表示某状态出现
2、白盒测试
(结构测试,可看成一个透明的盒子,内部结构透明,主要测试程序内部结构,测试逻辑路径)
逻辑覆盖:
语句覆盖:只覆盖一条路径
判定覆盖:使所有的判定条件设置成都成立或都不成立
条件覆盖:每个条件可能取值都要执行一次,至少判定三条
判定-条件覆盖:判定要执行,条件也要执行
条件组合覆盖:把条件一一列出,覆盖所有条件
路径覆盖
条件测试路径选择:
当程序中判定多于一个时,形成的分支结构可以分为两类:嵌套型分支结构和连锁型分支结构
循环测试路径选择
- 简单循环
- 嵌套循环
- 连锁循环
非结构循环
三、软件测试策略
- 单元测试:由开发人员进行,主要采用白盒测试,测试算法
- 组装测试:把所有的单元测试模块组装在一起,集成测试
- 确认测试:测试需求分析
- 系统测试:模拟真实使用环境测试
1、单元测试的内容
2、确认测试的流程
四、软件测试种类
功能测试:在规定的时间内,运行软件系统的所有功能,来验证有无严重错误。
可靠性测试:平均的失效时间,越长越好。
强度测试:故障的情况下,系统运行到何种程度。敏感性测试
性能测试:系统是否满足说明书中规定的性能,特别是实时系统或嵌入式系统
恢复测试:系统在出现故障后能否自动恢复,断点是否保存的合理
启动/停止测试:在启动和关机阶段,系统的处理能力
配置测试:检查计算机系统内各个设备资源间的相互联结和功能分配中的错误
安全性测试:保密性,安全性,防止病毒和密码被泄露
可使用性测试:用户的使用,菜单操作符合用户习惯
可支持性测试:验证系统的支持策略
安装测试:找安装错误
过程测试:人工完成,各个人员角色分别进行
互联测试:多个不同系统的转换
兼容性测试:不同版本之间的兼容性
容量测试:存储量的测试,测试系统的承受能力
文档测试:测试用户手册指南,保证文档正确,全面清晰精确
五、程序调试
目的为了纠正错误,在成功的测试之后开始调试
- 确定错误出现的位置
- 纠错,回归测试
调试步骤:
- 确定出错位置
- 分析错误原因
- 排除错误,修改设计和代码
- 重复进行暴露错误的原始测试和相关测试
调试方法:
- 强行排错:使用多,效率低
- 回朔法:小程序常用,一旦发现错误,确定最先发现症状的位置
归纳法:分析,假设,归纳整理,大量收集出错点附近的数据
收集方法:3W1H组织可用数据 What 列出一般现象 Where说明发现现象地点 When列出现象发生时所有已知情况 How说明现象的范围和量级
- 演绎法:经过排除和精化的过程进行推导,出结论的思考方法
调试原则:
- 思考错误征兆有关的信息
- 避开死胡同,换位思考
- 把调试工具当做辅助手段来使用
- 避免用试探法
修改错误原则:
- 出现错误地方还可能有别的错误
- 避免修正一个错误的同时引出新错误,所以修改之后要进行回归测试