张晓莹, 卢 卫, 程一舰, 赵展浩, 杜小勇,3
(1. 中国人民大学 信息学院, 北京 100872; 2. 中国人民大学 信息技术与信息管理国家级实验教学示范中心, 北京 100872;3. 中国人民大学 数据工程与知识工程教育部重点实验室, 北京 100872)
慕课(massive open online course,MOOC)的兴起与迅速发展[1],在国内外高校掀起一股教育改革浪潮。中国人民大学的数据库系统概论课程曾荣获国家级精品课程、国家级精品资源共享课。数据库系统概论课程团队正积极投入到慕课课程的建设潮流中,致力于将数据库系统概论建设成精品慕课课程,推动数据库慕课资源在高校的共建共享。课程团队自2015年起通过“请进来、走出去、干起来”三步走策略完成慕课课程的筹备工作,2016年4月至今,在中国大学MOOC平台先后开设了数据库系统概论基础篇(3期)[2]、高级篇(3期)[3]和新技术篇(2期)[4]系列课程,面向国内高校开设SPOC(small private online course)课程20余门,选课人数累计超过10万人,受到教师和学生的热烈欢迎。
慕课课程要求授课教师既要提供教学相关的视频和课件,又要提供配套的测验、考试等评测方式考核学生对知识的掌握情况,同时还需实现对教师教学方法的反馈。目前,慕课课程的测验、考试形式多以选择、判断、填空等客观题为主,可以快速自动评判。显然,上述评测方式仅适用于理论知识的考核,而对于实践性强的计算机类课程,例如数据库系统概论、程序设计等,还需要考核学生的实际动手能力。
我校数据库系统概论课程团队根据课程实际需要,自主研发了面向慕课的在线SQL自动评测系统[5]。本评测系统不仅支持学生在线完成实验,还支持自动、实时、准确判分,同时,为教师提供针对学生实验成绩和实验过程等数据的统计分析功能。
“数据库系统概论”是一门理论与实践紧密结合的计算机类专业课程,旨在培养学生灵活运用数据库理论、方法和技术分析和解决复杂工程问题的能力[6-7]。学生通过实验能够加深对理论知识的理解,达到掌握实践技能、形成工程素养、实践科学思维、培养创新能力的目的。不论是传统课堂还是慕课,实验教学都是数据库课程教学中不可或缺的重要环节,实验能力的考核也是重要的教学内容之一。显然,慕课中常用的客观题考核方式无法满足这方面的需求,因此,设计开发支持慕课课程的评测系统对推动数据库慕课资源的共建共享具有非常重要的意义。
在传统课堂中,教师通常事先规划好每节实验课的实验任务,要求学生到机房上机实验并完成实验报告的撰写和提交。教师根据实验结果截图对学生的实验质量做出评判。如果在慕课中沿用这种纯人工、粗粒度的批改方式,本质上只是简单地将实验评测从线下转移到线上,并没有减轻教师的负担。考虑到数据库系统概论慕课课程的学习人数通常成千上万、学习规模较大,这种传统评测方式大大加重了教师的工作负担。因此,如何像客观题一样对实验进行自动、实时地评判成为评测系统的重要研究内容。
慕课给传统教育带来挑战的同时,也带来了机遇[8-9]。慕课平台积累了大量宝贵的用户学习数据。借助大数据分析技术,对实验过程和实验成绩进行全面地分析,及时将学习中存在的问题反馈给学生和教师,既能提高学生的实践能力,又能改进教师的教学方法。因此,如何对实验过程和实验成绩统计分析是评测系统的另一重要研究内容。
SQL(structured query language)是重要的关系数据库操作语言,也是数据库系统概论课程中重要的内容之一,它既包含复杂的理论知识,又涉及大量的实验。针对慕课环境下的数据库实验测试平台中存在的问题,自主研发了在线SQL自动评测系统,通过自动、实时、准确地量化学生的实验成绩,帮助授课教师及时有效地获取学生的学习情况,使其适应MOOC教学、MOOC+SPOC混合式教学等新型教学模式的需求。
本文将从基本架构、系统功能、关键技术实现、实验设计、系统评价等方面详细介绍面向慕课的在线SQL自动评测系统。
本系统的基本架构如图1所示,自底向上依次为数据源层、数据访问层、业务逻辑层、控制层、可视化层。
图1 系统基本架构
数据源层以人大金仓Kingbase数据库为基础,使用阿里巴巴的开源数据库连接池Druid进行数据库的连接池配置和监控等。系统的实验数据集由我校真实的本科学生选课数据构成。
数据访问层负责抽象出数据库的访问接口,实现数据库的增、删、改、查操作,读取并传递数据。
业务逻辑层是系统的逻辑实现,例如实验题目的解析与判断,处理用户答案和标准答案,按照既定的规则合理判分并返回结果分数等。
控制层主要是对外的数据输出接口,前端通过http请求进行数据请求,相应的控制接口调用业务逻辑层的逻辑判断返回相应的数据。主要分为3个方面的控制逻辑:与学生相关的,例如注册登录、获取用户信息等;与答题相关的,例如提交答案判分、保存答案等;与教师端可视化相关的,例如提供人数、成绩等数据。
可视化层是各类数据的展现,包括学生端的题目呈现及答题、答题结果呈现以及教师端的学生申请呈现,以及学生的成绩、答题等统计信息的呈现。
本系统主要包括2大功能模块:学生端功能模块和教师端功能模块,具体如图2所示。
图2 系统功能模块
2.2.1 学生端功能
(1) 注册模块。在答题前,学生要使用实名信息注册账号,由相关学校的授课教师审核通过后方可获得平台的使用权限。实名信息应该包括真实姓名、学校、专业、班级、序号等内容。本系统免费向所有高校开放使用,同一学校同一学期可能开设多个数据库课堂,使用“序号”唯一标识每个课堂。学生在注册时通过选择正确的学校和序号加入对应的课堂中。
(2) 登录模块。学生使用账号和密码登录系统。如果账号未经授课教师审核通过,登录后会进入到等待审核页面。
(3) 答题模块。学生在作答过程中可以随时保存答案,提交后即完成作答,系统自动完成批改。
2.2.2 教师端功能
(1) 审核模块。为使用本系统的授课教师分配教师账号。授课教师登录系统后根据实际情况同意或拒绝学生的申请。
(2) 成绩统计模块。当学生提交答案后,系统会自动存储该学生每道题的分数。教师通过可视化的图表查看所管理学生的答题情况,包括总体完成情况、总体成绩统计以及个体成绩详情等。
(3) 行为统计模块。本模块采集学生在答题过程中的行为数据。如各个题目和各个模块上的答题用时,从而可以间接地判断题目的难易程度。
本系统的重要目标是能够自动、实时、准确地评判量化学生的实验成绩。因此,答案判断是系统的核心功能。一种实现方法是比较SQL语句,另一种是比较结果。由于SQL语句具有灵活、不唯一的特点,给定一个SQL题目,可以使用多种不同的SQL语句完成。如果采用第一种实现方法,对于复杂实验,无法预测所有正确的SQL语句,直接对比SQL语句不具备可操作性。通过比较结果能够很好的规避直接比较SQL语句的复杂度,且易于实现。因此,采用比较结果的方法实现答案判断。
答案判断的基本思想是:分别执行学生提交的SQL语句和正确的SQL语句,比较两者得到的结果(事先保证正确的查询结果不为空),如果两者结果一致,则认为答案正确,否则认为答案不正确。但是,有时候学生的答案结果与正确结果相似,只是可能没有排序或者没有去重,这样的疏漏其实并不属于特别严重的错误,直接判定为全错是不合理的。因此,在判断时引入梯度分数,增加不完全正确的判断结果,从而避免以偏概全。系统在具体实现时,学生提交的SQL语句作为事务的操作序列执行,该事务最后会被回滚,这样不会改变数据状态,因此不会影响其他学生的操作结果。下面以Java代码为例介绍关键技术的实现。
2.3.1 数据操纵语言的判断
数据操纵语言包括查询操作和更新操作。
(1) 对于查询操作,引入 minus 关键字比较两者结果是否相同。核心代码如下:
/*拼接两个sql字符串*/
String spliceSql1 = ″ ( ″ + sql1 + ″ ) ″+ ″ minus all ″ + ″ ( ″ + sql2 + ″ ) ″;
recordList1 = samplesDAO.query(conn,spliceSql1);
/*判断查询结果是否相同*/
isEqual = (recordList1.size()==0) ? true : false;
(2) 对于更新操作,先执行提交的SQL语句,然后查询更新后的记录是否符合预期,如果符合则为正确,否则为不正确。核心代码如下:
/*执行学生提交的SQL语句*/
iCode = stmt.executeUpdate(userSolution);
/*执行完毕后再次进行查询获取到结果集record2*/
record2 = samplesDAO.query(conn, extraSql);
/*查看record2中相应记录的值是否被更新成指定的值*/
2.3.2 数据定义语言的判断
数据定义语言包括表、索引、视图的修改和删除、完整性等操作,判断的逻辑比较清晰。首先检查相应的表、索引、视图、属性等是否存在,属性类型和完整性约束是否正确,然后执行提交的SQL语句,最后检查执行后的数据库变化是否与预期相同。核心代码如下:
/*获取视图或表*/
rs = dbMetaData.getTables(null, ″PUBLIC″, ″%″, types);
/*获取索引*/
rs = dbMetaData.getIndexInfo(null, ″PUBLIC″, tableName, true, true);
/*获取主键*/
rs = dbMetaData.getPrimaryKeys(null, ″PUBLIC″, tableName);
/*获取外键*/
rs = dbMetaData.getImportedKeys(null, ″PUBLIC″, tableName);
2.3.3 数据控制语言的判断
数据控制语言包括授权与回收功能。对于权限的判断,首先通过查询dba_sys_privs表获得指定的用户对指定操作对象的权限集,再检查指定操作权限是否存在于已获得的用户权限集中,从判断出用户是否成功授权。
2.3.4 数据库编程的判断
数据库编程包含触发器的设置和存储过程。
(1) 触发器的设置通过执行提交的触发器后,根据触发条件进行相应的操作,然后检查与预期的触发结果是否相同,从而判断触发器设置是否正确。核心代码如下:
String sql1=″create table stu (sno char(10),sname char(10),sage int)″;
stmt.executeUpdate(sql1);
String sql2=″insert into stu values(′001′,′mark′,20)″;
stmt.executeUpdate(sql2);
/*执行提交的触发器的语句*/
iCode = stmt.executeUpdate(userSolution);
/*执行创建语句*/
/*条件出发前查询一次*/
tvalue = samplesDAO.queryOne(conn, checkSql);
/*执行触发条件*/
String sql3 = ″update stu set sage=19″;
stmt.executeUpdate(sql3);
/*条件出发之后在查询一遍,看触发器是否发挥了作用*/
tvalue = samplesDAO.queryOne(conn, checkSql);
(2) 存储过程本质上是一个函数,给定所要创建的函数名称和参数,当执行提交的答案之后,调用该存储过程查看结果与预期的是否相同,判断答案是否正确。核心代码如下:
/*调用学生所创建的存储过程*/
CallableStatement cs = conn.prepareCall(″{call proc_sc(?)}″);
cs.setString(1, ″2017004004″);
cs.execute();
cs.close();
我们根据数据库系统概论课程的重要知识点,参考教材《数据库系统概论(第5版)》[10]和《数据库系统概论(第5版)习题解析与实验指导》[11],结合我校在中国大学MOOC平台的教学大纲,设计了数据操纵语言、数据定义语言、数据控制语言和数据库编程四大实验模块,考察内容涵盖了表查询、数据更新、索引、视图、完整性、授权、存储过程、触发器等。下面详细介绍各实验模块的设计。数据操纵语言的实验设计和考察点见表1。
表1 数据操纵语言的实验设计和考查点
表1(续)
学生实验使用的课程数据库,数据来源于中国人民大学教务处系统。数据库包括以下3个表,具体如下:
(1) 学生表:Student (Sno, Sname, Ssex, Sage, Sdept)
(2) 课程表:Course (Cno, Cname, Cpno, Ccredit)
(3) 学生选课表:SC (Sno, Cno, Grade)
2.4.1 数据操纵语言
本模块实验内容包括单表查询、多表查询和数据更新。单表查询实验考察表的基本查询语句、去重、确定范围、排序、字符匹配、确定集合、分组统计的应用。多表查询实验考察各类连接、嵌套查询、集合查询的应用。数据更新实验考查基本表数据的插入、更新、删除及与查询结合的应用。本模块实验内容和考查点详见表1。
2.4.2 数据定义语言
本实验模块实验内容包括表的管理、索引的管理、视图的管理、实体完整性、参照完整性。表的管理实验考查基本表的定义、修改、删除。索引是加快查询速度的有效手段,索引的管理实验考查有效索引的建立、删除。视图是一个虚表,数据库中只存放视图的定义。视图的使用带来很多好处。视图的管理实验考查视图的建立、删除。数据库的完整性保证数据库存储的数据是符合现实世界语义的。完整性实验主要考查表级和列级完整性约束的建立。本模块实验内容和考查点详见表2。
表2 数据定义语言的实验设计和考查点
2.4.3 数据控制语言
授权作为数据库安全控制的一种措施。数据控制语言实验模块考察对基本表的各类权限(查询、插入、更新、删除)的分配、回收、级联操作。本模块实验内容和考查点详见表3。
表3 数据控制语言的实验设计和考查点
2.4.4 数据库编程
本实验模块实验内容包括触发器和存储过程。触发器是用户定义的事件驱动的特殊过程,可以进行复杂的检查和操作。触发器实验考查Before和After触发器的定义。存储过程实验考查其定义。本模块实验内容和考查点详见表4。
表4 数据库编程的实验设计和考查点
2.5.1 功能
本评测系统实验内容涵盖了数据操作语言、数据定义语言、数据控制语言、数据库编程,能够使学生得到完整的SQL实验训练。学生在答题时,每题均单独呈现,题目难度层层递进,能有效地检验学生对知识点的掌握程度。系统较好地支持SPOC课堂教学,运行稳定。系统功能目前还在不断完善,例如,实验案例库、随机动态组题、统计分析数据多样化等高级功能已在开发中。
2.5.2 效果
为了支持数据库课程的共建共享,本系统免费开放给所有高校数据库教师使用。石家庄铁道大学是首批使用本评测系统的学校之一。图3显示了该校某班的单表查询实验的总体情况。其中,显示出实验的总体完成情况,17人已作答。点击饼图中各部分,会显示出该部分对应的学生姓名,授课教师可以及时提醒这些学生完成实验。柱状图显示出每道实验题的学生成绩分布情况,可以看到,对于前3题,大部分学生都能正确作答,而对于第8题,只有5人正确作答,3人部分正确作答,反映出学生对前3题掌握较好,对第8题掌握不好,从而帮助授课教师确定教学中的重难点。
图3 单表查询实验的总体情况
图4显示了某个学生单表查询实验的完成情况,为了保护学生的隐私,用张小明代替该学生真实姓名。其中,左图是该学生每道题的成绩,右图是该学生完成每道题的用时。授课教师通过查看学生的个人完成情况,可以了解该学生的薄弱环节,从而因材施教。
我校数据库课程团队自2016年4月开始设计开发在线SQL自动评测系统。最初作为中国大学MOOC平台数据库系统概论基础篇和高级篇的实验平台,供慕课学生完成实验题。2017年春季学期,杜小勇教授和卢卫副教授在我校率先开设数据库系统概论SPOC课堂,使用评测系统考查学生对知识的掌握情况,减轻教师的批改负担。此外,另有10余所高校已经申请使用本测验系统。根据使用人员的反馈,本系统仍然在不断完善。
在线SQL自动评测系统,不是取代传统的实验教学,而是对传统实验教学的重要补充。本评测系统在实际教学中可以有多种的应用。
图4 单表查询实验的个体情况
如图5所示,在传统教学中,可以将本评测系统作为实验教学的辅助工具,将实验作业的发布与完成从线下转移到线上。学生在任何时间任何地点都可以在线提交实验,系统会自动生成实验报告并进行自动批改,节省了学生撰写实验报告和教师批改实验的时间和精力。系统的统计数据反馈给教师,掌握学生对知识的掌握情况,从而发现实际教学中存在的问题。
图5 应用场景1:传统实验教学
如图6所示,学生课前通过MOOC平台的视频等资源学习课程并完成相应的实验练习。一方面,学生可以了解自己的学习效果,针对自己的薄弱点在MOOC平台或SPOC课堂再学习。另一方面,学生的答题情况可以及时反馈给授课教师,例如,每个实验题的正确与错误统计信息、学生出错行为等一些细粒度的信息,通过对这些重要信息的分析,帮助教师准确把握教学的重点和难点。
中国人民大学数据库系统概论课程团队自主研发的在线SQL自动评测系统,在实验教学测评中发挥了很好的作用,在未来的工作中,将继续完善系统的功能,还将与其他高校合作创建实验题库,增设查询优化等更高阶的实验内容等,使其发挥更大的作用。
致谢:感谢中国人民大学数据库系统概论课程团队的教师、学生和金仓信息技术股份有限公司的技术人员支持和帮助!
参考文献(References)
[1] 范逸洲,王宇,冯菲,等.MOOCs 课程学习与评价调查[J].开放教育研究,2014,20(3):27-35.
[2] 中国人民大学.数据库系统概论MOOC课程基础篇[EB/OL].(2017-07-10). http://www.icourse163.org/course/RUC-488001.
[3] 中国人民大学.数据库系统概论MOOC课程高级篇[EB/OL].(2017-07-10).http://www.icourse163.org/course/RUC-1001655006.
[4] 中国人民大学.数据库系统概论MOOC课程新技术篇[EB/OL].(2017-07-10).http://www.icourse163.org/course/RUC-1001965017.
[5] 中国人民大学.SQL自动测详系统[EB/OL].(2017-08-09).http://dbm.ruc.edu.cn/rucdbcourse/.
[6] 王宁,王珊.数据管理课程群的构建和实施方案研究[J].中国大学教学,2010(6):62-65.
[7] 王珊.数据库课程教学改革:面向21世纪课程教材与国家精品课程[J].中国大学教学,2006(4):14-18.
[8] 李晓明.将要发生变化的课堂[J].中国大学教学,2017(6):15-17.
[9] 李晓明,张绒. 慕课:理想性、现实性及其对高等教育的潜在影响[J].电化教育研究,2017(2):62-65.
[10] 王珊,萨师煊. 数据库系统概论[M].5版.北京:高等教育出版社,2014.
[11] 王珊.张俊. 数据库系统概论习题解析与实验指导[M]. 5版.北京:高等教育出版社,2015.