基本信息
- 项目名称:
- C程序在线测试平台的研究与实现
- 来源:
- 第十二届“挑战杯”省赛作品
- 小类:
- 信息技术
- 大类:
- 科技发明制作B类
- 简介:
- 为了培养学习者的程序设计能力,以C程序为测试对象,设计并实现了一种程序在线测试方法。该方法基于开源GCC(GNU Compiler Collection)程序编译器,通过更改进程管道将程序运行结果与测试用例进行比较验证其正确性,对测试程序采用悬停操作提高服务器的CPU并发使用率。可执行文件PE代码节的MD5值提取技术解决了源码相似性检测的问题,并实现了文件操作程序的测试。
- 详细介绍:
- C程序在线测试方法需实现客户端和服务端两方面内容,主要思路是:服务端接收来自客户端浏览器提交的程序代码;服务端对所提交的代码进行编译,如无语法错误在服务端生成用于测试的可执行程序文件,否则向客户端返回语法错误信息;服务端对可执行程序文件进行测试用例的输入,并捕获执行程序文件的输出,然后对执行文件的输出与答案预定输出进行比对,向客户端返回判断结果;服务端在测试可执行程序期间,同时要对测试程序的运行时间、硬件资源占用及源码相似性给予检测,必要时需给出处理方法,并将结果反馈给客户端。
作品专业信息
设计、发明的目的和基本思路、创新点、技术关键和主要技术指标
- 设计、发明的目的:为了培养学习者的程序设计能力,以C程序为测试对象,设计并实现了一个C程序在线测试平台[1]。该平台可提供不同类型试题的测试、随机组卷及程序源码相似性检测等服务。 基本思路: 程序测试以开源GCC(GNU Compiler Collection)[3]作为程序编译器,通过更改进程管道将程序运行结果与测试用例进行比较验证其正确性,对测试程序采用悬停操作以提高服务器的CPU并发使用率。随机组卷采用分段随机组卷策略避免试题被重复抽取。程序源码相似性检测通过提取程序可执行文件PE代码节的MD5值判定源码是否雷同。文件操作题测试是把对文件的操作映射成对计算机屏幕的操作,以便防止被测试程序对系统的非法操作。 创新点: (1)可对同一试题的C程序源码是否相似进行检测。 (2)支持对C文件操作题的测试。 (3)采用分段随机组卷策略,组卷效率高,效果好。
科学性、先进性
- 作品的科学性及先进性: 本作品引入正则表达式匹配、用例实模运行等策略对C程序进行测试,具有工作效率高,测试过程人性化的特点。前人对程序相似性研究主要集中在源码的相似度检测,常见方法为属性计数法和结构度量法[4-6]。前者对代码的各种统计属性进行处理,后者则对程序内部结构进行分析,大多数程序相似性检测系统将两种方法结合在一起,如斯坦福大学的Moss[7。与上述方法相比,我们提出的定性检测源码相似性方法具有定位准确率高,可用性强的特点。主要思路是:提取可疑代码exe文件PE(Protable Executable)结构的.text代码节的md5值,通过比较提取的md5值判断它们对应的源码是否雷同,其依据是:源码中定义的变量名及变量数目不同只会对PE结构的.data数据节产生影响,一般不会影响到.text代码节。此外,注释在程序编译过程中将被过滤掉,不会影响到.text代码节内容。所以,对.text代码节进行md5值的提取与比较可容易地识别代码是否雷同。
获奖情况及鉴定结果
- 2010年 10月已在《电脑知识与技术》第 6 卷第28 期发表科技论文1篇,题目:一种C程序在线测试方法的研究与实现(见研究报告的附录一) 2011年3月,作品在辽宁交通高等专科学校(道桥系)进行了初步应用,反映良好。(见研究报告的附录二)
作品所处阶段
- 中试阶段
技术转让方式
- 无
作品可展示的形式
- 实物、产品 现场演示 图片 录像
使用说明,技术特点和优势,适应范围,推广前景的技术性说明,市场分析,经济效益预测
- 技术特点和优势: 以C程序为测试对象,实现了程序编译及运行、硬件资源占用监测、运行时间获取等在线测试功能,具有以下优势:(1)本作品提出的定性判断程序相似性,易于实现,有利于定位作业及考试作弊。(2)实现了文件操作程序的测试。(3)采用了开放式、模块化的设计思想,易将该方法扩展用于C++、Pascal等程序的测试。 适应范围: 运行在Internet环境,可实现对C语言选择题、简答题、改错题、完形填空题和程序设计题等五种题型的测试、考试及自动阅卷。 推广前景及市场分析和经济效益预测: 基于该测试平台,远程网上用户无需在本地安装程序编译软件便可实现C程序源码的自动化测试,方便了编程语言的随机学习。 有关部门和高校可基于该平台构建相关课程的作业管理及在线考试系统,组织大规模考试,进行作业及试卷的自动化评阅。 该平台实现了自动化的程序测试,能进行自动组卷和无纸化考试,节省了大量的人力、物力资源,具有较好的现实应用前景
同类课题研究水平概述
- 研究自动化或半自动化的软件测试工具不但对软件开发过程产生重大影响,而且对编程学习者而言也大有裨益。近些年来,已有研究人员开发出具有较高自动化的C程序测试平台[1],但该平台不能提供在线测试服务。C程序在线测试比较著名的是国际大学生程序设计竞赛网站提供的软件评测系统[2]。这种远程在线测试方式极大地方便了客户,有利于培养程序设计能力。 目前,大多数C程序在线测试的程序编译采用GNU提供的GCC编译器[3],GCC是一个交叉平台的编译器,目前支持几乎所有主流CPU处理器平台,它可以完成从C、C++、Objective C等源文件向运行在特定CPU硬件上的目标代码的转换。GCC功能非常强大,便携性好,支持跨平台。 在程序测试中,其源码相似判断较易受到多余的回车、空格等外在因素的干扰。前人对程序相似性研究主要集中在源码的相似度检测,常见的方法为属性计数法和结构度量法[4-6]。前者只对代码的各种统计属性进行处理,后者则对程序内部结构进行分析,大多数程序相似性检测系统将两种方法结合在一起应用,如斯坦福大学的Moss系统[7]、德国卡尔斯鲁厄大学的JPlag[8]等。 但是,目前大多数程序在线测试工具只针对C程序设计题等少量题型,对源码相似性检测定位不够简洁有效,并且尚未见到对C文件操作题测试的公开报道。