上下文敏感的学生程序自动修复方法

来源 :哈尔滨工业大学 | 被引量 : 0次 | 上传用户:fr20899
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
近年来,在线学习环境日益普及,逐渐作为一个常见手段应用在大学生程序设计教学中,但已有的在线编程系统只能判别提交程序的正误,不能给出错误原因并进行修正。因此,本文针对高校设立的Java程序设计课程的代码,研究了自动程序修复在学生程序中的应用。不同于工业界的缺陷程序具有近似正确、补丁小及大部分测试用例可通过等特点,含有缺陷的学生程序具有错误密度大、缺少关键语句等特点。工业界方法通过对比测试用例通过情况实现修复功能,但学生程序可能一个测试用例也不能通过,因此工业界方法并不适用于修复学生程序。学生程序代码规模较小,同一个题目作答人数多,可以采用提供模板的方法进行修复,从正确的学生程序中挖掘模板,使模板程序更具有多样性。但一个程序设计问题会存在多种解决方案,学生给出的答案在实现算法、正确性以及语法使用上都有可能存在差异,选择不同的模板程序作为示例程序,会直接影响缺陷程序修复的正确性和修复率。本课题使用了从在线编程系统中收集的大量正确的模板程序,这些数据中蕴含着“编程智慧”,可以为自动程序修复提供丰富的信息。针对上述问题,本文完成了以下工作:本文提出了模板程序的挖掘方法,解决了从大量实现相同功能的程序中挖掘模板的问题。首先利用程序的上下文信息对代码的多样性进行区分,区别出功能等价的程序是语法形式不同还是实现方式不同,然后使用聚类方法构建出模板程序集。最后在从赛码网上收集的程序进行了评估,评估表明实现93.4%的准确率。本文提出了动态执行和上下文分析相结合的变量映射的方法,解决了缺陷程序和示例程序中等价变量的问题。该方法不仅考虑了程序动态执行时变量的值序列,而且还考虑了变量的上下文信息,使变量的匹配更准确,从而提高程序的修复率。实验评估表明该方法比原方法的正确率提高了53.5%,达到了93.7%。本文提出了改进的遗传编程算法,解决了交叉策略不够灵活、选择进化的变异体过于相同和搜索空间爆炸的问题,使得生成的变异体的质量较高且更具有多样性,同时也加快了算法的收敛速度,最大可能性的选择通过不同测试用例的变异体。本文与原方法进行了比较,评估表明,改进后的方法从适应度和执行时间上都有提高,单一错误修复中,平均适应度达到了94.5%,执行时间为8.9秒。
其他文献
刑事诉讼的工作之一就是惩罚犯罪,虽然刑事诉讼制度早就存在,并且在实践中广泛渗透到每个人的生活之中,但其与个人信息保护之间的关系并没有得到普遍的关注,学界也多以“个人
图元(Graphlet)是大图中连通的诱导子图,因其广泛的应用吸引着众多研究者的关注。图元的统计量,即图元的数目和比例可以揭示出大图的某些特征,是研究复杂网络的一个很好的切
视觉SLAM(Visual Simultaneous Localization and Mapping,VSLAM)是移动机器人领域的重要技术,使得移动机器人更具智能化。目前的视觉SLAM算法大多是基于静态环境实现的,如果
云盘作为当前网络资源传播的重要渠道之一,不可避免的成为著作权侵权的重灾区。云盘服务向用户提供的空间存储、资源分享、在线预览和秒传等功能服务方便了用户之间作品资源
随着通信技术的进步,用户和应用的数量呈指数级增长,导致了资源的稀缺和功耗的增加。基站上的数据流量也随着用户数量的增加而增加。为了降低5G中蜂窝用户的中断概率,设备到
物理学科是一门综合性极强的自然学科。高中物理学科知识结构体系全面,涵盖的知识点丰富,涉及的领域广泛,对学生的综合能力有着极高的要求。“学习物理难、学好物理更难”越
高烈度地震区地震液化对各种工程建设都有相当大的危害,用标准贯入试验判断饱和砂土地震液化,能为工程抗震设计提供重要依据。本文通过对标准贯入试验的理论研究,结合具体工
在导航、雷达等数字信号处理领域,需要大量正余弦和反正切函数计算,目前主要的手段是采用FPGA并行完成。硬件设计方案主要包括查表法、多项式逼近方法和坐标旋转数字计算方法
随着21世纪互联网的飞速发展,网络上的海量数据已经与我们的生活变得密不可分。如何令用户可以在如此海量的数据中迅速搜索到自己感兴趣的图片变得十分重要,因此图像检索成为
高校实验室是培养学生实践能力与综合素质的主要场所,是高校教学资源配置体系中的一个重要组成部分。随着学科与专业的发展,高校实验室规模与数量不断增加,实验室建设质量和