ControlFlag基于机器学习的代码检测工具
ControlFlag 是一个自监督的特殊模式检测系统,它通过从开源存储库(在 GitHub 和其他版本控制系统上)挖掘这些模式来学习高级编程语言(如 C/C++)控制结构中出现的典型模式。然后应用学习到的模式来检测用户代码中的异常模式。
简要技术说明
ControlFlag 的模式异常检测系统可用于解决各种问题,例如排版错误检测、标记缺失的 NULL 检查等等。
下图显示了 ControlFlag 的两个主要阶段:(1)模式挖掘阶段,以及(2)异常模式扫描阶段。模式挖掘阶段是一个“训练阶段”,它在用户提供的 GitHub 仓库中挖掘典型模式,然后从挖掘的模式中构建决策树。另一方面,扫描阶段应用挖掘的模式来标记用户指定的目标仓库中的异常表达式。
目录结构(不断发展)
-
src
: 用于排版错误检测系统的 ControlFlag 的源代码 -
scripts
: 用于模式挖掘和扫描异常的脚本 -
quick_start
:运行快速启动测试的脚本 -
github
:用于下载 GitHub 仓库的脚本和数据。它还包含预处理的训练数据,其中包含使用 C 作为主要语言从 6000 个 GitHub 仓库中挖掘的模式。 -
tests
: 单元测试
安装
ControlFlag 可以在 Linux 和 MacOS 上构建。
要求
- CMake 3.4.3 或以上
- C++17 兼容编译器
- Tree-sitter 解析器(作为 cmake 的一部分自动下载)
- GNU parallel(可选,如果您想生成自己的训练数据)
在基于 Linux 的系统上测试构建配置
- CentOS-7.6/Ubuntu-20.04 with g++-v10.2.0 for x86_64
在 MacOS 上测试构建配置
- MacOS Mojave v10.14.6 with clang-1001.0.46.4 (Apple LLVM version 10.0.1) for x86_64(从命令行工具包获得)
构建
$ cd controlflag $ cmake . $ make -j $ make test
所有测试都make test
应该通过,但目前 Verilog 的测试由于版本不匹配问题而失败。Verilog 支持是 WIP。
评论