南京大学<软件测试>笔记
来源:互联网 发布:python自动化ios开发 编辑:程序博客网 时间:2024/05/01 23:50
软件测试
目的
通过在编写代码的整个过程中添加测试的检测流程,来减少设计失误、笔误、以及在程序中表现出来的失误。
基本概念
PIE模型
错误分类
- Fault:程序中的错误代码
- Error:错误代码导致的错误状态
- Failure:错误状态表现出来后被感知
测试能够发现的错误只有Failure级别,即表现出来的错误。程序中处于Error和Fault级别的错误单靠测试是无法检测出来。所以这需要开发工程师自己做白盒测试尽量避免Fault的出现。
白盒测试方法
通过白盒测试,希望开发工程师在设计代码编写代码之后,能够自己证明代码是无误的。就像数学题算完之后的检验方法一样。
图覆盖
任何代码都可以用图的方式表示。在测试的时候,将图的每一部分跑一遍,看看能不能得到正确结果的方法就是图覆盖。
控制流生成
程序的控制流,由工作语句、if、while/for、switch组成。也相当与代码逻辑的流程图。
结构化覆盖
节点覆盖/边覆盖,控制流覆盖的一部分
主路径覆盖
简单路径:每个节点在路径中只出现一次。
主路径:最长的简单路径,不是任何简单路径的子集。
生成测试用例,覆盖所有主路径。主路径覆盖可以减少覆盖的工作量
基本路径覆盖
独立路径:路径中含有其他路径中不含有的节点或者边
线性独立路径个数:CC=E-V+2(圈复杂度)
基本路径测试步骤:
- 生成控制流图
- 计算圈复杂度
- 选择基本路径集
- 生成基本路径测试用例
数据流覆盖
程序控制流中,点上操作的正确性。变量操作包括:
- 定义:分配内存,赋值、初始化
- 使用:进行操作,判断等
- 定义引用对:在前面定义,在后面引用
- 定义清晰:前面定义,后面使用之间,没有被重新定义
- 数据流可达:有一条定义清晰的路径从i到j
- 定义引用路径(du-path):从定义到使用的简单路径,路径定义清晰
数据流覆盖准则
- ADC:全定义覆盖,所有定义的地方都覆盖过
- AUC: 全引用覆盖,所有引用的地方都覆盖过,包括所有的定义也都覆盖过
- ADUPC:全部定义引用覆盖,所有的定义和引用之间的路径都覆盖过
逻辑测试
- 判定:每一个条件组为一个判定,影响控制流
- 条件:每一个布尔单元都是一个条件
- 判定覆盖:判定为True和False各执行一遍的覆盖
- 条件覆盖:每一个条件为True和False各执行一遍的覆盖
- 条件判定覆盖:同时满足条件覆盖和判定覆盖
- 完全条件覆盖:所有条件的组合覆盖,复杂度为
2n 次 - 修订条件/判定覆盖(MC/DC):每一个条件的独立影响都要执行一次
变异测试
在正常程序中注入Fault之后观察测试用例是否将Fault检测出来。用于评估测试用例集的充分性。
变异测试假设:
- 程序员不可能大面积写错代码,只会不小心写错小部分代码
- 如果单一错误可以测试到,那么组合的错误就可以被测试到
重要的变异类型:
等价变异:两个语法不一样的程序,语义完全一致。代码不一样,但是产生的输出输出映射完全一致。
// example 1for(int i = 0; i != 5; i++){ nop();}// example 2for(int i = 0; i < 5; i++){ nop();}
故障假设测试
评估测试用例集合的能力。变异测试是故障假设测试的一部分
故障类型:E=(a|b)&c
- 运算符误用
- ORF:误用操作数,E’=(a&b)&c
- ENF:误用表达式,E’=!(a|b)&c
- VNF:误用否定,E’=(a|b)&!c
- ASF :优先级误用,E’=a|b&c
- 操作数误用
- MVF:操作数丢失,E’=(a|b)
- VRF:误用变量,E’=(a|b)&a
- CCF:E’=(a|b)&(c&a)
- CDF:E’=(a|b)&(c|a)
- SA0:永久为0,E’=(0|b)&c
- SA1:永久为1,E’=(1|b)&c
测试条件:异或
黑盒测试方法
希望通过开发工程师自己编写黑盒测试用例,来增加逻辑思维的严谨性。在最开始编写测试,来让工程师更好地理解代码的逻辑。
随机测试
随机选取测试用例的测试
等价类划分
按照一定标准将输入域划分成几个子集,然后在子集中随机选取测试用例
划分原则:
- 完备性:所有分类都要被覆盖
- 无冗余:两个等价类中不应该有交集
划分方法:
- 数据的取值范围
- 不同数据的控制流和数据流
- 数据合法/非法
- 合法:检测功能
- 非法:检测错误处理
边界值分析
添加不同等价类之间的边界
边界值相关代码
- 判断
- 循环
- 数据最大值/最小值
边界值分析方法
min < min+ < norm < max- < max
- 选择正常值norm
- 选取min,min+,max,max-
- 考虑非法输入:min-,max+
决策表
反映程序输入与输出关系的表格。用于检测输 入与输出的关系.
步骤:
- 计算规则数量,
rules=2conditions - 列出动作和条件
- 插入动作行
- 插入条件列
- 化简,相似规则导致相同结果的条件可以合并
例子:从String中提取浮点数
"Duration: 1000.0000\n""Loation: 50.0000"
−符号1000整数.点0000小数
java代码
public static float peekFloat(String content) { if (content == null || content.length() == 0){ return 0; } Pattern p = Pattern.compile("-?(\\d+\\.?\\d*|\\.\\d+)"); Matcher m = p.matcher(content); if (m.find()) { return Float.valueOf(m.group(0)); } else { return 0; }}
组合测试
考虑不同变量取值之间的组合
方法:
- 两维组合:所有变量等价类的两两组合都出现在测试用例中
- 三维组合:任意变量三个组合都出现在测试用例中
- 完全组合:任意变量的所有组合都在测试用例中
- 可变粒度组合:相关组合被覆盖
缺省项
输入变量的默认值进行测试,保证绝大部分用户的配置可以正确工作
合并输入变量
将受到约束的变量放在一起考虑
测试进展
测试用例集约简
测试预言
故障定位
功能测试
探索式测试
性能测试
自动化测试方法
希望利用自动化测试工具,来降低测试的人工成本。另一方面,从测试工具的角度来观察发现软件中存在的问题。
GUITAR
Android Instrumentation
Android BDD-Calabash
- 南京大学<软件测试>笔记
- 南京大学软件质量研究所
- 考研之南京大学软件学院
- python 南京大学MOOC学习笔记
- 2013南京大学软件学院考研有感
- 软件测试笔记
- 软件测试笔记
- 《软件测试》学习笔记
- 软件测试培训笔记
- 软件测试学习笔记
- 《软件测试》学习笔记
- 软件测试学习笔记
- 软件测试方法-笔记
- 软件测试整理笔记
- 【笔记】软件测试
- 软件测试-笔记
- 软件测试课程笔记
- 菜鸟笔记--软件测试
- 命令或可执行程序
- 发布3633快速接单软件V1.2
- php异常处理—异常的基本用法
- android studio 使用以及常出现的问题
- 为GCD队列绑定NSObject类型上下文数据-利用__bridge_retained(transfer)转移内存管理权
- 南京大学<软件测试>笔记
- [leetcode][贪心] Gas Station
- JSP&Servlet
- 悬浮窗onTouch和onCLick的冲突
- Javascript异步编程的4种方法
- SpringMVC实现RESTful风格
- 大数据
- C/C++文件中函数互相调用
- html定位