定义

  • 敏捷开发主要以用户的需求为核心,采用迭代、循序渐进的一套便捷开发流程实现功能。
  • 敏捷开发中,软件项目可在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

敏捷开发 - 图1

原则

简单

当从事开发工作时,应当主张最简单的解决方案就是最好的解决方案。不必过分的重构项目。只要基于现有的需求进行建模,日后需求有变更时,再来重构这个系统。尽可能的保持模型的简单。

明确

软件开发的主要目标是以有效的方式,制造出满足投资者需要的软件,而不是制造无关的文档,无关的用于管理的工具,甚至无关的模型。任何一项Activity,如果不符合这项原则,不能有助于目标实现的,都应该受到审核,甚至取消。

可变

需求时刻在变,人们对于需求的理解也时刻在变。项目进行中,Project Stakeholder可能变化,会有新人加入,也会有旧人离开。Project Stakeholder的观点也可能变化,你努力的目标和成功标准也有可能发生变化。这就意味着随着项目的进行,项目环境也在不停的变化,因此你的开发方法必须要能够反映这种现实。

高效率

从开始采取行动,到获得行动的反馈,二者之间的时间至关紧要。和其他人一起开发模型,你的想法可以立刻获得反馈。和你的客户紧密联系,去了解他们的的需求,去分析这些需求,或是去开发满足他们需求的用户界面,这样,你就提供了快速反馈的机会。

高质量

没有人喜欢烂糟糟的工作。做这项工作的人不喜欢,是因为没有成就感;日后负责重构这项工作的人不喜欢,是因为它难以理解,难以更新;最终用户不喜欢,是因为它太脆弱,容易出错,也不符合他们的期望。而采用流水线似的开发流程会让每个节点都能得到及时反馈,最终达到客户期望为止。

可持续

即便你的团队已经把一个能够运转的系统交付给用户,你的项目也还可能是失败的,实现项目投资者的需求,其中就包括你的系统应该要有足够的Robust,能够适应日后的扩展。当你在进行软件开发的竞赛时,你的第二个目标就是准备下一场比赛。可持续性可能指的是系统的下一个主要发布版,或是你正在构建的系统的运转和支持。要做到这一点,你不仅仅要构建高质量的软件,还要创建足够的文档和支持材料,保证下一场比赛能有效的进行。你要考虑很多的因素,包括你现有的团队是不是还能够参加下一场的比赛,下一场比赛的环境,下一场比赛对你的组织的重要程度。简单的说,你在开发的时候,你要能想象到未来。

工具

代码托管Gitlab 项目运行环境Docker 项目打包发布Jenkins Bug管理禅道 项目依赖Nexus 代码质量审查SonarQube 项目进度管理JIRA 项目集群管理Kubernetes 接口管理YApi
敏捷开发 - 图2

实践总结

  • 最重要的是通过尽早和不断交付有价值的软件满足客户需要。
  • 我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。
  • 经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。
  • 业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。
  • 围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。
  • 在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。
  • 可以工作的软件是进度的主要度量标准。
  • 敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。
  • 对卓越技术与良好设计的不断追求将有助于提高敏捷性。
  • 简单——尽可能减少工作量的艺术至关重要。
  • 最好的架构、需求和设计都源自自我组织的团队。
  • 每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。

    敏捷工具区别于组件,例如MySQL、Redis、RabbitMQ等这些组件主要是服务于项目 而Jenkins、Gitlab等工具是服务于开发者,对项目本身不做任何依赖,专注于高效的开发、测试、部署。