计算机专业程序设计类题目在线评阅方法的研究

2018-12-01 05:11庞希愚
计算机教育 2018年11期
关键词:数目线程程序设计

王 成,庞希愚

(山东交通学院 信息科学与电气工程学院,山东 济南 250357)

1 现状分析

计算机专业程序设计类课程是指C语言程序设计、Java语言程序设计、C#程序设计等培养学生编程能力的课程,这些课程有其独有的特点,既需要考查学生的基础知识、算法设计,又需要更多地考查学生利用语言解决实际问题的能力,为了更好的考查学生设计算法和编写程序的能力,国内外各大高校正在逐步使用在线考试系统代替传统的笔试方式。

计算机专业程序设计类课程的考试题目一般分为选择题、填空题和程序设计题。对于选择题、填空题,现有的在线考试系统已经实现了准确率很高的自动评阅;对于程序设计题,现有的在线考试系统还无法实现准确率较高的评阅,因为考生的逻辑思路不同,编写出来的程序也各不相同,从而导致了程序设计题目的自动评阅难度很大。现有的在线考试系统一般采用结果评分方法,也就是依据运行出的结果来给出相应的分数,在这种评分机制下,一个小小的错误就会导致一个基本上正确的题目一分未得,也可能出现解题思路错误而结果恰好正确却得满分的情况,考生成绩呈现两极化,考试得分不能真正体现考生的能力;也有一些在线考试系统对程序设计类题目实现过程评分,但是这类考试系统对于题目的设计、标准答案的输入有着严格的要求,使得老师花费大量的时间精力去设计满足这类考试系统的题目[1]。

目前,国内外对于主观题目的自动评阅展开了深入的研究,但是关于计算机专业课程程序设计类题目自动评阅方面的专项研究不多,相关文献较少,虽然程序设计类题目属于主观题的范畴,但是程序设计类题目与作文、简答题等主观题目是有区别的,适用于作文、简答题的语义分析等有关方法并不适合程序设计类题目,程序设计类题目有其自身的特征属性[2-3]。

2 基于程序设计类题目特征的在线评阅方法

程序设计类题目可以分为以下几类。

第一类:题目有一个或多个确定的运行结果。例如C语言程序设计课程考试题目:请编写程序实现1~100的和。

第二类:由输入数据导致的题目运行结果不确定。例如Java程序设计题目:请定义一个圆类,类中包含圆心x坐标、y坐标和半径等属性,有计算圆面积和周长的方法;或请从键盘上读入2个数,求2个数的和。

第三类:题目运行结果的顺序不确定。例如线程类程序设计题目,由于线程运行顺序的不确定性,每次程序的运行结果都有变化。例如Java程序设计课程考试题目:请创建并启动两个线程,一个线程输出1~100的所有偶数,一个线程输出1~100的所有奇数。

对于上述3类题目,可以在题目特征和模拟人工阅卷的基础上,采用一套程序设计类题目的在线评阅方案,在该方案中将基于多级关键词组合的过程评分引入到评分机制中。在过程评分中,将关键词进行分级,一级关键词组合是指本题目考查的知识点,将知识点转化为关键词,将关键词按照程序代码中的正确顺序列出,对于同一顺序可能出现的多个关键词都将其列在同一序列,一级关键词组合是程序代码中最重要的关键词;二级关键词组合的重要性仅次于一级关键词组合,把这种关键词按照程序代码中出现的正确顺序列出,对于同一顺序可能出现的多个关键词都将其列在同一序列;三级关键组合的重要性次于一二级关键词组合,以此类推,N级关键词组合是指将程序代码中重要性次于前N-1级、大于N+1级的关键词按照程序代码中出现的正确顺序列出,对于同一顺序可能出现的多个关键词都将其列同一序列。关键词划分成多少级别,由教师可根据题目的性质、考查的知识点等因素灵活进行制定。

2.1 第一类题目的评阅

第一类题目,由于其运行结果确定,运行结果对于评阅是很重要的依据。对于这种程序设计题目,首先根据结果对其进行评阅,这一步称为结果评分;然后进行基于多级关键词组合的过程评分,这一步称为过程评分,在过程评分中将考生答案根据情况按照顺序逐级与关键词组合进行匹配,每级关键词组合匹配结束时,将已成功匹配的关键词从考生答案中删除,为进行下一级的关键词组合匹配做准备。

在结果评分时,首先判断考生的程序是否能正常运行,如果不能运行,则进入基于多级关键词组合的过程评分;如果考生的程序能正常运行,结果评分有正确或者错误两种情况,如果结果正确,则在基于多级关键词组合的过程评分中,只进行基于一级关键词组合的过程评阅。

如果考生的运行结果不正确,在第二步的过程评分中,则采用基于多级关键词组合的过程评阅,首先将考生的程序代码与一级关键词组合进行匹配,如果成功匹配的关键词数目大于临界值则继续与二级关键词组合进行匹配,如果与二级关键词组合成功匹配的数目大于临界值则继续与下一级关键词组合进行匹配,直至与N级关键词组合匹配完毕。一旦出现与某一级关键词组合成功匹配的数目小于临界值则终止基于关键词组合的过程评分,进行最终评分。具体的流程如图1所示。

例如C语言程序设计课程考试题目:请编写程序实现1~100的和。由于题目比较简单,这道题目只设2级关键词组合,一级关键词组合为{for}或{do,while}或{while,do},二级关键词组合为{main,int,(+ =),printf}。如果结果正确,在第二步过程评分中,只进行基于一级关键词组合的过程评阅,如果学生的程序不能正常运行或者结果不正确,则在第二步的过程评分中,采用基于多级关键词组合的过程评阅。

最后进行最终评分,考生最终分数的计算公式为

在公式(1)中,Fscore表示这道程序设计题目的最终分数;Ascore表示结果评分的分数;Pscore表示过程评分的分数;β表示结果分数在最终分数中的比重,0≤β≤1,教师可根据题目的性质、考查的知识点等因素设置β的值;Sanswers表示本题正确结果所包含的答案数目;Ranswers表示本题考生成功匹配的答案数;Skeywords表示过程评分中所依据的关键词的总数目,Rkeywords表示过程评分中考生成功匹配的关键词数目。

2.2 第二类题目的评阅

这类题目的运行结果是由输入数据来决定的,对于这类题目,可以首先采用基于输入输出组合的评分,根据题目特征列出多组输入输出组合,输入输出组合的数量是由教师根据题目的性质、以往学生的答题情况以及教师的经验确定的。

图1 第一类题目的评分流程图

在基于输入输出组合的评分过程中,运行学生程序,将输入数据输入到程序中, 得到输出数据,再与该题目的输入输出组合进行匹配,如果全部成功匹配,则在下一步基于多级关键词组合的过程评分中,仅进行基于一级关键词组合评分,否则进行基于多级关键词组合评分。

在基于多级关键词组合的过程评分中,将考生的程序代码首先与一级关键词组合进行匹配,如果成功匹配的关键词数目大于临界值则继续与二级关键词组合进行匹配,如果与二级关键词组合成功匹配的数目大于临界值则继续与下一级关键词组合进行匹配,直至与N级关键词组合匹配完毕。

在过程评分中,一旦出现与某一级关键词组合成功匹配的数目小于临界值,则终止基于关键词组合的过程评分,进行最终评分。具体的流程如图2所示。

最终评分时,考生最终分数的计算公式为

图2 第二类题目的评分流程图

在公式(2)中,Fscore表示最终分数;IOscore表示基于输入输出组合评分的分数;Pscore表示基于多级关键词组合的过程评分的分数;β表示基于输入输出组合评分的分数在最终分数中的比重,0≤β≤1,教师可根据题目的性质、考查的知识点等因素设置β的值;IOanswers表示本题输入输出组合的数目;Rioanswers表示本题考生成功匹配的输入输出组合数目;Skeywords表示基于多级关键词组合的过程评分中所依据的关键词的总数目,Rkeywords表示本题考生成功匹配的关键词数目。

2.3 第三类题目的评阅

这类题目运行结果顺序是不确定的,但是经研究发现,其题目运行结果的范围往往是确定的。例如题目:请创建并启动两个线程,一个线程输出1~100的所有偶数,一个线程输出1~100的所有奇数。由于两个线程执行的顺序是随机的,导致这道题目的答案不确定,但是1~100之间的范围是确定的。

对于这类题目,可以首先采用基于多级关键词组合的过程评分方法,在过程评分中,将考生的程序代码首先与一级关键词组合进行匹配,如果成功匹配的关键词数目大于临界值则继续与二级关键词组合进行匹配,如果与二级关键词组合成功匹配的关键词数目大于临界值则继续与下一级关键词组合进行匹配,直至与N级关键词组合匹配完毕。

在过程评分中一旦出现与某一级关键词组合成功匹配的关键词数目小于临界值,则终止基于关键词组合的过程评分,跳过基于结果范围的评分,直接进行最终评分;如果在整个过程评分中,没有出现考生成功匹配的关键词数目小于临界值的情况,也就说与题目的N级关键词组合全部进行了匹配,则下一步进行基于结果范围的评分,再进行最终评分。具体的流程如图3所示。

最终评分时,考生最终分数的计算公式为

在公式(3)中,Fscore表示题目的最终分数;Rscore表示基于结果范围的评分;Kanswers表示考生程序运行结果的集合;Ranswers表示本题正确结果范围的集合,如果考生所有的运行结果都能在正确结果范围中找到,则基于结果范围的评分为100,如果考生的程序不能正常运行或者有1个或多个运行结果在正确结果范围中找不到,则基于结果范围的评分为0;Pscore表示过程评分的分数;Skeywords表示过程评分中所依据的关键词的总数目;Rkeywords表示本题考生成功匹配的关键词数目;β表示基于结果范围的评分在最终分数中的比重,0≤β≤1,教师可根据题目的性质、考查的知识点等因素设置β的值。

图3 第三类题目的评分流程图

例如题目:请创建并启动两个线程,一个线程输出1~100的所有偶数,一个线程输出1~100的所有奇数。首先进行基于多级关键词组合的过程评分,找出这道题目的多级关键词组合,一级关键词组合如下:

二级关键词组合如下:

在过程评分中,将考生程序代码逐级与本题目的二级关键词组合进行匹配,一旦出现与某一级关键词组合成功匹配的数目小于临界值,则直接终止过程评分,跳过基于结果范围的评分方法,直接进行最终评分;如果在评分过程中,没有出现成功匹配的数目小于临界值的情况,则进行基于结果范围的评分,再计算最终分数。这道题目的结果范围是1~100的整数,最终分数依据公式(3)计算。

3 结 语

计算机专业程序设计类课程的教学目的是培养学生的动手能力,让学生学会通过编写程序解决实际问题,对于这类课程,如何更加准确的考核学生的实际编程能力是十分重要的。

在在线评阅方法中,多级关键词组合是需要教师根据自己的经验进行制定的,这就需要花费教师一定的时间,但是随着机器学习的快速发展,一些专家学者针对主观题自动阅卷的难点,将机器学习中深度学习(Deep Learning)的理念应用到主观题自动阅卷系统设计中,所以未来,随着大数据库的不断完善以及深度学习的不断发展,本文中的多级关键词组合可以借助深度学习的方法自动生成[4-5]。

猜你喜欢
数目线程程序设计
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
移火柴
医学专业“Python程序设计”课程教学改革总结与思考
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索
牧场里的马
探索法在数学趣题中的应用