一、背景
最近在开发一个项目,以前一直是瀑布式开发转变成了敏捷开发。当然自己也不知道处于的状态就是敏捷开发,只是最近刚好对于开发中遇到的问题比较困惑。于是找了点知识来填补自己的空白,才发现敏捷所说的知识就是我们现在做的事情。某种程度上也说明我们缺乏了敏捷的氛围和执行知识,纯粹靠的是自己摸索,怎么做怎么好,这里面的问题是团队是否所有人都能够知道我们的变化是正常的?由于长期实行瀑布式开发而才生抵触情绪呢?
我个人理解敏捷的主要目的还是企业为了能够快速的响应市场的变化和客户的需求。不断迭代不断响应变化持续交付可运行的软件。
关键技术和需求需要提前拆解和预研,不然在敏捷软件中就是灾难。当前版本的需求需要足够明确。
二、知识
2.1、定义
敏捷开发是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系、而又可以独立运行的小项目,并分别完成,从而实现快速开发的目的。
2.2、敏捷宣言
敏捷软件开发宣言
我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。由此我们建立了如下价值观:
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
也就是说,尽管右项有其价值,我们更重视左项的价值。
敏捷宣言遵循的 12 条原则
- 我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
- 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
- 可工作的软件是进度的首要度量标准。
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
- 以简洁为本,它是极力减少不必要工作量的艺术。
- 最好的架构、需求和设计出自自组织团队。
- 团队定期地反思如何能提高成效,并依此调整自身的举止表现。
2.3、常见方法
2.3.1、Scrum
2.3.2、极限编程(eXtreme Prgramming)
极限编程(eXtreme Prgramming),是一种软件工程方法学。如同其他敏捷方法学,极限编程和传统方法学的本质不同在于它更强调可适应性而不是可预测性。极限编程的支持者认为软件需求的不断变化是很自然的现象,是软件项目开发中不可避免的、也是应该欣然接受的现象;他们相信,和传统的在项目起始阶段定义好所有需求再费尽心思的控制变化的方法相比,有能力在项目周期的任何阶段去适应变化,将是更加现实更加有效的方法。极限编程规定了一些实践和简单规则,包括:编写用户故事、架构规范、实施规划、迭代计划、代码开发、单元测试、验收测试等等。
互动交流。团队成员不是通过文档来交流,文档不是必须的。团队成员之间通过日常沟通、简单设计、测试、系统隐喻以及代码本身来沟通产品需求和系统设计。
反馈。反馈是一种信息的交流,能使系统更加完善。反馈也和交流密切相关,客户的实际使用、功能测试、单元测试等都能为开发团队提供反馈信息。同时,开发团队也可以通过估计和设计用户案例的方式将信息反馈给客户。
简单。极限编程提倡简单的设计,简单的解决方案。极限编程总是从一个简单的系统入手,并且只创建今天可能需要的功能模块。因为它认为,创建明天需要的功能模块可能会由于需求的变化而成为浪费。
勇气。极限编程理论中的“系统开发中的勇气”最好用一组实践来诠释。其中之一就是“只为今天的需求设计以及编码,不要考虑明天”这条戒律。这是努力避免陷入设计的泥潭、而在其他问题上花费了太多不必要的精力。勇气使得开发人员在需要重构他们的代码时能感到舒适。这意味着重新审查现有系统并完善它会使得以后出现的变化需求更容易被实现。另一个勇气的例子是了解什么时候应该完全丢弃现有的代码。每个程序员都有这样的经历:他们花了一整天的时间纠缠于自己设计和代码中的一个复杂的难题却无所得,而第二天回来以一个全新而清醒的角度来考虑,在半小时内就轻松解决了问题。
团队。极限编程提倡团队合作,相互尊重。极限编程以建立并激励团队为一项重要任务。同时它把互相尊重和实际的开发习惯相结合。比如,为了尊重其他团队成员的劳动成果,每个人不得将未通过单元测试的代码集成到系统中。因此,每个人的代码质量必须过关。
2.3.3、精益软件开发(Lean Software Development)
精益思想的核心思想是查明和消除浪费。在软件开发过程中,bugs,没用的功能,等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法消除。精益开发的其它原则包括:
强调学习。软件开发过程是一个不断学习的过程。每个团队成员都需要从日常的失败,互动,交流以及信息反馈中学习,不断改进所开发的产品和开发效率。
在最后时刻做决定。这样可以避免在可能改变的事情上做无谓的努力,从而有效的避免浪费。
用最快的速度交付用户。较短的迭代周期能够加速产品的开发及交付,加快交流,提高生产力。
给团队自主权。激励团队并让所有团队成员自我管理始终是所有敏捷方法获得成功的基本因素之一。
诚信。确保整个系统正常工作,真正满足客户的需求是整个团队需要努力坚持的诚信和和对用户的承诺。
全局观。精益开发强调整体优化的系统。无论开发的组织还是被开发的产品, 从整体上考虑优化比从各个局部去优化更高效。
三、参考文档
1)https://www.cnblogs.com/pangguoming/p/9504254.html
2)软件开发模式之敏捷开发(scrum)_掉了颗牙的猴子的博客-CSDN博客_敏捷开发
3)https://www.cnblogs.com/gaochundong/p/agile_software_development_methodologies.html