APP下载

C语言编程题智能评分系统

2019-06-11黎青霞杨乘

电子技术与软件工程 2019年7期
关键词:C语言代码编程

文/黎青霞 杨乘

1 系统的研究意义

对于当前纸质化的C语言试卷或是无纸化的C语言试卷,其包含的题型可以分为以下几个大类:单选题、判断题、填空题、程序改错题和便编程题。选择题、判断题、填空题、程序改错题这几类题型客观性较强,无论是人工阅卷还是机器阅卷都几乎不存在争议。编程题主观性较强,在人工阅卷的过程中难免会存在争议,对于机器阅卷而言,这更是一个难题。编程题具有很强的灵活性,有的评分系统为降低系统实现的难度,构建系统时几乎没有考虑人工阅卷的思维方式,在评判编程题时只考虑结果分值而忽略过程分值。学生编写的代码运行结果与标准答案一致,则获得满分,运行结果与标准答案不同,则判为零分;有的评分系统虽然考虑了人工阅卷的思维方式,但并没有很好地与之相契合,过程分值的判断依据不是很合理。针对当前编程题评分系统的现状,希望能研究出一个比较合理的C语言编程题智能评分系统,一方面减轻教师的工作量,将以往用于批改试卷的大量时间节约下来;另一方面,对于C语言这种实践操作性高的学科,在线考试系统更能贴合其对操作性的要求。许多学校因评分系统的问题还是会选择纸质化的考试形式,一个合理的评分系统可以提升在线考试系统的价值,以更好的达到计算机评判系统的公平性、情理性,会促进学校对其的使用。

2 常用系统评分方法简介

当前比较普遍的编程题智能评分系统采用的评分方法主要分为三类:

(1)软件质量度量方法;

(2)动态测试方法;

(3)静态分析方法。

“软件质量度量方法是立足于软件复杂性的程度和程序的特征来评价学生程序的质量,从而给学生编写的程序评分。它的劣势在于分析源代码结构时理解性较差,不能理解程序的意思,单靠该技术给学生编写的程序评分很难得到合乎情理的结果。”

动态测试方法指通过运行需要测试的程序,检查运行的结果与预期结果的差异,并分析运行效率等性能。这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。但学生编写的程序有时要么会出现语法错误,导致程序无法通过编译;要么会出现语义错误而导致死循环,得不到程序执行的结果,最后的评分为零,这样的评分标准不符合教师人工阅卷的标准。该评分方法还很有可能忽略学生设计程序题的思路,无法还原学生掌握知识的真实程度,不利于教师对学生的学习做客观、合理的评价。

静态分析方法是指不运行需要测试的程序本身,即无需编译学生编写的代码,仅通过分析或检查学生编写的程序的语法、结构、过程、接口等以及与标准答案进行对比给出学生成绩。该方法会运用软件进行代码的质量度量,其原理是根据标准代码中指定的一些特征,如:关键字、骨架代码、标识符长度等,来与学生编写的代码进行比对,给与分值。但由于学生编写的代码可能会存在结构的问题或是不规范现象,采用这种方法搭建的评分系统在应用时会带来实用性的问题。同时,如果学生编写的代码有语法错误静态评分方法也无法进行评判。

3 国内外现状分析

国外对编程题评分系统的研究起步较早,“Douce 等人将其发展过程分为三个阶段:早期的自动评分系统、基于工具的评分系统和面向 Web 的评分系统。”国外在第一阶段中具有代表性的评分系统评判Algol语言的程序自动评分系统。该系统通过对程序题进行动态测试和数值分析等方法,实现了如下的功能:提供测试数据、记录运行时间和维护一个“成绩册”。第二代评分系统结合了已经存在的工具箱和由操作系统和编程环境提供的工具,更重要的是以命令行或图形用户界面的形式展现出来,操作者应用起来比较方便。第三代评分系统最大的特点是面向 Web,同时结合了富有经验的测试技术和模块。

国内对编程题评分系统的研究起步较晚,2000年后一些权威的高校陆续自行开发建立编程语言的在线测评平台。苏小红教授利用静态分析的方法进行代码测试,在考虑到代码风格与软件质量度量的基础上,通过提取抽象语法树的方式进行程序的形式转换。“李永浩研究出了基于程序理解的自动评分策略,该策略利用程序理解的常规过程以及基本策略作为依据制定编程题机器评分的方案。”[4]马培军等人对于程序理解的评分模型做了进一步的研究,采用系统依赖图作为程序之间的中间表示形式。在进一步优化后将学生编写的代码与标准代码的依赖图进行匹配,以此为依据进行编程题的评分。

现存的国内外编程题的评分系统在一定程度上实现了机器评阅编程题的目标,但大多数评分系统的评分思维向人工阅卷的思维靠拢的情况并不乐观。如果能结合动态测试与静态分析的方法研究出针对中职学校C语言课程的编程题智能评分系统,并使其评分思维向人工阅卷的思维靠拢,这样的系统在中职学校的利用价值是可观的。

4 拟采取的技术路线

4.1 B/S结构

B/S结构即浏览器和服务器结构。客户机上只要安装一个浏览器,服务器安装上数据库,浏览器就可以通过Web Server同数据库进行数据交互。

4.2 JSP技术

JSP(Java Server Pages)服务器端页面技术。JSP通常返回给客户端的是HTML文本,客户端只要有浏览器就能进行浏览。

4.3 Java编程语言

Java是一门面向对象编程语言,其程序员以优雅的思维方式进行复杂的编程。

4.4 Eclipse开发平台

Eclipse是一种可扩展的开放源代码IDE。Eclipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性。

4.5 MySQL

MySQL是一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。

5 研究内容

随着C语言在线考试系统的不断优化,对于编程题评分的合理性与准确性,机器评阅思维的人性化已成为人们追求的目标。本研究针对的群体主要是中职学生,与大学生相比他们学习的C语言知识相对简单些。他们更多的是希望通过C语言的学习提升自我的逻辑思维、对程序的理解能力以及一定程度上的编码能力。在这样的情况下实现一个根据算法过程评分的系统,给与学生合理的分数就显得极为有必要。本文的主要研究内容如下:

(1)C语言编程题智能评分系统的评分原理。该系统的评分原理包括对学生编写的程序运行结果的分析、代码中关键字的分析、骨架代码的分析以及将学生编写的代码与标准代码进行相似度的匹配。

(2)C语言编程题智能评分系统使用的技术。该系统使用的技术包括B/S架构、JSP技术、Java编程语言、Eclipse开发平台、MySQL数据库。

(3)C语言编程题智能评分系统的组成部分。该系统组成部分包括数据库关系模式,该模式包括学生登陆信息表、教师登陆信息表、管理员登陆信息表、试题库信息表、学生成绩信息表、学生考试分析信息表等;登录功能模块,该模块划分为管理员端、教师端、学生端;主界面、在线考试管理模块、编程题评分管理模块、修改用户信息模块等。

图1:C语言编程题智能评分系统

6 评分算法的流程

本文立足于当下C语言在线考试系统的现状,找出了一些使编程题在线评阅更合理应考虑的问题。结合现状要考虑的问题有:编程题灵活性很强,编写的代码形式并不唯一,如何解决代码的多样性问题;编写的程序运行结果不正确怎么评分;编写的程序不能通过编译怎么评分。在这些问题的基础上结合了C语言代码骨架与编译报错的情况设计了一套编程题评分算法流程:

①先编译学生编写的代码,判断是否编译成功;②编译成功则将学生程序运行的结果与标准答案进行对比;③判断对比结果是否一致;④结果一致,进行⑥;⑤结果不一致,先扣除一定分数再进行⑥;⑥将学生编写的代码与标准代码模板进行匹配,如果匹配程度达到最低下限,则给与匹配满分,否则扣除一定分数,再进行第⑦步;⑧编译不成功,根据报错的个数扣除一定分数,再进行⑥;⑦统计编程题的最终分值。流程图如图1所示。

7 研究的特色

本文研究的C语言编程题智能评分系统立足于中职学校的C语言课程特点,与其他评分系统相比针对性较强。开发过程中所要考虑的问题基本来源于中职学校的C语言课程,在实际使用的过程中也无需将课程与系统生硬的结合,而是根据课程需要利用系统,减轻教师批改试卷的工作量,系统的分析学生知识的掌握情况,以更好的促进学科的教学效率。该系统面向的是中职学校的C语言课程,所以实现该系统需耗费的人力、物力相对较少,开发周期占用的时间也相对较少而且还方便进行测试。当前虽已有多种多样的在线考试系统,但并没有一种专门适用于中职学校的C语言考试系统。某些中职学校即使购买了在线考试系统,在使用的过程中可能会出现课程与考试系统的生硬结合,在后期的使用当中维护系统将会耗费大量时间,也会花费大量的资金和人力。如果一开始的开发就立足于中职学校的C语言课程,所消耗的时间、资金以及后期的使用和维护都相对较少。

8 结束语

本文研究的系统旨在结合动态测试与静态分析的方法,使系统能借助相应的编译工具完成对程序的编译与运行。以及对程序进行分析,分析其中的词法、语法并与标准程序模板进行相似度的匹配。这种动静结合的方法有助于改善以往只考虑结果的编程题评分系统,使C语言编程题智能评分系统评判编程题的“思维”更接近于人工评判编程题的思维。在阅卷的过程中实现评分的多步走、合理走,让该系统在执行过程中像人脑一样工作。该编程题评分系统虽然在一定的程度上降低了计算机自动评阅编程题的不合理性,减轻了教师的部分工作量,但与人脑相比还存在较大的机械性。如果能在教师模块中添加一个计算每道题正确率的试题反馈结果模块,教师就可以借助每道题的正确率来获知班上学生对某知识的掌握程度并对后续的教学做相应的改进,再提升该学科的教学效率。

猜你喜欢

C语言代码编程
编程,是一种态度
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
创世代码
创世代码
创世代码
创世代码
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索