Whole Test Suit Generation
测试套件生成(针对整个套件)
要点:测试套件生成、遗传算法、选择、变异
总结
- 给出了一个生成测试套件的方法,能生成更小的测试套件并且有更高的分支覆盖率(方法已经全覆盖)
- 定义了遗传算法适应度函数:主要是对分支距离的计算
- 定义了遗传算法的操作:测试套件级别交叉,测试用例内的变异
- 防止遗传算法膨胀,给出了四个限制
abstract
- 提出了一种生成测试套件**(test suit)**的方法,能够覆盖所有的coverage goals同时尽可能的小
Intro
oracle problem
- 运行一个测试,除了结果比对之外,无法知道测试是否执行正确,因为还有崩溃、异常执行等问题,必须人工检查。这就是自动化测试的缺陷 – oracle problem
- 所以测试套件要尽可能的小,方便测试人员人工比对。
背景问题 - 传统方法:为每个分支(目标)生成测试套件
- 为每个目标生成测试用例,然后组合成测试套件。导致整体测试套件很大。同时测试目标之间互相关联,比如push和pop
- 为每个目标生成测试用例,有些分支无法覆盖(诸如死分支)。在这些分支上回消耗更多的时间
整体测试套件test suit生成
同时为所有目标生成整个测试套件。
- 适应度函数考虑所有目标
- 随机生成初始测试套件组 test suits
- 遗传算法
- 次要目标为套件大小
实现了EVOSUITE工具
不可行分支对没有性能影响
背景
通过符号或基于搜索的方法生成测试输入
符号执行解决约束 – DART/CUTE
Solving path constraints generated with symbolic execution is a popular approach to generate test data [50] or unit tests [51], and dynamic symbolic execution as an extension can overcome a number of problems by combining concrete executions with symbolic execution (e.g., [22], [39]). This idea has been implemented in tools like DART [22] and CUTE [39], and is also applied in Microsoft s parametrized unit testing tool PEX [42] or in the Dsc [28] tool
元启发式替代符号搜索
当前方法问题:
- 测试套件目标单一
目标
- Satisfy the chosen coverage criterion (e.g., branch coverage) with the smallest possible test suite.
测试套件优化
遗传算法
- 略
符号表示
一个test suit – 目标
表示为集合T,由一组test case ti组成
Given |T| = n, we have T = {t1,t2, . . . ,tn}.
一个test case由一组语句组成
- t = <s1,s2, . . . ,si>, lengh l
每个语句表示一个值 v(si), 有一个对应的类型 τ(v(si))∈T, T是一个有限集合组
语句类型定义为如下
Primitive statements
- int var0 = 54
构造语句/实例化
- stack var2 = new stack()
- [Q] 任何构造参数被赋值于{v(sk) | 0 ≤ k < i}外的值
变量语句 - 获取变量
- int var3 = var2.size
- filed的source object应该是在集合{v(sk) | 0 ≤ k < i}中
方法语句
- int var4 = var2.pop()
- source object要求如上一个
赋值语句
- var2.maxsize = 10
For a given SUT, the test cluster [47] defines the set of
available classes, their public constructors, methods, and fields. – 基本元素的可知的
需要先定义 N(测试套件中的测试数), L(一个测试的长度)
适应度函数
focus on: 分支覆盖率
符号
B:分支,To:最合格解
MT: 执行了的方法(不含分支), M总方法(不含分支)
dmin(b,T): 最小分支距离,到达另一个分支的距离
- if判断x>10, x=5, 分支距离(到true)为 10-5+k(k>0)
如果两个测试套件有相同的覆盖率,则选中更少的
总适应度函数:
待执行方法适应度+待执行分支适应度
分支距离部分:
通过分支的次数越多,越有可能覆盖所有情况。覆盖true,false至少两次,所以覆盖一次取0,两次取距离,其余取1
v: normalze to [0, 1]
- 一个分支预测d(b,T)。如果自己没覆盖,则d(b,T)>0, d(bopp,T)=0。分支会向d(b, T)偏移,导致d(b,T)=0, d(bopp,T)>0。又向最初情况偏移。归一化防止这种情况
膨胀控制
多目标容易出现这种情况:测试数量越来越多
具体方法
N和L的限制
- 给限制,但尽量给大的值。这样可以生成较覆盖率较好的测试但最后又会选择出较短的测试
rank selection based on fitness function
- 方法覆盖率 然后 分支距离
- 短的测试有更高的等级
子代覆盖率相比父代更低且长度更长,则这样的子代永远不会选择
子代的覆盖率没有优于最佳方案TB,那么如果它的长度超过TB的两倍,那么它在新一代中就不会被接受
具体操作
交叉变异
测试套件级别的交叉,测试用例级别的变异
交叉
p1的a%+p2的(1-a%) p父类
优点
- 子代必有效
- 两个子代长度差小于父代长度差
变异 套件和个体变异同时发生
一个套件T中,每个测试以1/|T|的概率变异,这样大致共有一个测试变异
以概率σ, σ2…以此加入新的测试,直到没加入或者总数大于N
测试套件变异 移除、改变、插入 – 1/3概率执行
- 具体规则略,和测试生成的约束条件强相关
初始种群生成
- 随机生成
算法代码
EVOSUITE TOOL – 具体实现
- 在字节码级别上工作,并通过Java Reflection从字节码中收集测试集群的所有必要信息
- 变量特殊处理进行距离计算
- 测试生成时,每次只考虑一个top-level类
- 测试用例超时处理
- 防止内存耗尽,客户机/服务架构,监控内存/重启进程
- 对访问文件等资源的安全处理
- Single Branch Strategy:设计的对比方案(模拟别的生成方法)
EXPERIMENTS
结果
- Whole test suite generation achieves higher coverage
than single branch test case generation - Whole test suite generation produces smaller test suites
than single branch test case generation.
- Whole test suite generation achieves higher coverage
难以到达的分支分析
- 环境依赖、匿名方法、多线程等
Whole Test Suit Generation相关推荐
- JIT Code Generation代码生成
JIT Code Generation代码生成 一.表达式编译 代码生成(Code Generation)技术广泛应用于现代的数据系统中.代码生成是将用户输入的表达式.查询.存储过程等现场编译成二进制 ...
- MLIR与Code Generation
MLIR与Code Generation MLIR多级中间表示 MLIR 项目是一种构建可重用和可扩展编译器基础架构的新方法.MLIR 旨在解决软件碎片问题,改进异构硬件的编译,显着降低构建特定领域编 ...
- pat1094. The Largest Generation (25)
1094. The Largest Generation (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- Corrigendum: A window into third generation sequencing
Corrigendum: A window into third generation sequencing 勘误表:第三代测序的窗口 抽象 第一代和第二代测序技术引领了基因组学领域及其他领域的革命 ...
- Moving Towards Third‐Generation Sequencing Technologies 迈向第三代测序技术
Moving Towards Third‐Generation Sequencing Technologies 迈向第三代测序技术 Within just the past few years, ne ...
- The impact of third generation genomic technologies on plant genome assembly 第三代基因组技术对植物基因组组装的影响
题目:The impact of third generation genomic technologies on plant genome assembly 第三代基因组技术 对植物 基因组组装 ...
- 【多标签文本分类】SGM: Sequence Generation Model for Multi-Label Classification
·阅读摘要: 本文提出基于SGM模型,在Seq2Seq的基础上提出SGM模型应用于多标签文本分类.论文还提出了很多提升模型表现的细节,这是在Seq2Seq中没有的. ·参考文献: [1] SG ...
- 多视角图像生成--Multi-View Image Generation from a Single-View
Multi-View Image Generation from a Single-View https://www.arxiv.org/pdf/1704.04886 本文使用对抗网络将单视角图像转出 ...
- 对抗学习用于目标检测--A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection
A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection CVPR 2017 Caffe code : http ...
最新文章
- Python学习笔记:常用内建模块4:hmac
- HTML 表单 存为EXCEL文件时 中文显示乱码
- c++中的运算符重载---知识点:运算符重载函数,友元函数,函数重载
- 文本处理算法_python 文本处理
- BZOJ——2134: 单选错位
- 多多云手机多少钱一月_北京苹果手机维修为大家分享iPadAir2换屏幕多少钱
- thinkphp 相关
- CVE-2020-11945 Squid未授权整数溢出分析
- 鸿蒙手机系统pc版下载,鸿蒙系统os下载官网版v1.0开源版
- [RTMP协议]常用直播流地址
- Navicat Premium For Mac破解版
- 项目管理-项目风险管理
- 细胞周期预测 | 单细胞转录组(scRNA-seq)分析 03
- 桌面cpu与服务器cpu天梯,桌面CPU性能排行 桌面CPU天梯图2017年6月最新版
- oracle重建orainventory,重建oraInventory解决ORA-20001
- 国家电网车辆智能车载终端4G全网通T-BOX 、车联网OBD终端、4G TBOX终端
- 【测绘程序设计】坐标反算神器V1.0(附C/C#/VB源程序)
- spring中MessageSource的配置使用方法3--ResourceBundleMessageSource
- python 协程库gevent学习 -- 超时、互斥锁(BoundedSemaphore)、local
- 将视频分割成多张图片和多张图片生成视频
热门文章
- 论文阅读VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training
- 无序链表(顺序查找)和有序数组(二分查找)-基础实现-符号表(二)-数据结构和算法(Java)
- Javassist 使用指南
- 名帖293 张瑞图 行书《书米芾西园雅集图记十二条屏》
- 怎么批量抠复杂的图_京东imageX智能抠图大师工具全新升级啦!不会PS,你也是大师!...
- Wordpress + Markdown终极搭配
- 多益网络春招笔试题收集
- 求你们不要再问我模板了,这些手机APP网站模板全给你们!
- 达州铭仁园2021年高考成绩查询,达州铭仁园私立中学2021年排名
- linux 查看mount参数,linux命令中的mount -f参数