首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cpp中的变异测试而不修改/重新编译代码

cpp中的变异测试而不修改/重新编译代码
EN

Stack Overflow用户
提问于 2013-06-20 08:56:50
回答 2查看 1.2K关注 0票数 3

目前,我有一些测试被指责为不能很好地捕捉bug。我想要做变异测试,以检测它们(并防止添加新的无用测试),但没有时间效率低的循环:更改代码->重新编译->运行测试->更改代码->重新编译->运行测试.等。

最初,我想直接修改二进制精灵文件(没有重新编译),但正如后来的帖子所建议的那样,这是没有意义的。

EN

回答 2

Stack Overflow用户

发布于 2015-06-17 09:39:10

好的,通过将突变测试分成四个主要阶段,我能够部分地解决这个问题:

  • 用python/clang工具测试所有突变中的代码(选定的C++表达式包装在一个特殊的宏中,该宏将调用委托给一个突变类,该类为每个突变生成ID,控制突变操作符的激活等)。
  • 重新编译代码(只编译一次)
  • 并行运行所有突变无效的测试,并获取所有突变的if(如果测试失败,将它们放在忽略列表中),
  • 并行运行测试,同时切换运行时的突变(根据上一步获得的ID ),并收集统计数据(突变杀伤率等)。

实现是在python和C++中完成的,它大约有1700行代码(带有测试)+产品代码(CMake和gtest main.cpp文件)中的小适应。它只支持几个简单的突变,但仍然很有趣:)

票数 4
EN

Stack Overflow用户

发布于 2013-06-20 09:08:57

假设测试运行得很快,并且运行的次数足够大(~1M,~1k?),我应该得到潜在bug的命中率的粗略估计。

不是的。你的“精灵二进制文件中的一个位错误”可能会破坏任何东西(从精灵格式到数据段到调用堆栈等等)。通过这种方式,您不会得到任何关于but数量的粗略估计,而是对已损坏的可执行文件执行概率的粗略估计(这与您的应用程序完全无关)。

目前,我有很多测试被指责为根本不捕获bug。

这是您必须直接解决的问题,并且没有快捷方式:您必须为您的测试建立新的目标,重构代码以支持它们并实现它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17209373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档