Jiahonzheng's Blog

快速了解敏捷开发

字数统计: 1.6k阅读时长: 5 min
2017/10/22 Share

作为软件工程的学生,我觉得对软件开发模式的了解是很有必要的,不然日后怎么跟项目经理打交道,😁 。

敏捷开发是一种主流的开发模式,被绝大多数知名互联网公司采用。所以在这篇技术科普博文,我选择了敏捷开发模式作为主题,希望大家能从中对敏捷开发有个初步的认识。

前言

先做到,再做好。

在正式科普敏捷开发前,我们先看一则漫画。

网络不给力哦
网络不给力哦
网络不给力哦
网络不给力哦
网络不给力哦
网络不给力哦
网络不给力哦

这是一则很神奇的漫画,当然在现实生活中大多情况下是不会发生的。因为每一道菜都是独立的,很容易单独完成和交付,所以很少有餐厅会非要 10 道菜全做好了,才上菜。

那把这个例子映射到项目开发,首先我们肯定不希望像漫画里的餐厅等全部菜都做好了,才上菜,我们希望能够提前交付“凑合用”的项目,然后继续完善,也就是“先做到,再做好”。

这种模式就是敏捷开发。

什么是敏捷开发

敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。

简单来说,敏捷开发并不追求前期完美的设计、完美编码,而是力求在很短的时间内开发出产品的核心功能,尽早发布出可用的版本。然后在后续的生产周期内,按照新需求不断迭代升级,完善产品。

敏捷开发的特点

讨论敏捷开发的特点,就不可避免地要谈到传统的软件开发模式。现在较为普遍的传统软件开发模式是 W.W.Royce 于 1970 年提出的瀑布模型

瀑布模型是典型的预见性的方法,严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤顺序进行。其严格分级的特点导致开发的自由度降低,项目早期做出的承诺对后期需求的变化难以调整,所以这种开发模式在变化无端的今天是基本不可行的。

强调“适应性”,而非“预设性”

传统的控制项目模式都是试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。而这类方法在不可预测的环境下,很难适应变化,甚至是拒绝变化。

敏捷方法是欢迎变化的,被称为适应性方法。

强调“面向人”,而非“面向过程”

在敏捷开发中,人是第一位的,过程是第二位的。

在传统的软件开发工作中,项目团队分配工作的重点是明确角色的定义,以个人的能力去适应角色,而角色的定义就是为了保证过程的实施,即个人以资源的方式被分配给角色。而在敏捷开发中,我们试图使软件开发工作能够利用人的特点,充分发挥人的创造能力。

敏捷开发模式的分类

敏捷开发的实现主要包括 SCRUMXP(极限编程) 、 Crystal MethodsFDD(特性驱动开发)等等。其中,SCRUMXP 最为流行。

Extreme Programming (XP)

同样是敏捷开发,XP 极限编程更侧重于实践,并力求把实践做到极限。这一实践可以是是测试先行,也可以是结对编程,关键要看具体的应用场景。

这里放出一个 Extreme Programming的教程,可点击此处跳转。同时,也给大家安利一波 TutorialsPoint ,这是一个涉及多方面的教程网站,有心人可以在上面学到很多东西。

SCRUM

SCRUM 是橄榄球运动的一个专业术语,表示“争球”的动作。通俗地理解,在这种开发模式下,团队就像是打橄榄球一样迅速、富有战斗激情、人人你争我赶地完成它。

有兴趣的看客,在阅读下面的博文,可以先点击这里来查看一篇科普 SCRUM 的文章,里面通过讲述一则鸡与猪的故事,诠释了 SCRUM 的开发理念。

网络不给力哦

下面摘录了鸡与猪的故事中的两句话,相信看客能从这两句话以及上面这幅漫画中,对 SCRUM 开发模式中的人员有个初步的印象。

Pigs are considered core team members, performers, people who “DO” work.

A Chicken is someone who has something to gain by the Pigs performing, but in the end, readlly do not contribute day to day to “getting things DONE

事实上,SCRUM 比鸡与猪的故事复杂多了。下面是一些术语和一个 SCRUM 的开发流程图,可以帮助我们更好地理解这种开发框架。

1
2
3
4
5
6
Sprint               :冲刺周期,通俗的讲就是实现一个小目标的周期
Backlog :需求列表,可以看成是小目标的清单,分为 Sprint Backlog 和 Product Backlog
Sprint Planting :项目规划过程
Daily Scrum :每天的站会,用于监督项目进度
Sprint Review :成果评审会议,让团队成员演示成果
Sprint Retrospective :模式评审会议,总结过去,以及讨论未来如何做得更好

网络不给力哦

敏捷开发与 DevOps

DevOps(Development 和 Operations 的组合词)是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。

DevOps 的引入对产品交付、测试、功能开发和维护(hotfix 热补丁)起到意义深远的影响。

DevOps 的目标是加强开发人员、测试人员、运维人员之间的沟通协调。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。

那问题来了,如何实现这个目标?

这需要我们的项目能做到持续集成、持续交付、持续部署,也就是我们的开发模式必须是敏捷的。

总结一下敏捷开发与DevOps的关系,就是下面这句话:

敏捷开发的重心是开发,DevOps 的重心是开发和运维的协作。

Bonus:时下流行的 JenkinsBamboo,就是两款优秀的持续集成工具,而 Docker 则是为 DevOps 提供了强大而有效的统一环境。

CATALOG
  1. 1. 前言
  2. 2. 什么是敏捷开发
  3. 3. 敏捷开发的特点
    1. 3.1. 强调“适应性”,而非“预设性”
    2. 3.2. 强调“面向人”,而非“面向过程”
  4. 4. 敏捷开发模式的分类
    1. 4.1. Extreme Programming (XP)
    2. 4.2. SCRUM
  5. 5. 敏捷开发与 DevOps