【摘 要】
:
程序合成是根据用户意图自动生成相应程序代码的软件开发活动,它是软件工程领域一个重要的研究方向,也是编程理论中最核心的问题之一。基于组件的程序合成是程序合成技术中一个重要分支,它是通过对给定组件库中的组件进行组合来得到目标程序的方法,通常用于生成不含分支循环等控制结构的程序。随着软件系统复杂程度的日益增长,应用程序编程接口(Application Programming Interface,API)
【基金项目】
:
国家自然科学基金重大项目——基于语义的群智化程序构造方法研究(项目号:61690203);
论文部分内容阅读
程序合成是根据用户意图自动生成相应程序代码的软件开发活动,它是软件工程领域一个重要的研究方向,也是编程理论中最核心的问题之一。基于组件的程序合成是程序合成技术中一个重要分支,它是通过对给定组件库中的组件进行组合来得到目标程序的方法,通常用于生成不含分支循环等控制结构的程序。随着软件系统复杂程度的日益增长,应用程序编程接口(Application Programming Interface,API)的使用越来越普及。基于API的程序合成是基于组件的程序合成方法中的一种,它是以API作为组件的方法。已有基于组件的程序合成方法只能生成特定领域的应用,而基于API的程序合成方法能够生成通用编程语言(如Java等)的程序,因此应用范围更广。基于API的程序合成方法生成的程序仅由API的调用语句构成,能够对程序搜索空间进行有效地限定以支持更高效的搜索。然而,基于API的程序合成方法同样面临着诸多挑战:一是程序的搜索空间随着程序的规模成指数级增长,当程序规模上升到一定程度时,程序搜索空间过大导致无法在有限时间内得到解程序;二是程序合成的搜索算法效率低下,大部分采用枚举搜索的方式,缺乏启发式的搜索策略;三是已有方法对控制结构的支持能力有限,大部分只能生成不含分支循环等控制结构的程序,实用性差。近些年来,随着开源软件和开源社区的快速发展,目前在互联网上存在着大量的代码相关数据,我们称这些数据为“代码大数据”。这些数据都是开发人员智慧的结晶,其中蕴含了丰富的软件相关知识。如果能够充分挖掘并利用这些代码大数据中蕴含的知识,将为各种软件开发工作提供很大的支持。本文针对基于API的程序合成方法面临的挑战性问题,提出了基于代码大数据知识的程序高效合成方法。核心思想就是利用互联网中的代码大数据,挖掘并利用其中的知识来支持程序的高效合成工作。本文的主要贡献及创新总结如下:(1)提出了基于API使用概率模型的程序合成方法。该方法利用Javadoc文档以及Stack Overflow论坛中数据,构造了 API的使用概率模型。针对不同的程序合成任务,该模型能够为不同的API赋予一个与任务相关的概率值。在程序空间中搜索时,概率更高的API会被优先使用,从而能够提高程序合成的效率。此外,本文还提出了对程序合成方法进行功能扩展以及性能优化的策略。我们在两个国际最新的高水平程序合成工具上集成了该方法并进行了相关的实验,实验结果表明,该方法能够有效地提高程序合成效率,平均程序合成时间能够减少80%。(2)提出了基于API使用模式挖掘的程序合成方法。该方法利用API使用模式挖掘工具从高质量的Java项目中挖掘得到常用的API使用模式,然后采用了修改Petri网模型以及在合成问题的符号化编码中添加约束的两种策略,将API使用模式的信息与基于API的程序合成方法相结合。两种策略都能有效地加快程序合成过程中程序框架生成的速度,进而提升程序合成的效率。我们通过在包含API使用模式的编程任务上进行了相关实验来对该方法进行评估,实验结果表明,该方法能够有效地提升程序合成的效率,平均程序合成时间能够减少86%。(3)提出了基于控制结构推荐的程序合成方法。该方法构造了一个用于推荐程序控制结构的神经网络模型。给定目标程序的需求规约信息,该模型能够对程序体中可能用到的控制结构类型进行预测,然后利用预测得到的控制结构概率信息来指导程序合成中不同控制结构类型语句的选取。具有更高概率的控制结构类型在生成时有更大被使用的机会,从而能够提高程序合成的效率。我们在包含控制结构的编程任务上进行了相关实验,实验结果表明,该方法能够有效地提升程序合成的效率,平均程序合成时间能够减少19%,候选程序的数目减少了 30%。本文提出的三种程序高效合成方法,充分挖掘并利用了代码大数据中存在的知识来解决基于API的程序合成方法面临的挑战性问题,能够缩小程序合成的搜索空间,提升程序合成的效率,同时能够更好地支持包含控制结构程序的生成,增强其实用性。
其他文献
流线是粒子在流场中流动的轨迹,其绘制效果直观、简洁,因而广泛应用在工程实践中,是流场可视化的重要方法与基础。随着模拟与采集数据精度不断提高,流场数据规模不断增大,传统的流线可视化方法在大规模流场数据的高效可视化中遇到了很大的挑战,流线可视化领域出现了如核外预取并行、流线最优分布、压缩复用等新方法,但仍存在种种不足。为了高效解决流线可视化领域引入的新问题,本文以信息论为基础,主要针对现有流线可视化方
随着计算流体力学(Computational Fluid Dynamics,CFD)的日益成熟和计算机技术的迅猛发展,CFD在飞行器气动性能分析与优化设计、复杂流动机理分析中的作用和地位日益突出。近年来,CFD数值模拟的几何外形、流动机理、物理模型日益复杂,计算规模空前增加,迫切需要通过实现高效并行计算来提高计算效率。图形处理器单元(Graphic Processing Units,GPU)在数据
随着数码相机、智能手机的飞速发展,“拍照”进入了大街小巷、进入了工厂和楼房、进入了大众的生活。人们对数字成像的要求从“看得清”向“看得更清”发展。现代数码相机通过光电传感器捕捉光信号并转换为电信号,通过图像信号处理器将电信号处理成数字图像,最后对数字图像进行压缩和存储。在光电传感器测量光的空间分布过程中,存在各类噪声:与信号相关的拍摄噪声和与信号无关的读取噪声。本文针对数字图像去噪问题相关的图像估
吸气式宽速域巡航飞行器有望使航空运输更加快捷、使空天往返更加经济、使武器装备更具有威慑力。该类飞行器涉及学科广泛且学科间耦合关系复杂,亟需采用多学科设计优化的方法进行一体化研究,减少因学科间设计目标冲突导致的往复设计。然而宽速域巡航飞行器需要新概念气动外形、宽速域高效发动机、先进的控制系统、耐热材料和高强度结构,每个单独的学科都需要采用新的设计理论和方法,这使得该类飞行器的总体设计面临巨大挑战。本
以流动噪声为代表的湍流多尺度问题研究正进入大涡模拟阶段,通常涉及到复杂工程外形和高雷诺数,要求算法兼具高分辨率和高效率。本文以七阶紧致格式为基础,以机体气动噪声及降噪模拟研究需求为导向,紧扣高精度大涡模拟算法和先进混合模型,结合声比拟理论建立了一套适用于亚/跨声速气动噪声问题的预测方法。本文首先对高精度隐式大涡模拟方法开展研究。结合经典显式亚格子模型,对比研究了隐式大涡模拟的模拟能力。研究结果表明
微纳卫星以成本低、体积小、质量轻、集成度高的特点,适合快速响应发射和星座组网,在未来航天发展中具有重要地位。另一方面,受到体积和功率的限制,大部分微纳卫星尚未配备推进系统,极大的限制了其在轨任务的多样性。为了满足微纳卫星执行包括姿态控制、轨道转移等姿轨控任务需求,毫牛级的微型化推进系统得到广泛关注和深入研究。但是,对于低功耗、推力达到10 m N、高集成度的适合微纳卫星编队飞行的微推进系统,目前在
在遥感图像解译中,对图像中的目标进行智能且精准的检测具有较大的应用价值。近年来,深度学习技术,尤其是其中的卷积神经网络凭借其强大的特征学习能力,在计算机视觉等领域得到了广泛应用。因此,将卷积神经网络应用于遥感图像目标检测任务是当前的研究热点之一,并取得了一定的成果。但是基于卷积神经网络的遥感图像目标检测仍然面临着诸多挑战,比如图像中目标形状的多样性、背景的复杂性以及目标姿态的不确定性等。此外,卷积
近年来,随着世界主要大国对外层空间的不断开发,在轨航天器数量持续增多,太空环境日趋复杂,我国的太空资产安全和国土信息安全正面临前所未有的挑战。传统的依托轨道信息的空间目标位置感知已无法满足空间活动的现实需要,亟待提升对高价值空间目标外形结构、三维姿态等精细信息的在轨感知能力。目前,以天地基光学和陆基雷达为代表的成像观测设备为空间目标精细感知提供了数据基础。然而在太空的特殊场景下,观测视角的限制、观
双基地MIMO雷达能够充分利用发射阵列和接收阵列的阵列孔径扩展能力来实现良好的目标参数估计性能,国内外众学者对双基地MIMO雷达进行了深入广泛的研究。针对当前双基地MIMO雷达角度参数估计中面临的短板,本文提出一系列新的方法来实现双基地MIMO雷达中高精度的角度参数估计。本文详细的研究内容和创新点如下:首先,研究了稀疏恢复求解算法在双基地MIMO雷达角度参数估计中的应用。针对常规子空间类算法在小快
界面载流子动力学过程在二维纳米材料异质结电子和光电器件中扮演着重要作用,其中载流子的层间转移方式和能量利用率是影响器件性能的主要因素之一。本文基于自主搭建的显微宽光谱泵浦-探测平台,对二维/三维(2D/3D)混合钙钛矿、石墨烯-过渡金属硫化物(G-TMDs)两类典型的二维材料异质结的超快载流子动力学过程进行了系统的实验和理论研究,深入剖析了不同光子能量激发下电荷和能量转移过程,发现了2D/3D混合