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