软件度量

00:00
5 min Intermediate 2026/6/14

代码行度量、功能点分析、圈复杂度与软件质量指标。

1. 软件度量概述

1.1 度量目的

目的说明
评估质量量化软件质量属性
预测工作量估算项目规模和成本
监控进度跟踪开发进展
改进过程识别改进机会

1.2 度量分类

分类说明示例
产品度量软件产品属性代码行数、缺陷密度
过程度量开发过程属性开发周期、评审次数
项目度量项目管理属性成本、进度、人力

2. 规模度量

2.1 代码行(LOC)

指标说明
SLOC源代码行(不含空行和注释)
KLOC千行代码
LOC/人月人均生产率

局限性

  • 语言差异大(同一功能,Python vs Java行数差异大)
  • 不反映复杂度
  • 不鼓励简洁代码

2.2 功能点分析(FPA)

功能点衡量软件的功能规模,与实现语言无关:

功能类型简单平均复杂权重说明
外部输入(EI)346用户输入
外部输出(EO)457用户输出
外部查询(EQ)346查询操作
内部逻辑文件(ILF)71015系统维护的数据
外部接口文件(EIF)5710系统引用的数据

调整后的功能点

其中 为14个通用系统特性的影响度。

3. 复杂度度量

3.1 圈复杂度(Cyclomatic Complexity)

衡量程序的线性独立路径数

其中 为边数, 为节点数, 为连通分量数。

简化计算

圈复杂度风险等级建议
1~10简单,低风险
11~20较复杂,中等风险
21~50复杂,高风险
>50极高不可测试,必须重构

3.2 认知复杂度

圈复杂度的改进,更符合人类理解难度:

  • 不对线性逻辑(if-else链)增加复杂度
  • 嵌套增加额外复杂度
  • 跳转(break、continue)增加复杂度

4. 质量度量

4.1 缺陷度量

指标公式说明
缺陷密度缺陷数/KLOC每千行代码缺陷数
缺陷发现率缺陷数/测试时间单位时间发现的缺陷
缺陷修复率已修复/总缺陷修复进度
缺陷泄漏率生产缺陷/(测试缺陷+生产缺陷)测试有效性

4.2 代码质量指标

指标说明工具
重复重复代码占比SonarQube
测试覆盖测试代码的占比JaCoCo、Istanbul
技术债务修复所有问题所需时间SonarQube
代码异味数代码坏味道数量SonarQube
依赖复杂模块耦合Structure101

4.3 可维护性指数

范围评级
0~9
10~19
20~100

5. 度量实践

5.1 度量仪表盘

维度指标目标
质量缺陷密<5/KLOC
质量测试覆盖>80%
效率开发故事点/Sprint
效率构建成功>95%
维护复杂<15
维护重复<3%

5.2 Goodhart法则

“当一个量成为目标时,它就不再是一个好的量。”

避免陷阱

  • 量是工具,不是目标
  • 组合多个量,避免单一指标优化
  • 定期审视量的有效

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式