CN106326112B - 一种程序作业自动批改的方法和装置 - Google Patents
一种程序作业自动批改的方法和装置 Download PDFInfo
- Publication number
- CN106326112B CN106326112B CN201610673589.0A CN201610673589A CN106326112B CN 106326112 B CN106326112 B CN 106326112B CN 201610673589 A CN201610673589 A CN 201610673589A CN 106326112 B CN106326112 B CN 106326112B
- Authority
- CN
- China
- Prior art keywords
- test case
- program
- execution time
- test
- execution
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000012360 testing method Methods 0.000 claims abstract description 185
- 230000015654 memory Effects 0.000 claims abstract description 102
- 238000012937 correction Methods 0.000 claims description 22
- 238000012544 monitoring process Methods 0.000 claims description 11
- 230000006870 function Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 1
- 238000012905 input function Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
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/3696—Methods or tools to render software testable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q50/00—Information and communication technology [ICT] specially adapted for implementation of business processes of specific business sectors, e.g. utilities or tourism
- G06Q50/10—Services
- G06Q50/20—Education
- G06Q50/205—Education administration or guidance
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Tourism & Hospitality (AREA)
- Physics & Mathematics (AREA)
- Educational Technology (AREA)
- Educational Administration (AREA)
- General Physics & Mathematics (AREA)
- Strategic Management (AREA)
- General Health & Medical Sciences (AREA)
- Marketing (AREA)
- Primary Health Care (AREA)
- Human Resources & Organizations (AREA)
- General Business, Economics & Management (AREA)
- Economics (AREA)
- Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种程序作业自动批改的方法和装置。根据该方法,通过编译、加载学生的程序代码,再根据测试用例执行代码,通过记录各个步骤的执行是否成功以及判断执行过程中的执行时间和内存占用对学生的程序进行加权评分,最后以表格的形式输出各个学生的程序代码评分。本发明批量自动化批改程序作业,大大减少了教师批改程序作业的时间,同时提高了教师批改程序作业的准确性。
Description
技术领域
本发明涉及程序作业批改的自动化。
背景技术
计算机教学中,经常会有程序作业。教师批改程序作业时往往会消耗比较长的时间,特别是,当程序作业比较大时,由于程序本身涉及各种逻辑,而且各个学生的编程中变量命名方式不同,函数定义方式不同,教师看懂学生的程序就往往要耗费比较长的时间。特别是当该程序作业涉及某种复杂算法时,教师批改程序作业更为耗时。而且教师手工批改程序作业往往有主观性,而程序中细微的不同就可能导致功能、性能的较大差异,教师手工批改难以观察到这些不同。
发明内容
本发明所要解决的问题:设计一种程序作业自动批改的方法和模块。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种程序作业自动批改的方法,包括如下步骤:
S1:获取教师的作业题集和各个学生的作业程序数据;
S2:根据所述作业题集的作业题描述,对所述作业程序数据的程序代码进行批改评分;
S3:以表格的形式输出各个学生的作业评分数据;
其中,所述作业题集是作业题描述的集合;所述作业题描述包含有作业主题和测试用例集;所述测试用例集是测试用例数据的集合;所述测试用例数据包括测试输入数据、测试输出数据和测试通过分值;所述作业程序数据包含有学生名称和程序代码;所述学生作业评分数据包含有学生名称和作业评分值;所述步骤S2包括:
S21:初始化该学生的作业评分值为0;
S22:对该学生的程序代码进行编译,形成可执行代码;如果编译失败,则完成对该学生的批改评分;如果编译成功,则该学生的作业评分值加编译成功分值;
S23:加载编译后的可执行代码;如果加载失败,则完成对该学生的批改评分;如果加载成功,则作业评分值加加载成功分值;
S24:找出程序代码所对应的作业题描述,然后根据作业题描述中的测试用例集中各个测试用例数据,通过执行所加载的可执行代码对各个测试用例数据进行测试,再通过测试用例的测试是否通过得到测试通过分值,将相应的测试通过分值加入至作业评分值。
进一步,根据本发明的程序作业自动批改的方法,所述作业题描述还包含有程序执行时间限制;所述步骤S24中当执行可执行代码时,监控可执行代码的执行时间;如果执行时间超过所述程序执行时间限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
进一步,根据本发明的程序作业自动批改的方法,所述作业题描述还包含有程序内存占用限制;所述步骤S24中当执行可执行代码时,监控可执行代码执行的内存占用;如果内存占用超过所述程序内存占用限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
进一步,根据本发明的程序作业自动批改的方法,所述测试用例数据还包含有标准执行时间;所述步骤S24中当执行可执行代码时,监控可执行代码的执行时间;当测试通过分值加入至作业评分值时,按执行时间超出标准执行时间的多少将测试通过分值加入至作业评分值。
进一步,根据本发明的程序作业自动批改的方法,所述测试用例数据还包含有标准内存占用;所述步骤S24中当执行可执行代码时,监控可执行代码执行的内存占用;当测试通过分值加入至作业评分值时,按内存占用超出标准内存占用的多少将测试通过分值加入至作业评分值。
根据本发明的一种程序作业自动批改的装置,包括:
作业题集输入模块,用于获取教师的作业题集;
作业程序输入模块,用于获取各个学生的作业程序数据;
作业批改评分模块,用于根据所述作业题集的作业题描述,对所述作业程序数据的程序代码进行批改评分;
批改结果输出模块,用于以表格的形式输出各个学生的作业评分数据;
其中,所述作业题集是作业题描述的集合;所述作业题描述包含有作业主题和测试用例集;所述测试用例集是测试用例数据的集合;所述测试用例数据包括测试输入数据、测试输出数据和测试通过分值;所述作业程序数据包含有学生名称和程序代码;所述学生作业评分数据包含有学生名称和作业评分值;所述作业批改评分模块包括:
评分初始化模块,用于初始化该学生的作业评分值为0;
代码编译模块,用于对该学生的程序代码进行编译,形成可执行代码;如果编译失败,则完成对该学生的批改评分;如果编译成功,则该学生的作业评分值加编译成功分值;
代码加载模块,用于加载编译后的可执行代码;如果加载失败,则完成对该学生的批改评分;如果加载成功,则作业评分值加加载成功分值;
用例执行模块,用于找出程序代码所对应的作业题描述,然后根据作业题描述中的测试用例集中各个测试用例数据,通过执行所加载的可执行代码对各个测试用例数据进行测试,再通过测试用例的测试是否通过得到测试通过分值,将相应的测试通过分值加入至作业评分值。
进一步,根据本发明的程序作业自动批改的装置,所述作业题描述还包含有程序执行时间限制;用例执行模块还包括有超时判断模块;
所述超时判断模块,用于当执行可执行代码时,监控可执行代码的执行时间;如果执行时间超过所述程序执行时间限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
进一步,根据本发明的程序作业自动批改的装置,所述作业题描述还包含有程序内存占用限制;用例执行模块还包括有内存超限判断模块;
所述内存超限判断模块,用于当执行可执行代码时,监控可执行代码执行的内存占用;如果内存占用超过所述程序内存占用限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
进一步,根据本发明的程序作业自动批改的装置,所述测试用例数据还包含有标准执行时间;用例执行模块还包括有测试时间加权评分模块;
所述测试时间加权评分模块,用于当执行可执行代码时,监控可执行代码的执行时间;当测试通过分值加入至作业评分值时,按执行时间超出标准执行时间的多少将测试通过分值加入至作业评分值。
进一步,根据本发明的程序作业自动批改的装置,所述测试用例数据还包含有标准内存占用;用例执行模块还包括有内存占用加权评分模块;
所述内存占用加权评分模块,用于当执行可执行代码时,监控可执行代码执行的内存占用;当测试通过分值加入至作业评分值时,按内存占用超出标准内存占用的多少将测试通过分值加入至作业评分值。
本发明的技术效果如下:批量自动化批改程序作业,大大减少了教师批改程序作业的时间,并同时提高了教师批改程序作业的准确性。
附图说明
图1是作业程序数据文件夹结构。
具体实施方式
下面结合附图对本发明做进一步详细说明。
本实施例是一个针对Java程序作业自动批改的,通过Java语言实现的实施例。
一、作业题集的输入
作业题集采用XML文件方式,教师将作业题的内容编辑成一个XML文件。下述XML文件是一个作业题集的实施例:
<?xml version="1.0"encoding="UTF-8"?>
<tc version="1.0"url="http://code.google.com/p/java-assign-judge/">
<generator name="fanghong"
url="http://code.google.com/p/java-assign-judge/"/>
<item><!--作业1Hello-->
<title><![CDATA[Hello]]></title><!--作业主题-->
<time_limit><![CDATA[10]]></time_limit><!--程序执行时间限制-->
<memory_limit><![CDATA[10]]></memory_limit><!--程序内存占用限制-->
<testcase tcid=1><!--测试用例-->
<input><![CDATA[]]></input><!--测试输入数据-->
<output><![CDATA[hello]]></output><!--测试输出数据-->
<bexitcmd><![CDATA[true]]></bexitcmd><!--是否退出-->
<time_base><![CDATA[5]]></time_base><!--标准执行时间-->
<memory_base><![CDATA[5]]></memory_base><!--标准内存占用-->
<score><![CDATA[100]]></score><!--测试通过分值-->
</testcase></item>
<item><!--作业2猜数游戏-->
<title><![CDATA[GuessNumber]]></title><!--作业主题-->
<time_limit><![CDATA[15]]></time_limit><!--程序执行时间限制-->
<memory_limit><![CDATA[10]]></memory_limit><!--程序内存占用限制-->
<testcase tcid=1>
<input><![CDATA[]]></input>
<output><![CDATA[开始]]></output>
<time_base><![CDATA[5]]></time_base>
<memory_base><![CDATA[5]]></memory_base>
<score><![CDATA[10]]></score>
<bexitcmd><![CDATA[false]]></bexitcmd>
</testcase>
<!--猜数-->
<testcase tcid=2>
<input><![CDATA[1]]></input>
<output><![CDATA[dyn]]></output>
<time_base><![CDATA[5]]></time_base>
<memory_base><![CDATA[5]]></memory_base>
<score><![CDATA[20]]></score>
<bexitcmd><![CDATA[false]]></bexitcmd>
</testcase>
<!--设置难度参数-->
<testcase tcid=3>
<input><![CDATA[2]]></input>
<output><![CDATA[]]></output>
<time_base><![CDATA[5]]></time_base>
<memory_base><![CDATA[5]]></memory_base>
<score><![CDATA[20]]></score>
<bexitcmd><![CDATA[false]]></bexitcmd>
</testcase>
<testcase tcid=4>
<input><![CDATA[1]]></input>
<output><![CDATA[开始]]></output>
<time_base><![CDATA[5]]></time_base>
<memory_base><![CDATA[5]]></memory_base>
<score><![CDATA[20]]></score>
<bexitcmd><![CDATA[false]]></bexitcmd>
</testcase>
<!--再次猜数-->
<testcase tcid=5>
<input><![CDATA[1]]></input>
<output><![CDATA[dyn]]></output>
<time_base><![CDATA[5]]></time_base>
<memory_base><![CDATA[5]]></memory_base>
<score><![CDATA[20]]></score>
<bexitcmd><![CDATA[false]]></bexitcmd>
</testcase>
<!--退出-->
<testcase tcid=6>
<input><![CDATA[3]]></input>
<output><![CDATA[]]></output>
<time_base><![CDATA[5]]></time_base>
<memory_base><![CDATA[5]]></memory_base>
<score><![CDATA[20]]></score>
<bexitcmd><![CDATA[true]]></bexitcmd>
</testcase>
</item>
</tc>
上述XML格式文件定义了Hello和猜数游戏两个作业题描述。每个作业题描述包含了作业主题,由title标记定义;程序执行时间限制,由time_limit标记定义;程序内存占用限制,由memory_limit标记定义;测试用例数据,由testcase标记定义。其中Hello作业题只有一个测试用例数据,而猜数游戏由5个测试用例数据组成测试用例集。测试用例数据包含了测试输入数据,由input标记定义;测试输出数据,由output标记定义;标准执行时间,由time_base标记定义;标准内存占用,由memory_base标记定义;测试通过分值,由score标记定义。本实施例XML格式文件定义的作业题集由专用工具编辑而成。由于作业题集作为本发明的输入,因此,该专用工具如何实现并不是本发明所讨论的范畴,不再赘述。
二、作业程序数据的输入
本实施例作业程序数据通过文件夹的方式实现,当作业程序数据导入本系统时,以文件夹为单位。如图1所示,该文件夹包含有各个学生的子文件夹,每个子文件夹的名称与对应的学生名称相同。每个学生的子文件夹中包含了该学生的程序代码。每个学生的程序代码可能有多个,每个程序代码的文件名与作业题描述中的作业主题相同。由此,可以根据程序代码的文件名找到对应的作业题描述。
需要指出的是,本实施例所针对的学生的程序代码是文本界面的程序。也即学生的程序代码是以文本方式进行输入输出的程序,输入采用键盘键入或文本文件的方式,输出则以屏幕文本或文本文件的方式呈现。
批改程序与被批改程序交互的基本原理是:批改程序加载被批改的程序后,会截取被批改程序的标准输入stdin、输出流stdout、错误输出流stderr;从测试用例中提取出输入数据,注入被截取的输入流;输出流和错误输出流会被分别重定向到不同的文本文件,然后通过读取文本文件内容获取被测程序实际输出,并与测试用例中的预期输出比较。这说明该批改程序也能批改其它语言的文本终端程序,只要该语言支持标准输入、输出。
三、批改评分
批改评分的过程总体上分成三个步骤:编译,加载和执行。本实施例通过Java语言实现,是针对Java程序作业的处理。因此,java程序的编译,加载以及执行都可以通过org.apache.tools.ant程序包实现。其中,java程序的编译可以通过调用org.apache.tools.ant.taskdefs.javac中的java程序编译器实现,java程序的加载和执行可以通过调用org.apache.tools.ant.taskdefs.java中方法实现。org.apache.tools.ant程序包可通过网络下载获得。由此,上述java程序的编译、加载和执行均属于现有技术,本说明书不再赘述。当学生的程序代码被加载后,通过程序注入的方式截取学生的程序代码中的标准输入输出函数。执行测试用例时,从测试用例中提取输入数据,将输入数据注入被截取的标准输入函数,而学生的程序代码执行后的输出通过被截取的标准输出函数被重新定向至文本文件中,然后通过读取该输出的文本文件获取测试结果,并与测试用例中的预期输出比较。这种程序注入的方式为本领域技术人员所熟悉的技术,本说明书不再赘述。
本实施例的作业评分值由编译成功分值、加载成功分值和测试用例执行分值组成。具体来说,作业评分值的满分为100分时,编译成功分值为10分,加载成功分值为10分,测试用例执行总分值为80分。假如编译失败,后面的加载和执行都失去了基础,可以直接返回,作业评分值也就为0。假如编译成功,而加载失败,则后面的测试用例执行失去基础,可以直接返回,作业评分值为编译成功分值为10分。假如编译成功和加载成功,作业评分值至少有20分的基础分。本实施例的测试用例执行分值由测试用例执行时,执行时间和内存占用的加权获得。具体来说,其中,Ti为第i个测试用例执行获得的评分值;Si为第i个测试用例的测试通过分值,对应于前述作业题描述中由score标记定义的分值。第i个测试用例执行获得的评分值其中,t为时间效率加权系数,m为内存占用加权系数。时间效率加权系数t通过以下方式确定:当测试用例执行时间小于标准执行时间时,t=1;当测试用例执行时间超过标准执行时间10%以内时,t=0.9;当测试用例执行时间超过标准执行时间20%以内时,t=0.8;当测试用例执行时间超过标准执行时间50%以内时,t=0.7;当测试用例执行时间超过标准执行时间100%以内时,t=0.6;否则为t=0.5,如果测试用例执行时间超过程序执行时间限制时,t=0。这里标准执行时间是前述测试用例数据中的数据,由time_base标记定义。程序执行时间限制,由前述time_limit标记定义。测试用例执行时间通过在前述执行代码时加入监控代码执行时间获得。m为内存占用加权系数通过以下方式确定:当测试用例执行时最大的内存占用小于标准内存占用时,m=1;当测试用例执行时最大的内存占用超过标准内存占用10%以内时,m=0.9;当测试用例执行时最大的内存占用超过标准内存占用20%以内时,m=0.8;当测试用例执行时最大的内存占用超过标准内存占用50%以内时,m=0.7;当测试用例执行时最大的内存占用超过标准内存占用100%以内时,m=0.6;否则为m=0.5,如果当测试用例执行时最大的内存占用超过程序内存占用限制时,m=0。这里标准内存占用是前述测试用例数据中的数据,由memory_base标记定义。程序内存占用限制,由前述memory_limit标记定义。测试用例执行时最大的内存占用通过在前述执行代码时加入监控代码执行的内存占用情况获得。
此外,本实施例通过设置各种异常处理过程保证批改评分过程的鲁棒性。比如为避免被评分程序代码出现死循环的可能性,通过在作业题描述中设置程序执行时间限制,然后在执行测试用例时,监控代码执行时间,当执行时间超过程序执行时间限制,则停止执行该测试用例,并设定该测试用例的测试不通过,由此该测试用例执行获得的评分值Ti=0。为避免被评分程序代码内存分配出现的问题,通过在作业题描述中设置程序内存占用限制,然后在执行测试用例时,监控可执行代码执行的内存占用情况;当内存占用超过程序内存占用限制,则停止执行该测试用例,并设定该测试用例的测试不通过,由此该测试用例执行获得的评分值Ti=0。除上述之外,当测试用例执行时,出现其他任何可能的异常均设定该测试用例的测试不通过。由此该测试用例执行获得的评分值Ti=0。
四、评分结果的输出
本实施例以CSV表格文件的形式输出评分结果。评分结果也即各个学生的作业评分数据。作业评分数据包括学生名称、作业评分值。下述表格是最终评分结果输出的实施例。
Hello | GuessNumber | |
学生A | 100 | 60 |
学生B | 100 | 70 |
学生C | 100 | 100 |
上述实施例中,Hello和GuessNumber为作业题的主题。
需要说明的是,上述实施例是针对Java语言程序作业的批改评分的实施例,通过上述方法,也可以实现对其他语言程序作业的批改。
此外,需要说明的是,本实施例所针对的Java语言程序作业是文本界面的程序。由上述可知,本实施例通过对文本界面程序用测试用例进行自动化测试后分析结果数据实现对文本界面程序的批改评分。本领域技术人员理解,通过程序注入的方式,也可以对图形界面的程序代码或网页程序代码进行自动化测试,由此也意味着,上述对程序的批改评分也可以应用于图形界面的程序代码或网页程序代码。
Claims (6)
1.一种程序作业自动批改的方法,其特征在于,包括如下步骤:
S1:获取教师的作业题集和各个学生的作业程序数据;
S2:根据所述作业题集的作业题描述,对所述作业程序数据的程序代码进行批改评分;
S3:以表格的形式输出各个学生的作业评分数据;
其中,所述作业题集是作业题描述的集合;所述作业题描述包含有作业主题、程序执行时间限制、程序执行内存限制和测试用例集;所述测试用例集是测试用例数据的集合;所述测试用例数据包括测试输入数据、测试输出数据、标准执行时间、标准内存占用和测试通过分值;
所述作业程序数据包含有学生名称和程序代码;所述学生作业评分数据包含有学生名称和作业评分值;所述步骤S2包括:
S21:初始化该学生的作业评分值为0;
S22:对该学生的程序代码进行编译,形成可执行代码;如果编译失败,则完成对该学生的批改评分;如果编译成功,则该学生的作业评分值加编译成功分值;
S23:加载编译后的可执行代码;如果加载失败,则完成对该学生的批改评分;如果加载成功,则作业评分值加加载成功分值;
S24:找出程序代码所对应的作业题描述,然后根据作业题描述中的测试用例集中各个测试用例数据,通过执行所加载的可执行代码对各个测试用例数据进行测试,然后通过对测试用例的测试过程中监控代码执行时间、内存占用情况和测试用例通过情况进行评估,得到测试用例执行分值,将测试用例执行分值加入至作业评分值;
其中,
其中,Ti为第i个测试用例执行获得的评分值,Si为第i个测试用例的测试通过分值;N为测试用例数;
第i个测试用例执行获得的评分值其中,t为时间效率加权系数,通过以下方式确定:当测试用例执行时间小于标准执行时间时,t=1;当测试用例执行时间超过标准执行时间10%以内时,t=0.9;当测试用例执行时间超过标准执行时间20%以内时,t=0.8;当测试用例执行时间超过标准执行时间50%以内时,t=0.7;当测试用例执行时间超过标准执行时间100%以内时,t=0.6;否则为t=0.5,如果测试用例执行时间超过程序执行时间限制时,t=0;m为内存占用加权系数,通过以下方式确定:当测试用例执行时最大的内存占用小于标准内存占用时,m=1;当测试用例执行时最大的内存占用超过标准内存占用10%以内时,m=0.9;当测试用例执行时最大的内存占用超过标准内存占用20%以内时,m=0.8;当测试用例执行时最大的内存占用超过标准内存占用50%以内时,m=0.7;当测试用例执行时最大的内存占用超过标准内存占用100%以内时,m=0.6;否则为m=0.5,如果当测试用例执行时最大的内存占用超过程序内存占用限制时,m=0。
2.如权利要求1所述的程序作业自动批改的方法,其特征在于,所述作业题描述还包含有程序执行时间限制;所述步骤S24中当执行可执行代码时,监控可执行代码的执行时间;如果执行时间超过所述程序执行时间限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
3.如权利要求1所述的程序作业自动批改的方法,其特征在于,所述作业题描述还包含有程序内存占用限制;所述步骤S24中当执行可执行代码时,监控可执行代码执行的内存占用;如果内存占用超过所述程序内存占用限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
4.一种程序作业自动批改的装置,其特征在于,包括:
作业题集输入模块,用于获取教师的作业题集;
作业程序输入模块,用于获取各个学生的作业程序数据;
作业批改评分模块,用于根据所述作业题集的作业题描述,对所述作业程序数据的程序代码进行批改评分;
批改结果输出模块,用于以表格的形式输出各个学生的作业评分数据;
其中,所述作业题集是作业题描述的集合;所述作业题描述包含有作业主题、程序执行时间限制、程序执行内存限制和测试用例集;所述测试用例集是测试用例数据的集合;所述测试用例数据包括测试输入数据、测试输出数据、标准执行时间、标准内存占用和测试通过分值;
所述作业程序数据包含有学生名称和程序代码;所述学生作业评分数据包含有学生名称和作业评分值;所述作业批改评分模块包括:
评分初始化模块,用于初始化该学生的作业评分值为0;
代码编译模块,用于对该学生的程序代码进行编译,形成可执行代码;如果编译失败,则完成对该学生的批改评分;如果编译成功,则该学生的作业评分值加编译成功分值;
代码加载模块,用于加载编译后的可执行代码;如果加载失败,则完成对该学生的批改评分;
如果加载成功,则作业评分值加加载成功分值;
用例执行模块,用于找出程序代码所对应的作业题描述,然后根据作业题描述中的测试用例集中各个测试用例数据,然后通过执行所加载的可执行代码对各个测试用例数据进行测试,通过对测试用例的测试过程中监控代码执行时间、内存占用情况和测试用例通过情况进行评估,得到测试用例执行分值,将测试用例执行分值加入至作业评分值;
其中,
其中,Ti为第i个测试用例执行获得的评分值,Si为第i个测试用例的测试通过分值;N为测试用例数;
第i个测试用例执行获得的评分值其中,t为时间效率加权系数,通过以下方式确定:当测试用例执行时间小于标准执行时间时,t=1;当测试用例执行时间超过标准执行时间10%以内时,t=0.9;当测试用例执行时间超过标准执行时间20%以内时,t=0.8;当测试用例执行时间超过标准执行时间50%以内时,t=0.7;当测试用例执行时间超过标准执行时间100%以内时,t=0.6;否则为t=0.5,如果测试用例执行时间超过程序执行时间限制时,t=0;m为内存占用加权系数,通过以下方式确定:当测试用例执行时最大的内存占用小于标准内存占用时,m=1;当测试用例执行时最大的内存占用超过标准内存占用10%以内时,m=0.9;当测试用例执行时最大的内存占用超过标准内存占用20%以内时,m=0.8;当测试用例执行时最大的内存占用超过标准内存占用50%以内时,m=0.7;当测试用例执行时最大的内存占用超过标准内存占用100%以内时,m=0.6;否则为m=0.5,如果当测试用例执行时最大的内存占用超过程序内存占用限制时,m=0。
5.如权利要求4所述的程序作业自动批改的装置,其特征在于,所述作业题描述还包含有程序执行时间限制;用例执行模块还包括有超时判断模块;
所述超时判断模块,用于当执行可执行代码时,监控可执行代码的执行时间;如果执行时间超过所述程序执行时间限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
6.如权利要求4所述的程序作业自动批改的装置,其特征在于,所述作业题描述还包含有程序内存占用限制;用例执行模块还包括有内存超限判断模块;
所述内存超限判断模块,用于当执行可执行代码时,监控可执行代码执行的内存占用;如果内存占用超过所述程序内存占用限制,则停止执行可执行代码,并设定该测试用例的测试不通过。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610673589.0A CN106326112B (zh) | 2016-08-15 | 2016-08-15 | 一种程序作业自动批改的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610673589.0A CN106326112B (zh) | 2016-08-15 | 2016-08-15 | 一种程序作业自动批改的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106326112A CN106326112A (zh) | 2017-01-11 |
CN106326112B true CN106326112B (zh) | 2019-02-15 |
Family
ID=57740643
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610673589.0A Active CN106326112B (zh) | 2016-08-15 | 2016-08-15 | 一种程序作业自动批改的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106326112B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106652611A (zh) * | 2017-01-17 | 2017-05-10 | 北京航空航天大学 | 一种面向代码作业的评测系统及方法 |
CN107391387A (zh) * | 2017-09-08 | 2017-11-24 | 中南林业科技大学 | 一种c程序的评价方法及装置 |
CN107678954A (zh) * | 2017-09-22 | 2018-02-09 | 江苏海事职业技术学院 | 一种程序作业评测方法和装置 |
CN110633072B (zh) * | 2019-07-30 | 2023-01-20 | 广东工业大学 | 一种可供自动批改的编程训练题目构造方法及装置 |
CN112102124A (zh) * | 2020-08-31 | 2020-12-18 | 湖北美和易思教育科技有限公司 | 一种大数据基础算法学习自动评价方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702276A (zh) * | 2009-11-17 | 2010-05-05 | 吉林大学 | 自动评测以大量数据处理为核心的计算机程序源码的方法 |
CN104111888A (zh) * | 2014-07-03 | 2014-10-22 | 曹建楠 | 一种面向教学的代码评测方法、装置和系统 |
WO2015130675A3 (en) * | 2014-02-26 | 2015-11-19 | Western Michigan University Research Foundation | Apparatus and method for testing computer program implementation against a design model |
CN105224818A (zh) * | 2015-11-10 | 2016-01-06 | 北京科技大学 | 一种作业程序自动评分方法及系统 |
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN105761563A (zh) * | 2014-12-18 | 2016-07-13 | 中国农业大学 | 编程题评测系统的学生客户端、教师客户端及服务器端 |
-
2016
- 2016-08-15 CN CN201610673589.0A patent/CN106326112B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702276A (zh) * | 2009-11-17 | 2010-05-05 | 吉林大学 | 自动评测以大量数据处理为核心的计算机程序源码的方法 |
WO2015130675A3 (en) * | 2014-02-26 | 2015-11-19 | Western Michigan University Research Foundation | Apparatus and method for testing computer program implementation against a design model |
CN104111888A (zh) * | 2014-07-03 | 2014-10-22 | 曹建楠 | 一种面向教学的代码评测方法、装置和系统 |
CN105761563A (zh) * | 2014-12-18 | 2016-07-13 | 中国农业大学 | 编程题评测系统的学生客户端、教师客户端及服务器端 |
CN105427695A (zh) * | 2015-11-03 | 2016-03-23 | 中国农业大学 | 编程类考题自动测评方法和系统 |
CN105224818A (zh) * | 2015-11-10 | 2016-01-06 | 北京科技大学 | 一种作业程序自动评分方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106326112A (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106326112B (zh) | 一种程序作业自动批改的方法和装置 | |
US9465593B2 (en) | Method and apparatus for testing browser compatibility | |
US11455150B2 (en) | Accelerating application modernization | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
CN110825619A (zh) | 接口测试用例自动生成方法、装置及存储介质 | |
CN105446874A (zh) | 一种资源配置文件的检测方法和装置 | |
CN112905459B (zh) | 服务接口测试方法、装置、电子设备及存储介质 | |
US8904352B2 (en) | Systems and methods for processing source code during debugging operations | |
CN108804304B (zh) | 测试用例生成方法及装置、存储介质、电子设备 | |
KR102013657B1 (ko) | 연관된 다중 파일 정적 분석 장치 | |
CN104834600A (zh) | 一种测试Android应用控件的方法 | |
CN112114866B (zh) | 一种json文件的数据转换加载方法、装置及存储介质 | |
US20140113257A1 (en) | Automated evaluation of programming code | |
US20210056006A1 (en) | Automated searching and identification of software patches | |
US20210224184A1 (en) | Automation Testing Tool Framework | |
CN111290996A (zh) | 文档格式转换方法、装置、设备及可读存储介质 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
CN107729043B (zh) | 增量升级包的校验方法、装置和计算机可读存储介质 | |
CN104765787B (zh) | 软件系统内要素文件关联关系分析方法及系统 | |
CN109189688A (zh) | 一种测试用例脚本的生成方法、生成装置及电子设备 | |
CN114816971A (zh) | 一种数据处理方法、相关设备及存储介质 | |
JP2011191985A (ja) | シンボリック実行支援プログラム、方法及び装置 | |
CN115858884A (zh) | 一种日志校验方法、装置和产品 | |
Tao et al. | An Approach to Mobile Application Testing Based on Natural Language Scripting. | |
KR100777103B1 (ko) | 테스트 드라이버 생성 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |