【软件工程】敏捷过程模型带来的启发与思考

敏捷过程简介

 

2001年,Kent Beck等17位编程大师共同发布了《敏捷软件开发宣言》,强调:

  “人”以及“人与人的互动” 胜于 “过程”和“工具”。
  可运行的软件胜于 面面俱到的文档
  客户合作 胜于 合同谈判

  响应变化 胜于 遵循计划

这是一种全新的软件过程思维。最初的软件 (1960-70 年代) 的顾客都是大型研究机构、军方等,他们需要软件系统来搞科学计算、军方项目、登月项目等,这些系统相当庞大,对准确度要求相当高。到了1980-90年代,软件进入了桌面软件的时代,开发的周期明显缩短,各种新的方法开始进入实用阶段。但是软件发布的媒介还是CD、DVD,做好一个发布需要较大的经济投入,不能频繁更新版本。而进入了互联网时代以来,大部分的服务是通过网络服务器端实现,在客户端有各种方便的推送渠道。同时技术更新的速度在加快, 那种一个大型团队用一个固定技术开发2-3 年再发布的时代已经过去了,由于网络的转播速度和广度,知识的获取更加容易,很多软件服务可以由一个小团队来实现。此外用户需求的变化也在加快,开发流程必须跟上这些快速变化的节奏。这也正是敏捷过程诞生的原因,可以说这其中有一定的时代必然性。

以快速的增量和迭代方式进行软件开发是敏捷过程的本质,我们也能归纳出一些敏捷过程模型的主要思想:

  不强调文档,转向强调可运行的软件片段

  开发者与客户之间频繁沟通

  快速开发,快速反馈,快速修改,增量交付

  连续不断的短周期迭代

  不看重形式和工具,看重“人”和内容,保持简洁

相比于传统方法,敏捷方法在过程的具体形式上也体现了重大的革新,XP(极限编程)和Scrum框架是其中的典型代表。极限编程强调用户故事(User story)、测试驱动的开发(TDD)、结对编程(Pair programming)、持续集成(Continuous integration)等核心实践方法。如果你还不是很明白,下面这张图便能够清晰的展示极限编程到底“极限”在何处?

【软件工程】敏捷过程模型带来的启发与思考_第1张图片

而在scrum框架中,验收测试(Acceptance Testing)、冲刺/迭代(Sprint / Iteration)、产品清单/冲刺清单(Product backlog / Spring backlog)、燃尽图(Burndown chart)、每日站会(DailyStand-up)等也是非常高效的核心实践方式。

 

敏捷过程思想带来的启示

 

类比一下编程语言的发展历史,从最开始面向机器语言诞生,到面向过程的语言,再到面向对象的语言,相同的,敏捷过程模型的出现标志着一种思维的转变,即由传统软件开发中由计划、过程主导的模式向现代软件开发中由目标、客户主导的模式的转变。敏捷过程模型是随着现代复杂的开发环境产生的,也同时提醒着所有软件开发者——“面向客户,拥抱改变”,因为开发软件的最终目的是满足客户的需求,为了能够让最终的软件能够发挥其最大的作用,就必须做到这一点。

这里有一个典型的案例:某软件开发公司有个项目组作的是一个网游物品交易平台。 该平台是典型的互联网项目,在开工的时候客户对功能需求还不明确,在开发过程中需求也可能会随时发生变动,但需要快速推出抢占市场,时间非常紧迫。

    这个时候,应用传统的软件开发过程模型都不免会出现两个问题:能够迅速开发出软件,但面对需求的改变无法迅速调整(如传统的RAD模型);或是能满足需求的变化,但开发周期太长(如螺旋模型)。但是,这却正是最适合敏捷过程的项目。设想一下在项目伊始,商务分析师和客户做了深入的谈话,了解他的商业构想,他的盈利模式,搞清楚宏观的结构,然后思考并整理获得的结果,花1-2天时间将客户需求大略整理为几十个用户故事。这些用户故事并不完善,不足以做好整个系统。但对于我们开始项目的前一阵,已经足够了。正是敏捷过程中增量交付、不断迭代的实践方式和面向客户、拥抱变化的开发方式,使得开发团队能够迅速做出满足前期客户需求的的产品占领市场,获得先机。

 

如何有效地进行敏捷过程的实践

 

事实上,在敏捷过程模型提出之后,仍然受到了许多人的反对,而由于其面向客户、随时变化、不断迭代的特点,敏捷过程无法保证软件的质量百分之百万无一失,确实无法应对世界上所有类型的开发项目,这是毋庸置疑的。因此,我觉得有效进行敏捷过程实践的最重要的一点是能够准确识别开发的项目是否适用于敏捷过程模型,试想一下如果用敏捷方式去开发军方、航空航天相关的项目,是要出大事情的!

而在敏捷开发的过程中,保持业务人员、开发人员以及客户的有效沟通是非常重要的,我并不认为没有足够的技术水平就无法使用敏捷开发方法,但是可以肯定,一个不善于沟通协调的团队是肯定无法利用敏捷方法完成项目的开发的。

此外一个经验丰富、善于沟通的领导者也是不可或缺的,就像一艘远洋的轮船必须有一个老练的舵手,敏捷开发过程是十分紧凑的,合理分配人力资源和各阶段的进度,能够有效地提高开发的效率与进度。而敏捷方法的核心思想决定了开发期间必须与客户保持时刻的交流,一个优秀的领导者也是一个能准确捕捉客户需求变化并准确反馈给开发人员的人,而这些高效地沟通和反馈正是整个项目推进的动力。

 

(完)

你可能感兴趣的:(【软件工程】敏捷过程模型带来的启发与思考)