内容大纲
- 1. 敏捷开发概述
- 2. Scrum框架实践
- 3. 用户故事管理
- 4. Sprint迭代管理
- 5. 每日站会实践
- 6. 回顾会议实践
- 7. 持续集成实践
- 8. 测试驱动开发
- 9. 敏捷开发工具
- 10. 最佳实践
1. 敏捷开发概述
敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法。它强调快速响应变化、持续交付价值、团队协作和客户满意度。敏捷开发通过短周期的迭代开发,快速交付可工作的软件,并根据反馈不断调整和改进。
敏捷开发的核心价值观包括:
- 个体和互动高于流程和工具
- 可工作的软件高于详尽的文档
- 客户合作高于合同谈判
- 响应变化高于遵循计划
更多学习教程www.fgedu.net.cn
2. Scrum框架实践
2.1 Scrum角色定义
$ cat > /usr/local/bin/scrum_roles_setup.sh << 'EOF' #!/bin/bash echo "配置Scrum角色..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建Scrum角色文档 cat > $PROJECT_DIR/docs/agile/scrum_roles.md << 'ROLES' # Scrum角色定义 ## 1. 产品负责人(Product Owner) ### 职责 - 定义产品愿景和目标 - 管理产品待办列表(Product Backlog) - 确定需求优先级 - 验收交付成果 - 与干系人沟通 ### 权限 - 决定产品功能和优先级 - 接受或拒绝工作成果 - 决定发布时间和内容 ### 要求 - 深刻理解业务需求 - 良好的沟通能力 - 决策能力 - 产品规划能力 ## 2. Scrum Master ### 职责 - 促进Scrum实践 - 移除团队障碍 - 保护团队免受干扰 - 组织Scrum会议 - 培训团队Scrum知识 ### 权限 - 引导Scrum流程 - 协调团队协作 - 解决团队冲突 - 改进团队效率 ### 要求 - 精通Scrum框架 - 良好的引导能力 - 问题解决能力 - 团队服务意识 ## 3. 开发团队(Development Team) ### 职责 - 交付可工作的软件增量 - 自组织工作 - 估算工作量和复杂度 - 确保产品质量 - 持续改进 ### 权限 - 决定如何完成工作 - 决定团队成员构成 - 决定工作分配 - 决定技术方案 ### 要求 - 跨职能技能 - 自组织能力 - 团队协作精神 - 持续学习能力 ROLES # 2. 创建团队章程 cat > $PROJECT_DIR/docs/agile/team_charter.md << 'CHARTER' # 团队章程 ## 1. 团队愿景 打造一个高效、协作、创新的敏捷开发团队,持续交付高质量的软件产品。 ## 2. 团队价值观 - 尊重:尊重每个人的观点和贡献 - 勇气:勇于承担责任,勇于挑战困难 - 承诺:对团队目标做出承诺并努力实现 - 开放:开放沟通,透明工作 - 专注:专注于当前Sprint目标 ## 3. 工作协议 ### 3.1 工作时间 - 核心工作时间:9:00-18:00 - 每日站会时间:10:00-10:15 - 代码审查时间:每天下午 ### 3.2 沟通方式 - 即时通讯:企业微信 - 邮件:正式沟通 - 面对面:紧急问题 - 文档:Confluence ### 3.3 决策方式 - 技术决策:团队讨论,技术负责人决定 - 产品决策:产品负责人决定 - 流程决策:团队讨论,Scrum Master引导 ## 4. 团队规范 ### 4.1 编码规范 - 遵循阿里巴巴Java开发手册 - 代码必须通过静态检查 - 代码必须有单元测试 - 代码必须经过审查 ### 4.2 提交规范 - feat:新功能 - fix:Bug修复 - docs:文档更新 - style:代码格式 - refactor:重构 - test:测试 - chore:构建/工具 ### 4.3 会议规范 - 准时参加会议 - 会议前做好准备 - 会议中积极参与 - 会议后执行决议 CHARTER echo "Scrum角色配置完成" EOF $ chmod +x /usr/local/bin/scrum_roles_setup.sh
配置Scrum角色…
Scrum角色配置完成
2.2 Scrum事件实践
$ cat > /usr/local/bin/scrum_events_setup.sh << 'EOF' #!/bin/bash echo "配置Scrum事件..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建Sprint计划会议模板 cat > $PROJECT_DIR/docs/agile/sprint_planning_template.md << 'PLANNING' # Sprint计划会议模板 **会议时间:** YYYY-MM-DD HH:MM **会议时长:** 2-4小时 **参与人员:** 产品负责人、Scrum Master、开发团队 ## 1. 会议目标 - 确定Sprint目标 - 选择产品待办列表项 - 制定Sprint待办列表 - 估算任务工作量 ## 2. 会议议程 ### 2.1 产品负责人介绍(30分钟) - Sprint目标说明 - 优先级最高的待办项 - 验收标准说明 - 回答团队问题 ### 2.2 团队讨论和估算(60分钟) - 讨论需求细节 - 识别技术风险 - 估算故事点 - 确认团队能力 ### 2.3 制定计划(60分钟) - 选择待办项 - 分解任务 - 分配任务 - 确认Sprint待办列表 ## 3. 会议输出 - Sprint目标 - Sprint待办列表 - 任务分配 - 风险识别 ## 4. Sprint目标示例 本Sprint目标是完成用户注册登录功能,包括: - 用户注册功能 - 用户登录功能 - 密码找回功能 - 用户信息管理功能 ## 5. Sprint待办列表示例 | 编号 | 用户故事 | 故事点 | 负责人 | 状态 | |------|----------|--------|--------|------| | US-001 | 用户注册 | 5 | 风哥1号 | 待办 | | US-002 | 用户登录 | 3 | 风哥2号 | 待办 | | US-003 | 密码找回 | 3 | 王五 | 待办 | | US-004 | 用户信息管理 | 5 | 赵六 | 待办 | PLANNING # 2. 创建Sprint评审会议模板 cat > $PROJECT_DIR/docs/agile/sprint_review_template.md << 'REVIEW' # Sprint评审会议模板 **会议时间:** YYYY-MM-DD HH:MM **会议时长:** 1-2小时 **参与人员:** 产品负责人、Scrum Master、开发团队、干系人 ## 1. 会议目标 - 展示Sprint成果 - 收集反馈意见 - 更新产品待办列表 - 调整发布计划 ## 2. 会议议程 ### 2.1 Sprint回顾(15分钟) - Sprint目标回顾 - 完成情况说明 - 团队工作量统计 ### 2.2 产品演示(45分钟) - 演示完成的功能 - 演示操作流程 - 回答干系人问题 ### 2.3 反馈收集(30分钟) - 收集干系人反馈 - 讨论改进建议 - 确认下一步计划 ## 3. 会议输出 - Sprint演示记录 - 干系人反馈 - 产品待办列表更新 - 发布计划调整 ## 4. Sprint成果示例 ### 4.1 完成的功能 - 用户注册功能:支持手机号和邮箱注册 - 用户登录功能:支持账号密码和验证码登录 - 密码找回功能:支持邮箱和手机号找回 - 用户信息管理:支持修改个人信息和头像 ### 4.2 演示场景 1. 演示用户注册流程 2. 演示用户登录流程 3. 演示密码找回流程 4. 演示用户信息修改 ### 4.3 干系人反馈 - 反馈1:注册流程可以简化 - 反馈2:登录界面需要优化 - 反馈3:增加第三方登录功能 REVIEW # 3. 创建Sprint回顾会议模板 cat > $PROJECT_DIR/docs/agile/sprint_retrospective_template.md << 'RETROSPECTIVE' # Sprint回顾会议模板 **会议时间:** YYYY-MM-DD HH:MM **会议时长:** 1-1.5小时 **参与人员:** Scrum Master、开发团队 ## 1. 会议目标 - 回顾Sprint过程 - 识别改进点 - 制定改进计划 - 提升团队能力 ## 2. 会议议程 ### 2.1 数据收集(20分钟) - Sprint数据回顾 - 完成情况统计 - 问题收集 ### 2.2 分析讨论(30分钟) - 做得好的地方(Keep) - 需要改进的地方(Problem) - 尝试的方法(Try) ### 2.3 制定计划(20分钟) - 选择改进项 - 制定行动计划 - 分配责任人 ## 3. 会议输出 - Sprint回顾记录 - 改进项清单 - 行动计划 ## 4. 回顾内容示例 ### 4.1 做得好的地方(Keep) - 每日站会准时开始 - 代码审查及时完成 - 团队协作良好 - 技术分享积极 ### 4.2 需要改进的地方(Problem) - 需求变更频繁 - 测试环境不稳定 - 文档更新不及时 - 跨团队沟通不足 ### 4.3 尝试的方法(Try) - 建立需求变更流程 - 优化测试环境 - 自动化文档生成 - 定期跨团队沟通 ## 5. 改进计划示例 | 改进项 | 行动计划 | 负责人 | 完成时间 | |--------|----------|--------|----------| | 需求变更频繁 | 建立变更控制流程 | 产品负责人 | 下Sprint | | 测试环境不稳定 | 优化环境配置 | 运维团队 | 下Sprint | | 文档更新不及时 | 自动化文档生成 | 开发团队 | 下Sprint | RETROSPECTIVE echo "Scrum事件配置完成" EOF $ chmod +x /usr/local/bin/scrum_events_setup.sh
配置Scrum事件…
Scrum事件配置完成
学习交流加群风哥微信: itpux-com
3. 用户故事管理
3.1 用户故事编写
$ cat > /usr/local/bin/user_story_management.sh << 'EOF' #!/bin/bash echo "配置用户故事管理..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建用户故事模板 cat > $PROJECT_DIR/docs/agile/user_story_template.md << 'STORY' # 用户故事模板 ## 1. 用户故事格式 作为 <角色>
我想要 <功能>
以便于 <价值>
## 2. 用户故事示例
### 故事1:用户注册
**作为** 新用户
**我想要** 通过手机号或邮箱注册账号
**以便于** 能够使用系统的所有功能
**验收标准:**
– 支持手机号注册
– 支持邮箱注册
– 密码强度验证
– 手机号/邮箱验证
– 注册成功后自动登录
**故事点:** 5
### 故事2:用户登录
**作为** 已注册用户
**我想要** 通过账号密码登录系统
**以便于** 访问我的个人信息和课程
**验收标准:**
– 支持账号密码登录
– 支持手机验证码登录
– 支持记住密码
– 登录失败提示
– 登录成功跳转
**故事点:** 3
### 故事3:课程浏览
**作为** 普通用户
**我想要** 浏览所有课程列表
**以便于** 找到我感兴趣的课程
**验收标准:**
– 显示课程列表
– 支持分类筛选
– 支持关键词搜索
– 支持排序功能
– 显示课程详情
**故事点:** 8
## 3. 用户故事优先级
– 高优先级:核心功能,必须完成
– 中优先级:重要功能,应该完成
– 低优先级:辅助功能,可以完成
## 4. 用户故事估算
### 4.1 故事点定义
– 1点:非常简单,1-2小时完成
– 2点:简单,半天完成
– 3点:中等,1天完成
– 5点:复杂,2-3天完成
– 8点:非常复杂,1周完成
– 13点:极复杂,需要拆分
### 4.2 估算方法
– 规划扑克
– 专家判断
– 类比估算
STORY
# 2. 创建产品待办列表
cat > $PROJECT_DIR/docs/agile/product_backlog.csv << 'BACKLOG'
编号,用户故事,优先级,故事点,状态,负责人
US-001,用户注册,高,5,已完成,风哥1号
US-002,用户登录,高,3,已完成,风哥2号
US-003,密码找回,中,3,进行中,王五
US-004,用户信息管理,中,5,待办,赵六
US-005,课程浏览,高,8,待办,风哥1号
US-006,课程详情,高,5,待办,风哥2号
US-007,课程购买,高,8,待办,王五
US-008,订单管理,中,5,待办,赵六
US-009,支付功能,高,8,待办,风哥1号
US-010,视频播放,高,5,待办,风哥2号
BACKLOG
# 3. 创建验收标准检查清单
cat > $PROJECT_DIR/docs/agile/acceptance_criteria_checklist.md << 'CHECKLIST'
# 验收标准检查清单
## 1. 功能完整性
- [ ] 所有功能都已实现
- [ ] 功能符合需求描述
- [ ] 功能操作流程正确
- [ ] 功能边界条件处理
## 2. 用户界面
- [ ] 界面设计符合规范
- [ ] 界面布局合理
- [ ] 界面响应及时
- [ ] 界面兼容性良好
## 3. 数据验证
- [ ] 输入数据验证
- [ ] 数据格式正确
- [ ] 数据范围合理
- [ ] 数据完整性保证
## 4. 错误处理
- [ ] 错误提示清晰
- [ ] 错误处理合理
- [ ] 异常情况处理
- [ ] 错误日志记录
## 5. 性能要求
- [ ] 响应时间达标
- [ ] 并发能力满足
- [ ] 资源使用合理
- [ ] 性能测试通过
## 6. 安全要求
- [ ] 权限控制正确
- [ ] 数据加密处理
- [ ] 安全测试通过
- [ ] 安全漏洞修复
CHECKLIST
echo "用户故事管理配置完成"
EOF
$ chmod +x /usr/local/bin/user_story_management.sh
配置用户故事管理…
用户故事管理配置完成
3.2 故事点估算
$ cat > /usr/local/bin/story_point_estimation.sh << 'EOF' #!/bin/bash echo "配置故事点估算..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建规划扑克脚本 cat > $PROJECT_DIR/scripts/planning_poker.sh << 'POKER' #!/bin/bash echo "=== 规划扑克估算 ===" # 故事点序列 POINTS=(1 2 3 5 8 13 21) # 用户故事 echo "用户故事:用户注册功能" echo "描述:作为新用户,我想要通过手机号或邮箱注册账号,以便于使用系统功能" echo "" # 团队成员投票 echo "团队成员投票:" echo "风哥1号:5" echo "风哥2号:5" echo "王五:8" echo "赵六:3" echo "" # 计算平均值 TOTAL=0 COUNT=4 for point in 5 5 8 3; do TOTAL=$((TOTAL + point)) done AVERAGE=$((TOTAL / COUNT)) echo "平均故事点:$AVERAGE" # 讨论差异 echo "" echo "讨论差异:" echo "王五投8点的原因:需要处理手机号验证,可能涉及第三方接口" echo "赵六投3点的原因:注册功能相对简单,已有类似经验" echo "" # 最终决定 echo "团队讨论后决定:5点" echo "理由:考虑验证功能复杂度,5点比较合理" POKER chmod +x $PROJECT_DIR/scripts/planning_poker.sh # 2. 创建估算基准 cat > $PROJECT_DIR/docs/agile/estimation_baseline.md << 'BASELINE' # 故事点估算基准 ## 1. 基准故事 ### 基准故事1:用户登录(3点) - 实现账号密码登录 - 表单验证 - 会话管理 - 工作量:1天 ### 基准故事2:用户注册(5点) - 实现注册功能 - 手机号/邮箱验证 - 密码加密 - 工作量:2天 ### 基准故事3:课程列表(8点) - 实现课程展示 - 分类筛选 - 关键词搜索 - 分页功能 - 工作量:3天 ## 2. 估算因素 ### 2.1 复杂度 - 业务逻辑复杂度 - 技术实现复杂度 - 集成复杂度 ### 2.2 风险 - 技术风险 - 需求风险 - 依赖风险 ### 2.3 不确定性 - 需求清晰度 - 技术熟悉度 - 环境稳定性 ## 3. 估算指南 ### 3.1 估算步骤 1. 理解用户故事 2. 识别技术难点 3. 参考基准故事 4. 独立估算 5. 团队讨论 6. 达成共识 ### 3.2 估算原则 - 相对估算 - 团队估算 - 保守估算 - 持续调整 BASELINE # 3. 创建速度跟踪表 cat > $PROJECT_DIR/docs/agile/velocity_tracking.csv << 'VELOCITY' Sprint,计划故事点,完成故事点,速度,备注 Sprint-1,20,18,18,第一个Sprint,团队磨合 Sprint-2,22,20,20,速度提升 Sprint-3,25,23,23,团队稳定 Sprint-4,25,25,25,达到预期速度 Sprint-5,28,26,26,速度继续提升 VELOCITY echo "故事点估算配置完成" EOF $ chmod +x /usr/local/bin/story_point_estimation.sh
配置故事点估算…
故事点估算配置完成
4. Sprint迭代管理
4.1 Sprint计划制定
$ cat > /usr/local/bin/sprint_planning.sh << 'EOF' #!/bin/bash echo "制定Sprint计划..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建Sprint计划文档 cat > $PROJECT_DIR/docs/agile/sprint_plan.md << 'PLAN' # Sprint计划 ## 1. Sprint基本信息 - Sprint编号:Sprint-6 - Sprint周期:2026-04-03 至 2026-04-16(2周) - Sprint目标:完成课程管理和订单管理核心功能 ## 2. Sprint目标 本Sprint目标是完成课程管理和订单管理的核心功能,包括: - 课程列表展示 - 课程详情查看 - 购物车功能 - 订单创建功能 ## 3. Sprint待办列表 | 编号 | 用户故事 | 故事点 | 负责人 | 开始日期 | 结束日期 | |------|----------|--------|--------|----------|----------| | US-005 | 课程浏览 | 8 | 风哥1号 | 04-03 | 04-06 | | US-006 | 课程详情 | 5 | 风哥2号 | 04-03 | 04-05 | | US-007 | 课程购买 | 8 | 王五 | 04-07 | 04-10 | | US-008 | 订单管理 | 5 | 赵六 | 04-11 | 04-14 | **总故事点:26点** ## 4. 团队能力 - 团队人数:4人 - Sprint天数:10天 - 每人每天产能:0.7故事点 - 团队总产能:28故事点 ## 5. 风险识别 ### 5.1 技术风险 - 支付接口对接:需要提前测试 - 视频播放:可能需要第三方库 ### 5.2 依赖风险 - 第三方支付接口:需要提前申请 - 视频转码服务:需要运维支持 ### 5.3 资源风险 - 测试环境:需要提前准备 - 测试数据:需要提前准备 ## 6. 里程碑 - 04-06:课程功能开发完成 - 04-10:订单功能开发完成 - 04-14:测试完成 - 04-16:Sprint评审 PLAN # 2. 创建任务看板 cat > $PROJECT_DIR/docs/agile/task_board.md << 'BOARD' # 任务看板 ## 待办(To Do) | 任务 | 负责人 | 预计时间 | |------|--------|----------| | US-005:课程浏览 | 风哥1号 | 3天 | | US-006:课程详情 | 风哥2号 | 2天 | | US-007:课程购买 | 王五 | 3天 | | US-008:订单管理 | 赵六 | 3天 | ## 进行中(In Progress) | 任务 | 负责人 | 开始时间 | 进度 | |------|--------|----------|------| | US-005:课程浏览 | 风哥1号 | 04-03 | 30% | ## 代码审查(Code Review) | 任务 | 负责人 | 审查人 | 状态 | |------|--------|--------|------| | 无 | - | - | - | ## 测试中(Testing) | 任务 | 负责人 | 测试人 | 状态 | |------|--------|--------|------| | 无 | - | - | - | ## 完成(Done) | 任务 | 负责人 | 完成时间 | |------|--------|----------| | 无 | - | - | BOARD # 3. 创建燃尽图数据 cat > $PROJECT_DIR/docs/agile/burndown_data.csv << 'BURNDOWN' 日期,剩余故事点,理想剩余 2026-04-03,26,26 2026-04-04,24,24 2026-04-05,22,22 2026-04-06,18,20 2026-04-07,16,18 2026-04-08,14,16 2026-04-09,12,14 2026-04-10,10,12 2026-04-11,8,10 2026-04-12,6,8 2026-04-13,4,6 2026-04-14,2,4 2026-04-15,1,2 2026-04-16,0,0 BURNDOWN echo "Sprint计划制定完成" EOF $ chmod +x /usr/local/bin/sprint_planning.sh
制定Sprint计划…
Sprint计划制定完成
学习交流加群风哥QQ113257174
5. 每日站会实践
5.1 每日站会组织
$ cat > /usr/local/bin/daily_standup.sh << 'EOF' #!/bin/bash echo "组织每日站会..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建每日站会模板 cat > $PROJECT_DIR/docs/agile/daily_standup_template.md << 'STANDUP' # 每日站会记录 **日期:** YYYY-MM-DD **时间:** 10:00-10:15 **参与人员:** 风哥1号、风哥2号、王五、赵六 ## 1. 风哥1号 **昨天完成:** - 完成课程列表页面开发 - 完成课程分类筛选功能 **今天计划:** - 开发课程搜索功能 - 开发课程排序功能 **遇到的问题:** - 无 ## 2. 风哥2号 **昨天完成:** - 完成课程详情页面开发 - 完成课程章节展示 **今天计划:** - 开发课程评价功能 - 开发课程收藏功能 **遇到的问题:** - 需要确认评价功能的展示方式 ## 3. 王五 **昨天完成:** - 完成购物车页面设计 - 完成购物车数据结构设计 **今天计划:** - 开发购物车添加功能 - 开发购物车删除功能 **遇到的问题:** - 无 ## 4. 赵六 **昨天完成:** - 完成订单数据表设计 - 完成订单接口设计 **今天计划:** - 开发订单创建接口 - 开发订单查询接口 **遇到的问题:** - 需要确认订单状态流转规则 ## 5. 团队问题 - 需要产品负责人确认评价功能展示方式 - 需要产品负责人确认订单状态流转规则 ## 6. 行动项 - [ ] 产品负责人确认评价功能展示方式(负责人:产品负责人,时间:今天下午) - [ ] 产品负责人确认订单状态流转规则(负责人:产品负责人,时间:今天下午) STANDUP # 2. 创建站会规则 cat > $PROJECT_DIR/docs/agile/standup_rules.md << 'RULES' # 每日站会规则 ## 1. 会议时间 - 时间:每天上午10:00 - 时长:15分钟 - 地点:团队工作区域 ## 2. 参与人员 - 必须参加:开发团队 - 可选参加:产品负责人、Scrum Master - 其他人员:需要提前申请 ## 3. 会议流程 ### 3.1 开场(1分钟) - Scrum Master宣布会议开始 - 确认所有人员到场 ### 3.2 个人汇报(每人2分钟) 每个人回答三个问题: 1. 昨天完成了什么? 2. 今天计划做什么? 3. 遇到了什么问题? ### 3.3 问题讨论(5分钟) - 讨论遇到的问题 - 确定解决方案 - 分配责任人 ### 3.4 结束(1分钟) - Scrum Master总结 - 宣布会议结束 ## 4. 会议规则 - 准时开始,不等人 - 站立开会,保持专注 - 每人发言不超过2分钟 - 不讨论技术细节 - 记录问题和行动项 ## 5. 会议禁忌 - 迟到 - 坐着开会 - 发言超时 - 讨论技术细节 - 解决问题(会后解决) RULES # 3. 创建站会记录脚本 cat > $PROJECT_DIR/scripts/record_standup.sh << 'RECORD' #!/bin/bash DATE=$(date +%Y-%m-%d) TIME=$(date +%H:%M) FILE="$PROJECT_DIR/docs/agile/standup_records/standup_$DATE.md" mkdir -p $PROJECT_DIR/docs/agile/standup_records cat > $FILE << EOF # 每日站会记录 **日期:** $DATE **时间:** $TIME **参与人员:** ## 个人汇报 ### 成员1 **昨天完成:** - **今天计划:** - **遇到的问题:** - ### 成员2 **昨天完成:** - **今天计划:** - **遇到的问题:** - ## 团队问题 - ## 行动项 - [ ] EOF echo "站会记录已创建:$FILE" RECORD chmod +x $PROJECT_DIR/scripts/record_standup.sh echo "每日站会配置完成" EOF $ chmod +x /usr/local/bin/daily_standup.sh
组织每日站会…
每日站会配置完成
6. 回顾会议实践
6.1 回顾会议组织
$ cat > /usr/local/bin/retrospective_meeting.sh << 'EOF' #!/bin/bash echo "组织回顾会议..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建回顾会议模板 cat > $PROJECT_DIR/docs/agile/retrospective_template.md << 'RETRO' # Sprint回顾会议 **Sprint编号:** Sprint-6 **会议时间:** 2026-04-16 14:00-15:30 **参与人员:** 风哥1号、风哥2号、王五、赵六 ## 1. Sprint数据回顾 - 计划故事点:26点 - 完成故事点:24点 - 完成率:92% - Bug数量:5个 - Bug修复率:100% ## 2. 做得好的地方(Keep) ### 2.1 团队协作 - 团队沟通顺畅 - 互相帮助解决问题 - 代码审查及时 ### 2.2 技术实践 - 单元测试覆盖率高 - 代码质量良好 - 技术分享积极 ### 2.3 流程执行 - 每日站会准时 - 任务更新及时 - 文档编写完整 ## 3. 需要改进的地方(Problem) ### 3.1 需求管理 - 需求变更频繁 - 需求理解偏差 - 验收标准不明确 ### 3.2 技术问题 - 第三方接口不稳定 - 测试环境问题 - 性能优化不足 ### 3.3 流程问题 - 任务估算偏差 - 跨团队沟通不足 - 知识分享不够 ## 4. 尝试的方法(Try) ### 4.1 需求管理改进 - 建立需求变更流程 - 加强需求评审 - 明确验收标准 ### 4.2 技术改进 - 提前测试第三方接口 - 优化测试环境 - 加强性能测试 ### 4.3 流程改进 - 改进估算方法 - 建立跨团队沟通机制 - 定期技术分享 ## 5. 改进计划 | 改进项 | 行动计划 | 负责人 | 完成时间 | |--------|----------|--------|----------| | 需求变更频繁 | 建立变更控制流程 | 产品负责人 | Sprint-7 | | 第三方接口不稳定 | 提前测试和Mock | 开发团队 | Sprint-7 | | 任务估算偏差 | 改进估算方法 | 团队 | Sprint-7 | | 跨团队沟通不足 | 建立沟通机制 | Scrum Master | Sprint-7 | ## 6. 团队感受 - 团队士气:良好 - 工作压力:适中 - 成长感受:有成长 - 满意度:8/10 RETRO # 2. 创建改进项跟踪表 cat > $PROJECT_DIR/docs/agile/improvement_tracking.csv << 'IMPROVEMENT' 改进项,行动计划,负责人,状态,完成时间,效果评估 需求变更频繁,建立变更控制流程,产品负责人,进行中,Sprint-7,待评估 第三方接口不稳定,提前测试和Mock,开发团队,进行中,Sprint-7,待评估 任务估算偏差,改进估算方法,团队,进行中,Sprint-7,待评估 跨团队沟通不足,建立沟通机制,Scrum Master,进行中,Sprint-7,待评估 IMPROVEMENT # 3. 创建回顾会议活动 cat > $PROJECT_DIR/docs/agile/retrospective_activities.md << 'ACTIVITIES' # 回顾会议活动 ## 1. 时间线活动 ### 目的 回顾Sprint中的重要事件和里程碑 ### 步骤 1. 画出时间线 2. 每个人标记重要事件 3. 讨论事件的影响 4. 总结经验教训 ## 2. 星星活动 ### 目的 识别做得好和需要改进的地方 ### 步骤 1. 每人写3个做得好的地方(星星) 2. 每人写3个需要改进的地方(云朵) 3. 分类和优先级排序 4. 制定改进计划 ## 3. 帆船活动 ### 目的 分析推动和阻碍因素 ### 步骤 1. 画出帆船 2. 标记风力(推动因素) 3. 标记锚(阻碍因素) 4. 讨论如何增加风力、减少锚 ## 4. 感谢活动 ### 目的 增强团队凝聚力 ### 步骤 1. 每人写感谢卡 2. 感谢团队成员的帮助 3. 分享感谢内容 4. 增强团队信任 ACTIVITIES echo "回顾会议配置完成" EOF $ chmod +x /usr/local/bin/retrospective_meeting.sh
组织回顾会议…
回顾会议配置完成
风哥风哥提示:回顾会议是敏捷开发中最重要的会议之一,它帮助团队持续改进和成长。
7. 持续集成实践
7.1 持续集成配置
$ cat > /usr/local/bin/continuous_integration.sh << 'EOF' #!/bin/bash echo "配置持续集成..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建Jenkins配置 cat > $PROJECT_DIR/config/jenkins/Jenkinsfile << 'JENKINS' pipeline { agent any tools { maven 'Maven 3.6.3' jdk 'JDK 11' } stages { stage('代码检出') { steps { git branch: 'develop', url: 'http://gitlab.fgedu.net.cn/fgedu/web-system.git' } } stage('代码检查') { steps { sh 'mvn clean compile' sh 'mvn sonar:sonar' } } stage('单元测试') { steps { sh 'mvn test' junit '**/target/surefire-reports/*.xml' } } stage('打包构建') { steps { sh 'mvn package -DskipTests' archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true } } stage('部署测试环境') { steps { sh 'ansible-playbook -i inventory/test deploy.yml' } } stage('集成测试') { steps { sh 'mvn verify -P integration-test' junit '**/target/failsafe-reports/*.xml' } } } post { always { cleanWs() } success { email to: 'team@fgedu.net.cn', subject: "构建成功: ${env.JOB_NAME} #${env.BUILD_NUMBER}", body: "构建成功,请查看: ${env.BUILD_URL}" } failure { email to: 'team@fgedu.net.cn', subject: "构建失败: ${env.JOB_NAME} #${env.BUILD_NUMBER}", body: "构建失败,请查看: ${env.BUILD_URL}" } } } JENKINS # 2. 创建GitLab CI配置 cat > $PROJECT_DIR/.gitlab-ci.yml << 'GITLAB' stages: - build - test - deploy variables: MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" cache: paths: - .m2/repository/ build: stage: build script: - mvn clean compile artifacts: paths: - target/ expire_in: 1 hour test: stage: test script: - mvn test artifacts: reports: junit: target/surefire-reports/*.xml deploy: stage: deploy script: - mvn package -DskipTests - ansible-playbook -i inventory/test deploy.yml only: - develop when: manual GITLAB # 3. 创建Docker配置 cat > $PROJECT_DIR/Dockerfile << 'DOCKER' FROM openjdk:11-jre-slim LABEL maintainer="fengge@fgedu.net.cn" LABEL version="1.0" LABEL description="风哥教育网站系统" WORKDIR /app COPY target/web-system.jar app.jar EXPOSE 8080 ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC" ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] DOCKER # 4. 创建docker-compose配置 cat > $PROJECT_DIR/docker-compose.yml << 'COMPOSE' version: '3.8' services: web: build: . ports: - "8080:8080" environment: - SPRING_PROFILES_ACTIVE=test - MYSQL_HOST=mysql - REDIS_HOST=redis depends_on: - mysql - redis networks: - app-network mysql: image: mysql:8.0 environment: - MYSQL_ROOT_PASSWORD=root123 - MYSQL_DATABASE=fgedu_web - MYSQL_USER=fgedu - MYSQL_PASSWORD=fgedu123 volumes: - mysql-data:/var/lib/mysql networks: - app-network redis: image: redis:6.2 ports: - "6379:6379" volumes: - redis-data:/data networks: - app-network volumes: mysql-data: redis-data: networks: app-network: driver: bridge COMPOSE echo "持续集成配置完成" EOF $ chmod +x /usr/local/bin/continuous_integration.sh
配置持续集成…
持续集成配置完成
8. 测试驱动开发
8.1 TDD实践
$ cat > /usr/local/bin/tdd_practice.sh << 'EOF' #!/bin/bash echo "配置TDD实践..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建单元测试示例 cat > $PROJECT_DIR/src/test/java/com/fgedu/UserServiceTest.java << 'TEST' package com.fgedu; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; import static org.junit.jupiter.api.Assertions.*; public class UserServiceTest { private UserService userService; @BeforeEach public void setUp() { userService = new UserService(); } @Test public void testRegisterUser() { User user = new User(); user.setUsername("testuser"); user.setEmail("test@fgedu.net.cn"); user.setPassword("Test@123456"); User result = userService.register(user); assertNotNull(result.getId()); assertEquals("testuser", result.getUsername()); assertEquals("test@fgedu.net.cn", result.getEmail()); } @Test public void testRegisterUserWithInvalidEmail() { User user = new User(); user.setUsername("testuser"); user.setEmail("invalid-email"); user.setPassword("Test@123456"); assertThrows(ValidationException.class, () -> {
userService.register(user);
});
}
@Test
public void testRegisterUserWithWeakPassword() {
User user = new User();
user.setUsername(“testuser”);
user.setEmail(“test@fgedu.net.cn”);
user.setPassword(“123”);
assertThrows(ValidationException.class, () -> {
userService.register(user);
});
}
@Test
public void testLoginUser() {
User user = userService.login(“testuser”, “Test@123456”);
assertNotNull(user);
assertEquals(“testuser”, user.getUsername());
}
@Test
public void testLoginUserWithWrongPassword() {
assertThrows(AuthenticationException.class, () -> {
userService.login(“testuser”, “wrongpassword”);
});
}
}
TEST
# 2. 创建集成测试示例
cat > $PROJECT_DIR/src/test/java/com/fgedu/UserIntegrationTest.java << 'INTEGRATION'
package com.fgedu;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserIntegrationTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testUserRegistrationFlow() {
UserDTO userDTO = new UserDTO();
userDTO.setUsername("integrationtest");
userDTO.setEmail("integration@fgedu.net.cn");
userDTO.setPassword("Test@123456");
ResponseEntity
“/api/users/register”, userDTO, User.class);
assertEquals(HttpStatus.CREATED, response.getStatusCode());
assertNotNull(response.getBody().getId());
}
@Test
public void testUserLoginFlow() {
LoginDTO loginDTO = new LoginDTO();
loginDTO.setUsername(“testuser”);
loginDTO.setPassword(“Test@123456”);
ResponseEntity
“/api/users/login”, loginDTO, AuthToken.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody().getToken());
}
}
INTEGRATION
# 3. 创建测试覆盖率配置
cat > $PROJECT_DIR/pom.xml << 'POM'
echo “TDD实践配置完成”
EOF
$ chmod +x /usr/local/bin/tdd_practice.sh
配置TDD实践…
TDD实践配置完成
更多学习教程公众号风哥教程itpux_com
9. 敏捷开发工具
9.1 敏捷工具配置
$ cat > /usr/local/bin/agile_tools_setup.sh << 'EOF' #!/bin/bash echo "配置敏捷开发工具..." PROJECT_DIR="/data/projects/fgedu-web-system" # 1. 创建Jira配置指南 cat > $PROJECT_DIR/docs/tools/jira_setup_guide.md << 'JIRA' # Jira配置指南 ## 1. 项目创建 ### 1.1 创建Scrum项目 - 登录Jira - 点击"项目" -> “创建项目”
– 选择”Scrum”模板
– 输入项目名称和关键字
### 1.2 配置项目
– 设置项目权限
– 配置项目角色
– 设置工作流
– 配置字段
## 2. 看板配置
### 2.1 创建看板
– 点击”看板” -> “创建看板”
– 选择”Scrum看板”
– 选择项目
### 2.2 配置列
– 待办(To Do)
– 进行中(In Progress)
– 代码审查(Code Review)
– 测试中(Testing)
– 完成(Done)
### 2.3 设置WIP限制
– 进行中:5
– 代码审查:3
– 测试中:3
## 3. Sprint管理
### 3.1 创建Sprint
– 点击”创建Sprint”
– 输入Sprint名称
– 设置开始和结束日期
### 3.2 规划Sprint
– 从产品待办列表选择用户故事
– 拖动到Sprint
– 估算故事点
### 3.3 启动Sprint
– 点击”开始Sprint”
– 确认Sprint目标
– 开始迭代
## 4. 报告查看
### 4.1 燃尽图
– 显示剩余工作量
– 跟踪Sprint进度
### 4.2 速度图
– 显示团队速度
– 预测交付时间
### 4.3 累积流图
– 显示工作流状态
– 识别瓶颈
JIRA
# 2. 创建Confluence配置指南
cat > $PROJECT_DIR/docs/tools/confluence_setup_guide.md << 'CONFLUENCE'
# Confluence配置指南
## 1. 空间创建
### 1.1 创建项目空间
- 登录Confluence
- 点击"创建空间"
- 选择"团队空间"
- 输入空间名称和关键字
### 1.2 配置空间权限
- 设置空间权限
- 配置用户组权限
- 设置页面权限
## 2. 页面模板
### 2.1 需求文档模板
- 需求概述
- 功能需求
- 非功能需求
- 验收标准
### 2.2 设计文档模板
- 系统架构
- 数据库设计
- 接口设计
- UI设计
### 2.3 会议记录模板
- 会议信息
- 会议内容
- 会议决议
- 行动项
## 3. 知识管理
### 3.1 知识库结构
- 项目文档
- 技术文档
- 培训文档
- 经验分享
### 3.2 文档规范
- 文档命名规范
- 文档格式规范
- 文档更新规范
- 文档审核规范
## 4. 协作功能
### 4.1 评论功能
- 页面评论
- 行内评论
- @提及
### 4.2 版本控制
- 查看历史版本
- 恢复历史版本
- 版本比较
### 4.3 通知功能
- 页面更新通知
- 评论通知
- 分享通知
CONFLUENCE
# 3. 创建GitLab配置指南
cat > $PROJECT_DIR/docs/tools/gitlab_setup_guide.md << 'GITLAB'
# GitLab配置指南
## 1. 项目创建
### 1.1 创建项目
- 登录GitLab
- 点击"新建项目"
- 选择"创建空白项目"
- 输入项目名称和描述
### 1.2 配置项目
- 设置项目可见性
- 配置项目成员
- 设置保护分支
## 2. 分支管理
### 2.1 分支策略
- master:生产分支
- develop:开发分支
- feature/*:功能分支
- release/*:发布分支
- hotfix/*:热修复分支
### 2.2 保护分支
- master分支保护
- develop分支保护
- 强制代码审查
- 禁止强制推送
## 3. 合并请求
### 3.1 创建合并请求
- 从feature分支创建
- 选择目标分支
- 填写描述信息
### 3.2 代码审查
- 审查代码变更
- 提出修改建议
- 批准或拒绝
### 3.3 合并代码
- 通过CI/CD测试
- 审查通过
- 合并到目标分支
## 4. CI/CD配置
### 4.1 配置Runner
- 安装GitLab Runner
- 注册Runner
- 配置执行器
### 4.2 配置流水线
- 编写.gitlab-ci.yml
- 定义构建阶段
- 配置部署环境
GITLAB
echo "敏捷开发工具配置完成"
EOF
$ chmod +x /usr/local/bin/agile_tools_setup.sh
配置敏捷开发工具…
敏捷开发工具配置完成
10. 最佳实践
10.1 敏捷开发最佳实践
– 建立敏捷开发文化,鼓励团队自组织
– 保持Sprint长度一致,建立稳定的节奏
– 重视回顾会议,持续改进流程
– 加强团队沟通,及时解决问题
– 使用合适的工具,提高工作效率
10.2 敏捷开发清单
# 1. Sprint计划
– [ ] 确定Sprint目标
– [ ] 选择用户故事
– [ ] 估算故事点
– [ ] 分配任务
# 2. 每日站会
– [ ] 准时参加
– [ ] 汇报进度
– [ ] 提出问题
– [ ] 记录行动项
# 3. Sprint评审
– [ ] 准备演示
– [ ] 展示成果
– [ ] 收集反馈
– [ ] 更新待办列表
# 4. Sprint回顾
– [ ] 回顾数据
– [ ] 识别改进点
– [ ] 制定改进计划
– [ ] 跟踪改进效果
# 5. 持续集成
– [ ] 自动化构建
– [ ] 自动化测试
– [ ] 代码质量检查
– [ ] 自动化部署
10.3 敏捷开发指标
# 1. 速度指标
– 团队速度:每个Sprint完成的故事点
– 速度稳定性:速度的波动范围
– 速度趋势:速度的变化趋势
# 2. 质量指标
– Bug数量:每个Sprint发现的Bug数量
– Bug修复率:Bug修复的比例
– 代码覆盖率:单元测试覆盖率
– 代码质量:代码静态分析评分
# 3. 效率指标
– 周期时间:从开始到完成的时间
– 吞吐量:单位时间完成的工作量
– 在制品数量:同时进行的工作数量
– 阻塞时间:被阻塞的时间
# 4. 满意度指标
– 团队满意度:团队成员满意度
– 客户满意度:客户满意度
– 干系人满意度:干系人满意度
– 建立敏捷开发文化和价值观
– 选择合适的敏捷框架和方法
– 使用合适的工具支持敏捷实践
– 持续改进和优化敏捷流程
– 总结和分享敏捷开发经验
author:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
