程序设计类SPOC课程综合教学支撑平台的设计与实现
2017-02-25徐雅静刘玉涛李智超罗安根
徐雅静,刘玉涛,李 通,李智超,罗安根
(北京邮电大学 信息与通信工程学院,北京 100876)
程序设计类SPOC课程综合教学支撑平台的设计与实现
徐雅静,刘玉涛,李 通,李智超,罗安根
(北京邮电大学 信息与通信工程学院,北京 100876)
程序设计类课程教学模式的改变必然要依赖强大的教学平台的支撑,针对该类课程实践性强的特点,分析基于SPOC的课堂教学、课后自学的教学实际以及教学反馈的需求,设计并实现一种支持SPOC全教学环节的综合教学支撑平台,并总结该平台在数据结构SPOC课程中的应用效果。
SPOC;OJ平台;App Cloud;代码相似度
0 引 言
程序设计类课程的核心是培养学生的编程能力,这涉及教师的“教”与学生的“学”两方面内容。教师面临的问题是:针对性地设计课堂教学内容,有效提升有限课堂时间内的教学效果,及时获取学生学习情况的反馈。学生面临的问题是:需要更轻松更方便的学习工具或平台,更好地安排学习时间和学习内容,加强学习效果。如何使教师的教和学生的学更有效率,是大学计算机教育改革亟待解决的问题[1]。因此,基于上述教学实际,笔者设计并实现了一种适合程序设计类SPOC课程的综合教学支撑平台,经过数据结构SPOC课程的实际应用和效果反馈,该平台不仅能有效提升教与学的效率,而且能减轻教师的教学负担,支撑教师进行更广泛的教学模式创新。笔者提出的综合教学支撑平台(Integrated Teaching Platform, ITP)设计理念,综合利用网络、计算机、信息和通信技术,架起教与学之间的信息沟通桥梁,使学生的“学”更有效地支撑教师的“教”、教师的“教”更有针对性地指导学生的“学”。
1 平台设计需求
SPOC[2]是英文small private online course的简称,意为“小规模限制性在线课程”,最初由加州大学伯克利分校的MOOC负责人Armando Fox提出。SPOC教学理念是学生课下通过教学视频学习新知识、参与在线讨论、完成规定的作业和考试等,教师在课堂教学中通过提问、回答和讨论,了解学生的学习情况,加深其对知识的理解,这种方式也称为“翻转教学”。
SPOC教学的前提是学生课下必须保证足够的学习时间和学习强度,否则直接被淘汰,但这种方式在国内高校明显有些“水土不服”。究其原因,一是中国大学教育的淘汰机制限制,无法保证学生的课下学习强度;二是中国学生多年的被动式学习习惯,使讨论式课堂教学难以调动学生的积极性,导致课堂信息量不足。针对上述问题,基于SPOC理念和程序设计类课程编程实践强等特点,笔者设计了一套适合程序设计类SPOC课程的教学流程指导ITP平台的设计,见图1。该教学流程兼顾学生的课下学习(视频、课件和课外资料学习)、课下自我评估(问题思考、在线测试和编程实践)和教师课堂教学(基于教学反馈的课堂教学)及讨论,有效地利用有限的课堂时间指导学生。
图1 教学流程设计图
该教学流程必须依赖ITP平台来实施, ITP平台的架构及功能服务模块都围绕该教学流程进行设计和划分。ITP平台必须能够支撑所有教学环节,即支撑程序设计类SPOC课程全部教学环节的电子化、信息化、数据化和网络化,因此ITP平台的设计需求如下:
(1)学习环节:支撑学生分阶段学习,包括视频、课件、各种课外资料的学习。
(2)验证环节:支撑学生独立思考,即每一学习阶段思考问题的提出、回答、共享;支撑阶段学习效果测试,即在线单元测试和评分;支撑编程实践,即分阶段的编程练习、编程作业和实验的提交及验证。
(3)系统分析:支持自动收集、分析和统计学习过程的所有数据。
(4)教学反馈:支撑教师实时查看、浏览和下载学生学习的各项统计数据。
(5)教学设计:支撑教师对教学内容的远程电子化管理,包括课件、视频等资料的查找、上传和更新;支撑远程资源管理,包括评论、问题、试题、测试、作业和实验的撰写、删除、更新、导人和评价。
(6)课堂指导:支撑教师实时题目推送,支撑学生答题实时统计。
基于以上需求分析,笔者提出并设计了集Web平台、OJ(Online Judge)平台[3]、App Cloud平台为一体的综合教学支撑平台设计方案,多角度、全方位支撑以上教学环节。其中OJ平台支持在线编程的相关服务和功能,App Cloud平台支持移动端的相关功能,其他功能主要由Web平台提供支持。
2 ITP平台设计
根据需求分析,笔者设计的ITP平台架构如图2所示。该平台采用分层结构设计,自下而上分为数据层、服务层、应用层和界面层。此外,各层都设计了独立的安全管理,保证平台稳定运行。数据层负责所有视频、PPT等资料文件、数据库文件的存储;服务层根据提供的不同功能分为OJ平台、Web平台和App Cloud平台,其中OJ平台和Web平台为B/S系统、App Cloud平台为C/S 系统;应用层负责具体功能模块的实现;界面层为用户人机接口,系统支持Web浏览器和手机App两种方式访问ITP平台提供的功能。
2.1 Web平台功能设计
Web平台集成了Apache Web服务器、MySQL数据库服务和Darwin流媒体服务,以PHP为开发语言。Web平台的设计原则是以Web服务为基础,提供基本的浏览和下载服务;以数据库服务为核心,提供资源管理、在线试题、在线评论等功能;以流媒体服务器为基础,提供视频相关功能。
1) 基本功能。
a. 信息浏览:课程MAP浏览、教师信息浏览;
图2 ITP平台架构图
b. 资料下载:PPT下载、电子书下载、代码下载等;
c. 数据统计:试题错误率统计、单元测试成绩统计、在线考试统计、视频调看统计、OJ平台编程错误率统计、优秀学生统计等;
d. 系统管理:权限管理、人员信息管理、密码修改、系统配置等。
2)在线测试系统。
a. 单元测试:自动出题、自动打分、自动统计错误率、自动计人学生平时成绩;
b. 在线考试:根据题目难度、所属章节、类型、分数自动出题,自动计时、打分、提醒;
c. 题库管理:支持单选题、填空题、综合题和编程题4种题型的添加、编辑、删除和导人。
3)在线视频。
视频在线浏览、视频简介、视频查找、进度控制、音量调节、每周视频推荐等。
4)在线评论。
教师预留问题、评论撰写、删除、提交和置顶。
2.2 OJ平台功能设计
OJ平台专门为程序设计类课程提供在线编译、链接、运行和判别服务,支持多种编程语言的在线编译和信息反馈,其依赖的编译服务原理如图3所示。OJ平台的核心功能由编译服务提供,主要负责代码的编译运行和判别;辅助功能均围绕核心功能展开,由Web服务提供,使用与Web平台相同的开发运行环境。
1)核心功能。
支持CC++、Python、Java、PHP等多种编程语言的即时编译、链接、运行、正误判别和判别信息反馈。
2)辅助功能。
a. 人员管理:学生、助教、教师、班级信息的增、删、改、查和导人,权限管理;
b. 题库管理:编程题目的增、删、改、查和验证,题目分类;
c. 作业管理:代码撰写和提交、运行结果的人库和浏览,教师布置/删除作业,代码批改和评分,相似度计算和聚类,查看作业提交进度、查看相似度、查看正确率和分数统计等。
图3 编译服务原理图
2.3 App Cloud平台功能设计
虽然智能手机屏幕小、计算功能有限,但丰富的应用使智能手机逐渐成为人类不可或缺的伙伴。利用智能手机作为学习工具不仅便捷而且更容易利用碎片时间提升学习效率。基于此,笔者设计了App Cloud平台模块,利用Socket通信技术实现推送服务支撑翻转课堂的移动学习环节和课堂讨论环节。
App Cloud平台目前支持Android 4.0及以上版本的手机,该平台根据不同角色,分别提供相应的功能,图4展示了基于App Cloud平台的课堂讨论功能的实施流程,教师在课堂有限的时间内即能掌握学生对知识的理解程度,并进行有针对性的引导和二次讨论。
图4 课堂讨论流程
App Cloud平台支持手机前端的主要功能如下:
(1)移动学习:支持手机视频调看、进度控制、音量调节、视频简介。
(2)学习反馈:支持手机端评论撰写、删除、提交和共享。
(3)课堂讨论:支持教师思考问题的实时推送和实时统计,支持学生实时获取问题、答题和提交。
(4)系统功能:权限控制、视频播放进度保存、密码修改等。
3 关键算法
程序设计类课程对学生学习效果的评估主要从学生代码中体现。为了防止学生之间抄袭,ITP平台的OJ子平台专门设计了代码相似度检测模块,调用算法自动检测代码的抄袭程度、抄袭来源和范围,该模块减轻了教师对学生代码评估的负担。
3.1 代码相似度检测
代码相似度检测是抄袭检测(Plagiarism detection)的重要组成部分,其任务是尽可能识别常规的复制、粘贴、替换、变形等编辑手段,正确获取代码源文件之间的相似度值,相似度值越大表示两份代码越相似,抄袭的可能性越大。
指纹技术(Finger print)是一种较实用的代码相似度检测方法,它能够简单有效地获得文档间的相似度。由Google在2007年提出用来处理海量文本去重的算法——simhash[4]是一种适合快速检测海量代码的方法,该算法是局部敏感哈希(locality sensitive hash)的一种,其主要思想是将高维的特征向量映射成低维的特征向量,通过两个向量的汉明距离确定文档是否近似。OJ平台采用该方法进行代码相似度检测。代码相似度检测的算法流程见图5。
1)预处理。
用于去除代码中的注释、预编译和常见的main()、using namespace std等标识符。
2)分词。
一般通过识别代码中的空格、Tab键、大小括号、运算符、标点符号来实现分词,即区分出独立的标识符;计算标识符的权重,标识符可以是变量、常量或关键字;分词后,每种相同标识符出现的次数即为权重,比如for出现4次则weight(for)=4,if出现3次则weight(if) = 3。一般来说,权重越大代表越重要。
3)计算simhash。
通过hash、加权、合并、降维4步为每份代码生成一个64bit的simhash值。
图5 代码相似度检测流程
hash:通过hash函数[5]计算各个标识符的hash值,称为特征值,比如for的hash值为110101,if的hash值为101001。
加权:在hash值的基础上,根据W = hash * weight公式为每一个特征值加权,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。例如for的hash值110101加权得到W(for) = 110101*4 = 4 4-4 4-4 4,if的hash值101001加权得到W(if)=101001*3 = 3-3 3-3-3 3。
合并:将每一个特征值按位加权结果累加,生成一个序列串,比如W(for) + W(if) =“4 4-4 4-4 4”+“3-3 3-3-3 3”=“7 1-1 1-7 7”。
降维:对于64-bit特征值的每一位累加结果,如果大于0则置1,否则置0,从而得到整个代码的simhash值。例如,上面计算的“7 1-1 1-7 7”降维得到“1 1 0 1 0 1”,称为simhash签名。
4)计算相似度。
计算每份代码的simhash签名之间的汉明距离。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。例如1011101 与 1001001 之间的汉明距离是 2。
5)聚类。经过上述步骤,可以得到任意两份代码之间的相似度。一般来说,若代码之间simhash签名的汉明距离小于等于n(n一般取值为3[4]),就可以判断两份代码相似。因此,将所有代码进行编号,若任意两个编号相似则赋值为1,否则为0,进而可以生成图的邻接矩阵A,该矩阵表示无向图的拓扑结构,结点表示代码,若结点相连则表示代码之间相似。利用该图,笔者采用图聚类算法中的快速NEWMAN[6]算法对矩阵A进行聚类,通过极大化网络模块度(modularity)评价函数,实现聚类。若多份代码属于同一聚类,则认为该聚类的所有代码均涉嫌抄袭,同时根据代码提交的时间顺序,确认最先提交的代码为抄袭源。
以上算法步骤采用C++语言实现,OJ平台通过Web服务的进程调用方式启动该算法,算法运行结束后,将聚类结果返回给Web服务进行输出。
4 结 语
ITP平台自2015年9月开始应用于数据结构SPOC课程,在数据结构课堂中先后经过18个教学班共约540名学生和6位教师使用,绝大多数学生较为推崇这种全信息化的教学模式,可自由支配学习时间;教师则能全程监督学生的学习活动,自动获取各种统计成绩,极大地减轻了平时的工作量。因此,ITP平台不仅构筑了学生和教师沟通的桥梁,还积累了大量的教学数据,为今后的教育大数据挖掘研究提供原始的数据积累。
[1] 屈微, 姚琳, 汪红兵. 程序设计课程中的翻转教学模式[J]. 计算机教育, 2016(1): 142-145.
[2] 康叶钦. 在线教育的“后MOOC时代”——SPOC解析[J]. 清华大学教育研究, 2014(1): 1-9.
[3] 范立新, 黄龙军. 利用OJ平台进行探究式教学模式的探索[J]. 教育教学论坛, 2014(1): 216-217.
[4] Manku G S, Jain A, Das Sarma A. Detecting near-duplicates for web crawling[C]//Proceedings of the 16th international conference on World Wide Web. ACM, 2007: 141-150.
[5] Arash P. General purpose hash function algorithms [EB/OL].[2016-09-05]. http://www.partow.net/programming/hashfunctions/.
[6] Newman M. Fast algorithm for detecting community structure in networks[J]. Physical Review E, 2004, 69(6): 66-133.
(编辑:孙怡铭)
1672-5913(2017)01-0147-05
G642
徐雅静,女,副教授,研究方向为机器学习和模式识别,xyj@bupt.edu.cn。