Scrum敏捷研发流程分享&培训
2025-06-09 16:15:51 9 举报
AI智能生成
Scrum敏捷研发流程分享&培训
作者其他创作
大纲/内容
软件生命周期模型
瀑布
特点
从无到有的将软件的制作过程工程化、流程化、标准化
将软件研发划分为多个阶段,按顺序开展各个阶段的工作
每个阶段都有详细的准入/准出条件,指导各个阶段的开始和完成
可对研发成本作出相对准确的预估
缺点
前一个阶段完成前,后一个阶段在资源闲置
前期工作存在错误,会在后续工作中出现错误的放大效应
无法有效的应对变更风险,当出现变更时,研发成本可能会大幅上升
客户只能在研发工作全部完成后,才能看到系统功能,无法早期得到用户反馈
增量
特点
将瀑布模型中的完整需求拆分成多个增量/模块需求进行增量开发
每个增量具备独立的分析、设计、开发、测试,然后与已有部分进行集成
相比瀑布模型提高了项目成功率、降低项目延期率
相比瀑布模型,各个环节的资源的利用率显著提高,甚至可以多个增量/模块并行开发
相比瀑布模型,提高了一定的应对变更风险的能力
缺点
需要“系统架构师”角色,承担将完整需求合理的拆成多个增量需求的重要工作
人才要求高
犯错成本高
沉默成本高
相对瀑布模型,每次增量开发工作完成需进行集成回归测试,测试工作量增加
相对瀑布模型,应对变更的能力依然有限,尤其涉及架构方面的变更,成本甚至更大
相对瀑布模型,系统的交付时间依旧是需要研发工作全部完成之后,无法早期得到用户反馈
迭代
RUP
(每行工作内容的彩色块是不同阶段工作量分布)
(每行工作内容的彩色块是不同阶段工作量分布)
特点
将研发过程划分为多个阶段,每个阶段由一个或多个独立的瀑布模型组成
每个阶段内的一个小的瀑布研发过程成为一个“迭代”,包含需求、分析设计、编码、测试、部署等
每个阶段结束都会提供一个可演示用的“半成品”系统给客户体验试用,获取用户反馈
相对瀑布模型,客户定期参与阶段性研发成果的评估,应对变更风险的能力显著提高
相对瀑布模型,迭代模型的适用性更广,不只适合纯软件研发,也可用于软硬件结合的产品研发,如数码、汽车等
缺点
阶段内部依然是瀑布模型,前一个环节工作完成前,后一个环节的资源依然存在闲置
随着市场和用户对软件质量的要求越来越高,类瀑布模型的软件质量问题逐步凸显——测试介入晚、修复成本高、测试不充分
相对瀑布模型,研发过程管理复杂度更高,对管理者的管理能力要求高,可能需要独立的管理人员
敏捷
Scrum
软件开发中Scrum框架的起源
敏捷思维深受日本产业最佳实践的影响,尤其是丰田和本田推出的精益原则,以及竹内博之和野上裕次郎开发的知识管理策略。
受上述思想和全球软件项目研究的影响,Jeff Sutherland于1993年首次在Easel为软件开发行业定义了Scrum流程并开始实施。
受上述思想和全球软件项目研究的影响,Jeff Sutherland于1993年首次在Easel为软件开发行业定义了Scrum流程并开始实施。
- 1986年 – Takeuchi&Nonaka在哈佛商业评论中创造了Scrum产品开发
- 1993年 – Jeff Sutherland首次使用Scrum进行软件开发。
- 1995年 – Jeff Sutherland和Ken Schwaber对Scrum框架进行了标准化,并在OOPSLA 95上公布。
- 2001年 – 发布了敏捷宣言和原则,并建立了敏捷联盟。Scrum是一种敏捷方法。
- 2002年 – Ken Schwaber和Mike Beedle推出了第一本Scrum书籍Scrum Agile Software Development。
- 2002年 – Ken Schwaber和Mike Cohn共同创立了Scrum联盟。
补充:精益、敏捷、Scrum、XP关系
(不要误解成敏捷Agile是精益Lean的一个子集 或 Scrum是敏捷Agile的一个子集)
此图的四个层级是“适用范围”大小的区别:
此图的四个层级是“适用范围”大小的区别:
- 精益Lean方法涵盖的范围要广泛得多,“将工作限制在能力范围内”和“持续流程改进”等原则几乎适用于任何环境。
- 敏捷是更高层次——只是一堆价值观和原则,根本没有实践。
- Scrum介于两者之间——不限于软件开发,但要求使用时间盒事件(Sprint/迭代/冲刺)和产品待办事项列表。
- XP更具体,仅限于软件开发中的工程最佳实践领域。
特点
在一个时间周期内(时间盒),完成一批需求的研发工作,即迭代/冲刺/sprint
每个迭代的产出是一个完整的潜在可交付的系统产品
不同于传统模型的几个新概念
Sprint 冲刺,即“迭代”
ProductBacklog 产品待办列表,即“需求池”
SprintBacklog 冲刺待办列表,即“迭代需求”
Story 用户故事,即用户视角的“需求”
Epic 史诗,即“大型用户故事”,可以分解为许多小故事
Task 任务,即“任务”,任务更具技术性,往往由一个人完成
轻文档(不是没有文档!),just enough——“刚好够”
从组织方式上解决了瀑布模型存在的资源闲置问题,各个环节全角色及时沟通反馈,应对变更风险能力极强
缺点
需要全员参与,团队里的每个人都需要理解敏捷研发
培训
流程管理规范
需要培养Scrum Master
TL/资深兼任
独立SM
需要专业的敏捷项目管理工具支持
缺少有效工具支持,效率低且容易混乱
推荐Jira,但需培养Jira后台管理员
回归测试将成为一项挑战,自动化测试是必要的
敏捷的精髓
试错
一个字:快!
快速发布
CI/CD
快速感知
热部署、灰度发布、监控、异常处理(自动回滚……)
快速修复
快速优化
有错就改
敏捷是一种态度,试错是一种信仰。
沟通
如何沟通?
沟通级别
工具&流程
消息/邮件
电话/语音/视频
面谈
正式会议
及时沟通
<8H
发现问题
解决方案
计划
执行
检查
PDCA
Plan
Do
Check
Action
好的沟通?
Talk is cheap. Show me the code.
流程管理
研发流程
节奏
例:Intel公司的Tick-Tock模式
周一到周五?
连续工作5天,效率越来越低,最后一天发布,风险放大
周末利用不上
休息、松弛有度
缓冲、突击、冲刺,而非“救火”
迭代周期为1周?
高度成熟的研发团队
迭代周期4→3→2→1
可靠且高效的发布控制
定期发布→每日发布→随时发布
快速试错
DevOps、CI/CD
手工→自动化→容器化→容器自动化
麻雀虽小
需求/设计/用例的评审
需求变更控制
缺陷跟踪
通过成功的敏捷开发实践逐步提高效率至1周一个迭代,而非“拍脑袋”决定1周一个迭代
非敏捷
流程缺失
过程混乱
质量不可控
“埋雷”
人员情绪
团队关系
无限“救火”
恶性循环
迭代周期2周+多个发布窗口
流程图
敏捷研发流程总图
甘特图
【按阶段】
【按角色】
注:
1、原则上,排期计划里的最后发布日前2天不给开发排新任务,专注debug和准备发布相关工作;
(即便bug较少也不可随意插入新需求,不允许任意打乱排期计划,开发可用于安排自研任务)
2、回归测试是敏捷开发的一个重要工作内容,发布日前1~2天是迭代回归测试的执行时间;
(敏捷的一大挑战就是如何在快速的迭代研发工作中确保质量可控,回归测试是重中之重!)
3、发布日当天仍处于测试中的需求,无法合并dev/master分支进行需求验收,取消上线;
(不满足发布条件的需求就不要强行进行发布,敏捷开发是要“快”,而不是“乱”和“错”)
4、提测比预期计划延期2天以上的需求,无论能否按期上线,均记为迭代任务失败的需求;
(2周10天一个迭代,提测延期2天,已超过20%,无论是否最终按期上线,任务本身已是失败)
1、原则上,排期计划里的最后发布日前2天不给开发排新任务,专注debug和准备发布相关工作;
(即便bug较少也不可随意插入新需求,不允许任意打乱排期计划,开发可用于安排自研任务)
2、回归测试是敏捷开发的一个重要工作内容,发布日前1~2天是迭代回归测试的执行时间;
(敏捷的一大挑战就是如何在快速的迭代研发工作中确保质量可控,回归测试是重中之重!)
3、发布日当天仍处于测试中的需求,无法合并dev/master分支进行需求验收,取消上线;
(不满足发布条件的需求就不要强行进行发布,敏捷开发是要“快”,而不是“乱”和“错”)
4、提测比预期计划延期2天以上的需求,无论能否按期上线,均记为迭代任务失败的需求;
(2周10天一个迭代,提测延期2天,已超过20%,无论是否最终按期上线,任务本身已是失败)
迭代周期
开始标志:【第0周】的【周三】迭代会完成
结束标志:【第2周】的【周二】发布验证通过
发布窗口
窗口期
周二:20点-24点
周四:20点-24点
发布窗口期内
(支持试错的业务)不限制发布次数、回滚次数
“零容忍”的24*7业务功能,限制回滚(避免数据异常)
非发布窗口期
发布需要邮件大领导审批
每次发布/回滚操作都需要审批
优势
有助于产品-开发-测试形成共同的发布目标
给予研发团队在发布阶段的自由度,可提高效率
节奏:松→紧→松→紧
启动阶段:松
准备阶段:紧
冲刺阶段:松
(不被打扰的)专注干活的过程是“松”
发布阶段:紧
两个周末
第一个周末:排期公示的缓冲
智者千虑必有一失,排期计划不能是“一锤子买卖”
第二个周末:发布之前的缓冲
进度符合预期,休息放松,为接下来的发布工作养精蓄锐
若进度不理想,可用于加班突击,或用于应对意外情况
【※】发布之前的“突击”,与发布之后的“救火”,有着本质的不同
回归测试
最终发布日+前1~2天
全业务线主流程+需求周边影响
窗口发布日
需求周边影响
非发布日
自动化回归测试
赋能:任何人都可便捷的执行自动化测试,而非只有测试能执行
工作量预估与排期
开发
工作量
需求实现
自测
前后端联调
数据联调
排期
开发任务串行
即同一时刻只有一个开发中的任务
debug与开发任务并行
为避免多个需求debug并行,bug级别与debug时间做约束
开发完成日≠提测日,提测日是需求完整进入测试阶段的日期
避免开发与测试因不同立场对“提测”一词的理解偏差,导致“丢失”1天测试时间
例:若6月1日上午12点完成开发自测&联调,提测日应该填6月2日,而不是6月1日
测试
工作量
(冒烟测试)
验证开发自测质量,不通过则打回,通过则进入第一轮测试
一般冒烟测试工作量不会超过1个小时
第一轮测试
测试用例全部执行一次的时间
需求分支
估算测试工作量的主要依据
第二轮测试
验证发现的所有bug的修复情况
需求分支
无法估算工作量,若bug较少可跳过
回归测试
回归主流程和本次需求的冒烟测试
合并dev/master分支
估算测试工作量的次要依据
排期
第一轮测试串行
即同一时刻只有一个需求处于第一轮测试
第二轮测试并行
为避免多个二轮测试并行,bug级别与debug时间需要做约束
回归测试合并+并行
相关联的需求的回归测试合并执行,与其他需求第一/二轮测试并行
测试结束日期,可基于需求复杂度设定不同系数进行计算:预估工作量=一轮测试工作量*系数+回归测试工作量
产品
工作量
测试环境需求验收
不可在需求分支上进行验收
预发环境需求验证
生产环境业务验收
排期
每日站会同步进度进行校正
人性
人都是懒惰的!
不要假设(或想当然的认为)员工能够积极主动,设计流程要避免主观臆想
操作越简化,执行效果越好
能点一次按钮实现,就不要点两次
能自动流转,就不要手动修改经办人
能自动计算工作量,就不要手工计算
流程逻辑越简单,落地越快
利用人性,顺应人性
质量监控
评审
静态测试/文档测试
开发自测
前后端联调
冒烟测试
“提测&打回”机制
正式测试
第一轮测试
第二轮测试
两轮测试bug不能收敛的需求取消发布计划
回归测试
验收测试
发布测试
需求&变更管理
会议管理
时间
<2H
无效
无主题
无准备
无结论
评审管理
内审
“家丑不可外扬”
互相学习,共同进步
统一风格,提高内/外合作效率
管理者的权力与价值
外审
分支管理
需求分支
单个需求或相关联的几个需求
第一/二轮测试
迭代分支
需求分支测试通过
回归测试
master分支
确定上生产的需求
迭代回归测试
缺陷管理
优先级
致命级
系统崩溃且无法恢复
修复响应时间<1小时
严重级
模块崩溃,或阻塞后续测试执行
修复响应时间<4小时
普通级
(一般的)独立功能失效
修复响应时间<8小时
轻微级
UI排版、文本等不影响功能的错误
修复响应时间<16小时
建议级
非缺陷,如易用性建议
生命周期
新建
打开
修复中
修复完成
重新打开
关闭
发布流程
窗口
利于团队形成统一目标
有助于增加团队凝聚力
产品
管理工具
宁缺毋滥
易用
操作简单
学习容易
高效
直观
可靠
权限
如工作流按钮可见性,不给成员误操作的机会
自定义
工作流
字段
界面
自动化
事件
……
Jira
实操演示
0 条评论
下一页