CN104077227B - 一种基于b/s架构的程序源代码的评判系统及方法 - Google Patents

一种基于b/s架构的程序源代码的评判系统及方法 Download PDF

Info

Publication number
CN104077227B
CN104077227B CN201410323762.5A CN201410323762A CN104077227B CN 104077227 B CN104077227 B CN 104077227B CN 201410323762 A CN201410323762 A CN 201410323762A CN 104077227 B CN104077227 B CN 104077227B
Authority
CN
China
Prior art keywords
task
unit
information
program
code
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.)
Expired - Fee Related
Application number
CN201410323762.5A
Other languages
English (en)
Other versions
CN104077227A (zh
Inventor
陈荣
马凯
刘平月
李辉
高健
陈世峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dalian Maritime University
Original Assignee
Dalian Maritime University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Dalian Maritime University filed Critical Dalian Maritime University
Priority to CN201410323762.5A priority Critical patent/CN104077227B/zh
Publication of CN104077227A publication Critical patent/CN104077227A/zh
Application granted granted Critical
Publication of CN104077227B publication Critical patent/CN104077227B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种基于B/S架构的程序源代码的评判系统及方法,包括浏览器端和服务器端,在服务器端,任务池管理单元获取到任务提交信息后进入检测,由文件系统生成单元生成任务对应的文件系统与目录,并将待测程序复制到生成的目录下,由脚本生成单元将执行待测程序所需的指令生成脚本文件同时由程序插装单元对待测程序进行插装并运行,生成各测试用例的执行路径与测试用例信息,故障定位单元根据测试用例运行产生的路径覆盖信息并进行故障定位,计算出语句的可疑度,按照可疑度的大小进行排序,并由覆盖率单元统计程序覆盖信息;打分单元依据评分标准完成打分;上述语句可疑度信息、覆盖率信息和任务分数经信息存取显示单元反馈到浏览器端后生成结果报告,并显示评判结果。本发明具有操作简单,使用方便的特点。

Description

一种基于B/S架构的程序源代码的评判系统及方法
技术领域
本发明涉及一种基于B/S架构的程序源代码的评判系统及方法,具体地说是一种在B/S架构下能够对源程序进行自动插装、覆盖率获取、故障诊断、结果度量并完成代码质量评判的系统及方法。
背景技术
当今随着计算机的日益普及,计算机软件起着越来越举足轻重的作用,软件质量问题也越发引起人们的注意。然而,计算机开发行业中的管理人员和团队领袖常常并不了解他们所领导的开发团队的编程习惯和思维定式。而开发人员通常都有自己的工作习惯和工作方式,并且某位开发人员的习惯可能不适合其正在参与的项目。若一位开发人员被安排到了不适合的开发风格和角色上,于是会引入更多的人为程序错误,甚至会导致时间的浪费以及生产力和效率低下。
特别是计算机专业的学生作为初级软件开发者,培养过程中也需要逐步确立他们的编程和思维习惯。然而,在如今大学开设的计算机语言课程中,仍然需要教师手动批改学生的程序,对学生的掌握程度进行人工分析与评分。而学生在写代码的过程中,由于对代码理解程度有限,在程序出错后往往无法及时对程序进行修改,缺少一个实用性较高的自动评判系统对学生进行有针对性的指导和建议。
同时,现代的软件开发工具,无论是自动化的软件测试工具,还是程序调试工具,若干质量评估可以从对已编译或源代码形式的测试代码的分析来确定,包括评估测试代码作出的描述性断言、依赖关系评估、秩复杂度评估、返回值断言、可变参数断言、以及测试有效性历史。其测试环境可用于测试应用程序代码质量,但还不足用于评估开发人员的编程习惯和思维模式,试图确定某个成员是否适合某类选定的开发模式是困难的。
事实上,开发过程中程序中难免会出现一些错误,其中一些简单的语法错误可以通过编译提示信息加以改正。所谓软件测试就是当根据输入得到的输出结果与期望的结果不相符,即程序的运行出现了错误时,需要一个找出程序中存在的错误并纠正错误的过程,它是一项非常费时耗力的工作。据统计,在软件开发中,减少程序中存在的错误占到整个软件维护成本的50%—80%。调试工作需要对程序的功能、实现、语义、结构以及相关的失败执行有一定的了解,因而对程序进行调试是一项比较困难的工作。
程序调试主要包括错误检测、错误定位、错误修复。其中错误定位是调试过程中一项比较困难的工作,它通过审查源程序语义和结构,结合分析程序的执行过程及结果,辅助开发人员找到程序错误位置。传统的程序调试方法一般是使用调试工具对程序进行手工错误定位,通过设置断点、执行时查看中间结果来逐步推断分析、定位错误。但这一手动调试过程会消耗大量宝贵的人力、物力资源。而在程序错误定位领域中,一种做法是在程序失效后,根据程序的运行时输入和程序的运行时行为来快速定位出错的程序语句。这种做法一定程度上可以帮助开发人员快速找到程序失效根源,从而减少因调试程序而付出的过多人力物力消耗。
目前在人工智能和软件工程自动化领域已经出现一些诊断技术,其中基于测试的故障定位方法(Testing-Based Fault Localization;简称TBFL)是研究的热点。它只需提供测试用例成功和失效的信息,使得检测者在不必了解程序的内部结构和逻辑甚至不具备程序知识的情况下依然能检测程序错误,具有很强的便捷性与高效性。目前主流的故障定位技术如Tarantula、Safla等算法都具有较好的定位结果。
这些技术进步有助于改进对开发人员资料的自动化分析,具体包括收集与一位开发人员所做的代码提交相关的信息,通过对收集信息(如测试通过率、程序错误严重程度)的统计分析来确定开发人员的基本资料属性,并提供一份关于此开发人员的编程行为的数据事实,参考工作角色描述对开发人员的资料进行分析判断。借助这样的评判方法及其系统,软件开发管理者容易寻找最适合当前开发团队的成员,方便确立同团队成员融合的工作风格,保证目前团队成员都处于合适的位置和效率巅峰,能够有效分工协作,从而对项目产生积极影响。本发明在上述技术的基础上提出一个基于开发习惯识别的自动化分析方法及系统,该系统能够综合运用自动测试、程序插装、程序错误定位技术所产生的质量数据,实现提交程序源代码的自动化评判。
发明内容
鉴于已有技术存在的缺陷,本发明的目的是要提供一种能够对程序进行自动故障定位的程序源代码的评判系统。
为了实现上述目的,本发明的技术方案:
一种基于B/S架构的程序源代码的评判系统,包括浏览器端和服务器端,其特征在于:
所述浏览器端包括管理员单元组和用户单元组;浏览器端用于管理员单元组和用户单元组实现对其各自对应的信息管理、课程信息管理、任务操作管理的操作以及管理员单元组对用户单元组各个用户的用户信息进行查询、管理操作,并显示服务器端对用户当前测试任务的评判结果;
其中,所述管理员单元组,用于为管理员实现信息管理、测试任务编译、下达的操作,包括:
个人信息管理单元,用于管理员实现对个人信息的管理操作;
课程信息管理单元,用于管理员实现对课程信息的管理操作;
任务操作单元,用于管理员实现在相应课程下创建新的测试任务操作以及对已有任务的相关信息进行管理操作;
用户信息管理单元,用于管理员实现对各个用户的用户信息进行查询、管理操作;
其中,所述用户单元组包括:
个人信息管理单元,用于各个用户实现对相应的个人信息的管理操作;
课程信息管理单元,用于各个用户实现对相应的课程信息的管理操作;
任务操作单元,用于各个用户实现查看相应的任务信息,对未提交的任务进行提交,并对提交完成的任务查看其诊断反馈信息;
所述服务器端包括:
信息存取显示单元,用于对浏览器端提交的管理员信息及用户信息进行数据库存取和显示;
任务检查单元,用于暂时存储用户提交的任务代码,并对代码能否通过编译进行检查;
任务池管理单元,用于管理浏览器端提交的任务队列,即实现定时检测任务提交情况,获取任务提交信息,并对用户提交的任务信息进行存储管理;
文件系统生成单元,用于生成提交的任务队列的队首任务进行处理所需的所有文件目录并读取数据库中的待测程序,将其复制到规定的目录下;
脚本生成单元,用于生成执行队首任务所需的各脚本文件,并存储于指定的文件目录下;
程序插装单元,用于对待测程序进行插装并运行,将生成的程序执行路径与测试用例信息存放于指定目录下;
故障定位单元,用于对待测程序进行故障定位,并将定位结果进行排序后存储于数据库中;
覆盖率单元,用于获取待测程序运行过程中的覆盖率信息;
打分单元,用于依据评分标准对用户任务完成情况进行评估打分,并将计算结果存储于后台数据库中,并由任务池管理单元删除该队首任务;
所述任务池管理单元获取到任务提交信息后,任务进入检测状态,由文件系统生成单元生成任务对应的文件系统与目录,并将待测程序复制到生成的目录下,由脚本生成单元将执行待测程序所需的指令生成脚本文件同时由程序插装单元对待测程序进行插装并运行,生成各测试用例的执行路径与测试用例信息,所述故障定位单元根据测试用例运行产生的路径覆盖信息使用故障定位算法进行故障定位,计算出语句的可疑度,按照可疑度的大小进行排序,并由覆盖率单元统计程序覆盖信息;打分单元依据评分标准计算队首任务的完成分数;上述语句可疑度信息、覆盖率信息和任务分数经信息存取显示单元反馈到浏览器端后生成结果报告,并在网页页面上显示评判结果。
所述任务操作单元包括:信息添加模块、打分公式比率配置模块、代码框架上传模块以及测试用例上传模块,以实现新的测试任务的创建操作;
信息添加模块,用于实现管理员对待创建的任务的基本信息的添加,其中基本信息可包括课程选择、语言选择、算法选择、任务名字、总分分制、任务说明;
打分公式比率配置模块:用于管理员按照相应的打分权重配置该项任务的打分规则,实现对打分公式比率的配置;
代码框架上传模块:用于上传相应的代码框架压缩文件;
测试用例上传模块:用于上传相应的待测函数所需的测试用例压缩文件。
所述的用户单元组的任务操作单元包括匹配提示模块,用于用户在对未提交的任务进行提交时,首先匹配当前提交的任务的代码中是否含有管理员上传的代码框架中规定的函数,如果没有,则提示提交代码不正确,程序无法提交;如果有,则将当前提交的任务提交程序至服务器进行编译,若编译通过则说明当前提交的任务无语法错误,将其任务信息添加到数据库中,否则在网页中提示任务内包含的程序的出错位置,待用户修复程序错误后方能继续提交任务。
所述的程序插装单元是通过JTB对待测程序进行编译,生成抽象语法树,然后对抽象语法树进行插装并生成插装后的源文件,通过结合测试用例运行插装后的文件,生成所述的故障定位单元所需要的信息;
所述故障定位单元采用的是基于覆盖信息统计的Tarantula算法和Safla算法,所需信息为测试用例运行产生的路径覆盖信息和测试用例运行的成功与否信息,然后统计语句在成功执行和错误执行的出现次数,算出每个节点的故障可疑度,并转化成JSON数据格式存储于数据库中。
所述的覆盖率单元通过Emma算法在待测程序执行过程中获取待测程序的执行路径并计算得出程序的覆盖率以及各函数的覆盖率,以XML文件的格式存储于指定文件目录下;在浏览器端请求结果报告页面时,信息存取显示单元解析该XML文件并转化为JSON数据的格式传至浏览器,并以表格的形式进行显示。
本发明的目的是还要提供一种基于B/S架构的程序源代码的评判方法,其特征在于:包括如下步骤:
1)管理员创建一门课程,设置该课程为可选状态;
2)管理员创建一项任务,添加任务基本的信息、配置打分公式各项比率、上传代码框架和测试用例;
3)用户登录系统后进行选课,查询到该课程下的所有任务;
4)用户选择需要完成的任务,下载任务相应的代码框架;
5)用户在代码框架的基础上完成作业任务后,在浏览器端将任务代码提交给任务操作单元;
6)利用任务操作单元根据规定任务的正则表达式检查提交的任务是否完整,若完整则向服务器端提交任务代码,否则在网页提示错误;
7)利用服务器端的任务检查单元将用户提交的任务代码暂存在临时文件目录下,尝试编译该任务代码,如果编译成功,则将任务信息通过信息存取显示单元提交至数据库,并将任务放至任务池中待测;如果编译失败,停止提交并由信息存取显示单元在网页提示代码出错位置;
8)利用任务池管理单元获取待测任务的信息,开始任务检测;
9)利用文件系统生成单元生成该任务的文件系统与目录,将待测程序复制到指定的目录下;
10)利用脚本生成单元将执行程序所需的指令生成脚本文件存放于指定的目录下;
11)利用程序插装单元对待测程序进行插装并运行,将生成的程序执行路径与测试用例信息存放于指定目录下;
12)利用故障定位单元根据上述生成的信息使用故障定位算法进行故障定位,并按照管理员指定的故障定位算法计算出语句的故障可疑度,按照可疑度的大小进行排序,并由覆盖率单元统计程序覆盖信息;
13)利用打分单元依据打分公式中各项完成情况打出任务分数;
14)利用信息存取显示单元将语句可疑度信息、语句覆盖率信息、任务分数经反馈到浏览器端后生成结果报告,并在网页中显示给用户。
本发明提供的一种基于B/S架构的程序源代码的评判系统与方法,其优点是显而易见的,具体如下:
(1)提供了一个完整的自动化平台,将测试用例、程序插装、故障定位技术、覆盖信息获取集成于系统中,任何不具备专业知识的用户均可以使用本系统对程序进行调试,无需专业人员操作;整个系统基于B/S架构,在网页端即可使用系统,具有操作简单,使用方便的特点。
(2)方便应用于教学中,教师(管理员)对学生(用户)的学习情况进行考查。教师配置一定的系统参数,如任务信息,任务评分标准等;系统根据教师对任务的侧重点为学生的完成情况给出合理的分数并生成任务报告,辅助教师对学生的学习情况进行了解,同时帮助学生对所提交的程序进行修改,改进代码质量。
附图说明
图1为本发明所述系统的结构示意图;
图2为本发明的实施例系统结构示意图;
图3为本发明的浏览器端教师工作流程图;
图4为本发明的浏览器端学生工作流程图;
图5为本发明的服务器端工作流程图;
图6为本发明的实施例结果报告图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。
如图1所示,系统主要分为两个部分,浏览器端和服务器端。其中浏览器端主要承担系统界面显示、请求服务的功能。前台页面的显示主要使用了HTML、JQuery、easyui等技术,与服务器端进行数据的提交获取。服务器端主要有Servlet、业务逻辑层、数据访问层、数据库四部分。其中Servlet是实现服务器端与浏览器端交互的接口,承担前台页面的请求与数据返回。业务逻辑层是系统的核心,实现程序故障定位的所有单元均在业务逻辑层中实现。数据访问层是系统核心与数据库的接口,使用Mybatis实现,主要承担访问数据库,对数据进行请求并返回。数据库使用的是mysql,主要存储个人、课程、任务等信息与程序故障定位所生成的结果等数据。
如图2所示,对系统的浏览器端和服务器端进行了进一步的划分。鉴于教师与学生是比较经典的管理员与用户代表案例,因此下述内容均使用教师和学生两个用户角色;具体的,在浏览器端包括教师单元组和学生单元组两个用户角色,每个用户角色均有个人信息管理单元、课程信息管理单元、任务操作单元,只是权限有所不同。个人信息管理单元主要承担对个人信息的编辑、添加、删除以及密码修改等管理操作。课程信息管理单元主要承担对课程的管理,在学生单元组用于学生进行选课以及个人课程表的查询。在教师单元组用于教师所教课程的添加和删除、编辑一门课程是否可以被学生选课,以及复制某课程的所有信息以生成一门新的课程。
任务操作单元是用户核心操作单元,在学生单元组用于学生查看所有任务信息,对未提交的任务进行提交,对提交完成的任务查看其诊断反馈信息。在教师单元组用于创建一项新的任务以及查看每个任务的学生提交情况以及生成报告,并对任务进行管理。此外教师还可通过学生信息管理单元对学生信息进行管理。
在服务器端,任务检查单元对任务代码进行编译检查,如果编译成功则将任务信息通过信息存取显示单元提交至数据库,并将任务放至任务池中待测;如果编译失败,停止提交并由信息存取显示单元在网页提示代码出错位置。任务池管理单元获取到已提交的任务,然后依次由文件系统生成单元、脚本生成单元、程序插装单元完成故障定位前的准备工作,然后由故障定位单元对程序结合测试用例进行运行,与此同时,由覆盖率单元统计程序运行过程中的覆盖率,最终由打分单元根据打分公式计算分数,并将这些结果信息交给信息存取单元,进行数据库存储。
所述服务器端主要有九个工作单元组成,分别为任务检查单元、任务池管理单元、文件系统生成单元、脚本生成单元、程序插装单元、故障定位单元、覆盖率单元、打分单元、信息存取显示单元。
信息存取显示单元,用于对浏览器端提交的管理员信息及用户信息进行数据库存取和显示;
任务检查单元用于暂时存储用户提交的任务代码,并对代码能否通过编译进行检查。主要由JobAnswerServlet.java类中的Compile方法完成。
任务池管理单元用于管理提交的任务队列,主要负责定时检测任务提交情况以及对学生提交的任务编号进行存储管理,在故障定位、打分完成后将其从任务队列进行删除。由一个定时器TimerListener类实现每隔30s查询数据库中的任务提交情况表,继承自java的Timertask类。任务池管理单元随着服务器的启动而启动。
文件系统生成单元,用于对某项任务(鉴于系统的任务队列存在至少一个任务,因此这里的任务是指当前的队首任务,经打分单元打分后并由任务池管理单元删除该队首任务,任务队列中的下任务即为新的队首任务重复就行下述过程)进行诊断的所有文件系统和目录的生成。主要由FileSysGeneration类完成。
脚本生成单元,用于生成执行程序所需的各脚本文件,并存储于指定的文件目录下。由batFile.common、batFile.linux、batFile.win三个包组成,batFile.common是脚本生成所需的基本操作,batFile.linux和batFile.win分别用于在linux和windows平台下的脚本生成。
程序插装单元,用于对待测程序进行插装并运行,将运行的路径信息在文件系统中进行存储。主要涉及到instrumentation.linux、instrumentation.win以及instrumentation.EDU.purdue.jtb下的相关包。前两个包用于实现linux和windows平台下的程序插装,而instrumentation.EDU.purdue.jtb则是实现对程序的编译以及插装节点获取等功能,其下还有misc、misc.toolkit、parser、syntaxtree、visitor等子包。
故障定位单元,通过结合测试用例运行程序实现对程序的故障定位,并将定位结果进行排序,存储于数据库中。依据定位算法的不同,分为Algorithm.Safla和Algorithm.Tarantula两个包,分别为故障定位算法Safla和Tarantula的计算过程。每个算法主要由Analyze_trace类、Compute_result类、Statement_list类组成,分别完成程序执行路径分析、计算程序节点可疑度、可疑度排序存入数据库的功能。
覆盖率单元,用于获取程序运行过程中的覆盖率信息,包括整个程序覆盖信息与各函数覆盖信息。由Coverage类实现对覆盖率信息的获取,XmlParse类完成对生成的XML文件进行解析获得覆盖率细节。
打分单元,用于对学生任务完成情况进行评估打分,分数由任务状态、被测函数覆盖率、测试用例通过率所决定;各项分数比例分配由教师指定,计算结果存储于数据库中。功能实现主要由ScoreCompute类实现。
图3和图4分别是本系统浏览器端教师和学生的工作流程。教师在登陆系统后,首先创建一门课程,并设置该课程是否可以被选。然后在该课程下创建任务,完成任务基本信息和打分公式配置信息的填写,上传代码框架和程序中每个待测函数对应的测试用例,提交后系统会自动生成该任务的项目工程包供学生下载,教师流程结束。
学生在登录系统后,首先选择课程,选择任务,下载该任务的项目工程包,按照其中给出的代码框架完成任务。将完成后的代码粘贴入任务提交处的文本域中并提交。系统会自动提取所提交代码中的函数,与代码框架中所列出的函数进行匹配。如果匹配失败,则需要继续修改后提交。如果成功,则进入代码编译阶段,如果编译未通过,系统会返回出错信息,由学生修改后重新提交。如果编译通过,则系统进入故障定位阶段,学生等待一段时间后,可以得到待测程序的结果报告,学生流程结束。
如图5是本系统服务器端的工作流程图。
首先,任务检查单元编译成功后将任务提交至任务池,任务池管理单元检测到待测任务并获取任务信息,开始任务检测(步骤S101);
文件系统生成单元生成该任务的文件系统与目录,将待测程序复制到文件系统指定的目录下(步骤S102);
脚本生成单元为队首任务生成所需的各脚本文件,并将其存储于指定的文件目录下(步骤S103);
待测程序插装单元对待测程序进行插装,并将插装后的程序存放在文件目录中(步骤S104);
系统结合测试用例运行插装后的程序,每个测试用例运行一次(步骤S105);
每次任务代码的运行路径覆盖信息以文件形式进行存储,存放在指定文件目录下(步骤S106);
故障定位单元根据生成的信息使用故障定位算法进行故障定位,用教师指定的故障定位算法计算出语句的故障可疑度,按照可疑度的大小进行排序(步骤S107);
覆盖率单元统计程序运行过程中的覆盖信息(步骤S108);
打分单元依据打分公式中各项的完成情况打出任务分数(步骤S109);
将程序定位结果、覆盖率信息、任务分数等信息存入数据库(步骤S110)。
实施例1:
本发明的第一优选实施例是通过应用在教学系统中来说明本系统的实施应用。
如今大部分高校都开设了程序语言课程,如C语言、Java语言等。学生在学习的过程中,需要通过编写老师布置的一些程序任务来巩固学习成果。如果在编写代码时遇到一些逻辑上的错误,尤其对于初学者来说将花费很大精力去进行调试。而教师在教课的过程中,常常需要了解每个学生的学习情况,便于在期末给学生一个客观合理的课堂得分。如果学生人数较多的话,往往需要教师花费比较大的精力审阅学生任务,以完成教学任务。
本实例可以很好的解决以上两个问题。首先将本系统部署在学校的服务器上,这样全校师生均可通过校内网访问本系统。以Java程序设计课为例。教师登录本系统创建名为“Java程序设计”的课程,并设置为可选状态。并在此课程下创建一项任务,名为“Mid”,任务说明为“找出任意三个数字中大小处于中间的数字”,语言选择为“Java语言”,算法选择为“Tarantula”,总分分制选择为课堂分30分。在打分公式配置中,选择打分点为任务状态占50%,测试用例通过率占30%,程序覆盖率占20%。
下一步需要对代码框架进行上传,这里需要注意的是,代码框架的规定格式是一个压缩包文件,其中包括两个子文件:Main.java和Test.java。其中Main.java是由教师编写,是整个程序的入口。教师按照示例进行编写,主要功能是实现main函数读入参数调用待测函数,整个代码大概10行左右,任务量很小。Test.java是由教师给出需要学生完成的函数的框架,但具体的实现部分需要由学生自己填写。函数的框架包含了函数名、参数类型、参数个数信息,这些是不允许学生进行修改和删除的,这也是在学生提交任务时系统会进行函数匹配的原因,不过学生可以根据自己的需要添加所需的函数,这部分添加的函数不计入随后的故障定位统计中。
这里单击“提交”按钮后,系统会对代码框架中的Test.java进行解析,分析其中的函数个数,并以列表形式显示在页面中供教师上传测试用例。系统采用的诊断方式采用的是分函数测,即为对代码框架中的不同函数采用不同的测试用例分别进行检测,这样的定位结果更为准确。测试用例是一个压缩文件包,其中有IN和OUT两个文件夹,分别存放程序输入和正确的程序输出。IN中的测试用例使用1.txt、2.txt依次命名,每个txt文件是一个测试用例,相应的OUT中的正确输出也使用1.txt、2.txt命名。在为每个函数都上传过测试用例后,点击“提交任务”,这样一个任务就创建完毕。
学生登录系统后,进入课程信息管理单元,找到“Java程序设计”这门课,在后面的选课一栏下单机“选择”按钮,这门课就进入学生课程表之中。这样在任务操作单元中,即可看到该门课程下的“Mid”任务。选择下载“Mid”程序的代码框架,即可下载到一个名为“project.zip”的压缩文件,解压后可以看到教师上传的代码框架,根据任务要求,学生选择Test.java进行代码编写。在实现完Test.java中的所有函数后,打开“Mid”任务,单击“提交任务”按钮,将整个Test.java的内容复制任务提交页面的文本域中,单击“提交”。系统会首先对提交程序中的函数与代码框架进行匹配,如果不能匹配,则会在页面中进行提示,并停止提交。如果成功匹配所有函数,则进入编译阶段,该阶段主要检查程序是否有语法错误,如果有,则提示出错位置和出错信息。否则,程序提交成功,程序进入检测阶段。
程序的检测时间依据测试用例的个数而定,一般10个测试用例的诊断时间一般为40s左右。在系统完成程序故障定位后,学生便可查看自己程序的执行结果报告。如图6所示为系统生成的结果报告图,可以直观的获取到该任务所的分数、覆盖率信息,在代码区,按颜色对不同可疑度的代码进行高亮显示。根据颜色条给出的参照可以看到,可用一种颜色如红色代表语句可疑度最高,其他颜色如紫色橙色依次降低,也可用其他颜色进行标识。参照程序诊断结果,可以对程序进行调试,修改后可以进行再次提交。在任务规定的完成时间内可以进行反复提交,帮助学生修改直到正确为止。
此外,在学生完成任务后,教师可以在系统中查看每个学生的完成情况,并可以打印学生的任务成绩单,作为教学任务中学生成绩的一部分进行纸质存档,可有效减轻教学负担。
实施例2:
本发明的第二优选实施例是通过应用在对学生进行编程行为评判来说明本系统的实施应用。
在日常的本科生教学中,教师不仅需要对学生的语言学习情况进行掌握,也需要了解学生的编程行为和思路,以便培养学生较好的编写代码的习惯。在研究生的教学中,导师也需要对每个学生的编程情况有所了解,这样在安排研究方向或者团队项目时,能够合理分配每个人的工作,使的每个学生可以处于一个合适的团队位置,发挥最大的作用,提高团队工作的效率。但是目前这些工作仍然需要教师手动去完成,通过查看每个人的任务完成情况,去分析学生的编程行为,以便做出一个正确的评估,这样无疑是比较浪费时间和精力的。
本实例可以通过自动评估来解决上述问题。首先需要教师布置一项任务,这项任务是评判学生的基础。在进入创建任务页面后,首先填写任务的基本信息,包括任务名、评估算法,并详细填写任务说明,用于让学生明白任务要求,实现任务说明里的所有功能。然后需要对评估标准做出选择,评估标准提供了覆盖率评估、任务完成情况评估、测试用例通过情况评估、故障严重程度评估等几个评估点,教师可以针对需要的区分点选择合适的一项或者多项评估点,作为对学生进行评判的标准。
在提交完任务基本信息和评估标准后,教师需要对任务上传代码框架和测试用例。与定位时的代码框架格式相似,这里的代码框架也是由Main与Test两部分组成的,其中Main是由教师编写,是整个程序的入口,主要功能是实现main函数读入参数调用待测函数,根据系统提供的模板进行编写,简单而易于实现。Test是由教师给出的框架,其中的每个函数均需要学生自己去完成。函数框架中已经包含了函数名、参数类型、参数个数信息,这些信息不允许学生进行修改和删除,并且在学生提交任务时系统会进行函数匹配,以确保这些信息不被更改。学生可以根据自己的需要添加需要的方法,这部分添加的代码在随后的代码评估中会被考虑。在这里需要注意的是,由于系统需要对学生的编程行为进行整体评估,所以教师提交的任务应该尽量丰富,可以让学生实现多个功能,例如代码框架中可以给出多个函数框架,由学生根据任务说明进行实现并返回最终结果。这样可以让系统收集到尽可能多的学生代码信息,能够较为全面的评估学生的编程行为,最终提供较为准确的评判报告。
在提交完代码框架后,教师需要对任务上传于代码框架对应的测试用例,与定位时的测试用例一致,这里的测试用例也需要根据Test中的函数来分别上传对应的测试用例。测试用例以压缩文件的形式上传,其中有IN和OUT两个文件夹,分别存放程序输入和正确的程序输出。IN中的测试用例使用1.txt、2.txt依次命名,每个txt文件是一个测试用例,相应的OUT中的正确输出也使用1.txt、2.txt命名。在系统运行时,会将程序的执行结果同OUT文件夹下的正确程序输出进行比较,以此来判断每个测试用例的执行成功与否。在上传过所有函数对应的测试用例后,点击“提交任务”,则改任务提交完成。
学生登录系统后,选择相应的任务,点击下载代码框架,就可以看到教师所提供的代码框架,学生按照任务说明中的要求,完成代码框架中相应函数功能的实现,并将整个Test中的代码粘贴到系统提交任务页面的文本域中,单击提交按钮,系统会首先对提交程序中的函数与代码框架中的对应函数进行匹配,如果不能匹配,则提示不匹配的函数信息。如果成功匹配所有函数,则系统对提交的代码进行编译,主要检查程序是否有语法错误,如果有,则提示出错位置和出错信息,否则,程序提交成功,系统开始对代码进行评估。
系统首先对学生提交的代码进行运行,结合测试用例并记录每个测试用例的执行结果,判断测试用例是否为成功执行的测试用例,并作为评估程序错误点与错误严重程度的算法依据。在程序执行过程中,系统会记录学生代码的覆盖率,以此来评估学生所写代码的冗余程度。在执行完所有的测试用例后,系统根据收集的信息,首先对学生的任务完成情况进行评估,包括任务中的所有方法是否被完全实现,以及完成率,这是评判的基础。然后对代码的覆盖率进行分析,提供每个方法的覆盖率信息,并评估代码的冗余程度。随后评判测试用例的通过情况,如果出现失败的测试用例则说明程序出现了故障,则根据评估算法对代码的故障点以及故障严重程度进行判定,例如若故障点发生在控制语句中,则说明学生对程序逻辑关系理解有误,需要重新考虑控制语句的判断条件,若故障点发生在与数据相关的语句中,则说明学生数据的定义或使用出现了偏差,需要重新定义故障数据。
系统通过对以上信息的收集,可以对完成该程序的学生进行一个较为准确公平的评估,对完成任务的班级学生进行分类,一类为代码逻辑条理清晰、精简程度较高且执行结果正确;二类为代码基本正确,但存在一些毛病如某一功能实现冗余;三类为代码存在故障,需要对代码进行修改,这样的评判分类便于教师明确每个学生的改进方向。而对于经常从事项目开发的研究生来说,利用本系统可以对每个学生的编程行为进行评判,使导师合理的安排每个人的任务,例如代码简洁、覆盖率较高的学生可以从事一些系统的后端算法的工作;而功能完成率较高的学生可以承担系统相关功能的实现。这样可以让导师对每个学生进行合理的任务安排,使团队的每个成员在项目中处于一个合适的位置,发挥最大的作用,从而提高团队工作的效率。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

Claims (8)

1.一种基于B/S架构的程序源代码的评判系统,包括浏览器端和服务器端,其特征在于:
所述浏览器端包括管理员单元组和用户单元组;浏览器端用于管理员单元组和用户单元组实现对其各自对应的信息管理、课程信息管理、任务操作管理的操作以及管理员单元组对用户单元组各个用户的用户信息进行查询、管理操作,并显示服务器端对用户当前测试任务的评判结果;
所述服务器端包括:
信息存取显示单元,用于对浏览器端提交的管理员信息及用户信息进行数据库存取和显示;
任务检查单元,用于暂时存储用户提交的任务代码,并对代码能否通过编译进行检查;
任务池管理单元,用于管理浏览器端提交的任务队列,即实现定时检测任务提交情况,获取任务提交信息,并对用户提交的任务信息进行存储管理;
文件系统生成单元,用于生成任务队列中的队首任务进行处理所需的所有文件目录并读取数据库中的待测程序,将其复制到规定的目录下;
脚本生成单元,用于生成执行队首任务所需的各脚本文件,并存储于指定的文件目录下;
程序插装单元,用于对待测程序进行插装并运行,将生成的程序执行路径与测试用例信息存放于指定目录下;
故障定位单元,用于对待测程序进行故障定位,并将定位结果进行排序后存储于数据库中;
覆盖率单元,用于获取待测程序运行过程中的覆盖率信息;
打分单元,用于依据评分标准对当前用户任务完成情况进行评估打分,并将计算结果存储于后台数据库中,并由任务池管理单元删除该队首任务;
所述任务池管理单元获取到任务提交信息后,任务进入检测状态,由文件系统生成单元生成任务对应的文件系统与目录,并将待测程序复制到生成的目录下,由脚本生成单元将执行待测程序所需的指令生成脚本文件同时由程序插装单元对待测程序进行插装并运行,生成各测试用例的执行路径与测试用例信息,所述故障定位单元根据测试用例运行产生的路径覆盖信息使用故障定位算法进行故障定位,计算出语句的可疑度信息,按照可疑度信息的大小进行排序,并由覆盖率单元统计程序的覆盖率信息;打分单元依据评分标准计算队首任务的任务分数;上述语句可疑度信息、覆盖率信息和任务分数经信息存取显示单元反馈到浏览器端后生成结果报告,并在网页页面上显示评判结果。
2.根据权利要求1所述的一种基于B/S架构的程序源代码的评判系统,其特征在于:所述的程序插装单元是通过JTB对待测程序进行编译,生成抽象语法树,然后对抽象语法树进行插装并生成插装后的源文件,通过结合测试用例运行插装后的文件,生成所述的故障定位单元所需要的信息。
3.根据权利要求1所述的一种基于B/S架构的程序源代码的评判系统,其特征在于:所述故障定位单元采用的是基于覆盖信息统计的Tarantula算法和Safla算法,所需信息为测试用例运行产生的路径覆盖信息和测试用例运行的成功与否信息,然后统计语句在成功执行和错误执行的出现次数,算出每个节点的故障可疑度,并转化成JSON数据格式存储于数据库中。
4.根据权利要求1所述的一种基于B/S架构的程序源代码的评判系统,其特征在于:所述的覆盖率单元通过Emma算法在待测程序执行过程中获取待测程序的执行路径并计算得出程序的覆盖率以及各函数的覆盖率,以XML文件的格式存储于指定文件目录下;在浏览器端请求结果报告页面时,信息存取显示单元解析该XML文件并转化为JSON数据的格式传至浏览器,并以表格的形式进行显示。
5.根据权利要求1所述的一种基于B/S架构的程序源代码的评判系统,其特征在于:
所述管理员单元组,用于为管理员实现信息管理、测试任务编译、下达的操作,包括:
个人信息管理单元,用于管理员实现对个人信息的管理操作;
课程信息管理单元,用于管理员实现对课程信息的管理操作;
任务操作单元,用于管理员实现在相应课程下创建新的测试任务操作以及对已有任务的相关信息进行管理操作;
用户信息管理单元,用于管理员实现对各个用户的用户信息进行查询、管理操作;
所述用户单元组包括:
个人信息管理单元,用于各个用户实现对相应的个人信息的管理操作;
课程信息管理单元,用于各个用户实现对相应的课程信息的管理操作;
任务操作单元,用于各个用户实现查看相应的任务信息,对未提交的任务进行提交,并对提交完成的任务查看其诊断反馈信息。
6.根据权利要求1所述的一种基于B/S架构的程序源代码的评判系统,其特征在于:
所述管理员单元组的任务操作单元包括:信息添加模块、打分公式比率配置模块、代码框架上传模块以及测试用例上传模块,以实现新的测试任务的创建操作;
信息添加模块,用于实现管理员对待创建的任务的基本信息的添加,其中基本信息可包括课程选择、语言选择、算法选择、任务名字、总分分制、任务说明;
打分公式比率配置模块:用于管理员按照相应的打分权重配置该项任务的打分规则,实现对打分公式比率的配置;
代码框架上传模块:用于上传相应的代码框架压缩文件;
测试用例上传模块:用于上传相应的待测函数所需的测试用例压缩文件。
7.根据权利要求1所述的一种基于B/S架构的程序源代码的评判系统,其特征在于:
所述的用户单元组的任务操作单元包括匹配提示模块,用于用户在对未提交的任务进行提交时,首先匹配当前提交的任务的代码中是否含有管理员上传的代码框架中规定的函数,如果没有,则提示提交代码不正确,程序无法提交;如果有,则将当前提交的任务提交程序至服务器进行编译,若编译通过则说明当前提交的任务无语法错误,将其任务信息添加到数据库中,否则在网页中提示任务内包含的程序的出错位置,待用户修复程序错误后方能继续提交任务。
8.一种基于B/S架构的程序源代码的评判方法,其特征在于:包括如下步骤:
1)管理员创建一门课程,设置该课程为可选状态;
2)管理员创建一项任务,添加任务基本的信息、配置打分公式各项比率、上传代码框架和测试用例;
3)用户登录系统后进行选课,查询到该课程下的所有任务;
4)用户选择需要完成的任务,下载任务相应的代码框架;
5)用户在代码框架的基础上完成作业任务后,在浏览器端将任务代码提交给任务操作单元;
6)利用任务操作单元根据规定任务的正则表达式检查提交的任务是否完整,若完整则向服务器端提交任务代码,否则在网页提示错误;
7)利用服务器端的任务检查单元将用户提交的任务代码暂存在临时文件目录下,尝试编译该任务代码,如果编译成功,则将任务信息通过信息存取显示单元提交至数据库,并将任务放至任务池中待测;如果编译失败,停止提交并由信息存取显示单元在网页提示代码出错位置;
8)利用任务池管理单元获取待测任务的信息,开始任务检测;
9)利用文件系统生成单元生成该任务的文件系统与目录,将待测程序复制到指定的目录下;
10)利用脚本生成单元将执行程序所需的指令生成脚本文件存放于指定的目录下;
11)利用程序插装单元对待测程序进行插装并运行,将生成的程序执行路径与测试用例信息存放于指定目录下;
12)利用故障定位单元根据上述生成的信息使用故障定位算法进行故障定位,并按照管理员指定的故障定位算法计算出语句的故障可疑度信息,按照可疑度信息的大小进行排序,并由覆盖率单元统计程序的覆盖率信息;
13)利用打分单元依据打分公式中各项完成情况打出任务分数;
14)利用信息存取显示单元将语句可疑度信息、覆盖率信息、任务分数经反馈到浏览器端后生成结果报告,并在网页中显示给用户。
CN201410323762.5A 2014-07-08 2014-07-08 一种基于b/s架构的程序源代码的评判系统及方法 Expired - Fee Related CN104077227B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410323762.5A CN104077227B (zh) 2014-07-08 2014-07-08 一种基于b/s架构的程序源代码的评判系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410323762.5A CN104077227B (zh) 2014-07-08 2014-07-08 一种基于b/s架构的程序源代码的评判系统及方法

Publications (2)

Publication Number Publication Date
CN104077227A CN104077227A (zh) 2014-10-01
CN104077227B true CN104077227B (zh) 2017-01-04

Family

ID=51598495

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410323762.5A Expired - Fee Related CN104077227B (zh) 2014-07-08 2014-07-08 一种基于b/s架构的程序源代码的评判系统及方法

Country Status (1)

Country Link
CN (1) CN104077227B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3191963B1 (en) * 2014-09-08 2023-11-22 AB Initio Technology LLC Data-driven testing framework
CN104239219B (zh) * 2014-10-21 2017-05-03 中国科学院软件研究所 一种基于覆盖的软件缺陷定位技术的在线评测与实验平台及方法
CN105761563B (zh) * 2014-12-18 2018-07-31 中国农业大学 编程题评测系统的学生客户端、教师客户端及服务器端
CN106293654A (zh) * 2015-05-19 2017-01-04 广州数度软件有限公司 Java编程题目自动评判方法及系统
CN105354181A (zh) * 2015-09-24 2016-02-24 四川长虹电器股份有限公司 Xbrl文档的校验及纠错定位方法
CN105139703A (zh) * 2015-09-24 2015-12-09 杭州华恩教育科技有限公司 云教学系统
CN107220226A (zh) * 2016-03-21 2017-09-29 上海鸣皋教育科技有限公司 一种创课方法及系统
CN106651697A (zh) * 2016-11-17 2017-05-10 深圳信息职业技术学院 一种在线编程系统实现方法及装置
CN106970817B (zh) * 2017-03-24 2019-11-15 北京小米移动软件有限公司 故障确定方法及装置
US11157844B2 (en) * 2018-06-27 2021-10-26 Software.co Technologies, Inc. Monitoring source code development processes for automatic task scheduling
CN109408114B (zh) * 2018-08-20 2021-06-22 哈尔滨工业大学 一种程序错误自动修正方法、装置、电子设备及存储介质
CN112835619A (zh) * 2021-01-20 2021-05-25 沈阳职业技术学院 一种基于oj的程序设计语言学习训练评价系统与方法
CN115268860B (zh) * 2022-06-21 2023-04-28 北京浩泰思特科技有限公司 一种智能教学诊断方法及系统
CN117435178B (zh) * 2023-12-20 2024-03-15 厦门东软汉和信息科技有限公司 一种代码生成系统、方法、装置及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1503951A (zh) * 2001-01-09 2004-06-09 托普科德公司 用于编码竞赛的系统和方法
CN103218269A (zh) * 2013-03-22 2013-07-24 北京飞流九天科技有限公司 应用软件评分方法及系统
CN103246600A (zh) * 2012-02-10 2013-08-14 广州博纳信息技术有限公司 软件测评快速校验方法
CN103257917A (zh) * 2012-02-16 2013-08-21 广州博纳信息技术有限公司 软件测评系统管理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8291384B2 (en) * 2009-01-15 2012-10-16 International Business Machines Corporation Weighted code coverage tool
US8458650B2 (en) * 2010-03-29 2013-06-04 International Business Machines Corporation Injecting a fault into a stream operator in a data stream processing application

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1503951A (zh) * 2001-01-09 2004-06-09 托普科德公司 用于编码竞赛的系统和方法
CN103246600A (zh) * 2012-02-10 2013-08-14 广州博纳信息技术有限公司 软件测评快速校验方法
CN103257917A (zh) * 2012-02-16 2013-08-21 广州博纳信息技术有限公司 软件测评系统管理方法
CN103218269A (zh) * 2013-03-22 2013-07-24 北京飞流九天科技有限公司 应用软件评分方法及系统

Also Published As

Publication number Publication date
CN104077227A (zh) 2014-10-01

Similar Documents

Publication Publication Date Title
CN104077227B (zh) 一种基于b/s架构的程序源代码的评判系统及方法
Chren et al. Mistakes in UML diagrams: analysis of student projects in a software engineering course
Ricca et al. On the effectiveness of screen mockups in requirements engineering: results from an internal replication
Sabaliauskaite et al. Challenges in aligning requirements engineering and verification in a large-scale industrial context
de Carvalho et al. A process for designing innovative mechatronic products
Adali et al. Assessment of agility in software organizations with a web-based agility assessment tool
Drinka et al. Controlling curriculum redesign with a process improvement model
Shull et al. Replicated studies: building a body of knowledge about software reading techniques
Vilbergsdóttir et al. Classification of usability problems (CUP) scheme: augmentation and exploitation
Chua et al. Integrating human factors principles into systems engineering
Khwaja A web-based program outcome assessment tool
Badham Functionality, Accuracy, and Feasibility: Talking with Modelers.
Solari Identifying experimental incidents in software engineering replications
Gaona et al. Automatic grading of programming assignments in moodle
US20090275009A1 (en) System and method for school progress reporting
Göhnert et al. Enriching (learning) community platforms with learning analytics components
Merino et al. Engineering product design education with a mixed design-thinking & lean start-up approach
Reck Student and Faculty Reflections After Using MathWorks’ Cody Coursework in a Control Systems Course
Luukkainen ASPA: A static analyser to support learning and continuous feedback on the first programming course
Kanij et al. An empirical study to review and revise job responsibilities of software testers
Groenewegen et al. Eating Your Own Dog Food: WebDSL Case Studies to Improve Academic Workflows
Khare et al. Classroom attendance application
Geisser et al. An evaluation method for requirements engineering approaches in distributed software development projects
Yifan et al. University discipline construction progress monitoring system
Windarto et al. Smart automation for credit point compilation of instructor

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170104

Termination date: 20170708