- URL: https://daniel.haxx.se/blog/2025/05/29/decomplexification/
- Added At: 2025-05-30 13:54:53
文章提出通过降低代码复杂度提升软件质量和安全性,建议使用圈复杂度分析工具(如pmccabe)重构高复杂度函数。以curl项目为例,建立复杂度监测体系并设100分阈值,经持续重构使代码平均复杂度下降超50%,消除了超过100分的函数。通过CI检查机制阻断高复杂度代码合并,并公开监测数据与工具。当前最复杂函数维持在70-100分区间,未来计划逐步收紧阈值,强调重构需与充分测试结合并纳入开发流程。
文章围绕"代码去复杂化"实践展开,强调通过降低代码复杂度提升软件质量和安全性。主要内容如下:
- 去复杂化原则
- 提出代码复杂度与缺陷、安全漏洞的正相关性,主张通过降低cyclomatic complexity(圈复杂度)优化代码
- 使用pmccabe工具扫描C代码,针对高复杂度函数进行重构
- curl项目实践
- 建立三类复杂度监测指标: ① 最高复杂度函数与99/90分位数值 ② 复杂度分布热力图(显示各复杂度段的代码占比) ③ 平均复杂度趋势图
- 设定复杂度阈值:将函数复杂度上限定义为100分,通过持续重构使最复杂函数(曾达350分)下降至100分以下
- 重构成效
- 2025年实现curl代码中所有函数复杂度低于100分
- 平均复杂度较2022年下降超过50%
- 静态分析工具误报率降低,代码可维护性提升
- 过程管理
- 建立CI检查机制,禁止复杂度超限的PR合并
- 公开所有监测数据、分析脚本和图表
- 当前状态
- 当前最复杂函数位于70-100分区间(如myssh_statemach_act为100分)
- 计划逐步降低复杂度阈值,持续优化过程
文中强调重构是持续过程,需结合充分测试验证,并将复杂度管理纳入开发流程。所有监测数据及工具公开透明,包含函数长度(含注释)的并行监测指标(部分图表存在逻辑矛盾需修正)。