基于敏捷开发的软件体系结构教学研究

2018-01-31 07:49
计算机教育 2018年1期
关键词:方法课程教学

丁 箐

(中国科学技术大学 软件学院,安徽 合肥 230051)

0 引 言

软件体系结构是软件学院针对工程硕士开设的一门专业类高级课程,学生通过学习该课程,能够掌握软件项目开发中的架构设计知识,了解一个软件系统的各种非功能需求如何满足。该课程必须通过实践操作,才能让学生更深入地理解和掌握。

目前,软件工程实践课程都采用传统的瀑布模型进行授课:首先教师进行理论课程知识点的传授,然后学生在实验课时内根据上课时传授的知识点进行相应的项目编程练习,软件产品的形态只有到了开发后期才能看到,但是学生一般没有开发经验,很难一步到位完成任务,而且学生普遍对撰写文档不感兴趣,导致教学效果不佳。敏捷软件开发以人为导向,主动适应项目需求的变化,因此本质上来说敏捷方法更加适合这类课程的教学[1-4]。

1 敏捷开发方法在教学中的应用

敏捷开发是目前在IT公司中使用最多的软件开发过程,其开发模型适合中、小型软件系统,能在短时间内开发出可运行的系统,因此得到了广泛的研究,例如唐涌等[1]讨论了全球化开发团队的敏捷开发模式;季铁等[2]通过对比以用户为中心的设计和敏捷开发存在的共性和特性,结合实际项目提出了将以人为中心的设计整合到敏捷开发过程中的方法;荣国平等[3]通过调研和分析嵌入式系统开发过程中敏捷方法的应用状况,研究如何通过扩展和改进敏捷方法,更好地适应嵌入式系统开发;田晓盼[4]则关注敏捷思想的理念与用户体验设计的结合,从而引出敏捷用户体验设计的概念,并将之应用到移动APP的设计和开发中。

在软件工程实践类课程中,引入敏捷开发方法可以更好地调动学生的积极性,使学生能够更好地适应未来工作中开发软件产品的流程,增强学生的合作意识和团队精神,并且针对学生群体差异调整教学内容。近年来,不少教育工作者在如何将敏捷开发方法应用到计算机类课程的教学中进行了有益的探索,其中部分研究者集中于软件工程课程。例如管林挺等[5]讨论了当前软件工程在教学中遇到的问题,提出了基于敏捷开发组织教学内容和教学实践的方法,并分析了这种方法的优点;朴勇[6]通过分析传统开发过程和敏捷开发过程在软件工程课程教学中的不同特点,提出了敏捷开发的教学要点、相应的支持工具;白鱼秀等[7]针对传统瀑布模型在软件工程实践课程教学中的不足,基于敏捷开发方法提出一种适合软件工程实践课程的教学方法,并给出了相应的实施方法。另一些学者则将敏捷方法应用到其他的计算机领域课程的探索,如顾家铭[8]针对物联网专业实践课程中存在的问题,采用敏捷开发思想,引入Scrum开发模式,并改革成绩考核方式;肖小聪等[9]将敏捷开发思想融入数据库课程设计中,提出了基于敏捷开发的数据库课程设计的总体思路、实验框架以及具体实施办法。然而,对于如何在软件体系结构课程中应用敏捷方法目前还没有相关文献。

2 课程内容

敏捷软件开发在实际应用中有很多具体的实施方法,如极限编程(XP)、精益开发(Lean Development)、Scrum等。在教学实践上,首先需要选定一种方法作为实施工具。经过多方比较,笔者选择了Scrum,它是一个迭代增量框架,采用周期方式完成产品开发,周期性工作称为Sprint,因此课程内容围绕 Sprint的设计来开展。

如表1,软件体系结构课程共50理论学时,分为6个阶段任务。每个Sprint开始时,项目团队从阶段任务列表中选择需要完成的项目,并在该Sprint结束前完成这些需求。Sprint期间团队成员简要汇报彼此的进度,Sprint结束后,项目团队演示他们所做的工作,并且反馈需要融入下次Sprint的工作。课程关联的项目是一个分布式系统里监控系统机群的智能监管系统,不指定具体的开发技术,仅要求需要完成的功能以及需要满足的各项非功能需求。课程的内容以软件体系架构的各种视图和质量属性为主,联系J2EE框架的各个组成部分,学生在每个Sprint中可以选择J2EE框架各层的相应技术完成本阶段的任务。Sprint3之前的开发技术为必须完成的任务,考虑到学生间差异较为明显,Sprint4和Sprint5的相关技术为选做内容,开发进度较快的学生可以采用这些技术对开发项目进行再次迭代,并比较不同技术对所开发项目各种非功能需求的影响。

Scrum团队一般由产品负责人(Product Owner)、Scrum主管(Scrum Master)和开发团队(Scrum Team)组成。产品负责人收集来自客户、项目团队等各方面的需求信息,追求商业价值最大化,输出需求优先列表,该软件在软件体系结构的教学中由任课老师担任;开发团队是软件的实现者,决定最终提交产品的质量,本案例中开发团队的规模是4人左右,选择一人作为Scrum主管,负责引导团队使用好Scrum;一般来说软件项目中的开发团队包括分析师、开发者、接口设计者、测试员等,案例中团队内部的职责划分由学生实施,但建议每名学生既承担开发任务,又承担测试任务。

3 实施方法

整个课程的Scrum实施过程包括以下几大部分。

1)开始Scrum。

即Sprint0阶段,教师介绍课程基本情况,列举项目所有产品需求,根据全部需求明确优先级,形成产品订单,开始Sprint 迭代。

2)Sprint迭代。

即Sprint1到Sprint4阶段,主要包括:

(1)开展迭代会议。

Sprint计划会议(Sprint planning meeting)要确定本次迭代结束按照优先级顺序需要提交的需求项以及评估小组在此次迭代中完成任务需要的时间,按优先级分解为任务,并在团队成员中分配。

站立会议中开发团队成员汇报进展和困难,更新完成每项任务的剩余时间,Scrum主管据此更新任务看板上的燃尽图。

评审会议,评估本次Sprint完成情况,为进入下一个Sprint做准备,根据上次完成的结果修改产品订单,重新确定优先级。

反思会议要求每个小组必须每天进行代码回顾,及早发现问题,通过对代码进行重构,反思得失。

(2)持续集成,小组每天进行一次代码集成。不同迭代阶段涉及同一层上采用不同技术开发的相同功能,在不影响程序正确性和功能的前提下,可以部分集成,并行开发。

(3)技术讲座,课程开展过程中结合课程内容会安排几次讲座,主要涉及目前流行的各种开发框架,学有余力的学生可以尝试采用这些框架在迭代中更换某些系统层。

(4)文档编写,采用敏捷开发的教学也需要部分文档的支持,本课程主要集中在软件体系结构中各种视图的展现,针对解决问题的不同角度,

要求各小组在迭代的各个阶段完成相应的视图。

表1 教学实践案例框架表

3)发布产品。

各小组提交最终产品,进行课程项目最终的考核评价。小组进行项目答辩,小组项目考核分数由教师评定分和其他小组评定分综合决定。考核的依据主要是系统的完成程度和功能(40%)、项目的难度(20%)、文档的正确性(20%)以及答辩表述(20%)。小组中每个学生的成绩由项目小组的分数和其在项目小组中的贡献率综合评定,最后结合课程理论考试的分数,得到该学生的最终成绩。

4 结 语

针对软件体系结构这门软件工程硕士专业的专业类高级课程,由于涉及大量的架构类理论知识,对没有大量编程训练的学生来说,要想较好地理解这些概念具有很大的难度。因此,通常来说该门课程需要增加项目练习来辅助学生理解概念。然而,采用传统瀑布模型,学生很难一步到位圆满地完成各个阶段的任务,导致教学质量普遍欠佳。

通过调研敏捷开发方式在软件工程以及其他一些计算机课程中的应用,笔者发现敏捷开发是基于适应的,通过主动适应项目需求的变化,从本质上来说更适合软件体系结构课程的教学。因此,根据课程的具体内容,笔者采用Scrum精心设计了各个Sprint的阶段任务、需要提交的内容和对应的理论知识,并根据该课程的特点制定了相应的实施方法,在实际的教学中起到了很好的效果,根据学生的反馈,对掌握该课程的各知识点有较大的帮助。

[1]唐涌, 马振勇, 张道林. 全球化团队的敏捷开发模式[J]. 东华理工大学学报(社会科学版), 2014, 33(1): 87-93.

[2]季铁, 谢琪, 陈宪涛. 将以用户为中心引入敏捷开发的方法探究[J]. 包装工程, 2013, 34(6): 50-54.

[3]荣国平, 刘天宇, 谢明娟, 等. 嵌入式系统开发中敏捷方法的应用研究综述[J]. 软件学报, 2014, 25(2): 267-283.

[4]田晓盼. 基于敏捷开发的移动APP用户体验设计研究[D]. 上海: 华东理工大学, 2015.

[5]管林挺, 顾沈明. 基于敏捷软件开发的软件工程教学研究[J]. 计算机时代, 2009(8): 45-46.

[6]朴勇. 敏捷过程在软件工程课程中的教学实践[J]. 计算机教育, 2015(24): 78-80.

[7]白鱼秀, 郑欢欢. 敏捷开发在软件工程实践课程中的应用[J]. 计算机时代, 2017(1): 85-86.

[8]顾家铭. 敏捷开发在物联网实践教学中的探索[J]. 软件导刊(教育技术版), 2016, 15(4): 19-21.

[9]肖小聪, 曹步清, 龚波. 基于敏捷开发的数据库系统课程设计教学研究与实践[J]. 当代教育理论与实践, 2016, 8(1): 37-39.

猜你喜欢
方法课程教学
当活动走向课程 少年已走向未来
微课让高中数学教学更高效
软件设计与开发实践课程探索与实践
为什么要学习HAA课程?
“自我诊断表”在高中数学教学中的应用
A—Level统计课程和AP统计课程的比较
对外汉语教学中“想”和“要”的比较
用对方法才能瘦
四大方法 教你不再“坐以待病”!
赚钱方法