南京大学<软件测试>笔记

软件测试

目的

通过在编写代码的整个过程中添加测试的检测流程,来减少设计失误、笔误、以及在程序中表现出来的失误。

基本概念

PIE模型

错误分类

  • Fault:程序中的错误代码
  • Error:错误代码导致的错误状态
  • Failure:错误状态表现出来后被感知

测试能够发现的错误只有Failure级别,即表现出来的错误。程序中处于Error和Fault级别的错误单靠测试是无法检测出来。所以这需要开发工程师自己做白盒测试尽量避免Fault的出现。

白盒测试方法

通过白盒测试,希望开发工程师在设计代码编写代码之后,能够自己证明代码是无误的。就像数学题算完之后的检验方法一样。

图覆盖

任何代码都可以用图的方式表示。在测试的时候,将图的每一部分跑一遍,看看能不能得到正确结果的方法就是图覆盖。

控制流生成

程序的控制流,由工作语句、if、while/for、switch组成。也相当与代码逻辑的流程图。

结构化覆盖

节点覆盖/边覆盖,控制流覆盖的一部分

主路径覆盖

简单路径:每个节点在路径中只出现一次。

主路径:最长的简单路径,不是任何简单路径的子集。

生成测试用例,覆盖所有主路径。主路径覆盖可以减少覆盖的工作量

基本路径覆盖

独立路径:路径中含有其他路径中不含有的节点或者边

线性独立路径个数:CC=E-V+2(圈复杂度)

基本路径测试步骤:

  1. 生成控制流图
  2. 计算圈复杂度
  3. 选择基本路径集
  4. 生成基本路径测试用例

数据流覆盖

程序控制流中,点上操作的正确性。变量操作包括:

  • 定义:分配内存,赋值、初始化
  • 使用:进行操作,判断等
  • 定义引用对:在前面定义,在后面引用
  • 定义清晰:前面定义,后面使用之间,没有被重新定义
  • 数据流可达:有一条定义清晰的路径从i到j
  • 定义引用路径(du-path):从定义到使用的简单路径,路径定义清晰

数据流覆盖准则

  • ADC:全定义覆盖,所有定义的地方都覆盖过
  • AUC: 全引用覆盖,所有引用的地方都覆盖过,包括所有的定义也都覆盖过
  • ADUPC:全部定义引用覆盖,所有的定义和引用之间的路径都覆盖过

逻辑测试

  • 判定:每一个条件组为一个判定,影响控制流
  • 条件:每一个布尔单元都是一个条件
  • 判定覆盖:判定为True和False各执行一遍的覆盖
  • 条件覆盖:每一个条件为True和False各执行一遍的覆盖
  • 条件判定覆盖:同时满足条件覆盖和判定覆盖
  • 完全条件覆盖:所有条件的组合覆盖,复杂度为 2n
  • 修订条件/判定覆盖(MC/DC):每一个条件的独立影响都要执行一次

变异测试

在正常程序中注入Fault之后观察测试用例是否将Fault检测出来。用于评估测试用例集的充分性。

变异测试假设:

  • 程序员不可能大面积写错代码,只会不小心写错小部分代码
  • 如果单一错误可以测试到,那么组合的错误就可以被测试到

重要的变异类型:

类型 描述 集合描述 数量
ABS 绝对值 { (e,abs(e)),(e,abs(e))} 2
AOR 算数运算符 { (x,y)x,y{ +,,,/,%}xy} 20
LCR 逻辑连接符
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值