基于课程群的项目式软件工程课程教学模式

2019-08-24 08:57蔡美玲杨晓春
计算机教育 2019年8期
关键词:考核软件教学内容

张 锦,蔡美玲,杨晓春,刘 宏

(1. 湖南师范大学 信息科学与工程学院,湖南 长沙 410081;2. 上海成趣信息科技有限公司,上海 200000)

0 引 言

随着移动互联网、人工智能等新技术的迅速兴起,软件人才需求日益强烈,但相关人才培养的速度和质量难以满足需求。根据工业和信息化部统计数据,我国软件和信息技术服务业发展迅猛:2018年实现收入63 061亿元(占GDP比重达3.6%),增速14.2%居国民经济各行业之首;从业人员同比增长4.2%,达643万人;工资总额增长13.4%,人均工资增长8.8%。虽然高校承担着高级软件工程人才培养的重任,但是软件自身的特点和高校现有的人才培养模式,使得既熟悉业务、又具备软件工程能力的复合型人才极难大批量培养。2017年、2018年连续两年的全国软件工程实践教学研讨会分别以“消除教育界和工业界的鸿沟”和“如何培养解决复杂工程能力”为主题展开专题研讨。实际上,高校工科专业都面临着人才培养难以满足社会和国家需求的问题。教育部从国家层面进行了一系列顶层设计,从2010年6月提出的“卓越工程师教育培养计划”到工程教育认证,以及目前如火如荼的“新工科”建设,其最基本的目的是培养大量具有工程师基本能力的工程人才。这也是“新工科”建设自从2017 年教育部继“复旦共识”“天大行动”“北京指南”三部曲之后迅速全面推进的背景之一,其核心是满足国家战略需求,培养适应新形势的创新型战略人才[1]。

“以本为本”的理念特别关注高校课程和课堂教学质量,软件工程课程作为软件工程等计算机类专业的核心课程,一直是研究重点并提出了多种建设思路。面向工程教育认证以成果导向教育(Outcome-Based Education,OBE)展开软件工程的课程重塑[2]、实践教学[3]等教学实践得到了较为广泛的关注;在课程教学方面,从不同角度提出了许多具有借鉴意义的教学思路和教学方法,包括基于项目驱动的软件工程课程设计理念[4],基于OBE模式重新梳理软件工程课程教学内容[5],将竞赛引入软件工程的课堂教学[6],将开源社区引入软件工程课程教学以提高学生解决复杂工程问题的能力[7]等。

1 软件工程课程教学问题及分析

软件工程课程作为软件人才培养体系的核心课程之一,一直是计算机教育教学所关注的焦点领域。文献[8]从人才培养目标定位、工程教育理念、教师队伍实践经验、校企育人等方面分析了软件工程人才培养存在的问题;文献[4]在软件工程课程中提出了项目驱动教学法;文献[9]提出了软件工程教学中“五个一”工程课程培养体系,以精化软件工程课程教学内容;文献[10]提出了基于高质量开源软件阅读以培养软件工程能力的思路。

在整个软件工程学科的背景下,分析软件工程课程教学中存在的问题及其原因,大致可以归纳为如下几个方面。

1)在学科层面,亟待形成独立的软件工程学科理念。

虽然自2011年软件工程已经被设置为与计算机科学与技术平行的一级学科,具有了完整的本硕博培养体系,但是由于软件工程脱胎于计算机,使得“软件属于计算机一部分”的观点混淆了原本严谨的学科划分;研究内容间的紧密联系也使得计算机与软件难以区分。一般而言,“计算机类”包括计算机硬件和计算机软件,这是常见的划分,与学科无关,相互借鉴无关紧要,但实际在学科层面二者的区分相对明晰,计算机科学与技术一级学科包括计算机系统结构、计算机软件与理论、计算机应用技术和信息安全这4个二级学科,而软件工程包括软件工程理论与方法、软件工程技术、软件服务工程和领域软件工程这4个二级学科。

简而言之,在国家的顶层设计中,软件工程学科具备独立发展的基础和条件,因此,领域内教学科研人员必须具有独立发展软件工程学科的理念和立场,这是软件工程学科进一步发展的基础所在。依附于计算机学科发展软件工程的思路,无疑将压缩软件工程的发展空间,最终也难以发展出独立的软件工程学科,也难以与计算机学科形成合力发展壮大信息学科和产业。

2)在专业层面,亟须理清软件工程的本质属性。

出于专业排名、院内资源分配等种种原因,相当一部分业内人士将软件工程与计算机科学与技术相互混淆介绍,无意之中将软件工程与计算机软件与理论相互等同。无疑这种长期以来的专业处理和平衡方式,难以理清软件工程的本质属性,也难以深刻理解软件工程的各个方面,从而设计有利于软件工程专业的发展模式。在新的环境下,软件和软件工程的深度和广度已经更胜往昔,在人机物融合环境下、在智慧环境下需要进一步明晰其本质属性。

3)在教学模式层面,缺乏适合软件工程的完整教学模式。

软件工程学科以培养解决复杂软件系统的能力和结合领域的工程应用能力为主,其教学模式要求以此为核心目标。这两方面能力的培养,需要大型软件工程实践以及对不同领域知识的深度认知,而这在目前绝大部分高校教学中是难以达到的要求,因此,如何构建适合软件工程核心能力培养的教学模式是目前软件工程专业教学亟须解决的核心问题之一。

4)在师资层面,极度缺乏高质量的软件工程教学科研队伍。

软件工程专业在我国的发展时间只有短短的20年,其科研和教学水准与国外同行相比仍然有相当大的距离;同时,软件工程与实践结合紧密的特点,对师资提出了更高要求,特别是目前高校以SCI类科研论文为主的考评方式,对软件工程的实践师资队伍建设提出了挑战。如何构建满足高质量软件工程人才培养要求的师资队伍,是软件工程发展中最为关键的隐忧之一。

5)在教学资源层面,缺乏体系完整的教学支撑资源。

软件开发需要各类软件工具和软件资源(文档、组件等)的支撑,以提高软件开发效率和质量。教学过程同样如此,为每位学生建立个性化教学模式由于成本高昂而不可行,高校规模的人才培养模式在人才培养成本和人才培养质量之间进行平衡。缺乏完整的软件工程人才教学资源支撑体系,是难以高效率培养高质量软件工程人才的关键制约因素。借助MOOC项目和开源软件,有可能逐步构建满足教学要求的资源支撑平台。文献[7]借助开源社区资源探索弥补师资团队的掣肘;文献[11]借助Trustie教学平台支持群体化实践教学支持,实现对教学过程的管理和评估,这在之前是难以实现的;文献[12]探讨了基于MOOC构建混合式课内教学模式及翻转课堂团队学习模式,以提高教学效率和质量。

2 基于课程群的项目式软件工程课程教学模式

2.1 面向软件工程专业的项目式教学理念

(1)在教学内容上,基于课程群重新分配授课内容。所谓课程群,就是介于单门课程和专业课程体系之间,在多门关联课程之间相互协调统筹安排,以实现教学资源、教学效果、教学内容优化配置的一种精细化课程组织方式。课程群构成一般是由同一专业内多门(不少于3门)内容之间相互耦合的课程组成。文献[13]探讨了课程群理念在软件工程专业的完整课程体系中的应用,提出了“三段两层”的课程群结构,尚未涉及具体某一门课程的内容如何基于课程群进行分配。在提出的教学模式中,将课程群理念应用于同一学期、同一专业开设的课程中,将目标课程内容进行分解并分配到关联课程中,将学时集中到解决重点教学内容中,以提高整体教学效率和效果。

(2)在教学形式上,以软件项目为载体培养软件工程能力。在软件工程专业教学中,通过项目培养学生实践能力的教学方式得到了较为广泛的应用。文献[4]中选择图书馆管理系统作为贯穿整门课程的软件项目,这种以特定项目驱动的软件工程教学设计是项目式教学在具体课程中的应用实现。在提出的教学模式中,项目式课程教学在教学内容上不仅要贯穿软件工程的教学内容,还要成为衔接课程群内多门课程的核心;同时,不仅要锻炼软件能力,还要培养沟通、表达等“软技能”。

(3)在教学考核上,建立以过程考核为核心的评估方式。教学是一个复杂的交互过程,单纯以考试为考核手段最终只能导向“纸面能力”,因此,提出的教学模式应建立以过程考核为核心的考评方式。考核不仅包括个人考核,还包括团队考核;以实践考核为主,以考试考核为辅;以分阶段考核为主,以最终考核为辅。通过考核的变化,学生和教师将考核焦点迁移到能力培养中,在分阶段完成的任务中全面、合理、准确地评估学生的软件工程能力。

(4)在教学工具上,大规模、有目的地引入互联网开源工具。教学自身是一项高投入的工作,提出的教学模式更需要教学资源投入。此外,软件工程自身需要大量软件工具的支持,尽早让学生习惯和适应利用工具提高效率也是合格软件从业者的一项基本技能。提出的教学模式可以有目的、大规模引入主流的互联网开源工具,以提高教学效率和质量。所引入的工具可以根据教学内容、教学目的有选择地使用。文献[2]给出了清华大学在软件工程专业教学中集成的从开发到运行监控过程全覆盖的DevOps 工具链。

2.2 项目式教学理念在软件工程课程教学中的应用

软件工程不仅是软件工程专业的核心课程,还是专业课程体系中对于工程理念体现最为充分的一门课程。种种制约因素的存在,使得相当部分高校在实施软件工程课程教学时,都是以理论讲授为主,或者附带部分实验学时讲授部分工具使用,很少涉及工程能力培养或者团队协作能力培养。为此,本文将提出的教学模式首先应用于软件工程的课程教学中,为软件工程专业的相关课程教学提供参考。

2.2.1基于课程群理念重新分配软件工程课程的教学内容

基于课程群理论,将同一个学期内的软件工程、系统分析与设计、软件工程综合实践(二)3门课程打通形成小课程群,并且根据不同课程的特点,将软件工程的教学内容有机整合到另外两门课程中,见表1。将教师、课堂学时等教学资源优化配置,重组教学内容,借助相关课程的教学资源达到事半功倍的效果。这种方式对教学内容涵盖较广的课程尤为重要,软件工程课程涵盖几乎所有软件工程专业课程中的内容,将所有涉及内容讲授一遍,既没有必要,又不会有明显效果,将重点集中在项目实践管理、领域知识、可行性分析、需求分析等方面反而能够凸显教学重点;课程涉及的其他内容,通过协调相关课程只需要概述即可,相关课程在主讲该门课程时有所侧重就完全可以达到效果。

此外,在具体落地课程群时,可以根据教学实际设计跨度不同的课程群,如学期课程群、学年课程群、专业课程群等;课程内容重组需要根据培养计划个性化设置,如如果培养计划中有需求工程课程,软件工程课程教学就可以减少需求分析的讲解。根据不同学校的实际调整相关措施,可以达到提高教学效率和质量的目的。

2.2.2设计多种形态的软件项目适应不同水平学生提升软件工程能力

软件项目是该教学模式的核心环节之一,在应用于具体课程教学时,必须解决两个问题:①项目来源问题;②如何提升软件工程能力。

针对项目来源,建立多种形态的软件项目以适应不同水平和需求的学生。本次教学所完成的软件项目见表2,大致可以分为4类:①传统软件系统开发项目;②具有实际需求的软件项目;③结合算法研究类软件项目;④基于开源代码标注与提升的软件项目。学生首先组成项目组,然后再确定项目,通过立项答辩的项目方可被正式启动;通过这种方式限定项目的难度、规模等,保证项目在预定的时间和团队能力范围内能够完成。

表1 软件工程教学内容分配

表2 教学所完成的软件项目列表

针对软件工程能力提升问题,从两个方面着手。首先,学生组成项目团队共同完成具有一定难度的项目,团队分工明确、相互协作,在项目完成期间锻炼学生的沟通能力、表达能力、协调能力等软技能。这类软技能是在理论讲述中无法锻炼和涉及的。其次,基础不同的团队选择不同软件项目以最大化提升个人软件工程能力。基础相对落后的学生可以选择传统软件系统开发类项目,这类项目的需求、软件结构等相对清晰,重点在于提升编码、设计等软件能力;创新意识、个人能力较强的学生可以选择具有实际项目需求的项目,或算法研究类项目等具有较大难度和不确定性的项目,以锻炼软件工程综合素养。

2.2.3建立软件过程考核为主的课程评估方式

提出的教学模式更注重过程质量的考核,而期末考试成绩作为辅助。具体考核包括如下几个方面。

(1)本次评估中软件过程质量占比50%,后续将增加到70%;期末考试成绩占比将逐步降低到不超过30%,期末考试以水平考核为主。同时,期末考试中应用部分考核与所选的项目有关,使得实际软件过程内容考核占比接近60%。

(2)软件过程考核评分由团队分和个人分综合获得。团队分是所有团队成员均可以共享的,个人分是根据每个人的角色分工和工作质量分别确定,二者占比五五分。

(3)采用阶段考核分阶段评估项目质量。3门课程主讲教师组成评审团队,将项目分为需求分析阶段、设计阶段和实现阶段,每个阶段均进行公开答辩和演示,评审团队进行综合评分,其中软件工程、软件设计与分析和软件工程综合实践课程的主讲教师分别担任3个阶段的主评教师。

2.2.4集合教学过程支撑工具和软件工程工具的教学自动化支撑工具环境

各类软件工具的出现支撑着软件生产效率和软件质量的不断提高。在软件工程专业教学中,充分利用各类工具不仅是软件行业的客观现实,还是教学过程的主观需要。

首先,软件工程课程教学需要与行业发展相一致,因此在软件工程各个阶段需要熟悉主流软件工具,否则学生一旦毕业就会有“学校内所学根本不是企业要求”这种错觉;同时,软件工具的确支撑项目的顺利进行。本课程使用Git作为代码管理和团队开发协调工具,在需求阶段、设计阶段、编码阶段、测试阶段都分别使用相关软件工具以提高开发效率和产品质量。

其次,在教学过程中,采用Trustie-Educoder平台(www.educoder.net)作为课程教学管理工具,可以极大节省教师精力。平台具有项目管理、任务发布、Git集成等功能,使得有限的教师团队能够满足1:20的师生比现状。

3 基于课程群的项目式软件工程课程教学模式效果分析

在湖南师范大学2016级软件工程专业本科生(部分2018级软件工程专业研究生参与项目,这里不作统计)中实施了本教学模式,学生人数共计60人。学生自由组成项目团队,每队人数在3~5人之间,每队必须选出一名且只有一名项目管理员。3门课程的主讲教师组成教学团队,每位老师指导4~5组,并全程参与。具体安排如下:①选题方面,根据团队情况可以从提供项目中任选一个,或者自题目通过立项答辩后作为团队项目。②教学工具支持方面,项目全过程在Educoder平台中全程留痕迹。③时间安排方面,从2018年9月开始,到2019年1月结束。课程分为两个阶段,第一阶段每月进行阶段评审分别完成项目团队组建、可行性分析、立项评审、需求评审等环节;第二阶段是集中期末3个星期,完成编码、测试、上线等环节,在该阶段每周进行一次评审。

课题组从客观数据和主观评价两个方面对教学模式的效果进行评估。在客观数据方面,本课程教学基于Educoder平台进行全过程、量化数据评估。相比于以前的教学方式,教学质量和效率明显提升,如课程中借贷平台项目的过程信息显示,其版本库更新了220次,资源库积累了34项资源,核心成果经过多次更新(数据结构更新了6个版本等)。项目团队很快熟悉了软件行业中的典型开发方法、软件工具等内容;同时,在项目过程中团队协作、沟通交流等软技能同样得到了有效提升。在主观方面,利用调查问卷对课程教学效果进行反馈评估,统计发现学生对课程教学认同度明显提升。评分从1到10分,10分表示最满意/最佳,其中,对课程整体安排的满意度为8.15;对集中期末进行实践的安排满意度为8.1;对团队形式进行实践的满意度为8.43;经过课程教学,对软件的理解进一步加深评分为8.2;对文档的重要性认识评分为8.28;对项目经理的评分为8.48,这个评分相当高,说明项目经理的确得到了团队成员的认同;对团队成员的满意度评分为8.54,高于对项目经理的评分,说明团队成员更重视相互之间的协作关系;对团队中贡献最少的组员评分为6.98,说明团队中“打酱油”的确存在,而且团队成员更认同大家都需要为团队作出贡献;对个人能力提升满意度的评分为7.48,不到8分,说明大多数学生认识到需要进一步提高个人能力。

另外,在课程数学中也发现,原先不被看好的项目通过团队努力拿到了大家都认可的高分,特别是音之轨迹项目团队,成员并不是最强的,但是项目完整度、UI设计等发明的优秀工作,使得项目整体性和质量上了一个档次。项目团队之间的良性竞争,也极大改地变了学习氛围,在最后3周集中实践阶段,下午不严格要求在实验室,但实际的出勤率超过80%,而且基本上是整个团队都一起努力,团队精神初显成效。

4 结 语

针对课程教学问题,我们提出面向软件工程的课程教学模式,即基于课程群的项目式软件工程教学模式,并将模式在湖南师范大学2016级软件工程本科专业进行了实施。根据教学平台记录的数据以及课程调查问卷的统计结果表明,该教学模式具有较好的教学效果和效率,能有效提高学生的软件工程能力以及提升一般课程教学难以涉及的软技能等能力。在后续研究中将着重从以下几个方面着手:①将该教学模式推广到全校计算机基础课以及计算机类专业课的教学中,探索不同类型课程所适合的教学模式;②考虑结合各类竞赛活动,探索更有实战性的项目式教学模式;③尝试基于该教学模式,建立校企之间深度合作的产学合作协同育人模式。

猜你喜欢
考核软件教学内容
综合利用单元教学内容进行整体单元复习
禅宗软件
工业软件 自主创新
“表里不一”如何识别——富平增强考核洞察力
考核偏向:错把经过当结果
创新完善机制 做实做优考核
发挥考核“指挥棒”“推进器”作用
等差数列教学内容的深化探究
即时通讯软件WhatsApp
丰富多彩的Android软件