基于Sakai的程序设计语言课程教学管理系统*

2015-12-26 06:54蔡向高刘华泓
中国教育信息化 2015年15期
关键词:子项目源代码实验报告

蔡向高,刘华泓

(1.中山大学资讯管理学院,广东 广州510006;2.中山大学信息科学与技术学院,广东广州510006)

基于Sakai的程序设计语言课程教学管理系统*

蔡向高1,刘华泓2

(1.中山大学资讯管理学院,广东 广州510006;2.中山大学信息科学与技术学院,广东广州510006)

针对开源系统在线学习系统Sakai应用于程序设计语言等计算机编程类课程教学时,缺乏对程序设计题目进行自动评测和优化的问题,在对Sakai架构进行深度分析的基础上,集成了程序设计语言题目自动评测机制以及实现实验报告在线手写批注等功能。在实际教学中,有助于提高教师的工作效率以及给予学生更多的反馈信息。

程序设计语言;自动评测;Sakai;在线学习系统

一、引言

对于“程序设计语言”课程的编程作业,由于时间、精力有限,不少教师都是直接阅读代码后给出相关分数,而没实际运行学生的程序。人工阅读代码使得教师往往忽略了学生程序中存在的语法和编译问题,耗费教师更多的时间和精力,也难以验证其正确性。对编程作业进行自动化评测,不仅可以省去教师手工编译、运行及测试的时间,大大减轻教师的工作负担,而且通过若干从难到易的测试用例生成测试报告,也可以让学生对自己程序中存在的问题一目了然。

关于程序设计题目自动评测的相关课题吸引了国内外的许多学者进行研究。近几年,在国外如Aleman等人使用先静态测试再动态测试的方法对程序设计题目进行自动评测[1]。在国内,牛永浩等人[2]对关于如何进行程序设计题目的自动评分作了详细的分析。但是大部分的研究或系统更多只关注自动评测或代码相似性这几大关键技术,缺乏与之相配套、功能齐整的在线学习系统。

Sakai在线学习系统是由美国印地安那大学、密西根大学、斯坦福大学和麻省理工学院于2004年共同发起的一个开源项目[3],2005年发布第一个版本,目前最新版本号是10.3。Sakai平台包含了课程大纲、课程内容、平时作业、练习测验、成绩查询、成员名册、日程管理、系统通知和课程信息等数十个模块。Sakai平台采用插件机制,开发者可以很容易在上面开发新的模块。目前,Sakai已经在教育、培训和科研等领域得到了广泛的应用。

本文将在Sakai平台之上,讨论基于Sakai平台的源代码自动评测、源码和报告评阅等功能的实现。

二、关键技术

实现基于Sakai的程序设计语言课程教学管理系统,必须深入理解Sakai平台架构进行二次开发,并掌握自动评测等关键技术。

1.Sakai平台架构

Sakai采用插件式架构,每一个插件 (Sakai应用,Sakai Application)对应于一个具体的功能模块,如作业、考试等功能模块。每一个Sakai应用的结构如图1所示。主要分为四个子项目:第一个子项目为共享(Shared)的接口部分,关于所有的业务逻辑接口、Getter/Setter接口以及数据存取接口都在这一项目中声明。第二个子项目是组件(Components)定义部分,主要是Spring容器的配置文件,指明各个接口的实现类。第三个子项目为Web用户界面,所有关于用户输入输出的操作都在这一项目中实现;实际上通过Maven生成的标准Sakai应用,包含四个子项目。第四个子项目为实现部分,所有接口的实现类都在这一项目中创建。Sakai应用与Sakai框架进行通信是通过共享子项目的公共API实现,通过这些公共API,可以获取用户信息以及所属课程等信息。以上划分规划必须严格遵循,不同子项目间的协作只能通过接口进行,否则由于同一个实现类被不同的子项目加载容易导致类不兼容。

图1 Sakai应用结构

进行Sakai应用的开发,数据库存取的实现拥有多种选择方式,包括JDBC、Spring JDBC和Hibernate。表示层的实现可以选择Velocity、JSP、JSF、RSF、Wicket以及Spring MVC等方式。对于普通的开发者而言,选择Hibernate+Spring MVC是一种比较理想的组合方式。然而对Sakai进行二次开发时,不同的Sakai应用采用不同的数据库存取方式以及表示形式,要求开发者掌握各种相关技术以及理解Sakai现有的代码,会一定程度上增加开发者的学习成本和降低开发效率。

2.自动评测

程序设计题的自动评测技术主要包括静态测试和动态测试。静态分析主要指针对源代码进行分析,不要求源代码完整或者可编译。动态分析是指将源代码编译成程序后,采用黑盒测试的方法,使用测试用例对程序进行测试,并比较运行结果和期望结果来确定学生的分数。本系统主要采用动态测试,在Windows使用Visual Studio的编译器CL.EXE对源代码进行编译,在Linux中调用GNU编译器套件GCC进行编译。然后运行程序进行测试。

为了防止程序运行、编译异常或进入死循环,本系统采用JAVA线程创建编译或测试进程,并进行监控。如果超时仍未完成相关任务,将强制性停止该进程,确保服务器不会因为阻塞而陷入长时间等待。进行结果对比时,系统将会对程序的输出进行处理并智能提取关键数据与期望结果进行比较,防止因为输出格式或提示文本的原因导致测试不通过。此外,系统可以进行文件分割支持多源文件输入,从而可以应用于“数据结构”等计算机编程课程。

3.相似度检测

学生的诚信问题一直是广大教师在授课时所关注的重点所在。检查学生提交的程序源代码是否存在抄袭,在国内外的研究都已经比较成熟。主要包括属性计数法、结构度量法、最长公共子序列等方法。并且在应用检测算法之前,还可以对程序源代码进行预处理或词法、语法分析,以消除格式(如空格和换行)、顺序或改名等操作的影响。本系统对源代码进行预处理后,采用类似Linux diff命令的算法,以行为单位使用最长公共子序列进行检测。

4.在线手写批注

对于程序设计作业,除要求提交源代码外,一般还要求学生提交实验报告,即作业内容。各类主流的在线学习系统,基本都提供了作业管理功能,少数平台也提供对作业内容进行批注的功能,如Sakai,可以在学生提交的作业文本中插入一些特定符号,使在学生界面可以实现批注的效果。但是效率和效果都不理想,比不上现实中教师使用红笔在纸质作业本上或实验报告上直接批改来得方便。

得益于下一代HTML,即HTML5技术的发展,使用HTML5中的Canvas画布功能,可以在浏览器上实现类似画图软件中的涂鸦功能和文本框功能。为了支持教师可以对实验报告进行在线手写批注,首先将学生提交的实验报告(PDF)转换为图片,然后以背景的方式装载进入画布,批注保存后系统后台自动生成已批注的PDF供学生下载。如果需要对源代码进行评阅,可以要求学生将源代码粘贴进入实验报告。

5.其他

除开上述核心技术外,出于教学效率和学习效率、用户体验等方面的考虑,本系统集成了语法高亮、源代码在线编辑器、源代码格式化和报表输出等功能。

三、功能实现

系统基于著名开源在线学习系统Sakai之上,实现源代码自动评测,并对平时作业、考试测验和成绩查询等模块进行改进。系统针对中山大学教学环境做了相关优化,支持中山大学教务相关报表的输出以及对Sakai的汉化、样式做了改进。以下将以基于Sakai平台的源代码自动评测和实验报告在线评阅两大改进功能进行说明。

1.源代码自动评测

在Sakai的基础上,集成C++编程作业类型,教师需要将作业类型选择为“C++作业”,然后输入测试用例。学生在相应的用户界面可以输入源码等信息。系统集成了C++源码在线编辑器,使用源码在线编辑器,学生可以在浏览器中很方便地进行代码编辑。系统将根据事先定制好的测试用例对C++源码进行评测,将会为每一位学生生成一份详细的阅读报告,如图2所示。并且系统支持对所有作业进行批量的评测,进行批量评测还将包含作业相似度的检查。

图2 自动评测结果

2.实验报告评阅

为了帮助教师对程序作业进行打分,系统集成了各种工具对源代码进行处理,如显示自动评测的结果以及源代码高亮、格式化,如图3所示。此外如图4所示,系统实现了PDF报告在线手写批注的功能。系统提供画笔功能,实现自主批注功能。也提供了文字批注功能、橡皮擦等功能。这些功能基本满足了教师对实验报告进行批注的需求。保存后,学生就可以在自己的用户界面中下载已批注的报告。

四、系统使用情况

针对程序设计题目自动化评测模块在2009年、2010年已经在中山大学信息科学与技术学院C++高级程序设计语言课程中试用。每周布置两道的编程题目,学生提交源代码和实验报告。预先定义从易到难的测试用例,较难的测试用例主要针对边界测试或学生容易疏忽的地方进行设计。使用自动化评测模块,可以快速生成成绩报告,减少作业评改的时间和提高评改的准确性。学生根据反馈的测试报告,可以快速定位程序存在的问题,一定程度上提高学生的学习效率。

图3 源代码评阅界面

图4 实验报告在线手写批注

Sakai平台已经在中山大学资讯管理学院的两门课程进行试用,大大提高了教师与学生之间的协作效率,为作业、考试提供了一个优秀的管理平台。基于Sakai平台的自动化评测系统在开发完毕后,使用2009年、2010年的数据针对C++程序设计语言课程的作业自动化测评进行评估,初步验证其可行性,并将在2015年春季学期于中山大学资讯管理学院数据结构等课程中试用。

五、总结

本文探讨了基于Sakai程序设计语言课程教学管理系统的设计开发,利用当前开源平台以及程序自动化评测技术,在Sakai的基础上,进行了深度的二次开发,实现了“程序设计语言”实验自动评测及课程管理系统,实现对C++作业进行自动评测和管理的功能,提高教师在程序设计语言课程的教学效率。

[1]Aleman JLF.Automated assessmentin aprogramm ing tools course[J].IEEE Transactionson Education,2011,54(4): 576-581.

[2]牛永浩,张晓光.关于程序设计题自动评分方法的研究[J].信息技术,2010(11):155-159.

[3]Apereo Foundation.Sakai Project[EB/OL].https:// www.sakaiproject.org/,2015-02-15.

(编辑:杨馥红)

TP311.52

A

1673-8454(2015)15-0057-03

国家自然科学基金(项目编号:61309028);广东省教育厅高校学科与专业建设专项基金科技创新项目(项目编号:2013KJCX 0128);中山大学实验教改项目(项目编号:20000-18008010)。

猜你喜欢
子项目源代码实验报告
服务进程中消费者对子项目顺序的遵从性研究
基于TXL的源代码插桩技术研究
活性炭为中心综合项目总体布局
实验报告
基于语法和语义结合的源代码精确搜索方法
基于案例的电子技术实践教学内容与教学设备的设计
问卷星在无纸化实验报告中的设计
任务型专业英语口语教学实验报告
解密别克安全“源代码”
生物化学检验实验报告书写综述