赵爱美 孙茂锋
摘 要: 针对瀑布模型在软件开发综合实训课程教学中存在的问题,分析敏捷开发的特点和优势。探索在软件开发综合实训课程中采用Scrum敏捷开发的实施过程。通过项目分解,Sprint增量迭代,频繁交付可运行的软件,培养学生团队合作精神和主动学习能力,从而提高教学质量。
关键词: 敏捷开发; Scrum; 软件开发; 项目
中图分类号:G642 文献标志码:A 文章编号:1006-8228(2015)11-81-03
Abstract: Aiming at the problems in the teaching of comprehensive practice training course of software development for the waterfall model, the characteristics and advantages of agile development are analyzed. This paper explores the application of the Scrum agile development process in comprehensive practice training of software development. Through the project decomposition, sprint incremental iteration and frequent delivery of the working software, cultivate students' team spirit and initiative learning ability, so as to improve the quality of teaching.
Key words: agile development; Scrum; software development; project
0 引言
在软件技术专业和计算机应用技术专业中都会开设软件开发综合实训课程,让学生通过完成1-3个简化的企业项目掌握主流的开发方法和软件开发过程,为将来步入社会打下知识与技能的基础。为了更好更快的开发出符合客户要求的软件,开发过程中一般会采用某个开发模型,教学中为了实现学校与企业的无缝对接,在开发项目时也会采用某个开发模型。本文简要分析了目前软件开发综合实训课程采取的开发模型及其存在的问题,在简单了解敏捷开发模型的基础上,探索软件开发综合实训课程中采用Scrum敏捷开发的具体实施过程,研究利用Scrum敏捷开发的优势。
1 目前开发模型和存在的问题
在高校软件开发综合实训课程的教学中,大都仍采用传统的“瀑布模型”开发模式。该模型将项目分成需求分析、概要设计、详细设计、编码实现、软件测试和运行维护六个阶段。各个阶段严格按自上而下的线性顺序实施。每个阶段都需撰写大量详细文档,这占用了大量的实训时间,前一个阶段完成后才能开始下一阶段。虽然学生急于看到的软件运行效果带着尽早编程的急切心情,也必须等到需求分析、概要设计、详细设计三个阶段验收完成后才能开始,这极大挫伤了学生学习的积极性。
这种瀑布模型是解决上世纪六十年代软件危机的很好方案,也是开发模型中的经典。但是瀑布模型强调文档的作用,以文档为核心,用户只有等到整个过程结束才能见到全部成果,严重延迟的反馈信息无疑增加了项目延期或失败的风险。在当今的软件开发中,很难看到完全实施“瀑布模型”的企业,越来越多的公司采用了敏捷开发。
据VersionOne[1]公司2013年的调查显示,在全球收集的3501份调查报告显示有88%的公司采用敏捷开发方法,Google、华为等大型软件公司也采用了敏捷开发。越来越多的国内中小软件企业也通过敏捷开发提升自身竞争力,包括笔者顶岗实习的北京盛安德科技有限公司。与传统软件过程、开发方法、传统项目管理方法相比,敏捷开发方法具有以人为本、成本低、开销小、效率高、灵活和响应快等优势。为了与企业接轨,使学生学以致用,我们应该密切与行业企业合作,改革目前过时的实训开发模式。
2 敏捷开发模型
2001年Kent Beck等17名专家共同签署了“敏捷软件开发宣言”,敏捷软件运动随之产生和发展。“敏捷”代表了互联网时代软件开发过程模式的一种先进理念和价值观。与传统开发模式相比,“敏捷”更强调沟通性、快速灵活地响应,关键在于持续交付可工作的软件[2]。敏捷开发积极主动地迎接和适应客户变化,允许和支持需求的不断变化,主张软件开发人员应紧密与客户合作、沟通和交流,把客户作为开发组成员,它集合了一整套价值观、原则和实践方法。敏捷开发的价值观[3]:个人和交互胜过过程和工具;工作的软件胜过面面俱到的文档;与客户合作胜过合同谈判;响应变化胜过遵循计划。目前有许多敏捷开发过程可供选择:XP(eXtreme Programming,极限编程)、Scrum、水晶方法等。Scrum软件开发模型是敏捷开发中的一种,应用最为广泛。
3 Scrum敏捷开发简介
Scrum敏捷开发过程是以人为核心、迭代、增量、循序渐进的开发,整个开发过程由若干个短的迭代周期组成,每个迭代周期称为一个Sprint,每个迭代实现不同的任务,迭代中重大的、优先级高或风险高的任务优先实现,每个迭代周期都有明确的目标,每次迭代都经过测试,具备集成和可运行的特征[4]。每个Sprint周期结束后可以交付一个可运行的软件。
采用Scrum敏捷开发的项目参与人员主要分三种角色,即产品负责人(Product Owner)、Scrum Master、开发团队。其中Scrum Master对项目全过程负责,是项目的推动者和组织者,确保Scrum流程正常运转。开发团队成员一般不多于7人,主要有设计、开发和测试人员组成,团队成员不能只负责自己擅长的领域,需要有配合全局的合作意识,如开发人员不能只负责编写代码,还需要进行测试。
Scrum敏捷开发项目执行的流程[5]。首先在产品负责人的带领下筛选出产品的总需求条目(Product Backlog),通过全体人员共同讨论对总需求条目进行优先级别排序,供团队进行开发工作。然后以1-4个星期为一个开发周期Sprint,团队根据Product Backlog确定Sprint周期内的任务,生成Sprint Backlog(周期内任务列表,Sprint Backlog为Product Backlog的一部分),确定Sprint目标。每个Sprint周期(一次迭代)分为设计、实现、测试等工作,团队成员主动认领工作任务,每天在不超过20分钟的站立会议上讲述自己的昨天工作内容、今天工作计划和当前工作难点。在一个Sprint周期结束时,整个团队对照Sprint Backlog列表演示新功能,完成演示和Sprint回顾总结,发布一个可执行交付的有价值软件,才可开始下一个Sprint周期的循环。这样原本几个月甚至几年的开发周期缩短至一个星期到一个月,让用户可以尽早体验软件的应用并及时提出问题或调整需求。
4 Scrum敏捷开发具体设计过程
学校的实训环境和公司的工作环境,以及学生和员工的工作能力有很大的差别,因此高校软件开发综合实训教学中不能拘泥于Scrum过程的全部形式,教师应对Scrum开发进行修改和优化。
4.1 分组和角色分配
Scrum主要有三类角色,一是Product Owner(产品负责人),该角色可安排熟悉产品需求的教师承担,负责产品需求的提炼、优化和优先级排序。二是Scrum Master(团队负责人),有开发能力强的学生担任,主要负责本项目成员的沟通和协调,老师协助Scrum Master的工作,监控项目执行。三是开发团队成员,一般由3-4名学生组成。团队成员注意开发能力强弱分配、男女搭配等元素,另外项目是在课余进行开发,所以要考虑宿舍因素。
4.2 项目选题和项目启动会议
软件开发综合实训课程分成两个阶段,第一个阶段(2-3个月)是教师给出固定题目,如:公司网站;第二个阶段(2-3个月)由学生自主选择项目,征求教师认可,如:毕业生管理系统、大学生报到系统等。
在项目的启动会议上,介绍敏捷开发的思想和执行流程,约定统一的开发规范和流程,以便学生掌握团队开发方法,并养成良好的编码习惯。
4.3 Scrum敏捷开发的执行流程
如图1所示,教师和项目组成员将整个软件项目分解成多个子项目(Product Backlog),开发过程中选择优先级高和重大的子项目进行开发,一个子项目为一个Sprint迭代周期,子项目又可以分成若干个工作任务(Sprint Backlog)。在每个Sprint周期内,学生主动认领任务,进行计划、编码和测试。每日项目组有一个不超过20分钟的会议,主要汇报三个问题:上堂课到目前为止做了什么?有什么难点和问题?今天打算做什么?并更改自己的Sprint燃尽图(Sprint burn down)。通过该会议让项目组成员了解目前项目进度。每个Sprint 周期结束后,开一次Sprint评审和回顾会,对照Sprint Backlog演示软件的功能,看是否完成了本次Sprint目标,会上每位学生回顾自己所做工作以及需要改进的地方,教师给予点评和总结。会议的成果可以交付一个可运行的软件。下一个Sprint周期是现有软件的增量迭代,因此可以持续交付包含新功能的软件版本。总之,敏捷开发就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
4.4 结对编程
一个任务交给两个开发人员。两个开发人员同时坐在一台电脑前面,一个编程,另一个实时检查,然后互换角色。与传统一个人一个任务相比,两个人一起协作可以互相促进、相互学习,实现提高。
5 Scrum敏捷开发在软件开发综合实训教学中的优势
在软件开发综合实训教学中使用Scrum敏捷开发主要有以下优势。
Scrum提高了学生学习积极性和主动性。Scrum敏捷开发模型要求尽早编码这恰好迎合了学生软件开发实训时急切渴望进行编程的心理,激发学生学习的积极性。同时能够频繁交付可运行的软件,使学生有极大的成就感。同时在项目的开发中,开发成员主动认领开发任务,每日的站立会议会使落后的学生意识到自己的差距,这在团队中能够形成良好的竞争机制,主动学习和提高。
Scrum提高了学生的软件开发技能。瀑布开发模型在整个开发过程中都需要撰写大量的开发文档,比如在需求文档写出来后,开发人员根据需求文档来编写代码,一切以文档为依据。敏捷开发只写必要文档,这节省了大量的实训时间,使学生有时间专注于编码和测试工作,从而提高学生的开发技能。
6 结束语
作为一种新兴的开发模型,Scrum敏捷开发方法的理论和实践还在不断的完善创新之中。教师在教学中使用Scrum敏捷开发模型组织教学时,更应该根据实际情况进行修剪和完善。实践证明,在软件开发综合实训课程中,我们尝试采用修剪的Scrum敏捷开发模型能够激发学生学习兴趣,提高学生开发能力和团队协作精神。
参考文献(References):
[1] 资料来源:http://www.versionone.com/.
[2] Robert C. Martin.敏捷软件开发-原则、模式与实践[M].清
华大学出版社,2003.
[3] 王敏.基于Scrum敏捷开发的软件过程管理研究 [D].昆明理
工大学,2010.
[4] 林晓宇.基于Scrum敏捷方法的软件工程实践教学探索[J].
电脑知识与技术,2011.19:4762-4765
[5] Henrik Kniberg. Scrum and XP from the Trenches[M].
C4Media Inc,2007.