首页 | 本学科首页   官方微博 | 高级检索  
相似文献
 共查询到17条相似文献,搜索用时 62 毫秒
1.
内存泄漏是C/C++程序的一种常见的、难以发现的缺陷,一直困扰着软件开发者,尤其是针对长时间运行的程序或者系统软件,内存泄漏的后果十分严重.针对内存泄漏的检测,目前主要有静态分析和动态测试两种方法.动态测试实际运行程序,具有较大开销,同时依赖测试用例的质量;静态分析技术及自动化工具已经被学术界和工业界广泛运用于内存泄漏缺陷检测中,然而由于静态分析采取了保守的策略,其结果往往包含数量巨大的误报,需要通过进一步人工确认来甄别误报,但人工确认静态分析的结果耗时且容易出错,严重限制了静态分析技术的实用性.本文提出了一种基于混合执行测试的静态内存泄漏警报的自动化确认方法.首先,针对静态分析报告的目标程序中内存泄漏的静态警报,对目标程序进行控制流分析,并计算警报的可达性,形成制导信息;其次,基于警报制导信息对目标程序进行混合执行测试;最后,在混合执行测试过程中,监控追踪内存对象的状态,判定内存泄漏是否发生,对静态警报进行动态确认并分类.实验结果表明该方法可以对静态内存泄漏警报进行有效的分类,显著降低了人工确认的工作量.实验详情参见:http://ssthappy.github.io/memleak/.  相似文献   

2.
面向程序自动修复的缺陷分类方法研究*   总被引:1,自引:0,他引:1  
程序自动修复是近年软件工程的研究热点,但其发展难以满足工业应用的要求。分析了自动修复技术的局限性,引入了缺陷分类的思想,并与正交缺陷分类方法相结合,提出了面向软件自动修复的缺陷分类方法(APRDC)。基于APRDC提出了自动修复技术集成的思想。实验中将基于APRDC与基于随机的自动修复技术集成工具作了比较。实验结果表明基于APRDC方法的自动修复技术的集成提高了修复效果,同时也表明了APRDC方法的有效性。  相似文献   

3.
程序缺陷自动修复是指针对程序中存在的缺陷,自动生成相应的程序补丁,进而使程序恢复正常运行.首先,根据补丁生成方式的不同,将程序缺陷自动修复方法划分为4类,分别为基于搜索的、基于语义的、基于机器学习的以及基于错误报告驱动的程序缺陷自动修复方法.基于搜索的程序缺陷自动修复方法运用启发式算法在搜索空间内通过搜索生成程序补丁;...  相似文献   

4.
修复软件缺陷是软件工程领域一个无法回避的重要问题,而程序自动修复技术则旨在自动、准确且高效地修复存在缺陷的程序,以缓解软件缺陷所带来的问题.近年来,随着深度学习的快速发展,程序自动修复领域兴起了一种使用深度神经网络去自动捕捉缺陷程序和其补丁之间关系的方法,被称为神经程序修复.从在基准测试上被正确修复的缺陷的数量上看,神经程序修复工具的修复性能已经显著超过了非学习的程序自动修复工具.然而,近期有研究发现神经程序修复系统性能的提升可能得益于测试数据在训练数据中存在,即数据泄露.受此启发,为进一步探究神经程序修复系统数据泄露的原因及影响,更公平地评估现有的系统,本文(1)对现有神经程序修复系统进行了系统的分类和总结,根据分类结果定义了神经程序修复系统的数据泄露,并为每个类别的系统设计了数据泄露的检测方法;(2)依照上一步骤中的数据泄露检测方法对现有模型展开了大规模检测,并探究了数据泄露对模型真实性能与评估性能间差异的影响以及对模型本身的影响;(3)分析现有神经程序修复系统数据集的收集和过滤策略,加以改进和补充,在现有流行的数据集上基于改进后的策略构建了一个纯净的大规模程序修复训练数据集,并验证了该数据集避免数据泄露的有效性.实验结果发现:本次调研的10个神经程序修复系统在基准测试集上均出现了数据泄露,其中神经程序修复系统RewardRepair的数据泄露问题较为严重,在基准测试集Defects4J(v1.2.0)上的数据泄露达24处,泄露比例高达53.33%.此外,数据泄露对神经程序修复系统的鲁棒性也造成了影响,调研的5个神经程序修复系统均因数据泄露产生了鲁棒性降低的问题.由此可见,数据泄露是一个十分常见的问题,且会使神经程序修复系统得到不公平的性能评估结果,以及影响系统本身的性质.研究人员在训练神经程序修复模型时,应尽可能避免出现数据泄露,且要考虑数据泄露问题对神经程序修复系统性能评估产生的影响,尽可能更公平地评估系统.  相似文献   

5.
C语言执行效率高,使用范围广泛,然而存在的安全问题也日益突出。内存错误是C程序中常见的缺陷,严重时将导致系统崩溃。传统的人工修复内存错误耗费大量人力物力,并可能在修复过程中引入新的错误。针对这个问题,提出了一种基于跟踪机制的程序自动修复方法。构建包含程序文件中变量作用分布的作用域树;提出基于全局指针的跟踪机制,通过插入全局指针跟踪发生错误的分配内存在程序中的状态;基于全局指针自动生成补丁,利用作用域树定位缺陷修复位置从而来安全地修复内存错误。基于上述过程,实现了原型工具DTSFix,并在开源程序中对其进行了评估。实验结果表明,DTSFix能够有效检测并修复程序中的真实缺陷而且不产生副作用。  相似文献   

6.
基于机器学习的软件修复方法可以降低软件缺陷修复成本,无须人工干涉而自动修复软件缺陷,但不同的缺陷修复软件对不同类型缺陷的修复偏好不明确,且缺乏针对性而无法充分发挥深度学习模型的作用;为此在研究缺陷分类的基础上,研究几种具有代表性基于深度学习的软件自动修复方法对不同类型的缺陷总的修复概率,并比较分析不同学习模型对于修复不同类型缺陷的修复偏好,后续可以更好地进行模型选择以及软件自动修复工作。实验结果表明,基于深度学习的软件自动修复方法倾向于修复IF语句类型、方法语句类型、return语句类型的缺陷。基于自编码器的软件自动修复方法倾向于修复IF语句类型的缺陷,基于LSTM的编码器-解码器的修复方法倾向于修复与方法语句类型相关的缺陷,而基于CNNs的编码器-解码器的修复方法则对IF语句类型、方法语句类型以及return语句类型这三种类型缺陷的修复偏好相差不大。  相似文献   

7.
李斌  贺也平  马恒太 《软件学报》2019,30(2):244-265
程序自动修复技术能够有效地降低软件维护成本,是近年来学术研究的热点问题.待修复程序规约的刻画,对自动修复过程具有至关重要的作用.从规约的角度对程序自动修复问题和技术进行了分析梳理.从待修复程序是否具有完整的程序规约,将现有修复问题分为不完全规约、完全规约和半完全规约这3大类待修复问题.以3类抽象问题为线索,梳理了不同前提假设下修复技术面临的核心问题、问题之间的联系和技术体系中的逻辑关系.分析了不完全规约程序修复问题中高精度补丁生成、规约补全和补丁择优等问题,梳理了完全规约程序修复问题中内存泄漏、资源泄露、并发错误中的数据竞争、原子性违背、顺序违背和死锁,配置错误以及特定性能错误等具体问题及研究进展,整理了半完全规约程序修复问题中多种形式的修复具体问题及研究进展.最后分析了程序自动修复面临的机遇和挑战.  相似文献   

8.
自动程序修复帮助开发者降低人工修复bug的成本.基于测试集的修复方法旨在生成能够通过测试集的代码补丁,以使程序正常运行.回顾了基于测试集的程序修复的现有文献,按照自动修复方法和实证基础两个方面陈述了研究进展.首先,将已有的自动修复方法划分为3类,分别是基于搜索的、基于代码穷举的和基于约束求解的补丁生成方法;其次,细致地描述了程序修复的实证研究基础以及该研究领域中的争议;然后,简要介绍了程序修复的相关技术作为修复方法的补充;最后做出总结,描述了面临的机遇和挑战.  相似文献   

9.
该文介绍了一种C++程序的分层切片方法。通过构造系统程序层依赖图、类层依赖图、方法层依赖图和语句层依赖图,对C++程序进行分层切片,有效地表示了C++中的单重继承、多重继承、多态和动态绑定,该方法比其它C++切片技术更清晰地描述了C++程序中类之间的各种关系和消息传递机制。  相似文献   

10.
分析了C++程序中与继承相关的错误模式,这些错误会引起程序的数据流异常和行为异常.给出了几种常见错误模式的表现形式,结合实例详细分析了这些错误模式的产生原因及特点,重点讨论了容易产生数据流异常的基类与派生类之间的状态一致性问题,得到错误模式的分类.最终达到使用错误模式指导程序分析,检测面向对象程序中的潜在异常,维护系统的安全的目的.  相似文献   

11.
张其良  张昱  周坤 《计算机科学》2017,44(4):16-20, 29
随着程序规模和复杂性的增加,代码重构在改善软件质量、性能以及提高软件的扩展性和维护性等方面至关重要。目前的Eclipse中,C源代码重构工具的函数提取只能处理一些简单的代码,且处理过程需要人工参与,不能自动化处理。为此,提出一种C源代码级别自动化的函数提取方法(CCodeExtractor),它通过指定提取条件,在保证语义一致的前提下,将符合条件的代码片段自动分离成一个单独的函数,并将其放到新文件中,而原代码片段替换成了一个函数调用。为了验证CCodeExtractor的有效性,结合循环分析和优化在实际应用中的广泛应用,在LLVM上实现了一个提取循环的工具,将程序中满足条件的for循环封装成单独的函数。在实验中,使用该工具对6个不同规模的程序进行了测试并且对比了变换前后程序运行的结果。实验结果表明,CCodeExtractor代码提取方法在保证程序语义不变的前提下,适用于不同规模的程序。  相似文献   

12.
廉婷丽  刘坚 《微机发展》2004,14(7):12-15
分析了C 程序中与继承相关的错误模式,这些错误会引起程序的数据流异常和行为异常。给出了几种常见错误模式的表现形式,结合实例详细分析了这些错误模式的产生原因及特点,重点讨论了容易产生数据流异常的基类与派生类之间的状态一致性问题,得到错误模式的分类。最终达到使用错误模式指导程序分析,检测面向对象程序中的潜在异常,维护系统的安全的目的。  相似文献   

13.
廉婷丽  刘坚 《微机发展》2004,14(6):71-74
文中分析了C 程序中与继承相关的错误模式,这些错误会引起程序的数据流异常和行为异常。给出了几种常见错误模式的表现形式,结合实例详细分析了这些错误模式的产生原因及特点,重点讨论了容易产生数据流异常的基类与派生类之间的状态一致性问题,得到错误模式的分类。最终达到使用错误模式指导程序分析,检测面向对象程序中的潜在异常,维护系统的安全的目的。  相似文献   

14.
已有的程序自动化调试研究大多面向工业软件,而学生程序调试具有缺陷数多、类型复杂等特有难点问题,因此,针对学生程序设计应用背景,研究程序自动修复方法,利用模板示例程序指导补丁的演化.改进了遗传编程算法,包括适应度的计算、变异体的生成方式和变异位置及操作的选择方式,使其更加适合修复学生程序.提出了基于示例的静态错误定位方法,能够识别缺陷程序和参考程序差异和可能的变异操作,有效地缩小补丁的搜索空间以提高修复的准确性.提出了基于执行值序列的变量映射方法,以降低变异体的编译错误,提高修复的准确性.在此基础上,设计并实现了示例演化驱动的Java学生程序自动修复系统.实验结果表明,该方法可以修复含有多缺陷学生程序,对于所用的测试集,当学生程序只有1个~2个错误时,修复率将近100%;当含有3个缺陷时,修复率约为70%;当含有4个及以上缺陷时,修复率约为50%.  相似文献   

15.
程序依赖图往往只能根据语句中变量的定义使用关系来判定数据依赖而无法从语义上精准判断,从而容易引入虚假依赖关系,使得缺陷修复的过程中使用错误信息造成修复失败.因此,本文将利用抽象属性对与空对象或空指针有关的虚假依赖进行剪枝,提出基于抽象语义的程序依赖图减少与程序缺陷语义无关的依赖关系分析,以完成空指针引用修复.依据分析获取的依赖关系,在空指针引用的不同修复策略的指导下实现一种多策略的修复方案,在尽可能减小修复副作用的前提下完成空指针引用缺陷的修复.本文利用Defects4J中的空指针引用对实现的修复工具DTSFix进行实验评估,结果显示DTSFix的修复效果远远高于对比工具,证明了方法的有效性.  相似文献   

16.
姜佳君  陈俊洁  熊英飞 《软件学报》2021,32(9):2665-2690
软件缺陷是软件开发和维护过程中不可避免的.随着现代软件规模的不断变大,软件缺陷的数量以及修复难度随之增加,为企业带来了巨大的经济损失.修复软件缺陷,成为了开发人员维护软件质量的重大负担.软件缺陷自动修复技术有希望将开发者从繁重的调试中解脱出来,近年来成为热门的研究领域之一.搜集了 94篇该领域最新的高水平论文,进行了详...  相似文献   

17.
We describe a proof method that characterises a family of proofs corresponding to the synthesis of recursive functional programs. This method provides a significant degree of automation in the construction of recursive programs from specifications, together with correctness proofs. This method makes use of meta-variables to allow successive refinement of the identity of unknowns, and so allows the program and the proof to be developed hand in hand. We illustrate it with parts of a substantial example—the synthesis of a unification algorithm.  相似文献   

设为首页 | 免责声明 | 关于勤云 | 加入收藏

Copyright©北京勤云科技发展有限公司  京ICP备09084417号