各行业项目管理指南 · IT、软件与数字化
软件项目管理:生命周期、角色、方法与 KPI
软件项目管理是对软件产品和功能的规划、协调和交付,涵盖从探索和需求,经过设计、开发、测试和发布,直至持续改进的全过程。由于软件易于修改却难以估算,大多数软件团队以短迭代方式管理工作,并以可运行的软件而不是文档来衡量进展。
要点总结
- 由于需求不断演变且估算具有不确定性,软件项目管理采用短迭代方式。
- 根据工作性质而非习惯来选择 Scrum、Kanban、DevOps 或计划驱动的方法。
- 用 DORA 指标和流动指标跟踪交付,用成果指标衡量成功。
- 代码层面的工作使用开发者问题跟踪工具,跨职能规划则使用 Wrike 等平台。
软件项目管理的独特之处
- 需求不断演变。 用户往往只有在看到可运行的东西之后,才知道自己想要什么。
- 估算具有不确定性。 很多工作都是解决新问题,因此团队使用区间和历史吞吐量来预测,而不是固定日期。
- 交付可以是持续的。 借助自动化测试和部署,团队每周可以发布多次。
- 技术债。 为赶工期而采取的捷径,如果不偿还,就会拖慢未来的工作;参见 Scrum 中的技术债.
- 质量内建。 代码评审、自动化测试和监控取代了项目末期的大规模测试阶段。
- 产品与项目相互重叠。 许多软件团队是长期存在的产品团队,因此“项目”往往是一次发布、一组功能或一款新产品。
要大致了解团队如何在代码中应用敏捷价值观,请参阅 敏捷软件开发.
软件开发生命周期(SDLC)
| 阶段 | 主要工作 | 关键输出 |
|---|---|---|
| 探索 | 了解用户、问题和目标;通过研究和原型验证想法 | 问题陈述、产品愿景、早期原型 |
| 规划 | 塑造范围、对待办事项列表排序、规划发布和产能 | 产品待办事项列表, 发布计划, 路线图 |
| 设计 | UX 设计、架构和技术方案 | 设计、架构决策、验收标准 |
| 开发 | 以小增量编写代码,并进行评审和自动化测试 | 可运行且经过测试的增量 |
| 测试与质量保证 | 自动化测试、探索性测试、性能测试和安全测试 | 测试结果、已解决的缺陷 |
| 发布与部署 | 部署到生产环境,通常通过 持续交付 流水线 | 已发布的功能、发布说明 |
| 运行与改进 | 监控、支持用户、衡量成果,并将所学反馈到待办事项列表中 | 指标、事件、新的待办事项 |
在敏捷团队中,这些阶段在每次迭代内持续进行,而不是按顺序只进行一次;参见 敏捷开发生命周期.
关键角色
| 角色 | 主要职责 |
|---|---|
| 产品负责人 / 产品经理 | 负责产品愿景,并按价值对待办事项列表排序;参见 Scrum 产品负责人 |
| 工程经理 | 领导工程师,负责招聘、成长和交付实践 |
| 技术负责人 / 架构师 | 负责技术方向和质量 |
| 开发人员 | 设计、构建和测试软件 |
| QA / 测试工程师 | 测试策略、自动化测试和探索性测试 |
| UX / 产品设计师 | 用户研究和界面设计 |
| Scrum Master 或交付负责人 | 引导流程并消除障碍;参见 Scrum Master 角色 |
| 技术项目经理或项目群经理 | 协调跨团队的依赖关系、时间表和风险;参见 技术项目经理 |
| DevOps / SRE | 构建流水线、基础设施和可靠性 |
软件项目的方法论
| 方法 | 适用场景 | 说明 |
|---|---|---|
| Scrum | 构建新功能并定期获取相关方反馈的产品团队 | 固定长度的冲刺,包含计划、评审和回顾 |
| Kanban | 维护、平台和支持团队;持续流动 | 以 WIP 限制和流动指标代替冲刺 |
| 极限编程(XP) | 希望拥有严格工程纪律的团队 | 结对编程、测试驱动开发、持续集成 |
| DevOps | 自行构建并运行服务的团队 | 实现交付自动化,并共同承担运维职责 |
| 瀑布 或 V 模型 | 固定范围的合同以及受监管或安全关键型软件 | 正式的阶段、文档和验证 |
| 规模化框架 | 多个团队开发同一产品 | 请参阅 SAFe 和 LeSS |
比较各种选项,请参阅 敏捷与瀑布 和 Kanban 与 Scrum.
必备文档与模板
| 文档 | 目的 | 模板 |
|---|---|---|
| 产品待办事项列表 | 产品可能需要的所有内容的有序列表 | 产品待办事项列表模板 |
| 用户故事 | 从用户视角编写的需求 | 用户故事模板 |
| 冲刺计划 | 冲刺目标和选定的工作 | 冲刺计划模板 |
| 发布计划和路线图 | 在宏观层面说明何时交付什么 | 发布计划模板, 产品路线图模板 |
| 需求文档 | 适用于固定范围或合同工作 | 业务需求文档模板 |
| 回顾会记录 | 团队商定的改进措施 | 冲刺回顾会模板 |
| RAID 日志 | 跨团队风险和依赖关系 | RAID 日志模板 |
同时维护架构决策记录和完成的定义;参见 完成的定义.
软件项目管理的 KPI
| KPI | 衡量内容 | 典型应用 |
|---|---|---|
| 部署频率 | 代码进入生产环境的频率 | 交付能力(DORA 指标) |
| 变更前置时间 | 从提交代码到进入生产环境的时间 | 流动速度(DORA 指标) |
| 变更失败率 | 导致故障的部署所占比例 | 发布质量(DORA 指标) |
| 服务恢复时间 | 故障修复的速度 | 韧性(DORA 指标) |
| 周期时间 | 从工作开始到完成的时间 | 预测和发现瓶颈 |
| 吞吐量 或 速度 | 每周或每个冲刺完成的工作量 | 发布预测 |
| 逃逸缺陷 | 发布后发现的缺陷 | 测试的有效性 |
| 成果指标 | 采用率、转化率、留存率或任务成功率 | 软件是否创造了价值 |
请参阅 敏捷指标与 KPI 指南。
常见挑战
- 日期和范围都固定。 固定日期、灵活调整范围,并根据过去的吞吐量以区间形式进行预测。
- 技术债不断累积。 每个冲刺都为重构和平台工作预留产能。
- 跨团队依赖关系。 将其清晰地标示出来,围绕共同的里程碑保持一致,并使用 Scrum of Scrums 或类似的同步会议。
- 在制品过多。 应用 WIP 限制 ,先完成再开始新工作。
- 衡量产出而非成果。 将发布与用户和业务目标挂钩,而不仅仅是故事点。
软件项目管理软件
开发团队需要一个与代码仓库和 CI/CD 流水线相连的问题跟踪工具,以及看板、待办事项列表和冲刺报告。产品经理和交付经理还需要路线图、跨团队依赖关系视图以及非工程人员也能看懂的报告。
Jira 被工程团队广泛用于问题跟踪。 Wrike 是 我们的工具排名 ,适用于软件工作需要与营销、支持、设计及其他部门一起规划的情况,可在同一处使用敏捷看板和甘特视图。另请参阅 Scrum 软件工具.
本主题的免费模板
常见问题
什么是软件项目管理?
软件项目管理是对软件产品和功能进行规划、协调和交付,涵盖从探索、开发、测试和发布直至持续改进的全过程。
软件项目管理有哪些阶段?
SDLC 的阶段包括探索、规划、设计、开发、测试、发布以及运行与改进,通常以短迭代方式重复进行。
哪种方法论最适合软件项目管理?
Scrum 适合功能团队,Kanban 适合持续流动和支持工作,DevOps 实践适合自行运行服务的团队,瀑布式或 V 模型适合固定范围或受监管的工作。
软件项目管理中的 DORA 指标是什么?
来自 DevOps 研究与评估(DORA)项目的四项交付指标:部署频率、变更前置时间、变更失败率和服务恢复时间。
在敏捷团队中,谁负责软件项目管理?
职责是共同承担的:产品负责人管理优先级,团队规划自己的工作,Scrum Master 负责引导,技术项目经理可能负责跨团队协调。
在软件项目管理中如何进行估算?
使用相对估算,例如 故事点 ,或根据历史吞吐量和周期时间进行预测,并以区间形式表示日期。
软件项目管理使用哪些文件?
产品待办事项列表、用户故事、冲刺计划、发布计划、路线图、完成的定义,以及(针对合同工作的)需求文档。
软件项目管理使用哪些软件?
与代码仓库相连的 Jira 等问题跟踪工具,以及在软件工作需要与其他部门一起规划时使用的 Wrike 等平台。
在软件项目管理中如何处理技术债?
使其在待办事项列表中可见,在每次迭代中预留产能来偿还,并将其纳入与产品负责人的规划讨论中。
软件项目管理与产品管理有什么区别?
产品管理决定构建什么以及为什么构建;软件项目管理则关注如何交付以及何时交付。
软件项目管理需要哪些技能?
了解开发流程、敏捷实践、风险和依赖关系管理、与技术和业务相关方的沟通,以及基于数据的预测。