CN111459841A - 一种通用程序语言自动评测方法及系统 - Google Patents
一种通用程序语言自动评测方法及系统 Download PDFInfo
- Publication number
- CN111459841A CN111459841A CN202010362099.5A CN202010362099A CN111459841A CN 111459841 A CN111459841 A CN 111459841A CN 202010362099 A CN202010362099 A CN 202010362099A CN 111459841 A CN111459841 A CN 111459841A
- Authority
- CN
- China
- Prior art keywords
- program
- evaluation
- file
- source code
- evaluating
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000011156 evaluation Methods 0.000 title claims abstract description 56
- 238000012360 testing method Methods 0.000 claims abstract description 17
- 244000035744 Hura crepitans Species 0.000 claims abstract description 13
- 238000004458 analytical method Methods 0.000 claims abstract description 4
- 238000000034 method Methods 0.000 claims description 26
- 238000012854 evaluation process Methods 0.000 claims description 5
- 230000005856 abnormality Effects 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种通用程序语言自动评测方法,方法包括:搭建编译运行环境和沙盒环境;制定测试用例,指定评测时间和内存限制;获取待评测程序源码并与通用语言类型组装成程序内容,并以JSON字符串形式发送至评测机;评测机接收JSON字符串并进行解析,将解析结果写入程序文件,根据通用语言类型生成对应的文件扩展名;将程序文件按照文件扩展名进行分类,根据文件类型调用编译器进行编译;重复运行程序,得到多个运行结果并将与制定的测试用例进行比较,得出评测结果;根据评测结果评定待评测程序源码的正确性,同时显示评测结果的准确率。本发明还提供一种通用程序语言自动评测系统。通过本方案可以提高程序评测的效率,以及评测结果的准确性。
Description
技术领域
本发明涉及计算机科学与技术领域,尤其涉及一种通用程序语言自动评测方法及系统。
背景技术
在计算机编程教学实践过程中,通常需要对程序编码的正确性进行判别。例如,编程教学的过程中,教者通常需要对学者所编写的程序源码的正确性进行评测,从而教者可以检查教学效果,学者可以检查学习效果。
计算机程序源码正确性判别的过程可以分为两种:一种是人工完成的过程,简称为人工评测;另一种是由计算机辅助自动完成的过程,简称为自动评测。人工评测过程中以人为主体,对程序源码进行纯人工或者半人工的推理与演算进而得出结果。人工评测费时费力,且容易出现差错。而自动评测则是由计算机作为主体,评测的过程几乎不需要人工的参与,利用计算机快速、精确的特点,由计算机自动分析,进而得出结果。此种方法,迅速快捷,正确性可以得到保障,是一种较为先进的方法。
现有自动评测的方法在进行计算机程序源码评测时,往往只能适用一种程序语言,不兼容其他程序语言的语法或语义。
发明内容
本发明的目的在于克服现有技术的不足,提供一种通用程序语言自动评测方法及系统,能够兼容多种常用编程语言,自动完成程序源码的评测。
本发明的目的是通过以下技术方案来实现的:
一种通用程序语言自动评测方法,方法包括以下步骤:
S1,评测机搭建,搭建通用程序语言的编译运行环境和评测所需的沙盒环境;
S2,制定用于评测的多组测试用例,指定评测时间和内存限制;
S3,选择任意一种通用语言进行编程,获取待评测的程序源码并与通用语言类型组装成程序内容,并以JSON字符串形式通过消息队列发送至评测机;
S4,评测机接收JSON字符串并进行解析,将解析结果中程序内容写入程序文件,同时根据通用语言类型生成对应的文件扩展名;
S5,将生成的程序文件按照文件扩展名进行分类,同时基于搭建的编译环境根据文件类型调用对应的编译器进行编译;
S6,在沙盒环境中重复运行程序,得到多个运行结果,并将运行结果与制定的多组测试用例进行比较,得出评测结果;
S7,如果步骤S6中得出的评测结果是正确的则评定待评测程序源码是正确的,同时显示评测结果的准确率。
具体的,所述步骤S5中编译在对程序源码编译时,根据程序语言类型调用对应的程序语言编译规则对程序源码文本进行分析,若出现语法错误或者词法错误时,提示编译失败,评测机自动捕获编译异常,并显示编译异常具体信息。
具体的,所述步骤S6程序在沙盒内的运行过程中还包括:对沙盒内的文件系统及其执行权限、网络、进程间通信与评测机进行隔离。
具体的,所述步骤S6中程序运行错误时,评测机自动捕获运行异常,并显示运行异常具体信息。
具体的,所述步骤S6中在程序运行结果与多组测试用例的比对过程中,若比对时间和内存超过限制时,则提示评测运行时间和内存超出限制,并自动结束评测过程。
一种通用程序语言自动评测系统,系统包括
程序预处理模块,获取待评测程序源码和程序语言类型,并将程序源码和程序语言类型组装为程序内容,以JSON字符串的形式发送至程序文件生成模块;
程序文件生成模块,接收JSON字符串并进行解析,并将解析出的程序内容写入程序文件,并根据程序语言类型生成对应的文件扩展名;
程序编译模块,设置有多个不同程序语言类型的编译器,获取生成的程序文件并按照文件扩展名对程序文件进行分类,同时根据文件类型调用不同的编译器对程序文件中的源码进行编译;
程序运行模块,重复多次运行编译成功的程序,输出程序运行结果;
程序评测模块,设置有多组测试用例,获取多个程序运行结果,并将程序运行结果与测试用例进行比较评测,输出评测结果并显示评测结果的准确率。
本发明的有益效果:
1、适用强,能对多种程序语言类型的程序进行评测;
2、安全性高,程序的编译和运行都在沙盒环境中隔离进行,提高系统的安全性;
3、评测结果准确,对程序运行结果与多组测试用例进行多次比对,提高了程序评测的准确率。
附图说明
图1是本发明的方法流程图。
图2是本发明的系统结构示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图说明本发明的具体实施方式。
本实施例中,如图1所示,一种通用程序语言自动评测方法,方法包括以下步骤:
第一步,评测机搭建,搭建通用程序语言的编译运行环境,以及评测所需的沙盒环境,将程序执行环境和外部隔离,切断外网连接。
第二步,阐述基于程序语言的题目要求,并制定多组用于评测的测试用例,同时指定评测时间和内存限制。
第三步,选择任意一种通用语言按照题目要求进行编程,获取待评测的程序源码并与通用语言类型组装成程序内容,并以JSON字符串形式通过消息队列发送至评测机。
第四步,评测机接收JSON字符串并进行解析,将解析结果中程序内容写入程序文件,同时根据通用语言类型生成对应的文件扩展名。
第五步,将生成的程序文件按照文件扩展名进行分类,同时基于第一步搭建的编译环境根据文件类型调用对应的编译器进行编译。不同类型的编译器内设有不同的编译规则,根据程序语言类型调用对应的程序语言编译规则对程序源码文本进行分析,若出现语法错误或者词法错误时,提示编译失败,评测机自动捕获编译异常,并显示编译异常具体信息。程序文件编译成功后进行下一步,若编译失败则捕获失败异常,同时结束自动编译过程,并显示编译失败异常的具体信息。
第六步,因为程序编程所用的方法不唯一,因此需要在沙盒环境中重复运行程序,重复运行结束后得到多个运行结果,并将运行结果与制定的多组测试用例进行比较,得出评测结果,这样可以提高评测的结果的准确率。在程序运行过程中,对沙盒内的文件系统及执行权限、网络、进程间通信与评测机进行隔离,以提高评测的安全性。评测过程中,若超出指定的评测时间和内存限制时,则结束自动评测,并提示时间和内存超出限制。
第七步,如果第六步中得出的评测结果是正确的则评定待评测程序源码是正确的,同时显示评测结果的准确率。
本实施例中,如图2所示,还提供一种通用程序语言自动评测系统,系统包括程序预处理模块、程序文件生成模块、程序编译模块、程序运行模块和程序评测模块。
其中,程序预处理模块,用于获取待评测程序源码和程序语言类型,并将程序源码和程序语言类型组装为程序内容,以JSON字符串的形式发送至程序文件生成模块。
程序文件生成模块,用于接收JSON字符串并进行解析,并将解析出的程序内容写入程序文件,并根据程序语言类型生成对应的文件扩展名。
程序编译模块,设置有多个不同程序语言类型的编译器,用于获取生成的程序文件并按照文件扩展名对程序文件进行分类,同时根据文件类型调用不同的编译器对程序文件中的源码进行编译。
程序运行模块,用于重复多次运行编译成功的程序,输出程序运行结果。
程序评测模块,设置有多组测试用例,用于获取多个程序运行结果,并将程序运行结果与测试用例进行比较评测,输出评测结果并显示评测结果的准确率。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护的范围由所附的权利要求书及其等效物界定。
Claims (6)
1.一种通用程序语言自动评测方法,其特征在于,包括以下步骤:
S1,评测机搭建,搭建通用程序语言的编译运行环境和评测所需的沙盒环境;
S2,制定用于评测的多组测试用例,指定评测时间和内存限制;
S3,选择任意一种通用语言进行编程,获取待评测的程序源码并与通用语言类型组装成程序内容,并以JSON字符串形式通过消息队列发送至评测机;
S4,评测机接收JSON字符串并进行解析,将解析结果中程序内容写入程序文件,同时根据通用语言类型生成对应的文件扩展名;
S5,将生成的程序文件按照文件扩展名进行分类,同时基于搭建的编译环境根据文件类型调用对应的编译器进行编译;
S6,在沙盒环境中重复运行程序,得到多个运行结果,并将运行结果与制定的多组测试用例进行比较,得出评测结果;
S7,如果步骤S6中得出的评测结果是正确的则评定待评测程序源码是正确的,同时显示评测结果的准确率。
2.根据权利要求1所述的一种通用程序语言自动评测方法,其特征在于,所述步骤S5中编译在对程序源码编译时,根据程序语言类型调用对应的程序语言编译规则对程序源码文本进行分析,若出现语法错误或者词法错误时,提示编译失败,评测机自动捕获编译异常,并显示编译异常具体信息。
3.根据权利要求1所述的一种通用程序语言自动评测方法,其特征在于,所述步骤S6程序在沙盒内的运行过程中还包括:对沙盒内的文件系统及其执行权限、网络、进程间通信与评测机进行隔离。
4.根据权利要求1所述的一种通用程序语言自动评测方法,其特征在于,所述步骤S6中程序运行错误时,评测机自动捕获运行异常,并显示运行异常具体信息。
5.根据权利要求1所述的一种通用程序语言自动评测方法,其特征在于,所述步骤S6中在程序运行结果与多组测试用例的比对过程中,若比对时间和内存超过限制时,则提示评测运行时间和内存超出限制,并自动结束评测过程。
6.一种通用程序语言自动评测系统,其特征在于,包括
程序预处理模块,获取待评测程序源码和程序语言类型,并将程序源码和程序语言类型组装为程序内容,以JSON字符串的形式发送至程序文件生成模块;
程序文件生成模块,接收JSON字符串并进行解析,并将解析出的程序内容写入程序文件,并根据程序语言类型生成对应的文件扩展名;
程序编译模块,设置有多个不同程序语言类型的编译器,获取生成的程序文件并按照文件扩展名对程序文件进行分类,同时根据文件类型调用不同的编译器对程序文件中的源码进行编译;
程序运行模块,重复多次运行编译成功的程序,输出程序运行结果;
程序评测模块,设置有多组测试用例,获取多个程序运行结果,并将程序运行结果与测试用例进行比较评测,输出评测结果并显示评测结果的准确率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010362099.5A CN111459841A (zh) | 2020-04-30 | 2020-04-30 | 一种通用程序语言自动评测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010362099.5A CN111459841A (zh) | 2020-04-30 | 2020-04-30 | 一种通用程序语言自动评测方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111459841A true CN111459841A (zh) | 2020-07-28 |
Family
ID=71686052
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010362099.5A Pending CN111459841A (zh) | 2020-04-30 | 2020-04-30 | 一种通用程序语言自动评测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111459841A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692316A (zh) * | 2009-11-02 | 2010-04-07 | 福建农林大学 | C/c++语言程序设计无纸化考试评分的自动化方法 |
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN105761563A (zh) * | 2014-12-18 | 2016-07-13 | 中国农业大学 | 编程题评测系统的学生客户端、教师客户端及服务器端 |
CN109542791A (zh) * | 2018-11-27 | 2019-03-29 | 长沙智擎信息技术有限公司 | 一种基于容器技术的程序大规模并发评测方法 |
US20200057994A1 (en) * | 2016-06-30 | 2020-02-20 | Clause, Inc. | System and method for forming, storing, managing, and executing contracts |
-
2020
- 2020-04-30 CN CN202010362099.5A patent/CN111459841A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692316A (zh) * | 2009-11-02 | 2010-04-07 | 福建农林大学 | C/c++语言程序设计无纸化考试评分的自动化方法 |
CN105761563A (zh) * | 2014-12-18 | 2016-07-13 | 中国农业大学 | 编程题评测系统的学生客户端、教师客户端及服务器端 |
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
US20200057994A1 (en) * | 2016-06-30 | 2020-02-20 | Clause, Inc. | System and method for forming, storing, managing, and executing contracts |
CN109542791A (zh) * | 2018-11-27 | 2019-03-29 | 长沙智擎信息技术有限公司 | 一种基于容器技术的程序大规模并发评测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Afshan et al. | Evolving readable string test inputs using a natural language model to reduce human oracle cost | |
US10963226B2 (en) | Generating compilable code from uncompilable code | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
US20220012021A1 (en) | Artificial intelligence-based intelligent programming assistance | |
US11710090B2 (en) | Machine-learning models to assess coding skills and video performance | |
KR102546424B1 (ko) | 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 | |
Nabil et al. | Evalseer: an intelligent gamified system for programming assignments assessment | |
CN109710523B (zh) | 视觉稿的测试用例生成方法及装置、存储介质、电子设备 | |
CN110633072A (zh) | 一种可供自动批改的编程训练题目构造方法及装置 | |
CN117331836A (zh) | 一种基于代码语法树分析的评测方法 | |
CN117113080A (zh) | 数据处理和代码处理方法、装置、一体机和存储介质 | |
CN111694726B (zh) | 一种基于类型标注的Python程序类型推导方法 | |
CN117130593A (zh) | 代码处理方法、系统和电子设备 | |
Al Salem et al. | A review on grammar-based fuzzing techniques | |
CN111459841A (zh) | 一种通用程序语言自动评测方法及系统 | |
CN109783106B (zh) | 一种基于编辑距离的自适应反馈程序评测方法及装置 | |
Funabiki et al. | A proposal of coding rule learning function in Java programming learning assistant system | |
CN113778454B (zh) | 一种人工智能实验平台的自动评测方法及系统 | |
Abd Rahman et al. | The design of an automated c programming assessment using pseudo-code comparison technique | |
Wuisang et al. | An evaluation of the effectiveness of openai's chatGPT for automated python program bug fixing using quixbugs | |
Johnson | A Study on Improving Static Analysis Tools: Why are we not using them? | |
CN109359055B (zh) | 一种数据测试的方法和设备 | |
CN112817863A (zh) | 一种基于ai深度学习的ai辅助自动化测试方法及系统 | |
Stamenkoviæ et al. | Improving participation and learning of compiler theory using educational simulators | |
CN112148609A (zh) | 一种对于在线编程考试中所提交的代码的度量方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200728 |
|
RJ01 | Rejection of invention patent application after publication |