王 涛,白 羽,余 跃,毛新军,欧阳建权,尹 刚,王怀民
(国防科技大学 计算机学院,湖南 长沙 410073)
近年来,教育部和多个高等院校联合提出了“新工科建设”的思路,希望以此来推动工程实践能力和创新能力强的高素质复合型工科人才的培养。然而,软件工程课程本身具有的综合性、交叉性、工程性等问题使得软件工程实践教学面临着诸多问题,比如缺乏高质量实践教学案例、难以有效指导实践教学过程、难以持续评估实践开发过程等。要推动学生工程实践能力和软件创新能力的培养,亟须在实践对象、资源、环境等方面突破当前实践教学的局限,需要相应平台的强力支撑。
网络技术的发展推动了数字化教学平台的发展,形成了以学校为中心的在线学习管理平台和以学习者为中心的在线学习服务平台两大类。在线学习管理平台如Blackboard等坚持以教师、课堂为中心的教学理念和管理模式,侧重于课堂教学活动的在线化,并不能有效支持实践;在线学习服务平台如Coursera等MOOC[1]自主学习平台以及CodeAcadamy[2]、Topcoder[3]等自主实践平台是以学习者为中心,但与软件工程实践教学活动有所脱节。如何充分利用当前互联网和信息技术带来的机遇,构建面向软件工程实践教学的支撑平台,是实现新工科建设目标亟须解决的关键问题。
借鉴以开源软件为代表的群体化实践,我们形成了将互联网开放资源以及开发者群体智慧引入实践教学过程,基于高质量开源软件构建实践任务,利用互联网群体协助指导学生创新实践的群体化实践教学基本思路和方法,希望以此克服老师和学生在知识、经验、时间等方面的局限性,突破传统实践教学面临的实施空间、协同对象、实践资源等受限的问题,实现创新人才的培养目标。
开源软件蕴含的以“大众化协同、开放式共享、持续性评估”为核心的群体化学习与创新机理[4],为群体化实践教学支撑平台建设提供了很好的思路。
(1)引入大众化群体协同模型,将教师答疑辅导为主的课堂实验模式转变为基于开放社区、以互助讨论为主的协作学习模式,实现教师引导激发、学生协同实践的协作创新模式。
(2)引入开放式资源共享模式,将以教师为单一资源来源的封闭环境资源分享模式转变为基于互联网的大范围资源共享模式,更有效地推动创新实践活动的开展。
(3)引入持续性过程评估机制,实现对学生、老师以及实践教学活动的有效评估与反馈,推动创新实践群体共同协作参与和多样化贡献汇聚,更有效地实现协同实践创新能力培养。
基于上述基本思想,我们形成了以开源群体化机理为内核,将教学体系与实践体系相融合的群体化实践教学支撑平台建设思路,如图1所示。
群体化实践教学支持平台需要通过一系列的机制和工具设计,将课堂与互联网社区联接起来,将课堂教学与创新实践衔接起来,从而为软件工程创新人才的培养提供支撑。
图1 群体化实践教学支撑平台建设思路
图2 群体化实践教学支撑平台Trustie的整体框架
基于群体化实践教学的思想,围绕阅读和维护高质量的开源软件,开发有创意、上规模的软件系统两个方面的任务,构建形成了面向群体化实践教学的支撑平台Trustie[4]。
Trustie平台涵盖了对开源代码阅读与评价、开源资源的分析与共享、实践项目的协同开发等群体化实践教学的支持,主要包括数据存储管理、核心支撑机制、关键子系统以及Web交互等,整体框架如图2所示。
针对实践教学实施过程中不同时期的特殊需求,我们构建了面向不同实践任务的子系统,各子系统的主要功能如下:
(1)课堂教学管理平台。支持围绕课堂学习开展实践,提供实践任务发布、实践过程监测等管理工具以及活跃度排序、实践质量分析等评估工具。
(2)开源代码阅读标注平台。支持围绕开源代码开展实践,提供开源代码标注任务发布、代码阅读与标注、对标注进行汇聚与分析等功能。
(3)开源资源开放共享平台。支持教师和学生围绕开源资源实现资源汇聚、分析与分享,提供互联网资源的热度分析、质量评估等资源评估工具以及检索推荐等资源共享工具。
(4)实践项目协同开发平台。支持课堂小组围绕实践任务开展分布式协作实践,提供任务跟踪、协同开发等群体协同工具,以及代码质量、个体能力等持续评估工具。
2.2.1 对群体化实践教学组织的支持
实践教学的实施需要老师对学生进行积极引导、对实践过程教学有效监测和管理,面向实践教学管理的Trustie-Course平台提供了相应的支撑机制。
(1)多层次实践教学组织。基于该平台,课程教师可以根据不同实践任务的需要以及不同课程教学和实践的特点,创建不同粒度和层次的实践教学组织方式,包括结对模式、分组模式、班级模式、课程模式、社区模式等。这些多样化、不同粒度、不同层次的群体化组织能够更好地促进资源共享、有效协同、数据采集、科学评估。
(2)跨班级、跨学期资源汇聚和共享。一门实践课程通常会涉及多个班级和学期。基于该平台,课程教师可以实现不同班级、不同学期之间大量教学资源的“一键”汇聚和共享。跨班级、跨学期的共享能够实现教学活动的继承和互补,推动实践教学承上启下、不断延续。
2.2.2 对开源代码的阅读标注的支持
高质量开源代码阅读与维护对提升学生工程意识、分析复用能力等具有重要价值。Trustie-Codepedia平台为学生群体化开源代码学习提供了相应的支撑。
(1)面向代码理解的开源注释。Codepedia平台基于开源社区构建了面向实践教学的代码阅读标注资源库;提供了项目总体结构、类与方法、方法间调用关系等不同视图,便于学生理解项目需求与系统设计;设计针对每一行代码的独立标注机制,学生可以针对任何一行代码或者一个代码库等进行标注;集成了SonarQube等代码分析工具,并基于工具分析结果形成相应的引导问题,引导和培养学生编写高质量代码的意识。
(2)面向实践过程的众包评估。老师要有效评估学生对代码理解的准确性和标注的质量,仅靠实践教学是很难完成的。平台设计了包括标注后才能查看他人标注等多种机制,促使学生独立思考、认真标注,防止学生之间相互抄袭;设计了赞与踩、匿名评论、交叉互评等机制,通过学生之间的相互评阅,利用相应的机器学习和自然语言处理技术,对每个学生的代码标注质量进行准确的分析和评估。
2.2.3 对互联网资源开放共享的支持
在实践教学实施过程中,为学习者提供所需的个性化软件资源和知识资源等极其关键。面向开放式资源共享的Trustie-OSSEAN平台[5]为大范围互联网资源的高效共享提供了相应支持。
(1)面向实践教学的互联网资源汇聚共享。互联网上汇聚了海量有价值的教学资源,这些资源大多并非来自传统意义上的教学群体,而是由特定互联网社区提供。所提供的资源具有多样化、持续增长等特点。Trustie-OSSEAN平台基于全球主流开源开发社区和应用社区构建形成了面向实践教学的大规模资源库;在实践教学平台与互联网社区之间建立起“通道”,方便教师将特定互联网社区资源导入实践课程,帮助实践教学群体便捷、快速地共享海量的学习资源,以支持软件工程实践教学活动。
(2)面向教学资源选择的开源资源评估与推荐。海量开源资源存在规模巨大、分布广泛、形式多样、质量良莠不齐的特点。Trustie-OSSEAN平台提供了一种基于使用者应用反馈的项目量化评估机制,实现对开源软件的评估、排序以及发展趋势预测,从而帮助学习者寻找到所需要的资源;基于互联网大规模群体对软件及相关讨论的标注标签进行关联分析,提供了海量资源的准确定位与相似相关项目的推荐,为学习者提供更准确的学习实践资源检索与推荐。
2.2.4 对群体化分布式协同实践的支持
创新实践能力培养的关键在于动手实践。围绕基于群体化软件开发方法的实践教学,形成了面向群体协同开发的Trustie-Forge平台,提供了高效便捷的在线协同支撑工具和服务,为大规模群体协同实践提供支持。
(1)实践项目的任务管理。对协作实践任务的有效跟踪管理是提升协作效率和质量的关键要素。Trustie-Forge平台提供项目目标规划、里程碑设置来控制项目工作的进展,保证目标规划的实现;提供项目任务(需求、功能、支持、缺陷等)分配管理机制,使开发过程能够有序进行;提供项目进度统计、分析、通知等,确保协作团队之间所修改的代码保持一致性和完整性;提供wiki、论坛等以实现群体知识分享与高效协同。
(2)实践项目的制品管理。群体协作中个体实践制品的有效管理和融合直接影响团队项目的最终成败。Trustie-Forge提供分布式版本管理工具对项目组织中不同个体所提交的代码进行版本管理,确保多个个体之间所修改的代码保持一致性和完整性;提供代码分析工具对学生提交的代码进行分析,让学生对知识点的掌握以及在编程开发中容易触犯的共性错误和个性错误一目了然;提供协同编辑工具帮助项目成员合作编辑同一个文档,最终形成整个项目组的开发成果;提供基于Pull-Request的贡献汇聚机制实现群体协同制品的高效汇聚和合并。
(3)实践过程的持续评估。如何对协同过程进行持续的分析和评估对于指导学生实践非常重要。Trustie-Forge平台基于持续集成工具Jenkins和质量分析工具SonarQube构建了实践质量持续检查模块,实现了对提交代码的自动化静态质量分析,能够对学生的实践过程进行持续检查与实时反馈,在提高软件代码质量的同时提高开发者的编程质量和水平;提供了基于开发过程数据的个体能力分析工具,对团队协作中个体实践工作量、实践质量等进行有效的分析和排名等。基于这些工具实现对学生实践过程的持续的、定量和定性的分析和评估。
Trustie平台通过一系列机制和工具设计,将课堂学习者与大规模互联网群体连接起来,让互联网大众参与到实践教学活动中,帮助学习者获得多源、多样的知识和技能,支持更开放的交流和讨论,吸取多方的不同观点、见解和意见;将学生创新实践与互联网群体实践连接起来,将开源开发者、开源项目、开源社区讨论等作为重要组成部分参与到创新实践过程中,让学生向全球顶级开发者学习,对软件工程群体化实践教学提供了有力支持。
围绕群体化实践教学,Trustie平台汇聚以下的实践教学相关资源,有力地支持了软件工程实践教学活动的有效开展。
(1)高质量开源代码阅读片段超过50万个。
(2)开源项目超过530万个,在线讨论数量超过2 000万,对开源开发与应用社区进行实时监测与持续更新,且更新延迟小于30分钟。
(3)发布了超过3 580次实践任务,学生累计提交实践作品达到101 153个,累计下载超过245万次。
(4)创建实践项目达到3 317个,缺陷发布数量超过10万个,项目资源累积3万份,这些资源涵盖了软件、文档、代码、媒体以及论文等类型。
国防科技大学包括程序设计等课程实践都基于Trustie平台来开展。计算机学院围绕群体化实践教学,采用小班教学的模式,对软件工程专业的学生开展了持续两年的教学实践,包括实践任务的发布与管理、小米便签等开源代码的阅读与维护,创新软件的需求创意、开源复用、协同开发等,都基于Trustie平台来实施。在开源代码阅读阶段,代码标注达到平均3~4行添加1条注释且比较规范标准,在代码维护阶段平均添加代码规模约为500行,基于Git的代码提交约为142次,对学生代码分析、协同开发以及代码质量等方面的能力提升起到了很好的作用;在协同开发阶段,学生开发的软件系统规模平均超过10 000行,开发的软件系统具有较好的集成性和综合性。
同时,Trustie在全国多所高校得到推广使用。截至目前,全国有超过360所高校和科研院所在Trustie平台上开展课程教学,包括清华大学、北京大学、中科院大学、北京航空航天大学、同济大学、湖南师范大学等不同层次的高校;注册用户超过18 000人,其中教师数量超过3 000余人,学生超过15 000人。
此外,开发社区中的项目创建者覆盖了来自全国150多所高校的近1 000名师生以及约25个科研院所和创新实验室的科研人员,包括北斗开源实验室、国内首个机器人操作系统团队Micros、国际顶尖机器人竞技团队Nubot以及国家超级计算广州中心等。此外,还有超过200多名自由软件爱好者也在平台中通过项目贡献了自己的代码、开发经验以及心得文档等。
Trustie平台在国防科技大学软件工程实践教学改革中的应用,有力地支持了群体化实践教学活动,有效提高了实践教学的效果,对学生工程实践能力和软件创新能力的培养起到了很好的支撑作用。
Trustie平台集成了各类持续检查分析工具,能够在教学实践中帮助老师对学生的实践过程进行持续监测与实时指导,解决了以往实践教学难以指导和评估的问题,有效提升了学生编写高质量代码的实践能力。例如,平台将代码质量持续检查机制引入到群体化实践教学活动中,能够实时分析发现学生实践代码中经常性出现的错误和风险,并对相应的学生进行针对性的指导。在分析对比小班教学实践中使用持续检查机制前后学生的代码质量发现,利用平台持续检查机制大大降低了学生代码中质量问题的密度。同时,通过调查问卷获得的学生反馈表明,该机制和工具大大提升了学生编写高质量软件代码的意识和能力。
Trustie平台提供的开放共享和协同开发工具,有效支持了学生创意激发、需求分析、软件设计、资源复用、协作开发等活动,培养了学生基于互联网的群体化软件开发思维和团队协同开发能力,提升了学生的软件工程综合素质。例如,在持续两年的小班教学实践中,学生基于该平台构思并协作完成了无人值守的图书馆、家庭接待机器人、多无人机联合搜寻系统、Baby安保助手等多项代码规模超过10 000行的具有集成性和综合性的创新实践作品,并在计算机作品比赛、机器人比赛等多项全国性赛事中取得了金奖、银奖等优异成绩。
新工科建设对软件工程专业实践教学提出了更高的要求,基于群体化的实践教学思想为创新性、工程性高素质复合型人才培养提供了解决思路,但是需要相应基础平台的有力支撑。本文详细介绍了面向群体化实践教学的支撑平台Trustie,重点阐述了面向实践教学的关键支撑机制,包括实践教学管理机制、开源代码阅读机制、网络资源开放共享机制以及项目实践协同开发机制等,并从建设应用情况及实际应用成效两个方面说明了Trustie对软件工程实践教学改革和学生创新实践能力培养的支撑作用。