C语言静态分析与代码质量保证
📚 共计 30 章节
01
C语言静态分析概述
什么是静态分析 · 为什么需要 · 与动态测试区别 · 常见工具 (PC-Lint, Cppcheck, Clang Static Analyzer, Coverity)
基础
工具
02
编译警告与代码质量
GCC/Clang 警告选项 (-Wall -Wextra -Werror) · 警告即错误 · 未初始化变量/类型不匹配/未使用参数
编译
GCC
03
编码规范与风格检查
MISRA C 简介 · 规范重要性 · cpplint/uncrustify · 命名规范与可读性
规范
MISRA
04
静态分析工具实战:Cppcheck
安装 · 基本用法 · 自定义规则 · CMake/Makefile集成 · 报告解读
Cppcheck
实战
05
Clang Static Analyzer入门
安装配置 · 基本扫描 · 路径敏感分析 · 符号执行 · 结果可视化
Clang
符号执行
06
PC-Lint/FlexeLint高级用法
配置选项 · 消息抑制 · 自定义规则 · IDE集成 · 大型项目经验
PC-Lint
企业
07
Coverity与商业工具
Coverity Scan · 优势与局限 · CI/CD集成 · 成本效益分析
商业
Coverity
08
数据流分析基础
控制流图(CFG) · 到达定值 · 活跃变量 · 可用表达式 · 静态分析应用
理论
数据流
09
指针分析与别名检测
指针复杂性 · 别名问题 · 流/路径敏感分析 · 空指针/野指针/内存泄漏
指针
别名
10
缓冲区溢出检测
栈溢出 · 堆溢出 · 静态检测 · 字符串风险 · strncpy/snprintf
安全
溢出
11
内存管理静态检查
内存泄漏模式 · 双重释放 · 未初始化内存 · 抽象解释技术
内存
抽象解释
12
并发与竞态条件分析
数据竞争 · 死锁检测 · 锁顺序 · 静态分析局限 · 结合动态分析
并发
竞态
13
安全漏洞静态检测
CWE介绍 · 注入攻击 · 整数溢出 · 格式化字符串 · 安全审计角色
安全
CWE
14
代码复杂度度量
圈复杂度 · 嵌套深度 · 代码行数 · 函数长度 · lizard/pmccabe
度量
复杂度
15
代码重复检测
重复代码危害 · Simian/CPD · 重构策略 · 代码审查应用
重复
重构
16
静态分析结果管理
误报/漏报处理 · 分级与优先级 · Jira/Bugzilla集成 · 团队协作
管理
流程
17
在CI/CD中集成静态分析
Jenkins/GitLab CI/GitHub Actions · 质量门禁 · 增量分析 · 趋势追踪
CI/CD
DevOps
18
静态分析与代码审查
前置步骤 · 审查清单 · 人工+自动互补 · 最佳实践
审查
协作
19
MISRA C深入实践
MISRA C:2012规则分类 · 偏离申请 · 汽车/嵌入式 · 合规认证
MISRA
嵌入式
20
CERT C编码标准
CERT C规则概览 · 安全编码 · 与MISRA对比 · 安全关键系统
CERT
安全
21
静态分析工具定制与扩展
Cppcheck插件 · Clang-tidy自定义检查 · 规则脚本 · 领域特定分析
扩展
定制
22
抽象解释理论入门
抽象域 (Interval, Polyhedra) · 不动点计算 · 宽度抽象 · 引擎实现
理论
抽象解释
23
符号执行与约束求解
符号执行原理 · 路径爆炸 · Z3/STP集成 · 漏洞挖掘
符号执行
Z3
24
静态分析在嵌入式系统中的应用
资源受限 · 中断分析 · 寄存器检查 · 堆栈使用分析
嵌入式
RTOS
25
静态分析在Linux内核开发中的应用
内核编码规范 · Sparse · Coccinelle/Smatch · 常见内核缺陷
Linux
内核
26
静态分析在金融/电信行业实践
高可靠性 · 合规审计 · 遗留代码分析 · 迁移与现代化
金融
电信
27
静态分析工具对比与选型
开源vs商业 · 语言支持 · 性能与扩展 · 决策矩阵
选型
对比
28
静态分析未来趋势
AI/ML应用 · 增量分析 · 云原生 · DevSecOps演进
趋势
AI
29
综合实战项目(一)
搭建完整静态分析流水线 · 工具链配置 · 规则定制 · 门禁 · 团队培训
实战
流水线
30
综合实战项目(二)
分析真实项目代码库 · 结果分类修复 · 分析报告 · 持续改进
实战
报告