软件工程深度学习实践教学模式研究

软件工程深度学习实践教学模式研究

摘要:软件工程具有很强的工程性和实践性,在软件工程课程教学中,“如何开展学习”以及“如何促进能力培养”是需要研究探索和实践的重要命题。文章把深度学习思想引入到软件工程的实践教学中,从课程目标、内容设计、开展形式、教学指导模式等环节进行改革,详细介绍了专题设计、创设场景、分析问题、自主探究和协作交流、自我总结与点评等具体措施,发挥学生的主体作用,培养学生深度加工知识信息、深度理解复杂概念、深度掌握核心技术的能力,进而建构个体知识体系用以解决现实复杂问题。

关键词:软件工程;深度学习;实践教学模式

《软件工程》是计算机软件和相关专业的重要课程之一。软件工程以提高软件质量,降低软件的开发和维护成本为目的,将系统化、规范化、可度量的工程化方法应用于软件的开发、运行和维护的过程,从而将经过时间考验的管理方法和先进的开发技术结合起来。近年来,随着新兴经济结构的产生,计算机技术领域的不断发展,软件产业已经成为世界各国在信息时代新一轮的竞争焦点。软件工程专业以计算机科学与技术学科为基础,强调软件开发的工程性,不仅需要对软件需求分析、软件设计、软件测试、软件维护和软件项目管理等基础知识、基本方法熟练掌握,而且突出对软件开发、测试、维护和软件项目管理等专业技能的培养。目前国内外行业产业最需要的都是真正能够很好实践软件工程的人才。在软件工程课程教学中,“如何开展学习”以及“如何促进能力培养”是两个需要研究探索和实践的核心命题。软件工程教育界早已认同理论联系实际,突出实战能力的培养思想。而今,面对以碎片化为特点的浅层学习方式的渗透、覆盖和影响,越来越多的教育者和学习者已经开始认识到,流行的快餐式教育和浮光掠影的学习方式远远不能适应软件工程理论技术与实践发展的需求。反之,对信息予以深度加工,深刻理解和掌握复杂概念的内在涵义,建构起具有个人特点的知识体系,通过知识的吸收、迁移、内化来获得完成任务的能力,成为软件工程学科所必须的教育和学习理念[1]。

一、深度学习模式概述

根据学习者获取和加工信息的方式,可以分为深度加工和浅层加工。前者采用深度学习,这是一种主动的、批判性的学习方式。后者的浅层学习则是一种被动的、机械式的学习方式,被动接受、简单重复和机械记忆信息,缺乏对知识的深度理解、自我加工及长期保持,犹如沙滩上构建大厦一样没有基础,是无法实现知识建构、迁移应用及问题解决的[2]。从学习目标的角度看,根据布卢姆(B•S•BLOOM)对认知领域学习目标的分类,包括“知道、领会、应用、分析、综合及评价”这六个逐渐提高深化的层次,浅层学习的认知水平停留在“知道、领会”这两个层次,主要是知识的简单描述、记忆或复制,处于较低的认知水平,涉及低阶思维活动;而深度学习的认知水平则可对应“应用、分析、综合、评价”这四个较高级的认知层次,不只涉及记忆,更注重知识的理解和应用,处于高级的认知水平,涉及高阶思维活动[3]。显然,深度学习的实现与高水平思维的运用密切相关,发展高阶思维能力有助于实现和促进高级能力的获得,有助于提高学习者的思维水平和学习效能。从二十一世纪伊始,历经二十年,数字化、网络化、移动化的新型学习方式相继出现、发展到盛行,而越来越多的来自大、中学的调查研究和统计结果却表明,运用浅层学习虽然可以利用零星时间快速了解和接触碎片化信息,但在整体学习效率和综合效果上并没有得到了实质性的提高,相反,由于对新型学习工具和技术的不恰当使用,有些学习活动反而受到了阻碍[4]。高度信息化的知识经济时代更要求学习者能够深度加工知识信息、深度理解复杂概念、深度掌握内在含义,进而建构个体知识体系,用以解决现实复杂问题。深度学习已作为一种重要而有效的学习方式和学习理念,引起教育者和学习者极大的兴趣和关注。

二、深度学习模式在软件工程实践教学中的运用

(一)课程目标

要求学生通过软件工程实践课程的理论学习与实践练习,掌握运用工程化的方法开发软件项目的方法和技能,开发过程中应遵循的流程、准则、标准和规范,具备进行软件工程项目分析、设计、实现和进行有效的项目管理的基本能力。具体课程目标如下:1.掌握面向对象的软件开发基本过程、方法和工具,能用软件工程的方法开展软件项目的分析、设计、实现和维护。2.掌握软件需求分析的方法,包括结构化方法、面向对象、面向构件的方法等,学会根据需求进行合理的软件建模,学会编写符合规范、完整、明确的软件需求规格说明。3.掌握软件设计的方法,包括软件体系结构设计、界面设计、数据设计和模块设计等,学会建立软件设计模型,编写规范、完整、详实的软件设计文档。4.掌握软件实现的常用方法,学习使用合适的软件开发工具开发软件。5.掌握软件测试的基本方法,重点在测试计划和测试用例的设计,了解应做哪些方面的测试,测试数据如何设计,测试的内容和利用测试结果进行可靠性分析与预测。6.掌握软件开发过程管理和质量控制的基本方法,包括定义合适的项目过程、进行充分的可行性研究、需求分析、阶段划分、人员组织与分工、质量评估、缺陷检查与纠正、系统成本控制、系统配置管理和用户沟通等。

(二)实践教学内容设计

软件工程的学科和课程最大的特性之一是“工程性”,因此实践教学以培养学生的软件工程能力和素质为核心,按照“案例导向、项目驱动”的设计思想,以项目开发带动软件工程的理论学习,又以软件工程的理论来指导软件开发的实践。依据三个原则开展案例和项目设计:一是实用性原则,面向行业产业,面向应用,选择具有较强代表性的案例、项目,教学组讨论发掘各个选题的参考解决方案,同时,积极吸收和引用合作技术企业已有的项目进行改编,使之符合教学要求。二是可行性原则,主要看所选案例和项目对于学生来说有无理解、设计和开发的可能,要结合学生的专业方向、学习基础、知识和能力水平、特长兴趣等人员因素综合考虑,同时还要考虑现有的实验设备和环境资源等外在因素。三是创新性原则。要在案例和项目中尽量体现发展和创造性,如是否发现了新问题、构建了新模型、运用了新技能、改进了新方法,让学生通过学习和练习,不仅实现模仿,而且激发出创新的胆识和能量。

(三)实践教学的开展

实践教学分为课内实验和课外实践两部分开展。课内实验的目标是巩固所学章节的内容及技能,包括可行性研究与软件工程标准化实验、软件开发工具实验、软件分析与建模实验、代码编写实验、软件测试工具与单元集成系统测试实验、软件项目管理实验等,按照“案例导向、项目驱动”的设计思想,指导教师分析案例,提出问题,学生结合所选具体项目进行相应的练习,达到对问题的理解和解决。在课堂上完成的内容主要包括:项目开发指导,实例讲解,要点引导;小组讨论,小组报告;项目问题答疑和解决;教师和学生对各小组项目的阶段评审等。课外实践是一项综合性的工程实践,通过一个完整项目开发的全过程实践,培养学生综合性的软件工程能力。要求学生组成项目开发小组,采取组长负责制,组织结构可以根据组员的特长、能力来组内自定,各小组成员进行不同的工作职位角色的分工,角色可以轮换,以培养成员全面的能力[6]。教师定期或不定期地对设计过程进行监控,可以召开小组会议,听取汇报,面对面地答疑指导,还可以通过网络在线形式开展交流。鼓励项目组成员间利用目前流行的协同工作工具如GitHub、Teambox等进行交流和协同。课外完成的内容主要包括:项目调研和资料的查阅,项目各阶段工作的完成,包括计划、分析、设计、编码、测试、编写文档等。通过模拟软件企业的软件项目管理和开发过程,使得学生全面接触实际项目,积累开发经验。

(四)实践教学指导模式

1.专题设计

通过研究课程教学目标和课程教学内容,确定核心概念、方法、技能和要点,结合课程知识点把软件工程实践技术分为8个专题,如表1所示。

2.创设场景

深度学习围绕某个场景展开,依据教学目标创设场景。结合教学目标创设场景是深度学习的关键一步,直接影响后面各个教学环节的完成情况。在创设场景之前需要进行完善的评估,包括对课程的评估和学生的评估。对课程的评估要考虑知识点在知识体系的位置、所需的背景知识、难易程度、相关知识点的关联关系、扩展学习方向等;对学生的评估主要针对学生的专业基础、学习风格、兴趣爱好等。在合理评估的基础之上,根据专题要求和学生实际来采取合适的教学指导策略,激发学生深度学习的能力[7]。创设的场景通常具备四个属性:知识性,结合教学目标、覆盖相应的知识点,明确学生应掌握的基本原理、基本技能;实用性,与实际中的问题相结合,让学生感觉到“学有所用”,从而激发学生学习积极性;层次性,所设计的目标难度设定要适中,过于简单的场景无法引起学生的探索兴趣,而难度太高,则会让学生退却;扩展性,要为学有余力的学生留出发展空间,激发他们去做进一步的探索。

3.分析问题

学生进入场景,对场景所展现的问题进行识别,对涉及的对象进行提取,对各项条件进行梳理,试图发现和理解核心问题。教师起辅助作用,引导学生把实际问题与已经学习过的内容建立联系,展开自主思考。学生在教师的引领下,尽快发现需要解决的问题或矛盾、需要实现的目标是什么,找到问题的切入点,提取出问题的框架,并初步建立解决问题的模型。这是培养和训练学生自主学习和探索能力的重要环节,教师的指导十分重要,例如,教师应当在合适的时机提出问题,引起学生深入思考,要根据学生对场景的分析,判断学生的思路方向是否合理,认识是否到位,问题的提取和模型的初步规划是否合适等,教师需要时刻关注各小组的进展[8]。在这个阶段,教师角色由传统的“传道、授业、解惑”向“引路人、辅助者”转变,要求教师充分运用教学经验,灵活运用多种引导方法,并仔细观察,在学生探索的过程中了解其学习基础、认知能力、兴趣爱好、心理特征,对其思考能力和自我控制管理能力进行有意识的培养,为下阶段学生自主探索解决问题做好铺垫,实现有意义学习。

4.自主探究和协作交流

本阶段采用自主探究和协作交流的学习方式,在教师的引领下,学生开展自主学习、探究学习、交流学习。具体可以分为以下几个步骤:(1)选题。学生可在教师指定的课题中选择,也可自选项目,需对所选项目进行调查研究,给出可行性分析结论。(2)组队。学生自我协调,组成相应的开发团队,按照软件工程的标准编写软件开发计划,组内统一认识,并征求用户意见,修订完善。(3)需求分析。学生团队对系统和软件进行需求调研和分析,按照软件工程的标准编写软件需求规格说明书,并进行团队间交叉评审,文档和评审结果提交给评委(含教师、企业技术人员、市场推广人员和用户)。(4)概要和详细设计。学生团队进行系统及软件的设计,按照软件工程的标准编写相应的软件设计文档,并进行组内自我评审,文档和评审结果提交给评委。(5)软件测试。学生团队进行系统软件测试,按照软件工程的标准编写相应的软件测试文档,包括测试计划、测试用例、测试结果和分析报告等,提交给评委,作为项目验收的标准。(6)交付。学生团队提交课题最终成果,包括可行性报告、需求分析规格说明、系统设计规格说明、技术文档、源程序代码、可安装/执行软件、用户手册等。(7)项目验收。由评委对提交的课题最终成果进行验收测试,确认系统的状态。(8)项目管理。学生团队执行项目管理的各阶段任务,包括任务分解和责任分工、项目实施计划、进度跟踪、过程监督,项目的质量管理和控制,软件的配置管理和版本控制等。协作交流分为组内协作和组外交流,组内协作伴随实验的整个过程,每个成员要积极查阅资料,确定要解决的问题及问题的解决方法等,才能相互补充、相互完善、相互促进,圆满完成实验;组外交流是通过问答的形式完成,包括对其他小组的设计思路、系统结构、所运用的技术方法的学习,对其他小组存在的问题进行提问和讨论。这是以学生为主体开展训练、逐渐掌握和熟悉方法技能、积累经验的重要阶段。教师通过课堂答疑、课外网上交流来提供参考意见和相关资料,帮助学生去寻找解决问题的可能方案,而不是直接告诉学生答案;同时,还应鼓励学生有不同的想法,不同的解决手段,使之敢想、会想,激活其创造的火花。教师在此过程中的作用是定期或不定期地组织、协调、引导,控制讨论对象不偏离主题,对具有较大争议的问题进行引导,对难点问题进行答疑,在适当的时候为学生指明方向;整个过程充分发挥学生的主动性和积极性,从而使之在讨论交流中加深对知识的理解、在知识应用中去感悟、在操作中去体会,最终共同提高,既提升能力,又体验到深度学习的魅力。学生只有在经过了认真的问题分析、资料查询、自主探究、主动思考后,才可能进行有意义的协作交流,从而理顺思路,观点碰撞,成果分享[9]。经过这个阶段,把学习引入一个更深的层次,学生进行复杂的思维活动,完成分析问题、深入思考、思辨理解,潜力得到挖掘,优势得到发挥。

5.自我总结与点评

自我总结与点评是深度学习的最后环节,是对所学知识进行深化、迁移和提高,有没有总结点评、总结点评是否到位直接影响深度学习的效果。学生在教师的引导下对每个专题进行总结,对学习成果进行分析归纳,对当前知识点进行自我理解、吸收、运用与提高,并撰写研究报告,对每个专题中的理论知识、关键问题、关键技术等进行分析归纳,包括要解决什么问题,能够与哪些知识和技术进行关联,在这个领域有哪些新的进展和应用,在解决问题的过程中出现了什么新情况和新问题,本组和其他小组的解决方案有哪些相似和区别之处,各自的优缺点是什么,能否对现有的解决方案进行改进提高等问题,通过这些深度思考、评价等等内容,得出本次训练的收获,并进行展示。教师对小组展示进行补充,并指导学生完成研究报告,实现书面化总结。这个阶段促使学生学会反思、归纳和整理思路,对自己的知识体系进行调整,完成个性化知识体系的构建,获得更深层次的学习体验,以用于以后的开发实践。

三、结束语

针对软件工程内容广泛、技术发展快以及实践性强的特点,提出了深度学习的实践教学模式。在教学理念方面,一是突出对软件工程知识和方法等信息的深度加工过程,紧跟软件工程学科和技术发展前沿,保持教学内容先进性;二是突出软件工程专业特点,通过案例项目的教学和练习、探索性实践等多种活动,帮助学生深度理解复杂概念、深度掌握软件工程原理和技术框架的实质,进而建构个人化情景化的知识体系,得以解决现实复杂问题;三是通过软件工程实践,让学生参与实际软件项目开发,锻炼学生实际动手开发能力,培养创新精神。在具体教学方法手段方面,充分运用情境式、案例项目式、启发式手段,创设真实的问题情境,与工作岗位产生有效对接,有利于学生以后快速适应工作环境;通过对具体的软件项目案例的讲授,带动相关核心理论知识的模式学习,使学生能更加直观和自然地感受软件项目全貌、开发过程,培养学生的个人职业技能;采用启发式教学,从学生的知识基础,心理特点和接受能力出发,促使学生主动学习,自我构建知识体系;并以实际工作任务为目标,引导学生自主学习、互助交流和反思总结。在教学形式方面,采用课内实验和课外实践结合,推行团队协作模式,按照软件企业的项目管理和开发摸式,帮助学生组成软件开发团队,以合作的方式完成软件项目,经历一个完整规范的软件开发过程,以实现相应的个人能力和协作精神的培养。

参考文献:

[1]R•基思•索耶.剑桥学习科学手册[M].北京:教育科学出版社,2010.

[2]黄伟.教师基于博客群网络学习行为的实证研究———以海盐教师博客为例题[J].中国电化教育,2010(11):22-27.

[3]贾义敏,詹春青.情境学习:一种新的学习范式[J].开放教育研究,2011(5):30-37.

[4]王洪才,刘隽颖,解德渤.大学创新教学:理念、特征与误区[J].中国大学教学,2016(2):19-23+47.

[5]杜红乐,张燕.深度学习在实践教学中的应用研究[J].微型电脑应用,2015,31(4):37-40.

[6]李祁,王凤芹.DELC视域下的计算机基础课程深度学习模式[J].计算机教育,2017(5):108-111.

[7]宋慧敏.深度学习:应用技术型人才培养之必需[J].黑龙江高教研究,2017(12):130-133.

[8]赖绍聪.如何做好课程教学设计[J].中国大学教学,2016(10):14-18.

[9]马庆栋.新型工业化背景下应用技术型人才“协同培养”的逻辑起点及模式探讨[J].中国职业技术教育,2016(32):69-72.

作者:杨谊 喻德旷 单位:南方医科大学