资讯详情 信息系统项目管理师计算题汇总:挣值分析与关键路径避坑指南
📅 2026/10/15 11:04:01
简介这份资料面向备考信息系统项目管理师软考高级的考生及项目管理从业者聚焦考试中失分率较高的计算类题型帮助读者系统梳理公式与解题思路。压缩包内共1个doc文档约227KB内容按模块编排涵盖网络技术关键路径与总浮动时间、自由浮动时间计算三点估算的Beta概率分布与完成概率推导挣值计算中的EV、PV、AC、BAC等基本指标及CV、SV差异分析CPI、SPI绩效指数解读与ETC、EAC、VAC趋势预测并延伸至估算EV的50/50、20/80、0/100法则、直线折旧与双倍余额递减等折旧方法以及决策树、合同类型等补充考点。文档以公式推导配合举例计算的方式呈现便于对照练习与考前速查。目前已有488人学习下载适合需要集中突破计算题、查漏补缺的备考者使用。1. 信息系统项目管理师计算题汇总为什么公式背熟了考场还是算错考信息系统项目管理师的人十个里有八个栽在下午案例分析的计算题上。不是不会公式而是拿到题之后不知道先算哪个、单位怎么统一、保留几位小数、挣值分析里到底谁减谁。我见过太多人把 PV、EV、AC 背得滚瓜烂熟一到“进度偏差和成本偏差同时为负”就懵了。这篇汇总不讲空话把历年高频计算题型拆成可复现的解题路径从三点估算、关键路径、挣值分析到决策树、投资回收期、沟通渠道数每一类都给出计算逻辑、参数含义和考场上的避坑动作。适合已经过了一遍教材、正在刷真题但正确率卡在六成左右的考生也适合带培训班的讲师拿去当讲义骨架。2. 三点估算与关键路径先算期望值再找最长链2.1 三点估算的三种结果怎么选三点估算的核心不是算出一个数而是根据题目问法选对公式。常见问法有三种给乐观、悲观、最可能求期望工期给期望和标准差求某时间内完成的概率给三个值问“在多少天内完成的概率不低于某个百分比”。这三种问法对应三套动作。先看基础公式。贝塔分布下期望工期 TE (O 4M P) / 6标准差 σ (P - O) / 6。三角分布下TE (O M P) / 3。考试里默认用贝塔分布除非题目明确说“按三角分布计算”。这个默认规则很多人不知道导致第一步就选错公式。概率计算依赖正态分布。记住三个关键区间±1σ 约 68.27%±2σ 约 95.45%±3σ 约 99.73%。题目问“在 X 天内完成”先算 Z (X - TE) / σ再查正态分布表。如果题目不给表通常只考 1σ、2σ、3σ 对应的概率或者问“X 天完成概率是多少”而 X 恰好落在 TE ± σ 的整数倍上。# 三点估算与概率计算 def three_point_estimate(optimistic, most_likely, pessimistic): 贝塔分布下的期望工期与标准差 optimistic: 乐观工期 most_likely: 最可能工期 pessimistic: 悲观工期 te (optimistic 4 * most_likely pessimistic) / 6 sigma (pessimistic - optimistic) / 6 return te, sigma def probability_within_days(te, sigma, target_days): 计算在 target_days 内完成的概率 使用标准正态分布近似返回百分比 z (target_days - te) / sigma # 常见 Z 值对应的单侧概率 z_table { 0.0: 50.0, 0.5: 69.15, 1.0: 84.13, 1.5: 93.32, 2.0: 97.72, 2.5: 99.38, 3.0: 99.87 } # 找最接近的 Z 值 closest_z min(z_table.keys(), keylambda x: abs(x - z)) return z_table[closest_z] # 示例O8, M10, P18 te, sigma three_point_estimate(8, 10, 18) print(f期望工期: {te:.2f} 天, 标准差: {sigma:.2f} 天) # 期望工期: 11.00 天, 标准差: 1.67 天 prob probability_within_days(te, sigma, 13) print(f13天内完成概率约: {prob}%) # 13天内完成概率约: 84.13%这段代码的关键参数是optimistic、most_likely、pessimistic单位必须统一通常都是天。te是期望工期sigma是标准差。概率计算里用了一个简化查表法因为考场不会让你算积分。注意z_table只列了常见值实际考试中如果 Z 落在两个值之间通常选更接近的那个或者题目会设计成正好落在表上。提示如果题目给的是“完成概率不低于 95%”反推 Z 约等于 1.645再用 X TE 1.645σ 求天数。这个 1.645 是单侧 95% 的临界值记住它比记整张表划算。2.2 关键路径从网络图到浮动时间的完整推演关键路径计算是下午题第一道大题的常客。题目通常给一张前导图或箭线图要求找关键路径、算总工期、求某活动的总浮动时间和自由浮动时间。很多人会找最长路径但一算浮动时间就乱。标准做法是正推和逆推。正推算每个活动的最早开始ES和最早完成EF逆推算最晚开始LS和最晚完成LF。总浮动时间 TF LS - ES LF - EF。自由浮动时间 FF 紧后活动 ES 的最小值 - 当前活动 EF。关键路径就是 TF 全为零的那条路径。如果有多条都要列出来。总工期就是关键路径上所有活动工期之和。# 关键路径正推逆推 # 活动定义{活动名: (工期, [紧前活动])} activities { A: (3, []), B: (4, [A]), C: (2, [A]), D: (5, [B]), E: (1, [C]), F: (6, [D, E]) } # 正推计算 ES 和 EF es {} ef {} for act in [A, B, C, D, E, F]: duration, predecessors activities[act] if not predecessors: es[act] 0 else: es[act] max(ef[p] for p in predecessors) ef[act] es[act] duration # 逆推计算 LS 和 LF ls {} lf {} # 按逆序处理 for act in reversed([A, B, C, D, E, F]): duration, _ activities[act] # 找紧后活动 successors [a for a, (_, preds) in activities.items() if act in preds] if not successors: lf[act] ef[act] # 项目终点 else: lf[act] min(ls[s] for s in successors) ls[act] lf[act] - duration # 输出浮动时间 print(活动\t工期\tES\tEF\tLS\tLF\t总浮动) for act in [A, B, C, D, E, F]: tf ls[act] - es[act] print(f{act}\t{activities[act][0]}\t{es[act]}\t{ef[act]}\t{ls[act]}\t{lf[act]}\t{tf})这段代码里activities字典的每个值是一个元组第一个元素是工期第二个是紧前活动列表。正推时es取所有紧前活动ef的最大值逆推时lf取所有紧后活动ls的最小值。总浮动tf为零的活动就是关键活动。注意逆推时项目终点的lf等于它的ef这是默认项目不延期。注意如果题目给的是箭线图活动在箭线上节点表示事件正推逆推的逻辑一样但要注意虚活动的工期为零且虚活动也参与路径计算。2.3 赶工与资源平衡什么时候加钱什么时候调顺序赶工计算是关键路径的进阶考法。题目给一张表列出每个活动的正常工期、赶工工期、正常成本和赶工成本问“压缩到多少天成本最低”。核心原则是只压缩关键路径上的活动且优先压缩赶工成本斜率最小的活动。赶工成本斜率 (赶工成本 - 正常成本) / (正常工期 - 赶工工期)。单位是元/天。每次压缩一天选关键路径上斜率最小的活动。压缩后要重新检查关键路径是否发生变化如果出现了新的关键路径就要同时压缩多条路径。# 赶工成本斜率计算 crash_data { A: {normal_days: 5, crash_days: 3, normal_cost: 5000, crash_cost: 9000}, B: {normal_days: 4, crash_days: 2, normal_cost: 4000, crash_cost: 7000}, C: {normal_days: 6, crash_days: 4, normal_cost: 6000, crash_cost: 10000}, } for act, data in crash_data.items(): slope (data[crash_cost] - data[normal_cost]) / (data[normal_days] - data[crash_days]) print(f活动{act}的赶工成本斜率: {slope:.0f} 元/天)输出会告诉你每个活动每压缩一天要花多少钱。选最小的那个先压。如果压缩后关键路径变了比如原来 A-B 是关键路径压缩 B 之后 A-C 也变成了关键路径那就必须同时压缩 A 和 C 各一天成本是两者斜率之和。提示赶工题最容易翻车的地方是忘了检查关键路径变化。压完一天就重新画一遍网络图别嫌麻烦这是后悔药。3. 挣值分析PV、EV、AC 三个数到底谁减谁3.1 四个偏差指标和两个绩效指数的计算逻辑挣值分析是下午题计算部分的绝对重点几乎每年必考。核心就三个输入PV计划价值、EV挣值、AC实际成本。所有指标都是这三个数的加减乘除。进度偏差 SV EV - PV。成本偏差 CV EV - AC。进度绩效指数 SPI EV / PV。成本绩效指数 CPI EV / AC。完工估算 EAC 有几种算法最常用的是 EAC BAC / CPI其中 BAC 是总预算。完工偏差 VAC BAC - EAC。很多人记不住谁减谁我的记法是EV 永远在前面。SV 和 CV 都是 EV 减去另一个。SPI 和 CPI 都是 EV 除以另一个。因为 EV 是“我实际干出来的价值”它是基准。# 挣值分析核心指标 def evm_analysis(pv, ev, ac, bac): pv: 计划价值 ev: 挣值 ac: 实际成本 bac: 完工预算 sv ev - pv cv ev - ac spi ev / pv if pv ! 0 else 0 cpi ev / ac if ac ! 0 else 0 eac bac / cpi if cpi ! 0 else 0 vac bac - eac return { SV: sv, CV: cv, SPI: round(spi, 2), CPI: round(cpi, 2), EAC: round(eac, 2), VAC: round(vac, 2) } # 示例PV100万EV80万AC90万BAC200万 result evm_analysis(100, 80, 90, 200) for k, v in result.items(): print(f{k}: {v})这段代码里pv、ev、ac、bac单位要统一通常都是万元或元。sv为负表示进度落后cv为负表示成本超支。spi小于 1 表示进度效率低cpi小于 1 表示成本效率低。eac是按当前成本绩效推算的完工总成本vac为正表示预算有结余。注意如果题目说“按预算单价完成剩余工作”EAC AC (BAC - EV)。如果题目说“剩余工作按原计划效率进行”EAC AC (BAC - EV) / CPI。这两种问法对应不同公式别混。3.2 完工估算的四种场景与选择依据EAC 的计算有四种典型场景题目会给不同的假设条件。第一种剩余工作按预算单价进行EAC AC (BAC - EV)。第二种剩余工作按当前 CPI 继续EAC BAC / CPI。第三种剩余工作按新的效率进行EAC AC 剩余工作量的新估算。第四种同时考虑 CPI 和 SPIEAC AC (BAC - EV) / (CPI × SPI)。选哪个公式看题目关键词。“按预算单价”对应第一种“按当前绩效”对应第二种“按新估算”对应第三种“同时考虑成本和进度”对应第四种。考试里最常见的是第二种和第四种。# 四种 EAC 计算场景 def eac_scenarios(pv, ev, ac, bac, new_estimateNone): results {} # 场景1剩余按预算单价 results[按预算单价] ac (bac - ev) # 场景2按当前CPI cpi ev / ac if ac ! 0 else 0 results[按当前CPI] bac / cpi if cpi ! 0 else 0 # 场景3按新估算 if new_estimate is not None: results[按新估算] ac new_estimate # 场景4同时考虑CPI和SPI spi ev / pv if pv ! 0 else 0 if cpi ! 0 and spi ! 0: results[同时考虑CPI和SPI] ac (bac - ev) / (cpi * spi) return results # 示例 scenarios eac_scenarios(100, 80, 90, 200, new_estimate130) for name, value in scenarios.items(): print(f{name}: {value:.2f} 万元)这段代码把四种场景都算出来了实际考试时根据题目条件选一个。new_estimate是剩余工作的新估算值只在场景三用。注意场景四的分母是 CPI 乘以 SPI不是相加。3.3 挣值分析在案例题里的组合考法挣值分析很少单独考通常和网络图、资源分配、变更管理结合。比如给一个项目进度表先让你算关键路径和总工期再给每个活动的实际完成情况和实际成本让你算 EV、PV、AC然后判断项目状态最后问“按当前趋势完工时成本是多少”。这种组合题的关键是先把每个活动的 PV 和 EV 分开算。PV 是按计划到检查点应该完成的工作量对应的预算EV 是实际完成的工作量对应的预算。AC 是实际花了多少钱。三个数不能混。# 组合题按活动汇总 PV、EV、AC activities { A: {budget: 10, planned_percent: 100, actual_percent: 100, actual_cost: 12}, B: {budget: 20, planned_percent: 100, actual_percent: 80, actual_cost: 18}, C: {budget: 15, planned_percent: 100, actual_percent: 60, actual_cost: 10}, D: {budget: 25, planned_percent: 50, actual_percent: 30, actual_cost: 8}, } total_pv sum(a[budget] * a[planned_percent] / 100 for a in activities.values()) total_ev sum(a[budget] * a[actual_percent] / 100 for a in activities.values()) total_ac sum(a[actual_cost] for a in activities.values()) print(fPV {total_pv:.2f} 万元) print(fEV {total_ev:.2f} 万元) print(fAC {total_ac:.2f} 万元) print(fSV {total_ev - total_pv:.2f}, CV {total_ev - total_ac:.2f})这段代码里budget是每个活动的预算planned_percent是到检查点计划完成百分比actual_percent是实际完成百分比。PV 用计划百分比EV 用实际百分比AC 直接加总。算出来的 SV 和 CV 再判断状态。提示如果题目给的是“已完成工作量的预算价值”那就是 EV。如果给的是“计划工作量的预算价值”那就是 PV。这两个词经常被出题人用来绕人。4. 决策树、投资回收期与沟通渠道三类小题的速算模板4.1 决策树期望货币值的正算与反算决策树考的是期望货币值EMV。给几个方案每个方案有不同概率的收益或损失选 EMV 最大的方案。正算是给概率和金额求 EMV。反算是给 EMV 和部分概率求临界概率。EMV Σ(概率 × 金额)。注意金额有正有负负的表示成本或损失。决策树从右往左算先算每个机会节点的 EMV再比较决策节点的方案。# 决策树 EMV 计算 def emv(outcomes): outcomes: [(概率, 金额), ...] 金额正为收益负为损失 return sum(p * v for p, v in outcomes) # 方案A高概率小收益 emv_a emv([(0.7, 100), (0.3, -20)]) # 方案B低概率大收益 emv_b emv([(0.3, 300), (0.7, -50)]) print(f方案A EMV: {emv_a:.2f}) print(f方案B EMV: {emv_b:.2f}) print(f选择: {A if emv_a emv_b else B})这段代码里outcomes是概率和金额的列表概率之和必须为 1。emv_a和emv_b分别算两个方案的期望值选大的。注意金额为负时表示支出不要漏掉负号。注意如果题目问“方案B的收益至少为多少时才能选B”那就是反算。设 B 的收益为 X令 EMV_B EMV_A解方程。4.2 投资回收期静态与动态的区别投资回收期分静态和动态。静态不考虑资金时间价值动态考虑折现。考试里静态考得多动态偶尔考。静态回收期 累计净现金流首次为正的年份 - 1 上年累计净现金流的绝对值 / 当年净现金流。动态回收期用折现后的净现金流算折现率题目会给。# 静态投资回收期 def payback_period(cash_flows): cash_flows: 每年的净现金流第一年从索引0开始 返回回收期年 cumulative 0 for i, cf in enumerate(cash_flows): cumulative cf if cumulative 0: if i 0: return 1.0 prev_cumulative cumulative - cf return i abs(prev_cumulative) / cf return None # 未回收 # 示例初始投资-100后续每年回流 flows [-100, 30, 40, 50, 60] period payback_period(flows) print(f静态投资回收期: {period:.2f} 年)这段代码里cash_flows列表的第一个元素通常是负的初始投资后面是每年的净流入。cumulative是累计值首次转正时用插值法算精确年份。注意如果第一年就转正回收期是 1 年。4.3 沟通渠道数与团队规模沟通渠道数 n(n-1)/2n 是人数。这个公式简单但题目会绕。比如“团队原有 5 人新增 3 人沟通渠道增加多少”先算 8 人的渠道数减去 5 人的渠道数。def communication_channels(n): 计算 n 个人的沟通渠道数 return n * (n - 1) // 2 old communication_channels(5) new communication_channels(8) print(f原渠道数: {old}, 新渠道数: {new}, 增加: {new - old})输出是 10、28、18。注意题目如果问“增加了多少条”是 18。如果问“现在的渠道数”是 28。提示沟通渠道题有时会结合“项目经理是否算在人数里”来设坑。题目说“项目团队有 5 人”通常不含项目经理说“项目组有 5 人”可能含。看上下文不确定就按不含算因为大多数教材默认项目经理单独列。5. 计算题避坑考场上的五个血泪教训5.1 单位不统一算完才发现差一千倍现象题目给的成本是“万元”工期是“天”算赶工成本斜率时直接除结果单位是“万元/天”但选项里是“元/天”差一万倍。原因读题时没圈单位算完直接选。解决每道题先在草稿纸上写一行“单位万元、天”所有中间结果都带单位最后换算。5.2 保留小数位没按题目要求四舍五入丢分现象题目说“保留两位小数”你算出来 3.456写了 3.46但标准答案是 3.45因为出题人用的是截断不是四舍五入。原因不同教材对小数处理不一致。解决先看题目有没有明确“四舍五入”或“截断”没有就按四舍五入但中间步骤多保留一位最后再舍。5.3 关键路径找错因为漏了虚活动现象箭线图里有一条虚活动工期为零你没把它算进路径结果关键路径少了一段。原因虚活动不消耗时间但消耗逻辑关系。解决画网络图时把所有虚活动用虚线标出来正推逆推时虚活动也参与工期按零算。5.4 挣值分析里 EV 和 PV 搞反现象题目说“实际完成 60%”你拿 60% 乘预算算 PV但 PV 应该用计划百分比。原因PV 是计划价值EV 是挣值。解决记住一句话——PV 看计划EV 看实际AC 看花了多少。每次算之前默念一遍。5.5 决策树概率之和不为 1自己没发现现象题目给三个分支概率分别是 0.5、0.3、0.3加起来 1.1你直接算 EMV结果全错。原因出题人故意设坑或者你抄错数。解决算 EMV 之前先加一遍概率不为 1 就回去检查。如果题目本身概率和不为 1按比例归一化再算。注意这五条里单位和小数位是纯粗心关键路径和挣值是概念不清概率之和是检查习惯。考前一周每天做一道计算题只练这五个检查点正确率能提两成。6. 用一张检查表把计算题正确率提到九成最后一章说一个我自己的习惯每道计算题做完不急着写答案先过一遍检查表。这张表只有六项但能拦住九成以上的非知识性失分。检查项具体动作常见翻车点单位圈出题目所有单位确认中间结果单位一致万元和元混用小数位看题目要求中间步骤多留一位四舍五入 vs 截断公式选择默念题目关键词对应哪个公式EAC 四种场景混概率和决策树概率相加是否为 1出题人故意给 1.1关键路径虚活动是否参与路径是否重新检查压缩后新关键路径答案回代把结果代回原题看是否合理SV 为负但说进度超前这张表我用了三年从最初的计算题正确率六成提到九成。不是知识增加了是检查动作固定了。考场上时间紧但每道计算题多花三十秒过一遍表比算完发现错了再重算省时间。还有一个进阶技巧把历年真题里所有计算题按题型分类每类只做十道做完对照检查表写一句“这次差点栽在哪”。比如“这次差点在 EAC 场景四忘了乘 SPI”。写满二十句你会发现自己的翻车点高度重复然后针对性练那一个点就行。我自己的教训是曾经连续三次模拟考都在挣值分析的 EAC 上丢分后来发现不是不会算是每次看到“按当前绩效”就条件反射用 BAC/CPI但题目实际问的是“同时考虑成本和进度”。后来我把四种场景的关键词抄在便利贴上贴在显示器边框做题前看一眼再也没错过。这种笨办法比背口诀管用。希望帮到你。本文还有配套的精品资源点击获取