基于通用regexp的变异工具
universalmutator的Python项目详细描述
这是一个纯粹基于regexp指定的代码行重写的工具,用于生成变异,包括 由语言或项目的特殊规则辅助的多语言规则。
有关该项目的更多信息,请参阅2018年ICSE工具文件:https://agroce.github.io/icse18t.pdf
Aguest blog post为TRAIL位显示了如何使用通用变量来帮助改进使用C/A3}和LbFuffer-C++API API模糊化的努力。
universalmutator支持从python的TSTL测试工具中提取覆盖率信息以指导变异。
如何使用
要使用此功能,您只需执行以下操作:
pip install universalmutator
然后
mutate --help
简单示例用法
mutate foo.py
或
mutate foo.swift
如果安装了适当的编译器,应该生成一堆有效的、非平凡冗余的变体。
更复杂的例子
有时,变异的代码需要用比简单的编译器调用更复杂的命令来构建,当然,您需要帮助发现哪些变异是被杀死的而不是被杀死的。例如,要对包含在programming rust(http://shop.oreilly.com/product/0636920040385.do)中的mandelbrot绘图示例的突变体进行变异和测试,只需执行以下操作:
git clone https://github.com/ProgrammingRust/mandelbrot
cd mandelbrot
cargo build
target/debug/mandelbrot origmandel.png 1000x750 -1.20,0.35 -1,0.20
mkdir mutants
mutate src/main.rs --mutantDir mutants --noCheck
analyze_mutants src/main.rs "cargo clean; cargo build; rm mandel.png; target/debug/mandelbrot mandel.png 1000x750 -1.20,0.35 -1,0.20; diff mandel.png origmandel.png" --mutantDir mutants
(如果你编辑^ {< CD5>}来降低最大线程数,使用8,而不是90。),这不会使用任何普通的编译器等价物,但仍然会杀死大约1000个突变体中的60%个。被杀死的突变文件名将在killed.txt
中,而非被杀死的突变文件名将在not-killed.txt
中。
使用类似maven的东西是非常相似的,除了您可能可以将复杂的构建/清理内容编辑为“mvn测试”或类似的内容。
当前支持的语言
如果你告诉它是“c”或其他东西,这个工具可能会改变其他东西,但是有基于文件结尾和特定规则支持的自动检测:
C
C++
Java
Python
Swift
Rust
Go
Solidity
Vyper
除C、C++和GO外,默认情况下都会尝试编译该突变。
文件并使用TCE检测冗余。当然,构建依赖关系
可能会破坏此过程,在这种情况下,nocheck将关闭tce
把所有的变种都放在目录里,用
真正的构建过程。从长远来看,我们计划与
标准的构建系统来避免这个问题,并且使用自动化测试
生成系统,例如
Python或针鼹
(https://github.com/trailofbits/echidna)。然而,即使现在
analyze_mutants
设置
你的自动测试生成器。
变异固化代码
universalmutator最常用于smart 用坚实的语言写的合同。它支持一些特殊的 在这种情况下特别有用的功能。
首先,
solidity库通常只使用internal
函数编写
---如果您
自行编译一个库,不产生非冗余的突变体。
为了处理这种情况,mutate
可以使用--compile
选项
指定另一个文件(使用库的协定,或
用于检查突变体是否
冗余。
其次,交换相邻的代码行是一种很少使用的变异。
在稳固的上下文中非常有吸引力的运算符,因为
交换状态更改操作和需求可能会显示
测试无法检测到
re-entrancy
脆弱性。测试可能会注意到没有支票,但是
不是一个错误的排序,这些突变可能会揭示这一点。添加代码
对突变进行交换,只需将--swap
添加到mutate
调用。注意
这种交换在任何语言中都有效;它们特别吸引人
对于智能合约。
更多信息
有关更多信息,请再次参见ICSE18上的https://agroce.github.io/icse18t.pdf--demo/tool论文。
这个项目的部分目的是看看突变能有多快被应用到新语言,一个工具的工作量有多大 卸载到编译器/测试分析工具。
作者:Alex Groce、Josie Holmes、Darko Marinov、August Shi、Lingming Zhang