敏捷在项目实例开发课程中的运用
2018-06-13刘静静
刘静静
摘要:随着对需求响应的速度越来越快,瀑布模式已经跟不上现在需求的快速变化,越来越多的企业都开始往敏捷开发的方向转型。敏捷可以更快的适应市场的需求,大大缩短了从客户提出需求到客户可以使用新功能的时间,有很多企业甚至可以做到对部分功能的当日提出当日上线。所以,项目实例开发课程,也使用敏捷开发的方式来进行,使学生在通过实例开发锻炼项目开发的同时,也学习目前企业最流行的软件开发方式,学生毕业后可以更快的融入公司的开发团队之中。
关键词:敏捷;课程;项目开发
1 引言
在IT领域,需求变得越来越复杂和多样化,项目开发的失败率越来越高,于是几个软件开发领域的专家聚在一起,讨论如何来应对这一难题,在各种分析和讨论之后,他们提出了一种新的开发思想,并命名为敏捷。同时提出了敏捷开发的四个价值观和十二条原则[1]。
敏捷软件开发最常用的目前是Scrum,其软件开发方式如下[2]。
Scrum 规定了5个正式事件,用于检视与调整:需求梳理会议、Sprint计划会议、每日 Scrum 站会、Sprint评审会议、Sprint回顾会议。
Scrum 团队定义了三种角色:产品负责人、开发团队和Scrum Master。
Sprint是Scrum的核心,其长度(持续时间)为一个月或更短时间的限时,在这段时间内 构建一个“完成的”、可用的和潜在可發布的产品增量。
Scrum 工件包括:产品待办列表、Sprint 待办列表、增量。
2 敏捷在项目实例开发中的运用
首先,我们会把学生进行分组,每个小组包含8个人左右,每个小组为一个Scrum团队。每个Scrum团队的任务都是去完成冬夏令营系统,为方便描述,下面我们以夏令营系统为例。
每个Scrum会首先从需求入手,使用用户故事形式来写需求,并使用用户故事地图的方式来组织需求。然后按照Sprint的方式来把一个项目分为几个迭代,让学生练习Scrum里面的5个实践。
每个Scrum团队为夏令营系统创建用户故事,然后使用用户故事地图[3]来组织史诗故事和用户故事。见图1.
每个团队会持续更新上面的用户故事地图,每一行代表一个版本。每个Scrum团队会使用三个迭代来完成这个系统,每个迭代两周。
团队先开始计划会议,来计划第一个迭代要做的用户故事,以及创建任务并进行分工。然后迭代里的每一天,大家会开站会,每次15分钟。团队在当前迭代还会开展产品梳理会议,我们这个会议设置在迭代的第六天。在迭代的最后一天,大家会进行评审会议,一起来演示当前迭代完成的功能。最后一天还会进行回顾会议,团队一起来总结当前迭代做得不错的地方以及需要调整的地方,并制定出相应的行动事项。
如此往复,一直到系统完成。我们会选定一些会议让大家在课堂上来开,比如评审会议,团队会演示当前完成的系统给课程老师,老师会给出一定的反馈和评价。课程上还会进行回顾会议,课程老师也会对学生们的合作以及代码给出反馈,让团队下个迭代可以做的更好。课堂上尽量安排让每次会议都进行几次,来提高学生对Scrum的运用水平。除了课堂上进行的部分,剩下的都有学生在课下自己完成。
除了Scrum本身,我们还让学生练习了敏捷的工程实践。第一个是整洁代码规范,让大家写出更易读,更易维护的代码。
第二个是单元测试,本系统使用Junit[4]。同时,使用Jacoco[5]来为单元测试生成代码覆盖率。
第三个工程实践是重构,让学生们使用重构来不断地提高代码的质量。
第四个工程实践是自动化测试,如果每次都把已经完成的功能重新测试一次,每个迭代开发的时间就会越来越短,如图2所示。
所以在Scrum的模式下,自动化测试是非常关键的工程实践,我们选取Cucumber[6]和Selenium 来实现系统的自动化测试。
为了体现团队合作等方面的一些信息,我们使用了一些图表来反映团队的情况。图3是迭代的燃尽图,图4是累积流图,图5是周期时间分布图,图6是缺陷控制图。
3 应用结果分析
通过使用Scrum的方式来完成项目实例开发这么课程,比起原来只是简单的让大家完成一个系统的开发,能够同时让学生可以学习到目前最为流行的软件开发方法,并实际参与到一个敏捷开发项目之中,体验每一个环节。除了方法本身的学习之外,也锻炼了目前最为流行的几项工程实践。第三,学生还对数据分析和度量有了深入的了解和认识,为以后在工作中不断取得进步打下了良好的基础。使用这样的方式完成项目实例开发这么课程后,可以让学生在毕业以后可以快速的融入公司使用的开发方法之中,甚至还能为其过程和方法做出应有的贡献。
参考文献:
[1]敏捷宣言 http://agilemanifesto.org/iso/zhchs/manifesto.html
[2]Scrum指南http://www.scrumguides.org/docs/scrumguide /v2017
[3]《用户故事地图》
[4]https://junit.org/junit4/
[5]https://www.eclemma.org/jacoco/
[6]https://cucumber.io/