1. 软件项目管理概述
1.1 项目管理的知识领域
- 软件集成管理
- 软件进度管理
- 软件范围管理
- 软件成本管理
- 软件质量管理
- 软件风险管理
- 软件沟通管理
- 软件资源管理
- 软件采购管理
- 软件干系人管理
1.2 过程管理在软件项目中的重要性
软件产品不同于普通产品,它是高度逻辑化的聚合体;因此软件产品质量的好坏不受物理实体的影响,而仅仅受生产工艺的影响,生产工艺在软件开发中的术语就是软件过程,因此软件的过程管理对软件产业的发展非常重要。
软件过程管理有助于软件组织对过程资产进行有效管理,使之可以重用于实际项目中,并结合从项目中获取的过程的实际应用结果来不断的改进过程。这样软件组织能够有能力改变自身的命运,将他从维系在一个或几个个体身上变成维系在企业内部的管理上。
2. 项目确立
2.1 自造 - 购买
- 在自造 - 购买决策中,如何决定是自造还是购买?
计算自造和购买的成本差值,计算两种情况的维护费用差值,计算两个差额所造成的项目使用时长,根据时长选择较小费用方案。
- 决策的选择依据是什么?
自造 | 购买 |
---|---|
自造成本低 | 购买成本低 |
获得知识产权 | 不会自造 |
学的新技能 | 转移风险 |
有可用开发人员 | 有很好的供货商 |
核心项目工作 | 转移工作注意力 |
2.2 项目经理的职责和能力
2.2.1 能力
- 技术项目管理
- 领导力
- 战略商务管理
- 整合能力(过程层面、认知层面、背景层面)
2.2.2 职责
- 制定合理的开发计划
明确客户项目目标,并告知团队成员,然后为实现项目目标制定基本的实施计划。
- 组织实施
- 设计项目团队的组织结构图
- 对于大型项目决定哪些任务有团队完成,哪些有承包商完成
- 时时监视项目的运行
3. 软件项目范围计划——需求管理
3.1 需求变更
软件人员需要在最初的时候帮助客户深化认识、明确需求。
需求变更需要经过一系列的处理:需求提交、需求受理、需求规划分析、需求实施。
需求变更管理主要工作:
- 建立需求基线
- 确定需求变更控制过程
- 建立需求变更控制过程
- 进行需求变更影响分析
- 跟踪所有受需求变更影响的工作
- 建立需求基准版本和需求控制版本文档
- 跟踪每项需求状态,衡量需求稳定性
3.2 用户故事(必考)
- 故事标题
- 故事描述:As a …, I want to …, so that …
- 规则描述:故事的实现规则,涉及的名词定义(一条条罗列)
- 验收标准:(Given、When、Then)
- Given部分,罗列出前提条件,测试环境,测试输入以及系统状态
- When部分,则列出一些触发点或者状态转换事件
- Then部分,记录系统行为,期望的输出,或者下一个系统状态。
- 具体设计方案
- 上线检查清单
4. 任务分解
4.1 WBS工作包(必考)
4.1.1 表现形式
- 提纲式WBS
- 组织结构图式WBS
4.2 任务分解过程(必考)
- 识别和分析可交付成果及相关工作
- 确定WBS的结构和编排方法
- 逐层细化分解
- 为WBS组成部分制定和分配标识编码
- 核实可交付成果分解的程度是否恰当
4.3 分解方法
- 模板参照法
- 类比法
- 自顶向下法(最好方法)
- 自底向上法
5. 软件项目成本计划(必考)
以下均为成本估算方法。
5.1 功能点估算法
- 5类组件
外部输入、外部输出、外部查询、内部逻辑文件、外部接口文件
- 计算公式
FP(功能点) = UFC(未调整功能点计数) * TCF(技术复杂因子,调整系数)
UFC = 组件复杂度 * 功能计数项
TCF = 0.65 + 0.01 * (14个影响程度值累加求和)
计算出功能点后,根据完成每个功能点所需要的工期,进而计算项目开发成本。
5.2 用例点估算法
- 估算UAW(未调整的角色权值)
UAW = 角色数量 * 对应权值(再求和)
- 估算UUCW(未调整的用例权值)
UUCW = 用例数量 * 对应权值(再求和)
- 估算UUCP(未调整的用例点)
UUCP = UAW(角色权值) + UUCW(用例权值)
- 估算TEF
(1)估算TCF(计数复杂因子)
TCF = 0.6 + 0.1 *(每个影响等级 * 对应权值 再求和)
(2)估算ECF(环境复杂因子)
ECF = 1.4 + (-0.3)*(每个影响等级 * 对应权值 再求和)
- 估算UCP(调整后的用例点)
UCP = UUCP * TCF * ECF
- 估算工作量
Effort = UCP * PF(项目生产率)
PF默认取20,也可取28、36等多个,计算工作量所需的工期范围量。
Effort除以每周、团队总人的工作小时量得到需要多少周的时间完成。
5.3 三点估算法
5.3.1 估算值
- 最可能成本(CM)
- 最乐观成本(CO)
- 最悲观成本(CP)
5.3.2 计算公式
- 三角分布:预期成本 CE = (CM + CO + CP)/ 3
- 贝塔分布:预期成本 CE = (4CM + CO + CP)/ 6
将给的三种成本值代入公式求值即可。
5.4 专家估算法
- 第一轮,再专家们没有交流的情况下各自对软件项目给出自己的初步匿名评定。
- 第二轮,在得知其他专家的匿名评定之后,再次对该评定对象进行评估,进而得到一个合理的范围取值
5.4.1 评估步骤
每个专家根据项目给出cm、co、cp,然后按照贝塔分布求出每个专家的Ei=(4cm+co+cp)/ 6;然后将所有专家的Ei相加,除以专家的个数得出期望。
5.5 快速故事点估算法
- 在墙上写下斐波那契切数列前几个数,并加上一个 “ ? ”
- 每个人将自己手中的用户故事放到对应自己认为的故事点数上,直到放完,不确定的放到 “ ? ”
- 计算故事点数
5.6 自下而上成本估算
- 估算项目的开发规模
通过将项目功能分析,得到每个子功能所需要多少 人天 完成,统计出整个项目额开发规模(人天)。
- 计算开发成本
开发成本 = 开发规模(人天)* 人员成本(每人每天多少元) + 外包软件成本
- 计算管理成本
管理成本 = 开发成本 * 10%
- 计算直接成本
直接成本 = 管理成本 + 开发成本
- 计算间接成本
间接成本 = 直接成本 * 20%
- 计算总估算成本
总估算成本 = 直接成本 + 间接成本
6. 软件项目进度计划
6.1 关键路径法(必考)
6.1.1 如何确定关键路径
项目中,完成项目用时最短的路径为关键路径。路径最长且没有浮动的路径为关键路径。
6.1.2 关键路径的长度
将关键路径上每个任务的工期相加。
- 总浮动:一个任务在不影响项目完成的情况下,可以延长的时间
- 自由浮动:一个任务在不影响后续任务开始的情况下,可以延长的时间
6.1.3 如何计算任务的最早开始和结束时间、最晚开始和结束时间
- 正推法(求最早开始和结束时间)
从第一个人物开始,根据项目开始时间和每个任务的工期往后推。从前往后,从上往下。
- 逆推法(求最晚开始和结束时间)
从最后一个任务开始,根据每个人物的工期以及整个项目的结束时间,向前推。从后往前,从上往下。
6.2 时间压缩法(必考)
6.2.1 应急法
通过增加资源(包括人力和物力),以最小成本代价来压缩进度工期的技术。
在缩短工期时,首先计算出每个任务缩短单位工期所需的费用,根据所需要缩短的时长,在每个任务的缩短周期范围内进行缩短,优先选择费用低的。
6.2.2 进度压缩因子法
软件开发周期存在一个最短进度,该进度不可被突破。
- 压缩进度因子 = 期望进度 / 估算进度
- 压缩进度后所需工作量 = 估算工作量 / 压缩进度因子
将压缩后的工作量平均到每人身上。
6.2.3 平行作业法
通过将不同阶段的工作并行的完成。比如,项目的需求和设计,项目需求需要5天,设计需要5天,实现需要5天,那么在需求设计3天以后就开始进行项目的设计,设计完成3天以后就开始进行实现。该方法会增加项目的风险,常导致反工。
7. 软件项目质量计划
- 质量保证:审计产品和过程的质量
- 质量控制:技术审计、走查、测试、返工
7.1 用测试来保证软件管理质量是否合适
-
质量是全面质量管理
- 代码质量:开发通过单元测试保证
- 让用户参与UAT测试,保证用户体验(使用质量)
- 引入QA,保存过程环节质量
- 系统测试工程师保证系统质量满足需求
-
测试人员人员的质量保证
- 测试策略:质量是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的结合
- 用例质量:采用合适的用例方法,如何进行需求分析,用例评审
- 执行质量:如何保证执行深度(界面、关联模块、数据库、日志)与广度(系统测试类型)
- 缺陷质量:Bug评审,引入合适的Bug流程
- 过程质量:合理的软件测试流程,测试过程监控
8. 软件配置管理计划
8.1 如何实现软件配置管理
我们要需求与设计对的上,编码跟随设计走,当软件开发版本出现混乱时,需求与设计和编码对不上。出现这种问题时如何进行软件配置管理?
- 配置项标识、跟踪
- 配置管理环境搭建
- 极限变更管理
- 配置审计
- 配置状态统计
- 配置管理计划
9. 软件项目团队计划
9.1 职能型组织结构
9.1.1 特点
- 项目以部门为主题
- 一个项目可由一个或多个部门承担,一个部门也可以承担多个项目
- 项目成员有两个负责人,项目经理和部门经理
- 适用于主要由一个部门完成的项目或技术较成熟的项目
9.1.2 优缺点
优点:
①可以充分发挥职能部门的资源集中优势
②部门的专家可以同时为部门内不同项目使用
③便于相互交流 , 相互支援
④可以随时增派人员
⑤可以将项目和本部门的职能工作融为一体
缺点:
①项目和部门利益发生冲突,职能部门更重视本部门的目标,会忽视项目目标
②资源平衡会出现问题
③权利分割不利于各个职能部门的交流和团结协作
④行政隶属关系使得项目经理没有充分的权利
9.2 项目型组织结构
9.2.1 特点
- 单目标的垂直组织方式
- 一个项目一个项目组
- 一个责任人,既项目经理
- 适用于开拓型等风险比较大的项目或进度、成本、质量等指标有严格要求的项目
- 不适合人才匮乏或规模小的企业
9.2.2 优缺点
优点:
①项目经理对项目可以负全责
②项目目标单一,可以以项目为中心,有利于项目顺利进行
③避免多重领导
④组织结构简单,交流简单,快速
缺点:
①资源不能共享
②各个独立的项目处于相对封闭状态,不利于公司政策的贯彻
③对项目组织的成员缺少一种事业上的连续性和安全感
④项目组织之间处于分割状态,缺少信息交流
9.3 矩阵型组织结构
9.3.1 特点
- 职能型组织结构和项目型组织结构的混合体
- 从不同的部门中选择合适的人员组成项目组
- 一个责任人,既项目经理;项目经理与职能经理之间建立友好的工作关系;项目成员需向不同经理汇报工作
- 适用于管理规范、分工明确的公司或跨职能部门的项目
9.3.2 优缺点
优点:
①专职的项目经理负责整个项目,以项目为中心
②公司的多个项目可以共享各个职能部门的资源
③即利于项目目标的实现,又利于公司目标方针的贯彻
④项目成员的顾虑减少了
缺点:
①容易引起职能经理和项目经理权力的冲突
②资源共享也能引起项目之间的冲突
9.4 项目沟通计划
9.4.1 沟通方式
-
书面沟通和口头沟通
-
语言沟通和非语言沟通
-
正式沟通和非正式沟通
-
单向沟通和双向沟通
-
网络沟通
9.4.2 沟通渠道
项目成员越多,沟通渠道就越多,管理就越复杂。可以用项目组织结构图展示项目团队成员及其报告关系,以减少沟通渠道,从而提高效率。
9.4.3 编制沟通计划
沟通计划是确定谁需要信息,需要什么信息,何时需要信息,以及如何将信息分发给他们。
9.5 敏捷项目团队管理
9.5.1 仆人式管理
是通过对团队服务来领导团队的实践,注重理解和关注团队成员的需要和发展,旨在使团队尽可能达到最高绩效。
9.5.2 敏捷的角色
- 产品负责人
- Scrum主管
- 开发人员
10. 软件项目风险计划
10.1 风险识别
给一个案例,你分析下会遇到什么风险?出现这些风险后如何解决?
10.2 风险应对策略
(1)回避风险
(2)转移风险
(3)损失控制
(4)自留风险
10.3 决策树分析
根据不同方案绘制决策树,列出每种方案的概率、回报,并计算出每个方案的EMV,对不同方案的EMV值进行比较,选取最有益的方案。
11. 软件项目合同计划
11.1 合同计划
甲方一直拖着不给钱让你给他该需求,那就时合同没约定好,未指明何时打钱。
9.4.3 编制沟通计划
沟通计划是确定谁需要信息,需要什么信息,何时需要信息,以及如何将信息分发给他们。
9.5 敏捷项目团队管理
9.5.1 仆人式管理
是通过对团队服务来领导团队的实践,注重理解和关注团队成员的需要和发展,旨在使团队尽可能达到最高绩效。
9.5.2 敏捷的角色
- 产品负责人
- Scrum主管
- 开发人员
10. 软件项目风险计划
10.1 风险识别
给一个案例,你分析下会遇到什么风险?出现这些风险后如何解决?
[外链图片转存中…(img-vOA3PHI5-1623757303382)]
10.2 风险应对策略
(1)回避风险
(2)转移风险
(3)损失控制
(4)自留风险
10.3 决策树分析
根据不同方案绘制决策树,列出每种方案的概率、回报,并计算出每个方案的EMV,对不同方案的EMV值进行比较,选取最有益的方案。
11. 软件项目合同计划
11.1 合同计划
甲方一直拖着不给钱让你给他该需求,那就时合同没约定好,未指明何时打钱。