业界实践核心理念:
价值驱动,研发总是聚焦最高价值最高优先级的工作小批量、短周期反馈,持续研发,快速闭环拥抱变化,根据市场需要和研发能力按需发布客户深度参与,联合创新,运行驱动开发敏捷开发遵循软件客观规律,不断的进行迭代增量开发,最终交付复合客户价值的产品。
敏捷宣言
个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划敏捷开发原则
客户满意:通过持续不断地及早交付给有价值的软件使客户满意拥抱变化:欣然面对需求变化短迭代交付:经常地交付可工作的软件业务参与:业务人员和开发人员相互合作以人为本面对面沟通结果导向:可工作的软件是进度的首要度量标准保持节奏追求卓越简单务实:以简介为本团队自组织:最好的架构,需求和设计出自组织团队持续改进敏捷包括三个层次
理念:敏捷核心思想优秀实践:敏捷的经验积累具体应用精益七大浪费
缺陷过度生产:未被用户使用的特性运输:知识的传递等待:远离客户而导致无法及时反馈决策库存:半成品移动:在任务间频繁切换过度作业:不必要的流程环节和动作技术债务
日趋不稳定的架构圈复杂度高的代码低的测试自动化率不及时清除的静态检查告警变化无法一次性预测,一开始制作大而全的计划易造成浪费
应根据迭代积累的经验和需求变化的情况对计划不断调整和细化
多层次反馈
结对编程:对代码质量的反馈单元测试:对单元功能的反馈持续集成:对系统功能的反馈站立会议/回顾会议:对团队运作的反馈客户验收:对客户需求的反馈敏捷软件开发是以短周期迭代为核心,包括团队、工作件、管理和技术优秀实践的结合
敏捷团队的三个核心角色
PO(product owner):产品负责人,确保team做正确的事Scrum Master(Scrum教练):确保team正确的做事Team(开发产品):负责产品需求的实现敏捷团队实践:完整团队
完整团队是跨功能领域(需求分析师、设计师、开发人员、测试人员、资料人员等)人员组成一个团队坐在一起工作,团队成员遵循同一份计划,服从于同一个项目经理。成员来自多功能领域:拥有完成目标所需要的各职能成员坐在一起办公:团队成员无障碍地沟通团队保持相对稳定敏捷软件开发核心:迭代开发
迭代开发将整个软件生命周期分成多个小的迭代,每一次迭代都由需求分析、设计、实现和测试在内的多个活动组成,每一次迭代都可以生成一个稳定和被验证过的软件版本。将高技术风险的需求在在其迭代里实现,有助于尽早暴露问题和及时消除风险。每一次迭代都建立在稳定的质量基础上,并作为下一轮迭代的基线。敏捷工作件:产品backlog
经过优先级排序的动态刷新的产品需求清单,用来制定发布计划和迭代计划敏捷工作件:迭代backlog
团队在每一轮迭代中的任务清单,是团队的详细迭代开发计划每项任务信息包括当前剩余工作量和责任人敏捷工作件:完成标准
基于“随时可向用户发布”的目标制定衡量团队工作是否已完成的标准敏捷管理实践
迭代计划会议 每轮迭代启动前,团队共同讨论本轮迭代详细开发计划的过程。输入是产品backlog,输出是团队迭代backlog每日站立会议 每日工作前,团队成员的理性沟通机制,由scrum master组织,team成员全体站立参加可视化管理 将项目状态(进度、质量等)通过物理实体实时展示,让团队所有成员直观地获取当前项目进展信息迭代验收 每次迭代开发结束时进行,通过演示可工作的软件检查需求是否满足客户需求。由scrum manager组织,po和用户代表负责验收,team负责演示可工作的软件迭代回顾会议 在每轮迭代结束后矩形的会议,目的是分享好的经验和发现改进点,促进团队不断进步。敏捷工程实践
用户故事 站在用户角度描述需求的一种方式 每个用户故事须有对应的验收测试用例结对编程 提高代码质量和工作效率测试驱动开发 以测试作为编程的中心,要求在编写任何代码之前,首先编写定义代码功能的测试用例,编写的代码要通过测试用例 保证代码整洁可用持续集成 团队的成员经常集成他们的工作,通常每人每天至少集成一次,每次集成通过自动化构建完成 提供产品质量的快速反馈,保证随时拥有可工作的软件精益软件开发七项原则
消除浪费内建质量:过程中的每一个工序应该能够进行错误验证和自检创建知识:不要忘记已经学到的经验教训推迟决策:如果不必立刻做出一个特别的决定,那就等具备更多的知识和信息以后再去做快速交付:以较短的迭代,以小批量的方式开发功能特征,并快速交付给客户对人尊重整体优化精益思想原则
站在客户的立场上思考价值没有任何事情是完美的持续改进客户需求拉动模式生产过程像河流一样通常流动关注业务流中一切有价值的活动关键实践
采用MVP/MVF(最小可用产品/特性),快速验证客户需求 MVP(最小可用产品):投入最少的资源,构建一个刚刚能够体现创新点或核心价值的产品/特性,并立刻将其投入市场。本质是一种业务原型,理念的核心是通过快速原型迭代来测试商业模式并获取用户反馈。敏捷与精益的区别
基本观点不同 敏捷:尽快交付可用的产品,并与客户密切协作、及时获得用户反馈 精益:开发最小的可用产品,消除价值流中的浪费角度不同 敏捷的关注重点稍窄一些:主要关心的是围绕软件开发的具体开发实践和项目管理,一般不太关心在其中进行软件开发的商业上下文环境 精益采用比较宽泛的视角,偏好一体看待软件开发和它的整个业务环境微服务理念:松耦合、可并行开发、部署、运行的小产品