陈 敏,汤慧仪
(1.湖南信息学院电子信息学院,湖南 长沙 410151;2.厦门大学马来西亚分校计算机系,马来西亚 雪兰莪 43900)
对教师而言,传统考试通常包括人工出卷、组织学生现场考试、人工阅卷、手动统计成绩和试卷分析等步骤,工作任务繁重、效率低下,且容易出现误批[1];对学生而言,传统考试只注重某次考试成绩,无法完全反映学生平时的真实学习情况[2].因此,借助互联网改革传统考试的形式,构建功能实用的在线考试系统,从而减轻教师负担、提高考试效率和激发学生学习兴趣,成为当务之急[3].
Java是近年来较为普及的计算机语言之一,Java程序设计是大学计算机软件工程专业的重点专业基础课.开发该课程的在线考试系统,对于配合教师教学、引导学生自主练习,以及学生参加Java课程考试、计算机考级、竞赛训练等都有重要的意义.目前,专门针对Java程序设计的考试系统不多,且存在无法满足在线编程、题型较单一且难度无梯度、缺乏数据分析功能和用户之间难以实现交互等不足.因此,笔者拟设计一个面向Java程序设计课程的在线考试与练习系统,以期减少教师的工作量、提高学生的学习积极性,并为高校在线辅助教学平台的开发提供一定的借鉴.
在线考试与练习系统包括学生端、教师端和管理端.学生端主要负责各种考试与练习,教师端主要负责试题管理和试后分析,管理端主要负责上传试题和发布考试.系统设计特点如下:(1)题目按难度分级、逐级冲关设计,包含专题练习与各类考试(阶段测试、期中期末测试、Java国家水平考试、计算机软考和程序设计竞赛等)试题;(2)可实现在线编译Java程序,即在没有安装Java的环境下依然能调试运行Java代码;(3)学生端可以回顾错题,查看答案与解析;(4)学生端可在论坛中进行经验交流;(5)具备考试防作弊功能;(6)教师端可以管理试题、查阅学生分数与答题情况、自动生成可交互的动态图表和分析相应数据等;(7)试卷批阅分为系统自动批阅和人工辅助批阅.
在线考试与练习系统的功能结构如图1所示.
图1 在线考试与练习系统的功能结构
系统的数据库设计比较复杂,篇幅所限,图2仅示出部分数据库ER模型,其中的“学生-试题-记录”“学生-评论-点赞记录”“学生-试卷-成绩”均为多实体联系.
图2 系统部分数据库ER模型
教师将题目加入题库以供学生在任意时间练习,练习分为3种,即分级练习、专题练习和题型练习.分级练习是教师将难度相似的试题组成一套试卷导入题库,难度分为4个等级,在练习成绩达到一定要求后可以解锁更高等级的试卷;专题练习是学生输入一个关键词,系统在题库中模糊匹配相符的题目组成一套试卷;题型练习是学生选择一个题目类型,系统在题库中随机抽取符合题型的题目组成一套试卷.3种练习的处理流程分别如图3~5所示.
图3 分级练习流程 图4 专题练习流程 图5 题型练习流程
对于学习Java编程的学生来说,编程实践能力很重要.系统加入在线编译引擎,学生可以直接在系统中编译代码,然后提交系统由教师在线评分.在线编译关键代码如下:
File sourceFile = new File(className+".java"); //保存源代码
FileWriterfr = new FileWriter(sourceFile);
bw = new BufferedWriter(fr);
bw.write(code);
bw.close();
fr.close();
Runtime = Runtime.getRuntime();
process = runtime.exec("cmd");
bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("javac "+className+".java n"); //往控制台注入命令
bw.flush();
bw.write("java "+className+" n");
bw.close();
BufferedReaderbr = new BufferedReader(new InputStreamReader(process.getInputStream()));
String content = null;
while((content = br.readLine()) != null){
list.add(content);}
实现思路为:系统获取定义类的代码行,运行Windows系统的cmd命令;在控制台上写入命令编译.java文件,系统在程序运行时产生Java类,并编译成.class文件;系统运行.class文件就能获取控制台输出的内容并展示给用户.
本系统已成功应用于湖南信息学院软件工程专业Java程序设计课程的线上教学,较好地解决了直接利用现有通用型在线教学平台(如超星、MOOC等)进行Java考试所存在的考试功能不够、考试形式较单一和不能在线编译等问题.系统实现采用当前主流技术,软件框架为Struts2+Spirng+Hibernate[4],前端使用Bootstrap和Ajax[5],数据库使用SQL Server.以下是系统实现的部分展示.
(1)学生端.学生端主要供学生参加各种考试与练习,针对Java程序设计的特点,加入了在线编译功能,用户即使脱离Java语言环境也能够在线编程(图6).为了防止学生通过其他网页搜索答案或信息,系统加入了防作弊功能,第1次进入考试页面就自动全屏,当系统检测到用户在考试中退出全屏3次以上时,将自动为其提交试卷并标记作弊.防作弊功能效果如图7所示.
图6 在线编译运行截图
图7 防作弊效果截图
(2)教师端.系统会自动批阅学生完成的试卷,教师负责管理试题并统计分析相关考试数据(图8和图9).
图8 数据统计柱形图截图
图9 数据统计折线图截图
(3)管理端.管理员使用上传试题引擎上传试题,并发布分级练习和安排统一考试.图10示出了发布分级练习界面.
图10 发布分级练习界面截图
设计并实现了一个面向Java程序设计课程的在线考试与练习系统,该系统根据Java程序设计考试的特定应用需求加入了各种实用的特色功能,以适应多样的考试场景及灵活的考试形式.应用结果表明,系统功能丰富,能在帮助学生积累实践经验的同时提高其学习积极性.由于系统的开发具有通用性,因此易于扩展到其他程序设计语言的在线考试平台.接下来,笔者将着力于加强系统稳定性及提高并发量,以满足特定时间段(如考试时并发访问量瞬间达到峰值)的需求.