软件项目管理复习
- 项目
定义:为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。
特征:
1)有明确目标
2)项目之间的活动具有相关性
3)限定周期
4)独特性(不是每天都有)
5)资源成本的约束性
6)项目的不确定性
项目集与项目:
包含关系如上
软件项目的特殊性:
逻辑实体、相互作用的系统、渐进明细、变更
- 项目管理
定义:项目管理是一系列的伴随着项目的进行而进行的,目的是为了确保项目能够达到期望结构的一系列管理行为。
项目管理五大过程组:
- 软件项目管理
软件工程的组成成分
确保软件项目满足预算、成本等约束,提交高质量软件产品
- 敏捷模型
敏捷组织提出的一个灵活开发方法,应对迅速变化需求的快速软件开发方法,是一致迭代、循序渐进的开发方法
敏捷宣言4价值:
个体和互动 高于 流程和工具
可工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
- 软件项目管理过程
项目初始 → 项目计划 → 项目执行控制 → 项目结束
项目初始:项目确立 → 生存期
项目计划:范围计划 → 成本计划 → 进度计划 → 配置管理计划 → 团队计划 → 风险计划 → 合同计划
项目执行控制:集成计划执行控制 → 核心计划执行控制 → 辅助计划执行控制
- 项目立项
明确项目目标、时间表、项目使用的资源和经费,而且得到执行该项目的项目经理和项目发起人的认可
我靠怎么这么多又臭又长先跳了应该不考
- 生存期模型分类
预测型:提前进行大量的计划工作,如何一次性执行;执行是一个连续的过程
迭代型:允许对未完成的工作进行反馈,从而改进和修改该工作
增量型:向客户提供各个已完成的,可能立即使用的可交付成果
敏捷型:既有迭代也有增量,便于完善工作,频繁交付
- 预测模型
瀑布模型
适合的项目特征:需求、方案明确,类似项目:短期项目等
V模型
适合的项目特征:
需求、方案明确,类似项目:系统性能、安全等有严格要求等
- 迭代模型
原型模型
适合的项目特征:
需求不明确,项目复杂度高,项目变更频繁
- 增量模型
增量模型就是一个增量一个增量的开发过程,每个增量是一个交付结果
优点:
阶段式提交一个可运行的产品
关键的功能更早出现
早期预警问题,避免缺陷蔓延
阶段性完成可以降低估计失误
- 敏捷方法
敏捷方法是一个囊括了各种框架和方法答涵盖性术语
Scrum模型:敏捷模型的代表
- 混合模型
- 过程
需求获取:面对面沟通是最有效的方式
需求分析:需求分析是为最终用户所看到的系统建立一个概念模型,是对需求的抽象描述
需求规格编写:需求分析工作完成的一个基本标志是形成了一份完整的、规范的需求规格说明书
需求验证:验证需求是否正确/一致/完全/实际可行/必要/可检验/可跟踪?
任务分解过程:将一个项目分解为更多的工作细目或者子项目,使项目变的更小、更易管理、更易操作
结果:WBS(Work Breakdown Structure:任务分解结构)
- 分解方法
类比:采用类似项目的WBS作为参考,一些企业保存一些项目的WBS库和一些项目文档作为其他项目的开发提供参照。
模板参照:
自上而下:
自下而上:
软件项目成本:完成软件规模相应付出的代价,待开发软件项目需要的资金,人的劳动的消耗所需要的代价(软件产品的主要成本),货币单位
- 传统估算方法
代码行估算法
功能点估算法:
FP = UFC * TCF (UFC:未调整功能点计数 TCF:技术复杂度因子)
TCF = 0.65 + 0.01 × (∑Fi)
用例点估算法:
$$
UUCP=UAW+UUCW
$$
$$
UCP=UUCPTCFECF
$$$$
计算工作量:Effort=UCP*PE(PE应该题目会给)
$$ 例:
类比(自顶向下)估算法:
有类似历史项目数据、信心不足、要求不是非常精确估算时采用
自下而上估算法:
利用任务分解图(WBS),对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本
- 优点——相对比较准确,准确度来源于每个任务的估算情况
- 缺点——花费时间
三点估算法:
基于三种估算值计算预期成本:
- 最可能成本(Cm):比较显示的估算成本
- 最乐观成本(Co):最好情况所得到的估算成本
- 最悲观成本(Cp):最差情况所得到的估算成本
$$
三角分布:C_E=(C_O+C_M+C_P)/3
$$$$
贝塔分布:C_E=(C_O+4C_M+C_P)/6
$$参数估算法:
通过项目数据,进行回归分析,得出回归模型,通过参数模型估算(规模)成本的方法
专家估算法:
多位专家进行成本估算,一个专家可能会有偏见,最好由多位专家进行估算,取得多个估算值,最后得出综合的估算值
COCOMO81
定义:确定为完成项目的各个交付成果所必须进行的诸项具体活动
任务关系:项目各项活动之间存在一定的关联关系,根据这些关系安排任务之间的顺序
- 关系依赖矩阵:如果di是dj的前置,则dij=1,否则dij=0(i行j列)
举例:
t1是t2、t3的前置,所以d12、d13=1,即红框内部分,后面同理
网络图:网络图是活动排序的一个输出,展示项目中各个活动以及活动之间的逻辑关系。有PDM(优先图法,节点法网络图)和ADM(箭线法)两种网络图
(1)PDM网络图(单代号
基本特点是节点,用节点表示活动,箭头表示各活动之间的逻辑关系
(2)ADM网络图(双代号
也称为双代号项目网络图,箭头表示活动,两个代号唯一确定一个任务代号表示前一任务的结束,同时表示后一任务的开始
历时估算:估计任务、路径、项目的持续时间
- 定额估算法:T=Q/(R*S) (T:活动历时 Q:任务工作量 R:人力数量 S:工作效率
- 经验导出模型:
$$
D=a*E^b
$$D:进度(以月单位) E:工作量(以人月单位) a:2——4之间 b:1/3左右(依赖于项目的自然属性)
- 关键路径法估计CPM
关键路径是网络图中最长的路径,即图中的A为关键路径,确定项目完成时间最短为100
- 工程评估评审交换技术(PERT)
加权平均得到期望值E= (O+m+P)/6
风险指标
标准差δ =(最大估算值-最小估算值)/6
方差δ = [(最大估算值-最小估算值)/6]^2
预留分析:
应急预留:包含在进度基准中的一段储备时间,用来应对已经接受的已识别发现,以应对进度方面的不确定性
管理预留:是为管理控制的目的而特别流出的项目预算,用来应对项目范围中不可预见的风险
项目进度编排:
- 超前与滞后
- 关键路径法⭐
(1)最早/晚开始时间(看书
(2)最早/晚结束时间(看书
(3)总浮动
浮动时间是一个任务的机动性,它是一个任务在不影响其他任务或项目完成的情况下可延迟的时间量
总浮动:在不影响项目最早完成时间的前提下,一个任务可以延迟的时间
(4)自由浮动
在不影响后置任务最早开始时间的前提下,一个任务可以延迟的时间
关键路径:网络图中最长的路径,决定了项目完成的最短时间。他的时间浮动为0,没有任何活动延迟。关键路径可能不止一条
公式:
正向推导:EF=ES+duration 后置任务:ES(s)=EF+Lag
逆向推导:LS=LF-duration 前置任务:LF(p)=LS-Lag
总浮动:TF=LS-ES=LF-EF 自由浮动:FF=ES(s)-EF-Lag
时间压缩法
不改变项目范围的前提下缩短项目工期的方法
进度压缩单位成本=(压缩成本-正常成本)/(正常进度-压缩进度)
进度压缩因子=压缩进度/正常进度
压缩进度的工作量=正常工作量/进度压缩因子
资源优化
敏捷计划
项目进度确定
质量:满足要求的程度,包括符合规定 的要求和满足顾客隐含需求.
软件质量是软件满足明确说明或隐含需求的程度

审计(Audit)是对过程或者产品的一次独立评估。 将审核的主体与为该主体以前建立的一组规程和 标准进行比较
定义:记录软件产品的演化过程 得到精确的产品配置。最终保证软件产品的完整性、一致性、追朔性、可控性
基线定义:
基线提供了软件生存期中各个开发阶段的一个特定点, 标志开发过程一个阶段的结束,或者里程碑
一个(些)配置项形成并通过审核,即形成基线
基线修改需要按照正式的程序执行
定义:
风险是对潜在的、未来可能发生损害的一种度量, 如果风险确实发生了,则会对项目产生有害的或者 负面的影响。
软件风险对软件开发过程及软件产品本身可能造成 的伤害或损失。
四个过程:
- 风险识别:
- 风险评估:对概率、影响进行评估
- 风险规划:制定行动、策略减小影响
- 风险控制:
决策树:
EMV=P*outcome
类型:
成本补偿合同:成本+利润,适用于会发生重大变更的
总价合同:确定的总价,适用于明确定义需求且不会有重大变更的情况
工料合同:以上两种合同的混合型,必须为每个单位的工作量付出一定报酬

































