trailofbits/mewt
GitHub: trailofbits/mewt
多语言变异测试框架,通过向源码注入微小变更来评估测试套件的真实有效性,揭示传统代码覆盖率无法发现的质量盲区。
Stars: 19 | Forks: 0
# Mewt
Mewt 是一个 mutation testing(变异测试)工具。Mutation testing 的工作原理是对您的源代码进行微小的更改——例如将 `+` 替换为 `-`,或将 `true` 交换为 `false`——然后针对每个更改运行您的测试套件。如果您的测试在发生更改后仍然通过,那就说明存在缺口:变异体“存活”了下来,这意味着您的测试未能捕获该更改。
这揭示了代码覆盖率无法告诉您的事情:不仅在于您的测试是否*执行*了某一行,还在于如果该行代码有误,测试是否真的会*失败*。
**支持的语言:**
- Go
- JavaScript/TypeScript
- Rust
- Solidity
有关活动在底层如何运行的详细信息,请参阅 [工作原理](docs/how-it-works.md)。要添加对新语言的支持,请参阅 [添加语言](docs/adding-a-language.md)。
## 安装
### 预编译二进制文件(推荐)
```
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/trailofbits/mewt/releases/latest/download/mewt-installer.sh | sh
```
如需改为从源代码构建,请参阅 [从源代码构建](docs/building-from-source.md)。
## 快速开始
- 对单个文件进行变异(自动检测语言):
```
mewt run path/to/contract.rs
```
- 对目录中所有受支持的文件进行变异(递归):
```
mewt run path/to/project
```
- 列出某种语言可用的变异 slug:
```
mewt print mutations --language rust
```
- 打印目标路径的所有变异体:
```
mewt print mutants --target path/to/contract.rs
```
- 显示变异测试结果(可按目标筛选):
```
mewt results --target path/to/contract.rs
```
- 测试所有变异体,即使更严重的变异体未被捕获(禁用跳过优化):
```
mewt run path/to/contract.rs --comprehensive
```
## 配置
Mewt 从当前工作目录向上查找最近的 `mewt.toml` 文件中读取配置。CLI 标志会覆盖配置文件中的值。
有关完整的配置参考,请参阅 [配置](docs/configuration.md);有关带有注释的示例,请参阅 [`src/example.toml`](src/example.toml)。
## 示例
本仓库包含您可以试用的示例文件:
- Go:`tests/go/examples/hello-world.go`
- JavaScript/TypeScript:`tests/javascript/examples/simple.js`
- Rust:`tests/rust/examples/hello-world.rs`
- Solidity:`tests/solidity/examples/hello-world.sol`
## 备注
- 支持混合语言项目。当针对某个目录时,仅考虑具有受支持扩展名的文件。
标签:Anchore, CMS安全, Go, IPv6支持, JavaScript, Python安全, QA, Ruby工具, Rust, Solidity, TOML配置, TypeScript, 二进制发布, 云安全监控, 代码漏洞检测, 单元测试, 可视化界面, 威胁情报, 安全插件, 客户端加密, 开发者工具, 开源工具, 数据可视化, 日志审计, 智能合约审计, 测试框架, 测试覆盖率, 突变测试, 网络流量审计, 软件测试工具, 静态分析