|
|
# CodeDetect基础使用教程
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
本教程将指导您完成CodeDetect的基础使用,从安装配置到运行第一次代码验证。
|
|
|
|
|
|
## 前提条件
|
|
|
|
|
|
- Python 3.8或更高版本
|
|
|
- CBMC (C Bounded Model Checker) 安装
|
|
|
- 基本的C语言知识
|
|
|
|
|
|
## 第一步:安装
|
|
|
|
|
|
### 1.1 克隆仓库
|
|
|
|
|
|
```bash
|
|
|
git clone https://github.com/your-username/codedetect.git
|
|
|
cd codedetect
|
|
|
```
|
|
|
|
|
|
### 1.2 安装Python依赖
|
|
|
|
|
|
```bash
|
|
|
pip install -r requirements.txt
|
|
|
pip install -r requirements-dev.txt
|
|
|
```
|
|
|
|
|
|
### 1.3 安装CBMC
|
|
|
|
|
|
**Ubuntu/Debian:**
|
|
|
```bash
|
|
|
sudo apt-get update
|
|
|
sudo apt-get install cbmc
|
|
|
```
|
|
|
|
|
|
**macOS:**
|
|
|
```bash
|
|
|
brew install cbmc
|
|
|
```
|
|
|
|
|
|
### 1.4 验证安装
|
|
|
|
|
|
```bash
|
|
|
# 检查CBMC安装
|
|
|
cbmc --version
|
|
|
|
|
|
# 检查Python依赖
|
|
|
python -m pytest tests/unit/ -v
|
|
|
```
|
|
|
|
|
|
## 第二步:基本使用
|
|
|
|
|
|
### 2.1 准备测试代码
|
|
|
|
|
|
创建一个简单的C文件 `test_function.c`:
|
|
|
|
|
|
```c
|
|
|
int add(int a, int b) {
|
|
|
return a + b;
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### 2.2 使用命令行界面
|
|
|
|
|
|
```bash
|
|
|
# 运行代码验证
|
|
|
python -m src.main verify test_function.c
|
|
|
|
|
|
# 生成规范
|
|
|
python -m src.main generate-spec test_function.c --function add
|
|
|
|
|
|
# 运行完整分析
|
|
|
python -m src.main analyze test_function.c
|
|
|
```
|
|
|
|
|
|
### 2.3 使用Web界面
|
|
|
|
|
|
启动Web服务器:
|
|
|
|
|
|
```bash
|
|
|
python -m src.ui.web_app
|
|
|
```
|
|
|
|
|
|
然后在浏览器中访问 `http://localhost:5000`
|
|
|
|
|
|
## 第三步:验证结果解读
|
|
|
|
|
|
### 3.1 成功验证
|
|
|
|
|
|
```
|
|
|
VERIFICATION SUCCESSFUL
|
|
|
Property __CPROVER_assert: OK
|
|
|
Property __CPROVER_assert: OK
|
|
|
|
|
|
** 1 of 1 properties verified (2 PASS) **
|
|
|
```
|
|
|
|
|
|
**含义:**
|
|
|
- 所有属性都已验证通过
|
|
|
- 代码在给定条件下是安全的
|
|
|
|
|
|
### 3.2 验证失败
|
|
|
|
|
|
```
|
|
|
VERIFICATION FAILED
|
|
|
Property __CPROVER_assert: FAILED
|
|
|
|
|
|
Violated property:
|
|
|
File test.c, line 2
|
|
|
assertion
|
|
|
arr[index]
|
|
|
|
|
|
STATE:
|
|
|
- Line 2: arr[index]
|
|
|
- index: 5
|
|
|
- size: 3
|
|
|
```
|
|
|
|
|
|
**含义:**
|
|
|
- 发现了潜在的安全问题
|
|
|
- 需要修复代码或添加保护措施
|
|
|
|
|
|
## 第四步:进阶功能
|
|
|
|
|
|
### 4.1 使用突变测试
|
|
|
|
|
|
```bash
|
|
|
# 生成测试突变
|
|
|
python -m src.main mutate test_function.c --function add
|
|
|
|
|
|
# 运行突变验证
|
|
|
python -m src.main verify-mutants test_function.c
|
|
|
```
|
|
|
|
|
|
### 4.2 批量处理
|
|
|
|
|
|
```bash
|
|
|
# 处理整个目录
|
|
|
python -m src.main batch-verify ./src/
|
|
|
|
|
|
# 生成报告
|
|
|
python -m src.main generate-report --format html
|
|
|
```
|
|
|
|
|
|
### 4.3 配置文件
|
|
|
|
|
|
创建配置文件 `config.yaml`:
|
|
|
|
|
|
```yaml
|
|
|
verification:
|
|
|
cbmc:
|
|
|
options:
|
|
|
- "--bounds-check"
|
|
|
- "--pointer-check"
|
|
|
- "--unwind 10"
|
|
|
timeout: 30
|
|
|
|
|
|
generation:
|
|
|
llm:
|
|
|
model: "gpt-4"
|
|
|
temperature: 0.3
|
|
|
max_tokens: 1000
|
|
|
```
|
|
|
|
|
|
## 第五步:故障排除
|
|
|
|
|
|
### 5.1 常见问题
|
|
|
|
|
|
**CBMC未找到:**
|
|
|
```bash
|
|
|
# 确保CBMC在PATH中
|
|
|
which cbmc
|
|
|
|
|
|
# 如果没有,手动设置
|
|
|
export CBMC_PATH=/path/to/cbmc
|
|
|
```
|
|
|
|
|
|
**Python依赖问题:**
|
|
|
```bash
|
|
|
# 重新安装依赖
|
|
|
pip install --force-reinstall -r requirements.txt
|
|
|
```
|
|
|
|
|
|
**内存不足:**
|
|
|
```bash
|
|
|
# 减少验证深度
|
|
|
python -m src.main verify test.c --unwind 5
|
|
|
```
|
|
|
|
|
|
### 5.2 性能优化
|
|
|
|
|
|
- 使用 `--unwind` 限制递归深度
|
|
|
- 增加 `--timeout` 防止长时间运行
|
|
|
- 使用 `--jobs` 进行并行处理
|
|
|
|
|
|
## 第六步:最佳实践
|
|
|
|
|
|
### 6.1 编写可验证的代码
|
|
|
|
|
|
```c
|
|
|
// 好的实践:包含边界检查
|
|
|
int safe_access(int* arr, int size, int index) {
|
|
|
if (arr == NULL || size <= 0 || index < 0 || index >= size) {
|
|
|
return 0;
|
|
|
}
|
|
|
return arr[index];
|
|
|
}
|
|
|
|
|
|
// 避免的做法:没有边界检查
|
|
|
int unsafe_access(int* arr, int size, int index) {
|
|
|
return arr[index]; // 潜在的缓冲区溢出
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### 6.2 规范编写建议
|
|
|
|
|
|
- 使用清晰的断言
|
|
|
- 考虑边界条件
|
|
|
- 添加前置条件
|
|
|
- 记录假设条件
|
|
|
|
|
|
### 6.3 持续集成
|
|
|
|
|
|
将CodeDetect集成到CI/CD流程中:
|
|
|
|
|
|
```yaml
|
|
|
# .github/workflows/verify.yml
|
|
|
name: Code Verification
|
|
|
on: [push, pull_request]
|
|
|
|
|
|
jobs:
|
|
|
verify:
|
|
|
runs-on: ubuntu-latest
|
|
|
steps:
|
|
|
- uses: actions/checkout@v2
|
|
|
- name: Setup Python
|
|
|
uses: actions/setup-python@v2
|
|
|
with:
|
|
|
python-version: 3.9
|
|
|
- name: Install dependencies
|
|
|
run: |
|
|
|
pip install -r requirements.txt
|
|
|
sudo apt-get install cbmc
|
|
|
- name: Run verification
|
|
|
run: python -m pytest tests/ -v
|
|
|
```
|
|
|
|
|
|
## 下一步
|
|
|
|
|
|
完成本教程后,您可以:
|
|
|
|
|
|
1. 阅读 [API参考文档](../api-reference.md)
|
|
|
2. 探索 [开发者指南](../developer-guide.md)
|
|
|
3. 查看 [FreeRTOS示例](../freertos-examples/)
|
|
|
4. 尝试 [高级配置选项](../configuration.md)
|
|
|
|
|
|
## 获取帮助
|
|
|
|
|
|
- 查看 [用户手册](../user-manual.md)
|
|
|
- 提交 [Issue](https://github.com/your-username/codedetect/issues)
|
|
|
- 加入社区讨论 |