山东华宇工学院 孙德刚
敏捷方法是一种以人为核心的软件开发方法,这种方法不仅被应用在软件开发领域,更在软件工程教学之中得到了广泛应用。基于此,本文阐述了将敏捷方法引入软件工程项目的优势和挑战,分析了基于Scrum敏捷方法的软件工程实验框架设计方案,并对其具体实施路径进行了论述,该设计方案的研究与实施能够为相关软件开发工作人员带来一个更为便捷的软件工程实验框架设计思路。
软件工程课程的实践性相对较强,只有基于有效实验,才能保证理论与实际的有效联系,进而让教学质量得到提升。敏捷方法在软件工程项目中的应用存在诸多优势,但也同样为软件工程实验项目带来了挑战。为了提高项目教学成效,相关教师必须帮助学生有效理解敏捷方法,保证理论教学与实验内容同步,让基于敏捷方法的软件工程实验取得良好效果。
敏捷软件开发方法是一种当前比较流行的用于应对快速变化需求的软件开发能力,它的核心是人,是一种遵循迭代和循序渐进的软件开发方法,应用时程序员与业务专家之间存在紧密协作关系和直接沟通渠道,还拥有紧凑而自我组织型的团队。它更多的是强调软件项目中组织团队的合作,从而有效提高了软件项目开发的效率,更能满足当下快速发展的项目开发体量大、工期紧等现实需求。
从软件工程敏捷开发方法自身看,分为思想、原则、流程、方法、工具、实施等,是软件即服务(Software as a Service)等软件开发模式的一种良好的阐释。比如,在SaaS开发模式下,产品一旦发布就能立刻部署到企业内部服务器上,用户随即就可以使用本软件的服务。和原有包装盒软件产品相比,SaaS开发模式下的软件迭代以及交付速度要快得多、并且软件交付成本几乎为零,大大降低了软件迭代、缺陷修复的成本,使软件产品持续交付成为现实。
以往,软件工程课程基于软件开发过程的瀑布模型设置教学大纲。也就是说,在课程规划方面,大多以概念、需求分析、定义、系统设计、详细设计和编程测试为路线设置课程内容,实验课程将会穿插在理论教学当中并与后者保持同步和自然衔接,因而实验教学非常容易实施。但基于这种方法培养的人才,与业内流行的敏捷开发方法要求不符,所以将敏捷开发方法引入软件工程教学十分必要。现阶段,引入敏捷开发方法,有着如下优势:第一,以小团队方式开展实践教学,可赋予学生充分参与实践的机会;第二,趣味性、参与性强,容易激发学生的学习兴趣和参与热情;无团队领导且强调自我管理,便于培养学生的集体荣誉感与责任感,有助于增强软件专业学生的自我管理能力;第四,关注工作产品的自身价值,学生可从中获得成就感与满足感,更能增强个人的软件开发与测试能力。
图1 基于Scrum敏捷开发过程模型
从上文中我们不难看出,将敏捷开发方法引入软件工程教学,有助于提高教学质量。但在这一过程也为软件工程的实验教学带来了挑战。敏捷方法的重点在于快速迭代,迭代周期大多为2-4周/次,若仅让学生完成单个迭代实验不利于学生理解该模式,只有让他们在学期内完成3-4个迭代并交付多个版本,才能较为完整地践行开发的敏捷过程。不过,从实际情况来看,若要完成多个迭代,则难以保证实验设计与理论教学的有效衔接,二者的不同步也将阻碍软件工程的实验成效。
传统的实验环境是基于瀑布模型建设的,它并不能满足敏捷方法的实际要求。比如,基于敏捷方法,应通过User Story(用户故事)和Product backlog(产品待办事项集合)来描述Scrum需求;任务工作量则需要小组成员的敏捷估算扑克游戏来估算。而且,实践中,还需要基于Burndown Chart即依赖燃尽图来控制实验进度,让任务帖子由“To do”向“In progress”、“Testing”和“Done”等栏目转移的过程保持可控。
软件工程敏捷方法的实验框架设计采用Scrum过程框架,共分为3个阶段,每一阶段设定为1个月。第1阶段为软件开发的前期准备阶段,包括信息收集、认知启动、数据流分析等工作。而第2、3阶段,对应敏捷开发的2个迭代周期,即Scrum过程模式中Sprint。在完成产品的开发过程中,还需要把软件需求分析与需求定义、软件设计方法、持续构建与集成、单元测试、功能测试和非功能测试等内容融入到软件开发与迭代过程,体现软件工程思想、项目管理、质量管理等内容。基于Scrum敏捷开发过程模型如图1所示。
现阶段,有关于测试驱动开发(Test Driven Development)即TDD、Scrum、结对编程、极限编程等敏捷方法的研究相对较多,为基于敏捷方法的实验框架设计提供了参考。对于软件工程而言,实践性强、实验多且难度大是其课程设置的主要特点,只有基于有效实验才能保证理论知识与实践训练之间的有效融合,所以在教学过程中实验内容不可或缺。
在进行基于敏捷方法的软件工程实验框架设计之前,相关工作人员需要对实践内容进行科学选定,从而保证课程的内容与软件工程课程具有同步性。比如,以Scrum过程框架作为软件工程实验教学的敏捷方法,用一学期的时间完成软件工程理论内容教学和相关实验。那么,Scrum框架的整体设计时限为4个月,在设计时应根据前期准备、第一个迭代、第二个迭代和第三个迭代来划分框架设计的全部周期,从而保证软件开发的完整性。以每一个月为1阶段周期,以第一阶段为前期准备阶段,后三个阶段为学生实践阶段。
2.1.1 前期准备阶段
在这一阶段,学生们需要完成软件开发前的所有准备工作。比如,产品定义、需求分析、数据结构和数据流分析、系统框架设计以及产品发布计划。此时,基于敏捷方法的软件工程实验教学内容应该与软件工程的基本概念、项目管理过程、软件过程、系统框架和需求工程等理论课程相对应。主要实验任务应该是建立团队、分析需求、估算工作量、定义产品、发布规划并设计系统架构。当然,分析基本业务流程和数据流、数据结构也可作为实验任务。实验后,应交付产品愿景、团队分工和Product backlog。
2.1.2 第一个迭代
所谓第一个迭代,就是软件开发过程中有关于产品功能特性开发的第一个迭代,这是Sprint的第一个阶段。设计实验框架时,相关工作人员应该基于先易后难的原则作业。因此,首个迭代较为简单,只要保证每一个Scrum环节都过一遍即可。比如,以制定Sprint计划、设计数据库、编程、进行仅限于功能测试的验收测试、开展产品Review和反思会议,完成Product backlog维护等实验任务。在实验后,交付Spring backlog、燃尽图、会议记录和第一版产品,并提供修改后的Product backlog。而且,实验内容应该与系统建模、计划项目、测试基本方法等理论课程进行有效衔接。
2.1.3 第二个迭代
与第一个迭代相比,第二个迭代在实验内容上增加了单元测试和UI设计;在可选任务中增加了结对编程、重构代码、每日构建和搭建继承环境等内容;实验后的交付内容与第一个迭代相同;理论教学衔接以案例分析、代码重构、结构化分析与设计和基础设施与部署等内容为主。
2.1.4 第三个迭代
相比于前两个迭代,第三个迭代的实验应添加代码评审内容,其可选任务主要为自动化测试、缺陷分析、可测试性测试驱动开发等内容;实验后需提供最终版本的燃尽图、产品和会议记录。教学时,应与风险分析与控制、持续改进过程、团队建设沟通、产品质量分析等理论课程内容衔接。
为了保证基于敏捷方法的软件工程框架设计的有效实施,教师应该以观察员的身份参与学生实验组的会议,但不宜参与讨论;在必要时,可为学生提供指导和示范,但教师应合理安排实践,从而保证所有学生都能获得来自教师的辅导和支持。而且,教师还应充分尊重敏捷团队的自我管理特点,以开放、包容、信任和鼓励的态度面对学生,引导他们参与管理过程,提高管理能力。比如,鼓励学生自主命题、组织学生参与实验答辩评定、引导自主确定团队分工等。
综上所述,基于敏捷方法的软件工程实验教学,能够有效提升该专业学生的实验能力、学习能力和应用能力,可为增强学生学科兴趣和实践创新能力奠定基础。在实际作业环节,相关教师需要基于实际教学需要,基于敏捷方法开展软件工程实验框架设计,并且通过教师引导和师生配合保证设计方案的顺利实施。