测试套件生成(针对整个套件)

  • 要点:测试套件生成、遗传算法、选择、变异

  • 总结

    • 给出了一个生成测试套件的方法,能生成更小的测试套件并且有更高的分支覆盖率(方法已经全覆盖)
    • 定义了遗传算法适应度函数:主要是对分支距离的计算
    • 定义了遗传算法的操作:测试套件级别交叉,测试用例内的变异
    • 防止遗传算法膨胀,给出了四个限制
  • 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 Suit Generation相关推荐

  1. JIT Code Generation代码生成

    JIT Code Generation代码生成 一.表达式编译 代码生成(Code Generation)技术广泛应用于现代的数据系统中.代码生成是将用户输入的表达式.查询.存储过程等现场编译成二进制 ...

  2. MLIR与Code Generation

    MLIR与Code Generation MLIR多级中间表示 MLIR 项目是一种构建可重用和可扩展编译器基础架构的新方法.MLIR 旨在解决软件碎片问题,改进异构硬件的编译,显着降低构建特定领域编 ...

  3. pat1094. The Largest Generation (25)

    1094. The Largest Generation (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  4. Corrigendum: A window into third generation sequencing

    Corrigendum: A window into third generation sequencing  勘误表:第三代测序的窗口 抽象 第一代和第二代测序技术引领了基因组学领域及其他领域的革命 ...

  5. Moving Towards Third‐Generation Sequencing Technologies 迈向第三代测序技术

    Moving Towards Third‐Generation Sequencing Technologies 迈向第三代测序技术 Within just the past few years, ne ...

  6. The impact of third generation genomic technologies on plant genome assembly 第三代基因组技术对植物基因组组装的影响

    题目:The impact of third generation genomic technologies on plant genome assembly 第三代基因组技术  对植物  基因组组装 ...

  7. 【多标签文本分类】SGM: Sequence Generation Model for Multi-Label Classification

    ·阅读摘要:   本文提出基于SGM模型,在Seq2Seq的基础上提出SGM模型应用于多标签文本分类.论文还提出了很多提升模型表现的细节,这是在Seq2Seq中没有的. ·参考文献:   [1] SG ...

  8. 多视角图像生成--Multi-View Image Generation from a Single-View

    Multi-View Image Generation from a Single-View https://www.arxiv.org/pdf/1704.04886 本文使用对抗网络将单视角图像转出 ...

  9. 对抗学习用于目标检测--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 ...

最新文章

  1. Python学习笔记:常用内建模块4:hmac
  2. HTML 表单 存为EXCEL文件时 中文显示乱码
  3. c++中的运算符重载---知识点:运算符重载函数,友元函数,函数重载
  4. 文本处理算法_python 文本处理
  5. BZOJ——2134: 单选错位
  6. 多多云手机多少钱一月_北京苹果手机维修为大家分享iPadAir2换屏幕多少钱
  7. thinkphp 相关
  8. CVE-2020-11945 Squid未授权整数溢出分析
  9. 鸿蒙手机系统pc版下载,鸿蒙系统os下载官网版v1.0开源版
  10. [RTMP协议]常用直播流地址
  11. Navicat Premium For Mac破解版
  12. 项目管理-项目风险管理
  13. 细胞周期预测 | 单细胞转录组(scRNA-seq)分析 03
  14. 桌面cpu与服务器cpu天梯,桌面CPU性能排行 桌面CPU天梯图2017年6月最新版
  15. oracle重建orainventory,重建oraInventory解决ORA-20001
  16. 国家电网车辆智能车载终端4G全网通T-BOX 、车联网OBD终端、4G TBOX终端
  17. 【测绘程序设计】坐标反算神器V1.0(附C/C#/VB源程序)
  18. spring中MessageSource的配置使用方法3--ResourceBundleMessageSource
  19. python 协程库gevent学习 -- 超时、互斥锁(BoundedSemaphore)、local
  20. 将视频分割成多张图片和多张图片生成视频

热门文章

  1. 论文阅读VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training
  2. 无序链表(顺序查找)和有序数组(二分查找)-基础实现-符号表(二)-数据结构和算法(Java)
  3. Javassist 使用指南
  4. 名帖293 张瑞图 行书《书米芾西园雅集图记十二条屏》
  5. 怎么批量抠复杂的图_京东imageX智能抠图大师工具全新升级啦!不会PS,你也是大师!...
  6. Wordpress + Markdown终极搭配
  7. 多益网络春招笔试题收集
  8. 求你们不要再问我模板了,这些手机APP网站模板全给你们!
  9. 达州铭仁园2021年高考成绩查询,达州铭仁园私立中学2021年排名
  10. linux 查看mount参数,linux命令中的mount -f参数