
简介这是中南大学软件学院《软件度量》课程的复习重点整理面向软件工程专业学生及需要系统掌握软件度量基础的开发者用于考前冲刺、知识梳理与概念辨析。资源将课程核心章节浓缩为一份可读性较高的笔记覆盖测量的基本概念、用头脑/单词/数字度量的三个阶段、六大测量尺度标定、类型、序列、间隔、比例、绝对并梳理直接测量与间接测量的区别同时深入第二章软件度量概念、过程/产品/资源三类实体度量、内部与外部属性以及有效软件度量的实施步骤第三章则归纳软件规模度量方法与Halstead长度度量等内容。包体为1个docx文档1.66MB排版适合打印或电子阅读便于对照教材逐条复习。目前已有467人学习下载适合考前快速回顾或作为课程笔记补充。 每年期末软件度量这门课都会刷掉一批人。我在中南大学软件学院读研时做过这门课的助教见过太多代码写得不错、一到度量计算就懵的同学。其实软件度量没想象的那么玄核心就三件事先搞清要度量什么再按规则算出来最后用数据解释质量或者过程。今天这篇就把复习重点一次性整理清楚包括常考概念、高频公式、典型例题和我自己踩过的坑希望能帮你少走弯路。软件度量这门课最大的特点就是“看起来简单做起来容易混”。因为度量指标实在太多而且很多概念边界模糊比如规模、工作量、成本、质量这些词平时说说都能理解一到计算题就开始乱套。所以复习的核心思路只有一个先建好分类框架再往框架里填公式和场景。框架稳了题目怎么变都不怕。1. 先搞懂课程主线软件度量不是“算算数”1.1 从“可度量目标”出发GQM模型是万金油GQMGoal-Question-Metric模型是这门课的骨架也是考试最喜欢让人画图或者举例的考点。它的思路很简单从业务目标出发拆解成可以回答的问题再为每个问题找到可以量化的指标。举个例子如果你的目标是“提高软件交付质量”那问题可以是“交付后的缺陷率有没有下降”对应的度量指标就是“缺陷密度”和“缺陷去除率”。考试时如果让你设计度量方案不要一上来就写指标先写目标再写问题再写指标这个顺序本身就值分。GQM模型为什么反复考因为它体现了软件度量的一个根本原则度量不是自娱自乐而是为目标服务。没有目标就选指标最后出来的数据既没人看也没法指导改进。复习时可以把GQM当作主线索把后面所有指标都挂靠到“目标→问题→指标”这条链上记忆效率会高很多。另一个容易考的点是“基线Baseline”和“目标Target”的区别。基线是当前状态目标是想达到的状态。比如缺陷密度当前是5个/KLOC目标是降到2个/KLOC这中间才引出改进动作。很多同学只记公式忘了这种概念题其实这类送分题更需要拿稳。1.2 过程度量、产品度量、项目度量怎么分软件度量通常分成三类产品度量、过程度量和项目资源度量。考试时经常给一个具体指标让你判断它属于哪一类或者反过来让你举例。这个分类很像给水果分类看似简单但总有人把项目进度当产品度量。产品度量针对的是“软件产物”包括规模、复杂度、质量、可维护性等过程度量针对的是“开发活动的能力”比如生产率、缺陷去除率、过程时间项目度量则关心“项目情况和资源”比如成本、进度偏差、人员配置。这里有个经典的记忆方法产品是对“代码和文档”说话过程是对“做事效率”说话项目是对“资源和时间”说话。缺陷密度属于产品度量因为它衡量的是交付物里的缺陷缺陷去除率属于过程度量因为它衡量的是测试过程发现缺陷的能力成本偏差属于项目度量因为它描述的是项目预算的执行情况。考试中还有一种陷阱题同一个指标可以出现在多个类别里。比如生产率既可以用“代码行/人月”来反映开发过程效率也会被当作项目资源使用率来衡量。遇到这种情况先看题目给的上下文再判断最合适的分类不要一看到“生产率”就直接写过程度量要看看它到底在问哪个层面。2. 高频考点规模度量与复杂度度量公式必须闭眼能写2.1 代码行、功能点、用例点三种规模度量的选择题与计算题规模度量是后续所有度量的基础没有规模缺陷密度、生产率都是空中楼阁。考试中最常出现的是代码行LOC和功能点FP。代码行最直接但坑也最多。它的争议在于“什么叫一行代码”注释算不算、空行算不算、一个语句跨多行怎么算这些问题在现实中吵不完考试里却经常给明确规则比如“只计算非空非注释的可执行代码行”。遇到LOC题目先看清楚单位是LOC还是KLOC计算缺陷密度时尤其容易在乘算时搞混。功能点分析是更“科学”的规模度量因为它不依赖具体语言从用户视角出发。功能点的核心公式是FP 未调整功能点数 × (0.65 0.01 × ΣD_i)其中未调整功能点数由五类基本组件加权求和得到外部输入、外部输出、外部查询、内部逻辑文件、外部接口文件。每种组件还要根据复杂度选择低、中、高三种权重考试中如果没给权重表通常会用简化权重外部输入4外部输出5外部查询4内部逻辑文件10外部接口文件7。很多人忘记最后一步“调整因子”这是最容易丢分的地方。调整因子中的ΣD_i是14个通用系统特性的影响程度总和取值范围0到70。整个公式本质上是把非功能需求也纳入考虑。复习时可以把这14个特性粗略记成“通信、分布式、性能、负载、数据量、交互、联机更新、效率、复杂性、复用、易安装、易操作、多站点、易变更”能记住核心几个就不容易被题干绕晕。用例点Use Case Points在研究生阶段可能涉及本科考试相对少。它和功能点思路类似先计算未调整用例点和未调整技术因子再乘环境因子。如果时间紧张优先级排在功能点之后。2.2 McCabe环路复杂度和Halstead指标复杂度考点的两座大山复杂度度量是软件度量里计算性最强的部分其中McCabe环路复杂度几乎每年都考。环路复杂度的物理意义是“独立路径的最小数量”也可以理解为“做测试时要准备多少条路径才能全覆盖”。最常用公式是V(G) E - N 2其中E是控制流图中的边数N是节点数。还有一种更快的方式V(G) P 1其中P是二值判定节点if、while、for等的数量。考试时如果给代码先数if、while、for的个数再加1速度很快如果给控制流图就用E-N2。务必注意for循环也算一个判定switch-case的计算要看题目规则有些教材把switch的每个case都算判定有些只算整个switch为一个判定不看清题目规则容易做错。Halstead指标相比McCabe更像“软件物理学”它从操作符和操作数出发。这里的关键是分清“种类”和“出现次数”n1表示不同操作符的种类数n2表示不同操作数的种类数N1表示操作符总出现次数N2表示操作数总出现次数。程序长度N N1 N2词汇表n n1 n2程序容量V N × log₂(n)。考试中Halstead通常会给你一小段伪代码让你统计n1、n2、N1、N2。这种题没有技术难度但特别考细心。操作符包括算术运算符、赋值号、括号、分号、关键字if、while、return等操作数包括变量名、常量等。最容易漏的是括号和赋值号建议按行逐字统计用四列表格记录不要跳着数。3. 质量与过程度量考试里的“应用题”都在这块3.1 可靠性指标体系MTTF、MTBF、MTTR和缺陷密度可靠性度量看起来像概率题其实是公式题。考试中常见的几个概念经常放在一起考MTTF平均无故障时间、MTTR平均修复时间、MTBF平均故障间隔时间。三者的关系是MTBF MTTF MTTR很多同学背了这个公式但不会用。题目如果告诉你系统正常运行了90小时发生故障后修理了10小时那么MTTF是90小时MTTR是10小时MTBF是100小时。这里的陷阱在于题目有时候会直接说“平均故障间隔时间为100小时”然后再问修复时间其实就是反过来算。另一个高频考点是缺陷密度缺陷密度 缺陷总数 / 软件规模通常以KLOC为单位题目可能给出测试阶段发现的缺陷和发布后用户发现的缺陷让你计算整体缺陷密度。注意单位如果规模给的是LOC最终回答时记得换算。还有一个容易混淆的概念Fault、Error、Failure。Error是人的错误Fault是错误引起的代码缺陷故障Failure是缺陷被触发后的失效。考试可能给一个场景“程序员把逻辑符号写错导致程序在特定数据下崩溃”问你哪部分是Fault、哪部分是Failure。这种题就考察概念边界背清楚三者链条即可。3.2 缺陷去除率与生产率过程度量的两个典型计算缺陷去除率DRE是衡量测试过程有效性的重要指标公式是DRE 开发阶段发现的缺陷数 / (开发阶段发现的缺陷数 交付后用户发现的缺陷数)这个公式之所以常考是因为很多同学会漏掉分子分母里同一个缺陷数。举个实际例子内测发现80个缺陷发布后6个月内用户反馈20个缺陷则DRE 80 / (80 20) 80%。DRE越高说明缺陷越早被发现测试效果越好。生产率计算相对简单通常是“规模除以工作量”。常见表达是KLOC/人月或FP/人月。考试时要注意工作量的单位题目如果给“12人天”要换算成人月简单除以22个工作日或按题目标注的换算规则。这里没有统一标准但有经验值大多数教材和题目把人月记为22个工作日或160个小时看到具体题目先看有没有给出换算依据。还有一种“复杂度调整因子”在质量度量里也会出现可维护性指数Maintainability Index。这个指标算法比较复杂考试一般只考概念很少考计算理解成“结合复杂度、代码行、注释数量等综合反映代码可维护性的一个分数”就够了。如果有时间记住公式大致形态但优先级放在McCabe和Halstead之后。4. 复习时的常见误区与避坑清单这些都是丢分重灾区4.1 概念混淆清单考前必须分清的五组概念软件度量考试有很多“看起来差不多”的术语这里把最容易混的整理成一张速查表易混淆组区别要点测量Measurement与度量Metrics测量是获得数据的过程度量是用于量化属性的一组规则验证Verification与确认Validation验证是“把东西做对”确认是“做对的东西”考试会考中英文定义有效性与可靠性有效性是“测到了想测的东西”可靠性是“多次测量的结果一致”规模Size与工作量Effort规模是产品大小工作量是人月两者有相关性但不等价复杂度Complexity与难度Difficulty复杂度是代码本身的结构特征难度更偏向主观理解成本这些混淆点不会单独考但会藏在判断题和选择题里。比如题目说“代码行数是项目工作量的直接等同指标”这句话错得很厉害因为规模只影响工作量还受人员能力、开发方法、技术栈等因素影响。理解了这一点就能避免看到LOC就开始换算人月的错误。4.2 计算题丢分点单位、公式边界和过程细节结合我改卷的经验计算题最常见的失分原因不是不会算而是细节处理不到位这里列几个最典型的坑第一单位丢失。题目给KLOC计算出来的缺陷密度是X个/KLOC但有人最后顺手写成X个/LOC导致结果放大1000倍。建议做题时分两步先把规模统一成KLOC再代入公式。第二McCabe控制流图画错。很多人用代码画图时漏掉了出口节点。不管代码怎么复杂控制流图一定有一个入口和一个出口。如果按P1算就不会画图问题但题目如果明确要求先画控制流图再算那你最好练几道图例题避免平时只记公式。第三Halstead统计漏项。赋值符号、比较符号、函数调用括号都要算操作符。很多人在统计时只关注算术运算符忘记了赋值号“”和逻辑判断符号。我在助教时看到最夸张的情况一个简单程序能差出5个操作符后面的程序容量自然全错。第四功能点调整因子忘记扣基础值。FP公式是“未调整FP × (0.65 0.01ΣD_i)”不是“未调整FP × (1 0.01ΣD_i)”。0.65这个偏移量经常被记错建议把公式拆成“加入非功能需求后综合影响为0.65到1.35之间”这样就不容易记混淆。5. 根据中南软院的考法安排复习节奏更高效5.1 三轮复习法过书上重点、刷计算题、再做一套自测题我辅导过的学生里复习效果最好的普遍不是考前通宵那种而是有明确轮次的。第一轮建议用两到三天把课件和教材过一遍重点看GQM、分类框架、各度量的定义和公式这个阶段不要纠结细节只要能在纸上默写出每个部分的核心关键词就行。第二轮专门刷计算题。软件度量的计算题类型其实很固定功能点、McCabe、Halstead、缺陷密度、DRE、生产率。你把每种类型练两到三道基本就能覆盖考试中90%的计算题目。我建议准备一个“公式本”把每个公式适用条件写清楚尤其是McCabe什么时候用P1什么时候用E-N2用错场景比公式背不出来更可惜。第三轮找一套往年题或者老师PPT里的例题做自测限定时间完成。这一轮主要练手感和查漏补缺。做题时特别关注题干里那些“额外说明”比如“不计算注释行”“每个case都算一个判定”“人月按22天计”这类条件往往就是老师设计的区分点也是送分点。5.2 考前一晚还能捞分的优先级排序如果你现在才刚开始复习不要试图把每个细节都背下来时间不够。我的建议是把冲刺精力放在三个高频且必拿分的模块第一GQM模型的画图和解释第二功能点和McCabe环路复杂度的计算第三缺陷密度和DRE的计算。这三块内容稳定、题型固定、得分率高性价比最高。相比之下Halstead虽然也会考但统计麻烦容易出错如果你的基础稍微薄弱可以放到第三优先级。可靠性指标的MTTF、MTBF、MTTR属于公式简单但概念容易绕的点花一个小时理解清楚即可。还有一个容易被忽略的捞分点简答题里的“为什么”。比如“为什么要做软件度量”“为什么不能用代码行直接衡量开发效率”这种题没有标准公式但可以从“目标驱动、支持决策、避免拍脑袋”这个角度展开再结合一两个实际场景说明。平时复习时可以用自己的话复述每个概念的意义而不是死记定义这样到了考场反而更容易写出有逻辑的答案。如果你现在还在焦虑知识点太多先不用慌张。把GQM的骨架搭起来再往里填规模、复杂度、质量、过程四类指标最后用往年题自测一遍相信我这门课拿到一个理想成绩并不难。本文还有配套的精品资源点击获取