高校程序设计类课程网上考试自动组卷方法的研究

    庞希愚 王成

    

    

    

    摘 要:针对程序设计类课程网上考试系统组卷存在的问题,作者根据软件工程的理论,从在线考试系统整体角度出发,对计算机专业程序设计类课程的特征进行深入研究,分析影响试卷生成的多种因素,提出一套多元随机程序设计类课程网上考试系统智能组卷算法。该组卷算法适合程序设计类课程在线考试,具有组卷速度快、试卷重复率低、题目难度系数适中等特点,能够满足计算机专业程序设计类课程在线考试的需求。

    关键词:智能组卷;知识点;程序设计;软件工程

    中图分类号:TP393? ? ? ? 文献标志码:B? ? ? ? ? 文章编号:1673-8454(2020)14-0093-04

    一、引言

    智能组卷算法是在线考试系统中的重要组成部分,现有智能组卷算法的研究主要围绕随机组卷算法[1]、回溯组卷算法[2]和基于遗传算法[3-4]的组卷方法展开,并且现有智能组卷算法的文献往往是单独针对智能组卷算法展开研究,并没有从整个在线考试系统的角度上对其进行研究,忽略了与系统中其他模块之间的关联,从而导致了智能组卷算法的实际应用存在一定的问题。

    根据软件工程的理论,一个完整的系统各个模块之间存在着密不可分的关联,对于在线考试系统,题库的设计、智能组卷和自动评阅模块之间的关联非常紧密。程序设计类课程注重考察学生的编程能力,在线考试系统中编程题目是必不可少的。众所周知,編程题目的自动评阅一直是研究的难点。本文从软件工程体系结构的角度出发,对智能组卷方式进行深入研究,从程序设计类课程在线考试系统的整体出发,在考虑编程题目自动评阅的基础上进行题库的设计,并结合程序设计类课程的特征,对智能组卷算法进行研究,提出一套多元随机程序设计类课程网上考试系统智能组卷算法。

    二、基于知识点的题库设计

    题库是一个在线考试系统的基础,也是后续智能组卷模块和自动评阅模块的基础。程序设计类课程在线考试系统题目类型一般分为选择题、填空题以及编程题目。选择题和填空题因为答案确定,将标准答案与考生答案进行匹配对比,就能实现自动评阅;对于编程题目,本文针对目前计算机专业程序设计类题目在线评阅中存在的不足,在深入分析程序设计类题目特征的基础上,提出了一套面向程序设计类题目的在线评阅方案,在该方案中,将标准答案转化成关键词,并对关键词按照重要程度划分成多个级别,将每类题目的特征与基于多级关键词组合的过程评分相结合,提高了程序设计类题目在线评阅的准确性[5]。对于智能组卷算法,首先要考虑的是一套试卷要考察的知识点包括哪些。

    本文从程序设计类课程在线考试系统的整体出发,在考虑程序设计题目自动评阅的基础上,结合程序设计类课程的特征进行题库的设计,既然智能组卷算法和自动评阅算法都离不开知识点,那么本文围绕知识点进行题库设计。

    如图1所示,题库的设计主要涉及选择题表、知识点表、填空题表、题目类型表、编程题表5张表,其中知识点表中的每个元素包括知识点ID、知识点名称、知识点所在的章节号以及题目类型代码字段;选择题表中每个元素包括题目ID、知识点ID、题目类型代码、题干描述、各选项的描述以及该题目的正确答案字段、填空题表中的每个元素包括题目ID、知识点ID、题目类型代码、题目描述以及正确答案字段;编程题表中的每个元素包括题目ID、知识点ID、题目类型代码、题目描述、各级关键词组合字段。

    为了提高系统的可扩展性,设计了一张题目类型表,如果后续需要增添新的题目类型,只需要往此表中添加新的题目类型即可,便于整个系统的维护。选择题表、填空题表、编程题表中的知识点ID字段与知识点表中的知识点ID存在主外键关系,选择题表、填空题表、编程题表中的题目类型代码字段与题目类型表中的题目类型代码字段存在主外键关系。

    三、程序设计类课程的多元随机组合智能组卷算法

    试卷所要考察的知识点、试卷之间题目的重复率和智能组卷算法的效率是一个智能组卷算法的核心。本文围绕这几个方面展开重点研究,提出了一种多元随机组合智能组卷算法。在线考试之前,教师要登录在线考试系统,选择本次考试所要考察的知识点以及每个考察知识点的题目类型,确定好这两个要素之后,将其保存到数据库中,数据库中考试知识点表的结构如表1所示。

    在线考试开始时,考生登录在线考试系统点击抽题,将进行抽题的考生的人数保存到应用程序级变量Application[“count”]中。这时智能组卷组合算法开始运行,对各类型题目进行智能组卷,程序设计类课程在线考试系统题目类型一般分为选择题、填空题及编程题目。下面以选择题为例详细介绍智能组卷算法的流程。

    1.多元随机智能组题算法

    (1)组卷步骤

    选择题目的智能组卷流程如图2所示,具体步骤如下:

    ①首先从数据库表中读取教师已经设置好的本次考试选择题所要考察的知识点,采用随机排序算法对选择题知识点进行排序,将排好序的知识点ID保存到一维数据中,选择题目知识点的数组为Sk={K0,K1,…,Kn-1},Ki表示本次考试选择题所要考察的知识点的ID,n表示本次考试选择题所要考察的知识点的数目。

    ②因为每个知识点ID一般对应多道选择题题目,根据知识点ID(Ki)从数据库中读取选择题表中该知识点对应的所有选择题的题目ID,将其保存到应用程序级变量中,i的初始值为0,知识点Ki的应用程序级变量如下所示:

    int SqiArray[] = new int[]{Sqi0,Sqi1,….Sqit-1}

    Application[“Sqi”]= SqiArray;

    其中,Sqi表示知识点Ki对应的应用程序级变量的名字,这个应用程序级变量是个数组,数组的名字为SqiArray,保存的是数据库选择题表中知识点Ki对应的所有选择题的题目ID,分别是Sqi0,Sqi1,Sqi2,….Sqit-1,t表示知识点Ki对应的所有选择题的数目。

    因为采用了应用程序级变量,所以在在线考试系统运行的整个应用程序生存周期,此变量可以被访问网站的每位用户所访问,因此只需要在第一位考生登录系统点击抽题时从数据库中读取,后续登录抽题的考生只需要访问应用程序级变量即可,无需再次访问数据库读取该知识点对应的所有的选择题题目的ID,从而避免了多次访问数据库,提高了系统的性能。

    ③按照随机排序算法对知识点Ki 的应用程序级数组Application[“Sqi”]进行随机排序,同时将该数组的排序次数保存到Application[“SorderCount”]。

    ④当知识点Ki的应用程序级数组Application[“Sqi”]中的题目被随机抽取一遍时,将对其进行再次排序,同时将该数组的排序次数保存到Application[“SorderCount”],用下面的公式来判断是否需要再次排序:

    (Application[“count”]-1)/t+1==Applcation[“SorderCount”]?? ? ?公式1

    假设,在数据库表中,知识点Ki包含10道题目,当第11位考生开始抽题时,知识点Ki 的应用程序级数组Application[“Sqi”]中的题目已经被随机抽取了一遍,这时,公式左边的值为(11-1)/10+1==2,而公式右边Applcation[“SorderCount”]的值为1,公式两边的值不相等,因此不满足条件,那么就对数组Application[“Sqi”]进行再次排序,再次排序后,公式右边Applcation[“SorderCount”]的值变成了2,公式两边的值相等。

    ⑤选取Application[“Sqi”]中下标为(Applicaton[“count”]-1)%t的选择题题目ID。

    ⑥根据选择题题目ID 从选择题表中读取题干描述以及各个选项,对该选择题的选项根据随机排序算法进行排序,从而生成最终的知识点Ki对应的本次考试的选择题。

    ⑦循环执行步骤②至⑥,直至选择题目知识点的数组Sk={K0,K1,…,Kn-1}中所有的知识点Ki都生成确定的题目为止。

    (2)涉及算法

    该选择题自动组卷算法步骤中多次涉及到的随机排序算法:

    ①算法一开始,对本次考试中所要考察的所有知识点进行随机排序,即使出现考生所抽取的某个知识点的题目相同的情况,但是因为已经对本次考试中所要考察的所有知识点进行了随机排序,所以这个相同的题目在不同考生试卷中的序号一样的概率很低,从而加大了考生作弊的难度。

    ②根据考生人数和知识点Ki的选择题目的数量对知识点Ki的应用程序级数组Application[“Sqi”]进行多次随机排序,不仅很大程度上避免了考生所抽取的某个知识点题目相同的情况,而且保证了数据库中的某个知识点对应的所有题目被抽取到的概率基本一致。

    ③确定选择题的ID后,对该选择题的选项根据随机排序算法进行排序,即使出现考生所抽取的某个知识点的题目ID相同的情况,但是算法会对选择题的选项根据随机排序算法进行随机排序,从而一定程度上降低了相同题目ID生成相同题目的概率,降低了试卷的重复率和考生作弊发生的情况。

    填空题和编程题的智能组卷算法与选择题的智能组卷算法类似,填空题和编程题因为没有多个选项,所以相对于选择题的组卷,不需要对多个选项再进行随机排序。

    2.多元隨机组合智能组卷算法的数据结构

    智能组卷组合算法主要数据结构包括选择题结构向量,每个向量元素包括知识点ID、题目类型代码ID、题目的ID以及选择题的选项信息,如图3所示;填空题结构向量,每个向量元素包括知识点ID、题目类型代码ID、题目的ID以及填空题题目描述,如图4所示;编程题结构向量,每个向量元素包括知识点ID、题目类型代码ID、题目的ID以及编程题的题目描述,如图5所示。最后,将生成的试卷保存到数据库考生试卷表中,如表2所示。

    四、结束语

    智能组卷算法是在线考试系统中的重要组成部分,本文根据软件工程的理论,从软件工程体系结构的角度出发对智能组卷方式进行深入研究,从程序设计类课程在线考试系统的整体出发,在考虑编程题目自动评阅的基础上进行题库的设计,结合程序设计类课程的特征,提出了一种多元随机智能组合组卷算法。

    本文以我校计算机科学与技术专业为依托对该算法进行了实践,对现有的程序设计类课程网上考试系统进行了改进,实践证明,本文提出的多元随机智能组卷算法不仅考虑了计算机专业实践类课程的特征,而且综合考虑了试卷的章节比例,各试卷之间的重复率以及各试卷之间考察知识点的相似度、智能组卷算法的效率等要素,其适合程序设计类课程在线考试,具有组卷速度快、试卷重复率低、题目难度系数适中的优点。

    参考文献:

    [1]何恒飞.主观题智能阅卷的关键技术研究[D].北京:北京工业大学,2013.

    [2]钟世芬,柳荣,陈红红,等.程序设计类课程无纸化考试系统存在的问题及改进方法[J].高等教育研究,2016,22(1):42-44.

    [3]陈国彬,张广泉.基于改进遗传算法的快速自动组卷算法研究[J].计算机应用研究,2015,32(10):2996-2998.

    [4]朱婧,戴青云,王美林,等.自适应遗传算法在工程训练在线考试中的应用[J].计算机工程与应用,2013,49(14):227-230+ 246.

    [5]王成,庞希愚.计算机专业程序设计类题目在线评阅方法的研究[J].计算机教育,2018(11):122-127.

    (编辑:鲁利瑞)

    王成为本文通讯作者

    *本文系山东省教育科学“十三五”规划2019年度“教育招生考试专项”一般资助课题“基于多模态生物特征识别的考生网上身份验证系统研究”(编号:BYZK201904)的阶段性成果。