本文将介绍敏捷开发在Web开发中的重要性。通过介绍Scrum和结对编程等常见敏捷开发方法,使读者了解应用尝试敏捷开发。
软件开发模型是计算机应用开发迅速发展形成的产物,目的是为了更快更好的开发出符合用户需求的软件。我们所熟知的软件开发模型有,瀑布模型、快速原型模型、增量模型、螺旋模型、混合模型等等。而近年来,敏捷软件开发模式被越来越多的大公司所采用,我们所熟知的,Google、Facebook、Youtube、Baidu、Amazon、Taobao等众多知名公司,无一例外。本文将介绍敏捷开发模式的特点及其在web开发中的应用。
1 敏捷开发模式的意义
众所周知,敏捷(Agile)一词来自于2001年初美国犹他州雪鸟滑雪圣地的一次敏捷方法发起者和实践者的聚餐。而早在1990年起,人们就开始寻求一种可以应对迅速变化的需求的软件开发方式。敏捷开发模式能够使得团队频繁交付新软件,减少快速变化的需求带来的困扰,并且迅速提高团队成员的编程能力。
2 敏捷开发模式的原则和方法
敏捷开发模式之所以能够应对快速变化的需求,依赖于以下几个必要原则。
2.1 尽早获取用户需求并不断交付有价值的软件
在一个项目组中,会有不同的角色承担不同的任务。首先是项目经理(Project manager),其主要负责确定用户需求,制定项目开发计划,协调团队成员在规定期限内完成项目开发和交付。当项目经理与用户沟通获取项目目标并制定项目开发计划之后,就需要业务分析师(Business analyst)与用户进行沟通,获得项目开发的具体需求,用户体验设计师(User experience designer)根据需求分析设计界面,软件开发者(Developer)进行软件开发,软件开发完成后交给测试人员(Tester)进行软件测试,从而交付软件。在以前的软件开发模式中,普遍依赖业务分析师和用户沟通所完成的需求分析报告而进行软件开发和交付。这样做的弊端在于,用户在提出需求和得到交付软件之间对需求本身可能发生变化,业务分析师在与用户沟通并创建需求分析报告时对需求本身也可能产生误解,而开发者本身对需求分析也会产生误解。这就使得花费大量人力物力所开发的软件最终不能被用户所接受。而采用敏捷开发可以避免这种情况。
敏捷开发中有一种叫做Scrum的迭代增量式开发过程。其目的在于缩短交付周期,不断交付有价值的软件,使得在软件最终交付时最大程度满足用户需求。这就需要改变传统的软件交付模式,当项目经理和用户沟通时,需要设定阶段行的目标和任务,由业务分析师和用户就已经确定的需求进行需求分析并且在制定需求分析的同时与开发人员及时沟通,避免软件过度开发,这样就可以缩短软件交付期限。将原本一年甚至几年的开发周期缩短至两个星期到一个月,每次交付部分有价值的软件,这样用户可以尽早体验并及时提出问题和调整需求。
2.2 制定详尽的开发和交付流程
将软件开发周期从几年缩短到一个月甚至两个星期,这需要制定详尽的软件开发和交付流程。而详尽的软件开发和交付流程也是实现Scrum所必须遵守的。
在Scrum中一个交付周期被称为一个Sprint。在每个Sprint开始之前,要有一个Sprint的计划会议(Sprint plan meeting)。Sprint计划会议是在业务分析师和用户确定好当前阶段的需求分析之后,将可以进行开发的部分按照需求的优先级顺序排列好开发任务(Story), 再由开发人员对任务进行难度评分,最后团队根据可变因素如团队成员情况,开发环境状态等确定下一个Sprint的任务。为了加强团队内部的沟通和及时掌握开发交付情况,Scrum要求团队每日开站立会议(Stand up meeting),站立会议通常1到2分钟每人,主要说明前一天的工作内容,存在什么问题,以及今天的工作计划。当然在每个Sprint快结束的前一天,要开评审会议,来报告进度,通常情况下是软件发布会议制定软件当前Sprint的软件发布计划。中国有句古话叫做“吾日三省吾身”,每个Sprint结束还有一个最为重要的会议就是回顾会议(Retrospective meeting)。回顾会议主要是总结上一个Sprint,保持优点,克服缺点。确保每个会议的有效性是Scrum实现的基础。
2.3 结对编程,提高软件开发效率
当需求明确且计划详细之后,对于软件开发最重要的就是提高开发效率。只有提高开发效率才能在短时间内向用户提供有价值的交付软件。对于提高软件开发效率,敏捷开发有一个很好的方式叫做结对编程(Pair programming)。所谓结对编程,就是一个任务交给两个开发人员,两个开发人员同时坐在一台电脑前面,一个人编程,另一个人实时检查,然后互换角色。当然,也可以和测试驱动设计(Test Driven Design)相结合,一个写测试用例,另一个通过实现代码使测试通过,然后互换角色。结对编程的好处在于,与传统开发一个人一个任务相比,两个人一起协作,可以尽快确定测试用例和程序接口,实时检查代码减少代码调试时间,互相学习软件开发设计技术,避免因成员变动阻碍开发进度。对于结对编程的两个人,只要两个人有互补,就可以在一起结对编程。例如,一个开发人员可以和一个需求分析师一起结对编程,需求分析师了解任务需求,可以负责编写测试用例,开发人员实现测试用例,从而使开发更满足需求。用户体验师也可以和开发人员结对编程,开发人员每实现一个功能块,用户体验师都可以进行实时的检查,从而更满足用户的体验。结对编程,看似浪费人员,因为同一时间做的任务变少,但是却能够大大提高编程效率和开发质量,是敏捷开发中重要的实现方法之一。
作者:王贯飞 来源:电子技术与软件工程 2015年9期