基于OBE理念的“软件工程”课程重塑
2018-01-04刘强
刘强
摘 要:研究和分析了当前广泛开展的OBE教育方法,结合清华大学软件工程专业的软件工程教学,基于OBE理念对整个教学方案进行了改造和优化,重新设计了课程学习目标、教学内容框架、项目实践方法和课程实验环境等部分。重塑后的教学方案体现“价值塑造、能力培养、知识传授”的教学思想,以学生的课程学习效果为目标驱动,注重软件技术能力、工程实践能力以及解决复杂软件问题能力的培养,实施先进的工程教育教学方法,通过科学的评价方法来评估学生的课程学习效果,持续改进教学质量。
关键词:软件工程;OBE模式;教学设计;能力评价;实践教学
一、引言
以互联网为核心的新一轮科技和产业革命正在驱动着新经济的形成与发展,工程科技的进步和创新成为推动人类社会发展的重要引擎,尤其是软件技术和产业的发展水平也成为国家“硬实力”的一种象征。随着云计算、大数据、人工智能、物联网等技术引领的智能时代的到来,当前软件工程人才的培养正在面临着技术的快速发展、软件系统规模和复杂性的不断增长、工业界对工程能力要求的日趋提升等诸多方面的挑战。因此,如何培养适应新经济发展以及产业转型升级需要的高水平软件工程人才,成为我国高等学校软件工程教育面临的一项重大挑战。
在新经济的环境下,面向未来的知识和技术的更替越来越快,产业结构的不断调整以及产业的优化升级对软件人才的知识、能力和价值观等方面提出了更高的要求。从国内高校软件工程教育的现状来看,课程体系和教学内容难以跟上新经济时代软件工程的最新发展,教学设计并未从根本上突破传统的以学科知识体系为核心的组织模式,缺乏有效的工程思维训练与工程能力培养,与课程教学配套的实验环境更是与业界流行的基于云服务的开发运维一体化平台相差甚远。面对新的问题与挑战,软件工程教学应该秉承新工程范式的教育理念,以新经济时代对提升工程素质和实践能力的要求为出发点,在课程体系、教学设计和实践环节上进行改造和重塑,为培养高水平、厚基础、强能力的软件工程人才打下坚实的基础。
二、以学习成效为导向的教育模式
进入以新技术、新业态、新产业为特点的新经济时代,工程教育开始从片面强调基础研究回归到追求工程实践的本真,重视学生的工程能力培养已经成为世界各国高等工程教育的共识和新趋势。近年来,随着国内外工程教育认证的发展[1-3],成果导向教育(Outcome-Based Education,OBE)成为各国工程教育改革的主流理念,以工程能力为核心的学习产出被视为一项重要的质量准则。
OBE教育理念是由斯帕蒂(Spady)在1981年提出的,它的关注重点并不在于课程的教授内容,而是在于学生的学习成效,即学生真正拥有的知识、能力和素质。自2006年开始,教育部在国内推进实施工程教育认证工作,OBE教育模式在国内高校逐渐兴起,传统的“以内容为本”的教学理念开始向“以学生为本”的模式转变,课程教学设计以学习目标和结果为导向,注重学习成效和毕业要求的达成,并通过持续改进来提升工程教育的质量。
OBE模式是一种面向产业需求的、强调能力培养和能力训练的教育模式,图1给出了这种模式的整体框架。从整个专业教育来说,应该面向行业需求,以专业培养目标和学生培养成效为导向,构建整个专业的培养方案和课程体系,通过课程学习、专业实践、毕业设计等环节培养学生应具备的知识、能力和素质。然而,专业教育的培养目标和学习成效需要映射到各门课程来达成,课程学习是专业教育的基础培养环节。从课程教学来说,需要明确课程学习对学生培养成效的贡献度,以此为依据设计课程教学方案,包括学习目标、教学内容、教学模式和评价方法,以成果为导向实施课程教学,对学生的学习成效进行分析和总结,并持续改进课程教学质量。
三、基于OBE模式的软件工程教学设计
在计算机科学和软件工程专业,软件工程课程是本科生阶段的一门重要课程。在新经济时代,我们应该从行业对现代软件工程人才的需求出发,采用OBE理念对课程教学进行设计和重塑,形成以学习成效为导向的新型教学方案。在这里,将从课程目标、教学内容、项目实践和实验环境等部分,介绍基于OBE模式的课程教学方案。
1.课程学习目标
清华大学软件工程专业的培养目标是学生应该掌握软件工程领域的基础理论与专业知识,能够选择和运用合适的技术、方法和工具,系统地分析和有效地解决复杂软件问题,具备良好的沟通交流和团队协作能力,致力于终身学习并追求职业发展,能够提出有创造性的见解并推动技术创新,具有高度的社会责任感和职业道德,在个人职业生涯中彰显自信和技术实力,并在产业、学术和管理等方面发挥引领作用。
结合软件工程专业的培养目标,进一步明确了学生毕业时通过专业学习和培养所能达到的“知识、能力、素质”要求,即学生的培养成效:
SO1.应用数学、计算机科学和软件工程知识的能力;
SO2.设计和实施实验以及分析和解释数据的能力;
SO3.考虑在经济、环境、社会、政治、道德、健康、安全、易于加工、可持续性等现实约束条件下, 设计和开发满足用户需求的软件系统的能力;
SO4.在多学科团队中工作的能力;
SO5.发现、提出和解决软件工程问题的能力;
SO6.了解软件工程专业的职业道德和责任;
SO7.有效沟通的能力;
SO8.具备宽广的知識面,能够认识到软件工程方案在全球、经济、环境和社会范围内的影响;
SO9.认识到终身教育的重要性,并有能力通过不断学习而提高自己;
SO10.具备从软件工程专业角度理解当代社会和科技热点问题的知识;
SO11.综合运用技术、技能和现代工程工具来进行软件工程实践的能力。
在清华大学软件工程专业的培养方案中,“软件工程”课程是一门核心的专业必修课,包括48课内学时和96课外学时,在三年级秋季学期开设。根据专业培养目标和学生培养成效,以及该课程对学生培养应起到的支撑作用,我们定义了下面的课程学习目标:
LO1.理解软件工程基本概念、软件过程和开发技术等方面的基础知识;
LO2.运用敏捷开发方法进行软件开发;
LO3.能够获取软件需求以及编写需求规格说明;
LO4.理解不同的可选方案,能够权衡现实约束条件提出适当的技术方案;
LO5.设计和实现满足期望需求的软件系统;
LO6.实施有效的评审和检查,对所开发的软件进行系统测试;
LO7.选择和运用适当的方法和工具进行软件开发实践;
LO8.充分理解团队合作的重要性,具备个人工作和团队协作的能力;
LO9.以口头和书面等形式进行有效的沟通;
LO10.认识到软件工程在产业界的发展以及在社会变革中的影响;
LO11.利用网络资源进行自主学习,不断拓展自己的知识面;
LO12.自觉遵守知识产权的相关约定,有识地分享知识和经验。
在OBE模式中,课程学习目标不再单纯强调理论知识的学习,而是注重“知识学习、能力培养、素质提高”的综合目标,强调学生运用软件工程的原理、方法和技术解决复杂软件问题的能力。因此,课程学习目标需要与学生培养成效相关联,并给出每一个学习目标对应培养成效的关联矩阵,如表1所示。其中,课程目标与培养成效之间存在三种关联,C-Covered表示课程内容涉及该能力的培养,E-Emphasized表示课程内容强调该能力的培养,AE-Assessed & Evaluated表示课程要对该项能力进行评价。
2.教学内容框架
在本科生教育阶段,课程学习应该让学生对各种技术和技能背后的科学基础和基本原则有透彻的理解和扎实的掌握,从而可以很快适应未来不断发展的环境。另外,软件工程教学除了讲授核心知识以外,与实践紧密相关的应用技术也是不可忽视的重要内容,它们是核心知识的运用示范,起到构建理论和实践的桥梁作用。因此,我们结合课程学习目标,以软件工程的基本原理和解决问题的技术能力为核心,结合现代互联网的开发技术和真实项目的教学案例重构教学内容,形成了如图2所示的教学内容单元。
在上述课程体系的重构中,一方面要注重软件工程的根本性和永久性原则,诸如权衡和选择方案、抽象和封装、模块化和重用、工程化开发过程等,关注软件系统的复杂性问题以及演化性规律;另一方面应强调解决复杂软件问题的技术能力,更多关注现代软件开发环境下新型软件工程形态的技术和方法,诸如敏捷开发方法、Web应用开发框架、测试驱动开发方法、自动化测试、持续集成与交付等内容,完全反映软件工程领域的前沿技术和最佳实践。另外,考虑到大多数本科生基本没有参与实际项目开发的经验,采用说教式的知识讲授对他们来说犹如“天书”,很难理解和掌握软件工程的基础理论,更不用说在实际开发中加以运用,因此课程应该采用案例式教学方法,把抽象的理论内容融入具体的案例场景中,再通过“启发—提问—引导”的方法培养工程思维模式,实现理论知识的转化以及理论与实践的结合,从而让学生在案例学习中把知识掌握“活”。
3.项目驱动的实践教学
如前所述,软件工程课程是一门综合性和实践性很强的课程。项目驱动的实践教学是以项目为主线、实践为导向、任务为载体,把软件工程的原理、方法和技术内化在整个项目开发过程中,通过团队协作的方式来解决实际问题,从而培养学生处理复杂软件问题的能力。这种方法具有情景真实、目的明确、趣味性强的特点,可以更好地激发学生自主学习的兴趣和主动探索创新的积极性,使学生在真实的项目环境中锻炼工程化的思维和实践能力,养成良好的职业素养。
图3给出了项目驱动实践教学方法的关键要素,其中项目选题是项目驱动教学方法的关键部分。项目选题应基于真实的问题和用户需求,综合考虑学生的基础知识和认知能力,选择可体现学习目标、有一定挑战度和学生感兴趣的项目。教师需要对项目驱动的教学过程进行认真规划,一方面学生要发挥学习的主体作用,在项目实施过程中设计阶段性的目标以及与之匹配的任务情景,激发学生通过自主学习和协作学习的方式进行问题求解和完成任务;另一方面,教师要发挥引导和启发作用,结合问题和案例讲解有关的重点和难点内容,通过互动交流的方式指导学生进行实践。
在清华大学软件学院的课程实践教学中,我们要求学生以团队(通常由4~5人组成)的方式开发一个具有一定复杂度的软件系统,将项目开发与课堂教学、单元作业和学习评价相融合,注重学生的职业素质训练和实践能力培养。
(1)团队组建。学生自愿组建团队,选择成员需要综合考虑技术能力、投入时间、工作态度、配合程度等因素,所有成员在团队工作模式和规则上达成共识。
(2)项目选题。教师预先提供若干结合校园应用场景的真实项目选题,校园应用场景适合学生理解应用问题,也方便与实际用户进行沟通。当然,学生也可以发挥创造性进行自主选题,但必须有明确的应用背景和用户代表,技术难度和工作量与教师提供的预选题目相当。
(3)开发过程。项目采用敏捷方法进行迭代式开发,实行基于Git的协作开发和持续集成。在项目启动和每次迭代开始阶段,教师将引导学生制订产品规划和迭代计划,开发团队以两周为一个迭代周期,通过任务分工协作完成迭代開发。在每一个迭代结束后,教师和助教对开发过程和迭代成果进行检查和验收,并结合学习目标评价学生的学习效果。
(4)交付要求。开发团队最终交付一个完整可用的系统,产品成熟度需要达到上线提测标准,系统可以成功部署运行。交付制品作为项目实践的最终结果,需要从用户满意程度、设计和编码的质量等多个维度进行评价。
(5)职业素养。尊重他人的知识产权,使用开源或他人的成果(诸如代码、文档、 设计方案等)需要获得允许并按照协议使用,明确注明并给出具体来源;个人应有责任参与行业发展和技术进步,鼓励发布博客文章进行技术和经验分享。
4.课程实验环境
工欲善其事,必先利其器。在软件工程中,开发工具和平台对工程化开发的支持至关重要,强大的开发环境可以有效提高开发效率和产品质量。随着敏捷开发方法的普及和发展,开发运维一体化(DevOps)成为业界流行的模式,强调在云平台的基础上使用技术工具,把传统的手工模式转变为自动化流程,实现高效协作、快速迭代、持续集成和可靠交付。因此,为了支持课程实验项目的工程化开发,我们构建了基于云服务的DevOps开发环境,实现对课程项目实践的有力支撑。
图4展示了一个支持Web应用项目开发的DevOps工具链,具体内容如下:
(1)基于Github Projects+Issue的管理模式,实现团队成员之间的任务管理,同时使用Wiki进行文档协作编写;
(2)采用基于Git的版本管理系统,有效维护和控制代码变更;
(3)在代码检查、单元测试、功能测试和性能测试等不同测试环节,使用工具实现测试的自动化,有效保证代码质量;
(4)使用支持不同开发语言的包管理工具,实现组件化开发和构建管理;
(5)基于Jenkins或Travis CI以及Docker等工具,实现持续集成、持续交付和自动化的部署;
(6)使用日志采集分析系统ELKStack,实时监控和分析系统运维日志数据。
四、面向工程能力的课程评价方法
基于OBE模式的课程教学始终围绕学生的学习成效进行设计和实施。传统的知识考核更多反映了知识记忆的效果,简单粗放的项目评价也只是一个总体成绩,这些都无法分析和评价学生在课程目标上的实际达成度。因此,需要建立一种OBE模式的课程评价标准,从多个维度进行系统化的全面评价,检验学生在知识、能力和素质方面所取得的学习效果。
根据课程的重点考核目标,我们定义了相关目标的评价方法,如表2所示。其中,关于基础知识部分,以期末考试的形式进行考核,主要涉及软件工程的基本概念和方法;对于学生在课堂上的表现,以问题讨论和项目迭代汇报进行评价,着重于问题分析和沟通表达等方面;对于个人技术能力,采用单元作业的形式,重点评价组件设计、代码质量和单元测试等方面的能力;课程项目是学习的考核重点,以团队分工和过程制品进行评价,项目评价细化到每一次迭代的结果和表现,在评价整个团队的同时还会考虑个人的贡献度。从表2的示例数据中可以看出,SO3的培养成效并未达到期望值,经过进一步分析得知测试部分的训练还需要加强。
软件工程强调工程开发实践能力,上述评价体系将基础知识、课堂表现、个人作业和团队项目结合在一起,具备了知识考核和能力评价的双重功效。整个体系突出对项目实践效果的评价,在系统需求、软件设计、代码质量、产品测试、 过程管理、软件工程文档等多个方面细化考核项,反映出学生在课程学习过程中的真实效果和获得的能力。
教学是一个不断迭代和持续改进的过程,根据课程学习目标以及培养成效的评价结果,我们可以分析课程教学的成效和存在的问题,并进一步形成课程教学的改进方案,从而不断提升教学质量。
五、结语
软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决问题,软件开发的工程思维训练和实践能力培养成为人才培养的关键因素。现实中,软件工程领域的发展变化非常迅速,往往一个特定的开发技术或应用技能在几年后就会过时甚至消失。因此,软件工程是一门比较难教和难学的课程,传统的教学模式无法取得良好的教学效果。
我们采用OBE教育理念对软件工程课程教学进行重塑,突出新经济时代软件工程的最新发展,强调解决问题的能力和软件工程实践,实行“以学为中心”的教学方法,使学生在基础知识与技能、团队协作、分析与解决问题、谈判与沟通等方面得到良好的训练,具备良好的综合素质和解决问题的技术能力,树立软件开发系统化与工程化观念和质量意识,为将来从事复杂软件系统的开发与维护打下坚实的
基础。
参考文献:
[1]朱永东,叶玉嘉. 美国工程教育专业认证标準研究[J]. 现代大学教育,2009(3):46-50.
[2]Accreditation Board of Engineering and Technology (ABET)[EB/OL]. http://www.abet.org.
[3]中国工程教育专业认证协会. 工程教育专业认证标准[EB/OL]. http://www.ceeaa.org.cn.
[责任编辑:余大品]