突变操作

突变测试通过灵活可配置的突变操作集来从你的代码中编译产生新的代码。

例如CONDITIONALS_BOUNDARY_MUTATOR 改变条件边界突变会从源代码中生成下面的语句。

if ( i >= 0 ) {return "foo";
} else {return "bar";
}

与其对应的语句是

if ( i > 0 ) {return "foo";
} else {return "bar";
}

PIT定义了各式各样从源代码中突变的方法,包括移除方法调用、反置逻辑条件、更改返回值等等。

PIT的运行需要编译器在字节码中提供以下调试信息:

  • 代码行号
  • 源代码文件名

绝大部分构建系统,如 maven 默认就提供了这些信息。

突变

PIT通过应用突变操作符将生成许多(可能是非常大的数量)突变体。每一个突变Java类包含一个突变(或错误),使它们的行为不同于未突变的类。

PIT将这些突变后的类执行你的单元测试,如果突变可以被杀死(突变后不满足测试用例),则证明本次测试是有效的。

等价突变

通过改变代码条件来改变执行逻辑并非那么简单,某些情况下的突变完全等价于未突变之前的逻辑。

等价突变产生的原因有两点:

突变的结果恰好与突变前的行为完全一致。

例如,下面两份代码是逻辑完全等价的:

int i = 2;
if ( i >= 1 ) {return "foo";
}//...
int i = 2;
if ( i > 1 ) {return "foo";
}

突变前后虽然有了不同的行为,但是测试用例并没有覆盖到突变产生的非正常结果。

另一个比较常见的等价突变的示例是DEBUG或者日志,PIT排除了common logging等日志组件的突变生成,也可以通过配置来过滤日志组件。

测试执行

PIT会根据修改后的代码自动运行单元测试。在运行测试之前,PIT对测试执行传统的行覆盖率分析,然后使用这些数据和测试的时间来选择一组测试用例,这些测试用例的目标是修改后的代码。然后使用这些及测试之后的数据来选择测试用例执行一组突变代码。

这种执行机制也是PIT的执行速度远快于其它类似的突变测试系统的原因(如Jester 、 Jumble),这也是PIT能够将测试提升到全部代码,而不是仅仅测试单个类的技术实现。

突变测试报告的输出结果集解释如下:

  • Killed : 突变被杀死,代表突变的代码不满足测试用例
  • Lived : 突变存活,意味着等价突变或者突变改变的逻辑,但是仍符合测试用例,此时的代码可能是有问题的!
  • No coverage 代码没有被覆盖到,和存活一样,这个测试可能也是有问题的。
  • Non viable : 不可行的突变是JVM无法加载的,因为字节码在某种程度上是无效的。PIT试图将它所产生的不可存活突变的数量降到最低。
  • Timed Out : 如果突变导致无限循环,例如从for循环中的计数器中删除增量,则可能超时。
  • Memory error : 内存错误可能由于增加系统使用的内存数量的突变而发生,也可能是在出现突变时重复运行测试所需的额外内存开销的结果。如果您看到大量内存错误,请考虑为测试配置更多的堆和permgen空间。
  • Run error : 运行错误意味着在尝试测试突变时出错了。某些类型的不可存活突变目前可能导致运行错误。如果您看到大量的运行错误,这可能是出错的迹象。

在正常情况下,您应该不会看到任何不可行的突变或运行错误。


http://www.taodudu.cc/news/show-4760364.html

相关文章:

  • 论突变为零(不定更新)
  • 丁小平:浅谈科学模型及突变论等问题
  • 如何正确在word中打出 “°”和“°C”
  • matlab中一些特殊字符的表示方法(如摄氏度°,·),上标和下标的表示方法
  • base64的加密和解密方法
  • 【实战】OceanBase之OMS迁移Oracle至oceanbase
  • 2024考研【王道计算机408】【天勤计算机408】数据结构+操作系统+计算机组成原理+计算机网络
  • 几个获取英文单词发音的链接
  • 微信小程序录音、播放源码【推荐】
  • 方差 标准差_直观、形象、动态,一文了解无处不在的标准差
  • cPython的GIL
  • 一起解锁 GIL 的新姿势
  • 【python】GIL是什么?
  • Python中的GIL和异步Asyncio、Futures
  • 首届“全国人工智能大赛”正式启动,作为大赛支撑平台,和鲸科技助力年度顶级AI赛事
  • 百度网盘AI大赛-图像处理挑战赛:文档检测优化赛 Baseline
  • 最后冲刺:第三届全国人工智能大赛决赛战报
  • 决赛序曲|第三届全国人工智能大赛回忆录
  • 阿里云天池 - 2018之江杯全球人工智能大赛 之零样本图像目标识别 参赛总结
  • 2020全国人工智能大赛AI+无线通信 复赛算法分享
  • c++实现北京地铁线路查询系统
  • 最推荐雇主No.1,美版“支付宝”实力碾压FANNG
  • 小程序如何转App?
  • 不一样的表白方式!打开手机地图搜索它,就会出现心形!
  • linux命令行连接wifi RTL810xE PCI Express Fast Ethernet Controller 网卡
  • Java笔记018-抽象类、抽象类最佳实践-模板设计模式、接口、内部类
  • 验证的计划篇之二: 计划的内容
  • 数据安全三要素:机密性、完整性、身份验证
  • 16种食物有神效
  • 10类人不适合睡前喝牛奶助眠

[突变测试] 一种新的测试方法论相关推荐

  1. 对象容器设计模式_容器对象模式。 一种新的测试模式。

    对象容器设计模式 如果您搜索什么是页面对象的描述,您会发现页面对象模式为我们提供了一种以可重用和可维护的方式对内容建模的常识方法. 还要指出:在Web应用程序的UI中,您的测试与某些区域交互. Pag ...

  2. 容器对象模式。 一种新的测试模式。

    如果您搜索什么是页面对象的描述,就会发现页面对象模式为我们提供了一种以可重用和可维护的方式对内容建模的常识方法. 还要指出:在Web应用程序的UI中,您的测试与某些区域交互. Page Object只 ...

  3. 关于复旦大学英语水平测试和计算机应用能力水平测试成绩记载事宜的说明,复旦大学水平测试(FCT、FET)近期通知概览 | 一周复旦热问...

    原标题:复旦大学水平测试(FCT.FET)近期通知概览 | 一周复旦热问 复旦大学水平测试 就是我们大家常说的 复旦大学计算机应用能力水平测试(FCT) 和复旦大学英语水平测试(FET)的统称啦 春寒 ...

  4. 作为一个新晋测试经理,在软件测试计划之前你必须知道的10件事

    有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者 ...

  5. 带你认识7种云化测试武器

    摘要:本篇将结合华为云优秀实践,重点讲解七种云化测试常见方法.对于测试人员了解并熟悉云化全流程持续测试,具有指导意义. 本文分享自华为云社区<云化测试七种武器>,作者: 敏捷小智. 本文首 ...

  6. 一种嵌入式软件自动测试的脚本语言

    设备组成 Etest_CPS系统主要由硬件部分与软件部分组成.硬件部分由PCI机箱.PCI控制器以及各种PCI接口板卡组成.软件部分由测试设计软件模块.测试执行服务软件模块.测试执行客户端软件模块.设 ...

  7. ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)

    ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能) 目录 输出结果 设计思路 实现代码 输出结果 设计思路 1.使用均匀分布函数随机三个簇,每个簇周围1 ...

  8. (保守群组测试 非保守群组测试 二次重复测试 自适应二次重复测试)四种群体测试的C++代码

    目录 原理 保守组检测 非保守组检测 二次重复测试 自适应二次重复测试 四种测试方法的核心代码 保守群组测试 非保守群组测试 二次重复测试与自适应二次重复测试 测试代码 参考文献 原理 假设该病在人群 ...

  9. java文件指针,Java 测试文件指针,java测试指针,两种方法打开文件并进行内

    Java 测试文件指针,java测试指针,两种方法打开文件并进行内 两种方法打开文件并进行内容定位package com.ronsoft.books.nio.channels;import java. ...

最新文章

  1. jsp中如何显示mysql数据库数据类型_jsp中如何以表格形式显示数据库中一个字段的数据?...
  2. 我们遇到什么困难都不要怕,微笑着面对它
  3. 关于loadtxt编码问题的解决方法
  4. Spring Boot中自带的这些工具类,你用过几个?
  5. 【神经网络与深度学习】【C/C++】比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
  6. #讲座#低碳经济0814
  7. 一行代码值 200 万?雷军公开小米新 Logo 引吐槽
  8. 轻松在阿里云上搭建Redis
  9. python try else多余的设计_在python中利用try..except来代替if..else的用法
  10. windows cmd命令行命令
  11. matlab信号与系统论文,基于MATLAB的《信号与系统》课程教学研究
  12. R语言epiDisplay包的codebook函数计算dataframe中所有变量的基础描述统计信息和一维列联表(频数表)、连续变量(样本数、均值、中位数、标准差、最大值、最小值)、离散变量(列联表)
  13. 移动硬盘计算机限制打不开,可移动磁盘打不开,教您移动硬盘打不开怎么办
  14. 小心!QQ和MSN聊天记录也会随时被监控
  15. 解决使用Ajax 前台提交表单到后台,但输出为问号的中文乱码情况
  16. WWDC21主题演讲6 月 8 日凌晨1点开幕
  17. 几款好用的微信开发ui库
  18. PDF文档搜索工具:PDF Search Mac版
  19. pg_bulkload
  20. 中国智能音箱争夺战,国外巨头缺席BAT各有心思

热门文章

  1. HiKey970固件烧写
  2. 鉴源论坛 · 观辙丨基于规则的车载网络入侵检测技术
  3. OA系统与ERP的区别
  4. CentOs解决下载速度慢 更换下载源
  5. 计算机陕西工业职业技术学院,2019年度陕西省中等职业学校教师省级培训计算机动漫与游戏制作开班典礼在我院举行...
  6. 2023ICPC西安邀请赛
  7. 0R电阻和1R电阻的用处
  8. BUUCTF [INSHack2018]Tricky-Part2
  9. Mysql+Canal1.1.5+Es实现数据同步
  10. 2022年成都粘胶纤维产业申报条件、材料、流程