一、从代码重构探讨设计模式(论文文献综述)
吴鸣[1](2021)在《差异代码克隆的检测算法研究及其应用》文中认为代码克隆是软件开发过程中的一种常见现象。程序员为了提高编程效率,经常需要对代码片段进行复制、粘贴和修改,这就产生了代码克隆。具有相对较多修改的代码克隆(即差异代码克隆)广泛存在于软件代码中,并且这些差异代码克隆可以被应用于很多软件工程相关应用,例如软件维护、软件质量评估、代码补全和搜索、软件演化分析、bug检测等。目前大多数已有的克隆检测工具适合于检测几乎完全相同或者非常相似的代码克隆,而差异代码克隆通常是较难被检测出来的。针对以上问题,本文主要研究了差异代码克隆检测的算法理论以及相关应用。具体来说,本文的主要工作内容和创新点如下:1.差异代码克隆检测算法在已有的差异克隆检测方法中,基于文本和关键词的检测方法虽快速但差异克隆检测能力较弱,而对大差异克隆几乎难以发现;基于代码的抽象语法树或程序依赖图的检测方法虽然其差异克隆检测能力较好但计算复杂度高;另外基于机器学习的方法也存在数据集依赖的问题。本文基于生物信息学中序列比对的种子扩展算法思想,设计了一个全新的差异代码克隆检测算法“LVMapper",提出了动态阈值、启发式验证、种子索引等创新的方法。该算法能够有效检测在代码中多处的增加、删除以及分散性修改,同时非常适合于对大规模代码数据集进行检测。在8个真实开源项目数据集上计算测试表明了 LVMapper算法的大差异代码克隆检测能力明显优于已有的先进检测工具(例如SourcererCC、CCAligner、Oreo等),而在业界公认的基准测试代码数据集BigCloneBench上的实验表明LVMapper在传统的级别1至级别3克隆的克隆检测中召回率、精确率与这些工具相当。同时,LVMapper已实现对2.5亿行代码的代码库进行克隆的有效检测,具有优异的可扩放性能。2.差异代码克隆度量分析利用差异克隆检测工具LVMapper对软件系统进行检测,检测出的代码克隆数据规模相比于现有克隆检测工具增加了数倍以上,因此对于大规模代码克隆数据的理解和利用成为了一个具有挑战性的问题。而已有的研究工作提出的度量指标较为单一,且存在可分析的差异克隆数据不足的问题。故亟需研究一套面向大规模代码克隆数据度量分析指标,以更好地用于维护软件和提升软件质量的工作中。本文基于差异代码克隆检测工具,从多个维度创新设计并提出了差异代码克隆的度量分析指标,包括克隆程度度量、克隆结构度量、克隆演化度量的多个角度指标。通过对不同规模(代码行数为6万至280万行不等)、不同语言(Java和C语言)、同一软件的三个不同版本的开源、软件系统进行定量分析,发现这些指标从不同的角度反映出了软件系统的质量。本文将差异克隆度量分析工具与差异克隆检测工具LVMapper集成到一起,使得克隆的检测和度量分析更加便捷与高效,能够为软件开发提供指导和参考。3.基于差异代码克隆的代码补全提示编程效率对软件开发至关重要,然而已有的大部分代码补全工具只能提供下一行语句的补全,少数以Facebook公司开发的Aroma为代表的工具可以补全推荐多行代码,但是它们的不足在于代码结构和特征的提取不够全面,计算成本也较高。基于差异代码克隆检测算法LVMapper,本文进一步提出了一种新的代码补全提示算法CodeWeaver。程序员只需要写出关键代码或代码框架,本算法就可以快速在代码库中通过差异克隆搜索筛选出候选的代码块,自动补全提示出完整的代码块,代码开发的效率和质量会大幅提升。实验结果表明,使用代码库中存在的代码抽样片段作为输入,CodeWeaver的Top-10召回率为96%以上;使用程序问答网站上提取的代码片段作为输入,CodeWeaver对于93%以上的输入都能有效给出推荐补全代码,平均单次代码补全提示时间为0.58秒。此外,它在已有工具采用的公开数据集上表现最佳,优于Aroma等现有工作。综上,本文的三项研究工作可以分为两个方面:第一个是差异代码克隆检测算法的研究,第二个是差异代码克隆检测的下游应用研究。本文的前两项研究工作已应用于与华为公司的合作项目中,相关工具已用于软件开发和优化工作中。
吴鹏[2](2021)在《多形态软件代码同源判定技术研究》文中研究指明近年来,以软件代码为载体的网络安全问题频频发生,软件代码同源判定作为解决网络攻击溯源等安全问题的共性关键技术变得尤为重要,准确定位软件代码来源已成为各方关注的焦点。由于当前软件代码具备运行平台多样、变形手段繁多、表现形式复杂等多形态特点,导致其同源判定极为困难。如何有效的发现多形态软件代码同源,对增强我国网络空间安全的防护力、威慑力至关重要。面向多形态软件代码的同源判定,首先需厘清软件代码同源的概念及边界,实现其定性定量描述;其次需关注软件代码同源特征表示及其处理效率,研究新方法解决其时空开销大的问题;再次需考虑软件代码同源特征损失的应对措施,探索新思路解决其表征困难的问题;最后需针对新形态软件易变形的特点,设计新算法解决其同源判定方法适应性不足的问题。本文围绕多形态软件代码同源判定问题,深入分析了相关领域的技术发展趋势及面临的主要挑战,重点研究了多种形态软件代码的同源判定方法,并基于此构建了原型系统。主要贡献如下:(1)针对大规模软件代码同源判定时空效率不高的问题,提出了基于Motif结构的软件代码同源快速判定方法,通过对大规模软件语义结构图的有效表征,实现了大规模软件代码同源的快速判定。提出了基于函数调用图Motif结构的特征表示方法以及Motif结构提取算法,实现了Motif结构对软件代码函数调用图的表征,并设计了Motif结构及其频率分布的相似度计算方法,实现了软件代码同源快速判定。实验结果表明,本文方法在准确率、鲁棒性及耗时等方面均有明显优势,使其可应用于大规模软件代码同源的快速判定。(2)针对软件代码变形导致同源特征难以表征的问题,提出了基于混合语义的二进制代码同源判定方法,通过对多形态二进制代码潜在同源特征挖掘,实现了多形态二进制代码同源的准确判定。提出了文本语义及结构语义混合的特征表示方法,实现了文本嵌入与图嵌入相结合的混合语义表达,设计了混合语义模型嵌入孪生神经网络框架的方法,实现了二进制代码同源判定模型构建。实验结果表明,本文方法有效提升了二进制代码同源判别效果,该算法在多种测试条件下具有良好的稳定性,可支持多种形态二进制软件代码同源的准确判定。(3)针对新形态软件代码同源判定方法适应性不足的问题,提出了多维度的移动应用同源判定方法,通过对移动应用分区域的特征表示与计算,实现同源移动应用的准确识别。提出了移动应用整体、资源及代码等多维度的特征表示及针对性的处理算法,实现了不同侧面的同源判定,设计了多种相似度算法的联合及优化策略,实现了移动应用同源的准确判定。实验结果表明,本文方法在同源判定准确率和速度等方面具有显着优势,并在真实环境中表现良好,且不依赖有监督数据,可作为移动应用市场安全策略的有效补充。
张生栋[3](2021)在《基于软件版本变更的相关性代码异味研究》文中研究说明代码异味通常指的是代码中存在的问题,是软件设计中的一种不良症状。多数代码异味并非单独存在,它们和其他代码异味存在相关性,存在相关性的异味组合使代码变得更加难以理解,更加容易出现错误倾向,从而加大软件维护难度。在软件的生命周期中,软件的版本是不断变更的,伴随而来的是代码异味的变化,同时相关性代码异味组合也会随之变化,其变化主要集中在相关性代码异味组合的强度和数量两个方面,目前的研究缺乏对这一方面的关注,使开发者难以制定具有高性价比的重构实践策略。针对这一研究方向,本文提出了相关性变量组合的强度模型,对不同版本下的相关性代码异味组合的强度进行研究,同时应用现有的Apriori算法对不同软件版本下的相关性代码异味组合的数量进行实证研究。本文的主要研究内容如下:(1)对代码异味的数量和占比随软件版本变更的变化情况进行研究。(2)对相关性代码异味组合的强度随软件版本变更的变化情况进行研究。提出了基于因子得分和因子解释贡献率的相关性变量组合的强度模型,该模型依托因子分析模型,对相关性代码异味组合的强度进行计算,分析组合变化情况。(3)对相关性代码异味组合的数量随软件版本变更的变化情况进行研究。应用Apriori算法分别在不同版本上进行相关性代码异味规则提取,分析组合变化情况。本文分析了14种代码异味的相关性变化情况,在27个系统中的361个版本上进行实验。实验结果表明:随着软件版本的变更,代码异味的数量整体呈现上升趋势,少数呈现下降趋势;相关性代码异味组合的强度需要视组合而定,并没有明显的一致性变化趋势;相关性代码异味组合的数量整体上是呈现上升趋势,具体到单个代码异味会出现不同的变化趋势;同时还发现Long Method代码异味影响着多种代码异味,重构时应当重点关注该代码异味。
于永胜[4](2020)在《语句包裹变更模式的识别方法研究》文中进行了进一步梳理软件变更过程中,由于软件需求的变化以及软件维护的需要,大量的软件变更代码被提交到软件版本管理系统中,软件代码的结构也变得越来越复杂,使得软件开发人员理解变更代码变得困难,软件变更中掺杂了大量的代码变更模式,将这些模式与其他变更代码分离,将方便理解变更。本文对将一个语句或语句序列移动到一个或多个语法实体中的语句包裹模式进行了研究,做出了如下贡献:首先,由于当前还没有对于语句包裹模式的定义,本文从四个维度对语句包裹模式进行了分类;其次,提出了语句包裹模式的识别算法,算法首先识别发生移动的语句或语句序列,然后通过分析抽象语法树对语句包裹变更模式进行确认;最后,对提出的识别算法进行了实验验证,并对识别出的语句包裹模式进行了分类分析。识别算法首先使用基于文本的差异化分析工具获取代码变更前后版本文件的hunk,然后对存在相似代码行的语句包裹模式候选hunk进行了识别,由于代码克隆检测工具Simian对于语句包裹模式候选hunk的识别结果不理想,提出了基于LCS的语句包裹模式候选hunk识别算法,通过分析代码变更前后版本文件的抽象语法树提出了基于候选hunk和抽象语法树的语句包裹模式识别算法,并提出了语句包裹模式分类算法对识别结果集进行了分类。在四个开源项目数据集上进行了实验验证,实验结果表明基于抽象语法树的语句包裹模式识别算法对于语句包裹模式具有较高的识别率,并使用语句包裹模式分类算法对识别结果进行了分类分析。分类结果表明,语句包裹模式占版本提交总数的4%,发生语句包裹模式最多的3种语法实体为if、try和for语句,分别占语句包裹模式提交总数的81%、14%和6%,语句移动和语句变更的语句包裹模式分别占语句包裹模式提交总数的82%和29%,正向语句包裹模式和逆向语句包裹模式分别占语句包裹模式提交总数的72%和36%,语法实体嵌套的语句包裹模式和语法实体非嵌套的语句包裹模式分别占语句包裹模式提交总数的14%和92%。
朱灿[5](2020)在《基于多粒度分析的代码异味的影响与成因研究》文中认为代码异味是指软件中存在的不良程序设计。随着软件的演化,增加或修改相关功能可能会破坏原有的程序结构,从而引入异味。因此,研究代码异味对提升软件的质量具有重要意义。近年来,研究者们对软件中存在的代码异味进行了多方面的研究。考虑到异味与软件演化之间的相互关联,以及代码贡献者的具体操作是导致异味引入的基本原因,本文从多粒度研究异味产生的影响,并从代码贡献者的角度研究异味被引入的原因,具体从以下三方面开展实证研究:(1)代码异味对文件级软件演化的影响。该研究主要将源文件的操作细致为划分源文件的增加、修改、删除三类基本操作。研究在8个开源项目中展开,以探究异味对文件发生改变的影响。结果表明,包含异味的文件更易被修改;另外,复杂类(ComplexClass)、长参数类(LongParameterList)异味与文件修改的相关性更为显着。(2)代码异味对方法级软件演化的影响。研究首先抽取了每一个源码文件中的方法,从更细粒度上探究异味产生的普遍影响。该研究同样在8个开源项目中展开,结果表明,包含异味的文件,其方法数量以及代码行数都显着高于其他文件;从更细粒度的方法级研究来看,包含异味的文件,其方法更倾向于发生改变。(3)从代码贡献者的角度研究代码异味的成因。研究基于代码贡献者的多方面因素进行探究。结果表明,贡献者数量与异味的引入在一定程度上正相关;而在项目中较为成熟的贡献者可以避免异味的引入。研究从人的因素出发,有助于开发人员了解异味的成因,从而在人员结构方面规避开发过程中可能存在的问题。基于上述研究可知,异味的存在对源代码的修改以及后期的维护产生着不容忽视的影响。而从代码贡献者的角度进行的研究则表明异味的引入与人的因素息息相关。
吴云云[6](2020)在《基于测试驱动的脉冲发生器软件设计》文中提出脉冲发生器是一种可以产生标准脉冲的数字信号源,在现代电子测量技术领域有着非常广泛的应用。随着电子技术的发展,人们对脉冲发生器的要求也越来越高,不但希望脉冲发生器具有优秀的人机交互能力,还希望其拥有更高的技术指标以满足不断提升的技术需求,所以脉冲发生器的软件设计也成为重点关注对象。于是本文就脉冲发生器的软件设计展开详细讨论。本课题采用作为极限编程最佳实践的测试驱动开发(Test-Driven Development,TDD)技术进行脉冲发生器的软件开发,有效地解决了使用传统开发模式进行脉冲发生器软件设计时会遇到的难题,比如瀑布型模式。软件基于嵌入式Linux操作系统,使用跨平台C++图形用户界面应用程序开发框架Qt作为开发工具,并且采用“分层模块化”的设计理念,将软件分为人机交互层、网络传输层、参数管理层以及驱动调用层。每个层面又可划分为多个功能模块,最终将脉冲发生器的软件系统划分为人机交互模块、网络传输模块、参数管理模块、键盘消息处理模块、驱动调用模块。本文在进行软件开发时对软件功能进行了详细的需求分析,遵循测试驱动开发的步骤分别对每个功能模块进行独立设计,在代码编写过程中首先为功能模块设计测试用例,根据测试用例编写测试代码,然后以通过测试为目的编写功能代码,测试通过之后再进行代码重构以消除重复设计,确定功能正确和优化代码之后,再编写下一个测试用例的代码,直到完成整个功能模块的设计。以此循环最终完成整个软件系统的功能设计。本文分别从代码质量、软件测试、开发者心态、用户体验四个方面分析了测试驱动开发技术对软件设计带来的影响,并且使用了一种软件可测性评估方法对软件进行了可测性评估,结果表明软件的可测性良好,该技术能够有效提高软件的可测性和代码质量。测试驱动开发技术能够为脉冲发生器的软件设计带来积极影响。
李家琦[7](2020)在《面向微服务应用的架构异味检测研究》文中进行了进一步梳理微服务架构作为架构领域的研究热点,具有可独立部署服务、按需扩展系统等多种优势。然而,微服务架构设计也存在着许多难题,比如服务划分是否合理、服务间是否存在紧耦合,这些问题极大地影响了微服务应用的可维护性。架构异味是指对架构质量属性存在消极影响的架构设计决策。相关研究表明,反复出现的架构异味给软件系统的维护带来了挑战,识别并分析架构异味能帮助提升系统的可维护性。目前微服务领域的异味研究仅仅关注架构模式和相关技术实践,而缺少对微服务架构本身的架构异味的关注。本研究着力于对微服务架构进行架构异味检测,识别出微服务架构设计存在的问题,从而辅助架构师评估当前微服务架构设计,并通过消除异味提升微服务应用的可维护性。本研究对枢纽型依赖、环依赖和模块化违规三种架构异味进行微服务场景下的定义和形式化,同时提出了对应的异味检测算法,实现了一个异味检测工具MASD以实例化相关异味的具体检测过程。其中,枢纽型依赖和环依赖分析了系统中微服务间的调用依赖关系,而模块化违规则分析了微服务间的隐性依赖关系。通过对微服务间的调用依赖关系和隐性依赖关系进行分析,本研究能够帮助架构师识别微服务间存在的紧耦合。此外,本研究还选取了一个基于微服务的通信软件系统进行案例研究,演示了相关异味检测结果如何辅助架构师识别微服务架构设计存在的问题。该案例研究还对异味检测结果和各微服务的可维护性外在表现进行了相关性分析,结果表明枢纽型依赖与模块化违规都与软件系统的可维护性显着相关,并且,模块化违规与软件系统可维护性的相关性更强。因此,本研究所提出的架构异味检测方法能够帮助架构师发现微服务架构设计中存在问题的微服务,从而评估并改进微服务架构设计。
袁圆[8](2020)在《从局部到全局的代码语义克隆检测方法》文中提出“复制-粘贴-修改”是软件开发过程中的一种常见操作,这一操作通常会带来大量的代码重复,这些相同或相似的代码片段被称为克隆代码。代码克隆检测的目标就是从软件系统中检测出这些克隆代码。代码克隆检测是软件工程领域的一个基础研究课题,在代码缺陷修复、剽窃检测、代码质量评估、恶意软件检测等领域均有所应用,对于工业界的软件维护、重构等工作也有着重要意义。代码克隆包含文本、词汇、语法、语义四个级别,检测难度依次递增。现有的技术针对前三种级别的检测已经取得了很多优秀成果,但是在语义级别的克隆检测上却没有显着成果。本文首先将语义级代码克隆细分为两种类型:局部语义克隆和全局语义克隆。之后,针对这两种类型的语义克隆,分别提出了将传统方法与神经网络相结合的语义级别代码克隆检测方法。本文的检测粒度是程序中的函数,使用控制流图(CFG,Control Flow Graph)作为代码的中间表示。首先构造基于双向LSTM自动编码器的节点特征模型,将动态时间规整(DTW,Dynamic Time Warping)算法与该节点特征模型相结合,检测局部语义克隆;之后构造基于图卷积网络(GCN,Graph Convolutional Network)的CFG特征模型,用CFG特征模型的输出结果检测全局语义克隆。在实验部分,本文首先使用Apache commons imaging、Apache commons math3、Catalano Framework、Colt、Weka这五个开源系统组成一个代码仓库,又构建了一个全局语义克隆数据集。在这两个数据集上进行实验,并与现有方法进行比较。实验结果表明,除了能够检测出前三种类型的克隆以外,本文方法还能够在上述五个系统中分别检测出9-150对真局部语义克隆函数对;另外,当系统中全局语义克隆-非克隆函数的比例不小于1:20时,使用本文提出的全局语义克隆检测方法可以达到0.627以上的召回率,同时具有较高的精确率。这些结果证实了本方法在检测局部和全局语义克隆方面均能取得良好的效果。
位欢欢[9](2020)在《基于层次和代码变更的两阶异味重构推荐策略》文中研究说明为了有效提高软件开发质量,减少由于程序设计和不良编码风格导致的代码异味,亟需对异味处理方式进行改进,即提高重构效率。由于重构的成本较大,且不同的代码异味对软件系统来说并非同等重要,本文提出了两种不同的重构策略,以不同的异味排序方法来着重关注那些有较高概率出现异味的类。此前,对于代码异味排序的研究,主要分为基于种类级(kind)和基于实例级(instance)两类。基于种类级的异味排序主要是对不同异味种类进行研究,没有考虑各种代码异味之间的关系;基于实例级的研究主要是根据单个异味种类的度量指标来进行研究。为了改进上述方法,本文主要研究内容如下所示:(1)FCSP和RCCSP重构策略:基于floss和root-canal重构策略的概念,提出针对不同异味排序方法设计的不同重构策略,分别为FCSP(Floss Code Smell Prioritization)和RCCSP(Root-canal Code Smell Prioritization)。(2)基于种类级的异味排序方法:针对一些研究方法中同层异味之间处理顺序无法确定的情况,提出基于层次的代码异味排序方法。该方法通过对代码异味相关性(关联规则)进行分析,并根据相关性大小进行代码异味排序。(3)基于实例级的异味排序方法:基于代码变更规模与软件易错性之间存在正相关关系,提出基于代码变更指数(CCI)的异味类排序方法。该方法通过对代码变更行数、代码变更原因以及代码变更类的重要程度三个因素对代码变更规模进行定量分析,并根据CCI大小进行异味类排序。本文主要对7种代码异味进行排序,在两个java开源项目中进行实验。通过对上述两种异味排序方法进行同领域方法实验对比,结果表明,基于层次的代码异味排序方法优于随机排序和初始异味排序方法,基于CCI的异味类排序方法优于代码行变更指数排序(CLCI)和基于质量折旧指数规则排序(QDIR)方法,证明了基于上述排序方法的重构策略是有效的。
吕婷婷[10](2020)在《基于逻辑回归的变更障碍代码异味检测的研究》文中提出软件开发技术日益更替,由于开发的周期,项目的复杂性等原因很容易引入代码异味。研究表明代码异味会降低代码的可理解性和可维护性,致使程序出错,从而引发深层次的设计问题。所以代码异味检测对于软件开发和维护尤为重要。目前,很多优秀的方法技术用于代码异味检测。近年来,基于机器学习的检测技术成为较为主流的方法。然而,现有的机器学习方法存在两个局限性:(1)大多数文章只关注常见异味,(2)当用于不常见的异味检测时,所提出的度量是无效的,例如变更障碍代码异味。为了克服这些局限性,本文集中于三种不常见的变更障碍类型代码异味,包括Parallel Inheritance、Shotgun Surgery和Divergent Change,首次系统地研究变更障碍在机器学习领域下的识别预测并分析其特定领域的度量特征。变更障碍代码异味是指代码的一处变更会影响到许多类。而变更障碍的检测有助于提高软件代码的质量,增强代码的可读性,减轻后期维护的工作量,提高工作效率,并帮助开发人员发现可能在将来的维护工作中造成不良影响的设计问题。本文提出了基于逻辑回归的变更障碍检测算法,通过数据提取,数据预处理,数据存储和模型构建及预测来预测代码异味。首先,提取跟异味本身特性相关的特定领域的度量特征,对这些特征执行数据预处理。利用经过处理的度量构建逻辑回归模型,并对模型参数进行优化,选择最佳参数配置的模型训练数据。最后,采用训练好的模型对待检测的代码进行预测,得到异味检测反馈结果。经实验验证,该方法具有高达81.8%-100%的精确率和召回率,比现有算法提高了10-30个百分点。此外,本文还分析了所用度量的相关性和重要性,发现特定领域的度量特征对于检测变更障碍代码异味非常重要,能够使模型达到较好的性能,进而验证了度量对于异味识别的关键性作用。本科研成果有利于帮助开发者更好地设计检测此类代码异味的工具。
二、从代码重构探讨设计模式(论文开题报告)
(1)论文研究背景及目的
此处内容要求:
首先简单简介论文所研究问题的基本概念和背景,再而简单明了地指出论文所要研究解决的具体问题,并提出你的论文准备的观点或解决方法。
写法范例:
本文主要提出一款精简64位RISC处理器存储管理单元结构并详细分析其设计过程。在该MMU结构中,TLB采用叁个分离的TLB,TLB采用基于内容查找的相联存储器并行查找,支持粗粒度为64KB和细粒度为4KB两种页面大小,采用多级分层页表结构映射地址空间,并详细论述了四级页表转换过程,TLB结构组织等。该MMU结构将作为该处理器存储系统实现的一个重要组成部分。
(2)本文研究方法
调查法:该方法是有目的、有系统的搜集有关研究对象的具体信息。
观察法:用自己的感官和辅助工具直接观察研究对象从而得到有关信息。
实验法:通过主支变革、控制研究对象来发现与确认事物间的因果关系。
文献研究法:通过调查文献来获得资料,从而全面的、正确的了解掌握研究方法。
实证研究法:依据现有的科学理论和实践的需要提出设计。
定性分析法:对研究对象进行“质”的方面的研究,这个方法需要计算的数据较少。
定量分析法:通过具体的数字,使人们对研究对象的认识进一步精确化。
跨学科研究法:运用多学科的理论、方法和成果从整体上对某一课题进行研究。
功能分析法:这是社会科学用来分析社会现象的一种方法,从某一功能出发研究多个方面的影响。
模拟法:通过创设一个与原型相似的模型来间接研究原型某种特性的一种形容方法。
三、从代码重构探讨设计模式(论文提纲范文)
(1)差异代码克隆的检测算法研究及其应用(论文提纲范文)
摘要 |
ABSTRACT |
第1章 绪论 |
1.1 研究背景及意义 |
1.2 问题提出及发展 |
1.2.1 差异代码克隆概念 |
1.2.2 差异代码克隆检测技术 |
1.2.3 差异代码克隆应用 |
1.3 本文研究内容 |
1.3.1 差异代码克隆检测 |
1.3.2 差异代码克隆度量分析 |
1.3.3 基于差异代码克隆的代码补全提示 |
1.4 论文组织 |
第2章 相关概念及研究现状 |
2.1 术语和概念 |
2.1.1 代码克隆概念 |
2.1.2 代码克隆分类 |
2.1.3 克隆检测粒度 |
2.2 差异代码克隆检测方法 |
2.2.1 非语义方法 |
2.2.2 语义方法 |
2.2.3 机器学习方法 |
2.3 差异代码克隆相关应用 |
2.3.1 代码克隆度量分析 |
2.3.2 代码补全提示 |
2.4 本章小结 |
第3章 差异代码克隆检测方法 |
3.1 研究问题 |
3.2 研究动机 |
3.3 差异克隆检测算法 |
3.3.1 算法框架 |
3.3.2 词法分析过程设计 |
3.3.3 索引构建过程设计 |
3.3.4 克隆检测过程设计 |
3.4 实验结果及讨论 |
3.4.1 参数选取实验 |
3.4.2 大差异代码克隆检测实验 |
3.4.3 一般克隆检测实验 |
3.4.4 扩放性实验 |
3.5 本章小结 |
第4章 差异代码克隆度量分析 |
4.1 问题的提出 |
4.2 差异代码克隆度量分析算法 |
4.2.1 度量指标设计 |
4.2.2 度量算法实现 |
4.3 实验结果及讨论 |
4.3.1 不同软件的对比分析实验 |
4.3.2 不同版本的软件对比分析实验 |
4.4 本章小结 |
第5章 基于差异代码克隆的代码补全提示 |
5.1 问题的提出 |
5.2 代码补全提示算法 |
5.2.1 算法框架 |
5.2.2 预处理过程设计 |
5.2.3 克隆搜索过程设计 |
5.2.4 打分排序过程设计 |
5.3 实验结果及讨论 |
5.3.1 代码库的收集构建 |
5.3.2 召回率检测实验 |
5.3.3 性能检测实验 |
5.3.4 与已有工作的对比实验 |
5.3.5 时间性能实验 |
5.4 本章小结 |
第6章 总结 |
6.1 本文工作 |
6.2 本文贡献与创新之处 |
6.3 下一步工作 |
参考文献 |
致谢 |
在读期间发表的学术论文与取得的研究成果 |
在读期间参与的研究项目 |
(2)多形态软件代码同源判定技术研究(论文提纲范文)
摘要 |
Abstract |
第1章 绪论 |
1.1 研究背景与意义 |
1.2 研究现状 |
1.2.1 软件代码同源判定研究 |
1.2.2 软件代码相似度研究 |
1.2.3 软件代码抄袭及克隆研究 |
1.3 研究面临的挑战 |
1.4 研究内容及创新 |
1.4.1 论文研究内容 |
1.4.2 论文主要创新 |
1.5 论文组织结构 |
第2章 软件代码同源理论模型 |
2.1 软件代码同源定义 |
2.2 软件代码同源模型 |
2.3 软件代码同源特征模型 |
2.4 软件代码相似度度量模型 |
2.5 软件代码同源判别模型 |
2.6 本章小结 |
第3章 基于Motif结构的大规模软件代码同源快速判定方法 |
3.1 引言 |
3.2 方法框架描述 |
3.2.1 总体框架 |
3.2.2 软件Motif结构及频率分布 |
3.3 基于软件Motif结构的同源判定算法 |
3.3.1 函数调用图构建 |
3.3.2 Motif结构构建 |
3.3.3 软件代码同源判定 |
3.4 实验评估 |
3.4.1 实验数据集 |
3.4.2 源代码同源实验 |
3.4.3 可执行代码同源实验 |
3.4.4 混淆代码同源判定实验 |
3.4.5 方法对比实验 |
3.5 本章小结 |
第4章 基于混合语义的二进制代码同源判定方法 |
4.1 引言 |
4.2 方法框架描述 |
4.2.1 总体框架 |
4.2.2 语义结构图表征 |
4.3 混合语义的同源判定算法 |
4.3.1 文本语义表征 |
4.3.2 结构语义表征 |
4.3.3 端到端孪生网络模型 |
4.4 实验评估 |
4.4.1 实验数据集 |
4.4.2 同源二进制代码实验 |
4.4.3 不同源二进制代码实验 |
4.4.4 恶意软件家族实验 |
4.4.5 方法对比实验 |
4.5 本章小结 |
第5章 基于多维相似度的移动应用同源判定方法 |
5.1 引言 |
5.2 方法框架描述 |
5.2.1 总体框架 |
5.2.2 联合策略原理 |
5.3 多维相似度判定算法 |
5.3.1 基于LSH头部索引相似度 |
5.3.2 基于Minhash相似度 |
5.3.3 基于Motif结构相似度 |
5.3.4 多维度算法联合规则 |
5.4 实验评估 |
5.4.1 实验数据集 |
5.4.2 多维度算法有效性实验 |
5.4.3 多维度算法时间开销实验 |
5.4.4 方法对比实验 |
5.4.5 恶意软件家族及应用市场环境验证 |
5.5 本章小结 |
第6章 软件代码同源判定原型系统 |
6.1 引言 |
6.2 原型系统架构 |
6.2.1 需求分析 |
6.2.2 系统架构选型 |
6.3 原型系统功能 |
6.3.1 原型系统框架 |
6.3.2 基于Motif结构的同源判定模块 |
6.3.3 基于混合语义的同源判定模块 |
6.3.4 基于多维相似度的同源判定模块 |
6.4 原型系统实现 |
6.5 本章小结 |
第7章 总结和展望 |
7.1 论文的主要工作及贡献 |
7.2 下一步工作开展 |
参考文献 |
攻读学位期间取得的研究成果 |
致谢 |
(3)基于软件版本变更的相关性代码异味研究(论文提纲范文)
摘要 |
Abstract |
第1章 绪论 |
1.1 研究背景及目的 |
1.2 国内外研究现状 |
1.2.1 代码异味检测 |
1.2.2 代码异味相关性 |
1.2.3 代码异味排序 |
1.2.4 代码异味重构 |
1.3 课题来源 |
1.4 主要研究工作 |
1.5 章节安排 |
第2章 相关知识 |
2.1 代码异味 |
2.1.1 类级别的代码异味 |
2.1.2 方法级别的代码异味 |
2.1.3 类间的代码异味 |
2.1.4 类中的代码异味 |
2.2 因子分析 |
2.2.1 因子分析概述 |
2.2.2 因子分析数学模型 |
2.2.3 因子提取 |
2.2.4 因子旋转 |
2.2.5 因子得分 |
2.3 关联规则 |
2.3.1 Apriori算法概述 |
2.3.2 Apriori算法原理 |
2.4 本章小结 |
第3章 研究方法构建及数据分析 |
3.1 总体设计 |
3.2 研究的代码异味和系统 |
3.3 代码异味随版本变更的变化 |
3.3.1 代码异味数量随版本变更的变化 |
3.3.2 代码异味占比随版本变更的变化 |
3.4 本章小结 |
第4章 相关性代码异味组合强度随版本变更的变化 |
4.1 相关性变量组合强度模型 |
4.1.1 提出问题 |
4.1.2 问题分析 |
4.1.3 相关性变量组合强度模型的建立 |
4.2 相关性代码异味组合强度计算 |
4.2.1 实验设计 |
4.2.2 实验结果 |
4.2.3 验证实验 |
4.2.4 比较分析 |
4.3 本章小结 |
第5章 相关性代码异味组合数量随版本变更的变化 |
5.1 实验设计 |
5.2 相关性代码异味组合数量 |
5.3 验证实验 |
5.4 比较分析 |
5.5 本章小结 |
第6章 总结与展望 |
6.1 总结 |
6.2 展望 |
参考文献 |
附录 |
攻读学位期间取得的研究成果 |
致谢 |
(4)语句包裹变更模式的识别方法研究(论文提纲范文)
摘要 |
ABSTRACT |
第1章 绪论 |
1.1 研究背景和意义 |
1.2 本文研究内容 |
1.3 文章结构 |
第2章 国内外研究现状 |
2.1 代码变更模式 |
2.1.1 重构模式 |
2.1.2 bug修复模式 |
2.2 语句包裹变更模式的研究 |
2.3 代码差异化分析 |
2.3.1 文本型代码差异化分析 |
2.3.2 树型代码差异化分析 |
2.4 小结 |
第3章 语句包裹模式识别方法概述 |
3.1 什么是语句包裹模式 |
3.1.1 语句包裹模式分类 |
3.1.2 语句包裹模式与抽取函数的区别 |
3.2 识别方法概述 |
3.2.1 识别算法流程 |
3.2.2 hunk集的获取 |
3.2.3 筛选候选hunk |
3.2.4 基于抽象语法树的语句包裹模式识别 |
3.3 小结 |
第4章 候选hunk的识别 |
4.1 包含语句包裹模式的候选hunk特征 |
4.2 基于LCS的候选hunk识别 |
4.2.1 算法思想 |
4.2.2 基于LCS的候选hunk识别算法 |
4.3 实验结果及分析 |
4.4 小结 |
第5章 语句包裹模式的识别 |
5.1 语句包裹模式识别 |
5.1.1 算法思想 |
5.1.2 语句包裹模式识别算法 |
5.2 实验结果及分析 |
5.3 小结 |
第6章 语句包裹模式分类分析 |
6.1 语句包裹模式分类 |
6.1.1 算法思想 |
6.1.2 语句包裹模式分类算法 |
6.2 语句包裹模式分类结果分析 |
6.2.1 语句包裹模式在四个项目中的占比 |
6.2.2 四个项目中语句包裹模式的分类分析 |
6.3 小结 |
第7章 结论 |
参考文献 |
致谢 |
在学期间主要科研成果 |
一、发表学术论文 |
(5)基于多粒度分析的代码异味的影响与成因研究(论文提纲范文)
中文摘要 |
Abstract |
第一章 绪论 |
1.1 研究背景与意义 |
1.2 研究现状 |
1.3 研究内容 |
1.4 组织结构 |
第二章 背景知识与相关工作 |
2.1 代码异味 |
2.1.1 代码异味的定义 |
2.1.2 代码异味检测工具 |
2.2 代码异味相关研究 |
2.2.1 代码异味与软件演化的关联关系 |
2.2.2 导致代码异味引入的因素 |
2.2.3 代码异味与实证研究 |
2.3 本章小结 |
第三章 代码异味对文件级软件演化的影响 |
3.1 研究问题 |
3.2 研究数据集A |
3.3 研究方法 |
3.3.1 实验设置 |
3.3.2 数据分析方法 |
3.4 实验结果与分析 |
3.4.1 代码异味密度及活跃度信息 |
3.4.2 代码异味与不同文件变化类型之间的相互关联 |
3.4.3 特定类型的代码异味与文件变化之间的相互关联 |
3.4.4 异味文件之间的重叠 |
3.5 本章小结 |
第四章 代码异味对方法级软件演化的影响 |
4.1 研究问题 |
4.2 研究数据集B |
4.3 数据预处理 |
4.3.1 源文件中方法的抽取 |
4.3.2 建立源文件方法改变信息向量 |
4.4 研究方法 |
4.5 实验结果与分析 |
4.5.1 异味与非异味文件中方法的数量、代码行数对比 |
4.5.2 异味与源文件方法变化之间的相互关联 |
4.6 本章小结 |
第五章 基于代码贡献者对异味成因的研究 |
5.1 研究问题 |
5.2 数据预处理 |
5.2.1 确定代码异味的存在形式 |
5.2.2 确立潜在引入异味的方法 |
5.3 研究方法 |
5.3.1 实验设置 |
5.3.2 数据分析方法 |
5.4 实验结果与分析 |
5.4.1 文件级代码贡献者数量对比 |
5.4.2 方法级代码贡献者的多因素分析 |
5.4.3 方法级代码贡献者的单因素分析 |
5.5 本章小结 |
第六章 总结与展望 |
6.1 总结 |
6.2 展望 |
参考文献 |
攻读硕士学位期间公开发表(录用)的论文及参与项目 |
致谢 |
(6)基于测试驱动的脉冲发生器软件设计(论文提纲范文)
摘要 |
abstract |
第一章 绪论 |
1.1 研究背景及意义 |
1.2 研究现状及趋势 |
1.2.1 脉冲发生器 |
1.2.2 测试驱动开发技术 |
1.3 论文主要内容及章节安排 |
第二章 测试驱动开发与敏捷开发 |
2.1 敏捷开发 |
2.2 极限编程 |
2.3 测试驱动开发 |
2.3.1 测试驱动开发简介 |
2.3.2 测试驱动开发的过程 |
2.3.3 测试驱动开发的测试技术 |
2.4 本章小结 |
第三章 脉冲发生器软件的设计 |
3.1 脉冲发生器软件需求分析 |
3.2 软件设计的关键问题分析 |
3.3 脉冲发生器软件总体设计 |
3.3.1 系统总体结构设计 |
3.3.2 系统平台与开发工具选择 |
3.3.3 软件工作流程设计 |
3.3.4 软件层次结构划分 |
3.4 脉冲发生器软件模块设计及实现 |
3.4.1 交互模块设计 |
3.4.2 网络传输模块设计 |
3.4.3 参数管理模块设计 |
3.4.4 键盘消息处理模块设计 |
3.4.5 仪器驱动调用模块设计 |
3.5 本章小结 |
第四章 测试驱动开发的应用 |
4.1 脉冲发生器软件环境搭建 |
4.1.1 嵌入式Linux开发环境搭建 |
4.1.2 Qt开发环境搭建 |
4.1.3 开发板系统部署 |
4.2 测试驱动开发框架 |
4.2.1 单元测试 |
4.2.2 Qt单元测试框架 |
4.3 测试驱动开发具体设计 |
4.3.1 软件框架设计 |
4.3.2 参数管理模块设计 |
4.3.3 其它模块的设计 |
4.4 本章小结 |
第五章 脉冲发生器软件性能评估 |
5.1 测试驱动开发的影响 |
5.1.1 代码质量方面 |
5.1.2 软件测试方面 |
5.1.3 开发者心态方面 |
5.1.4 用户体验方面 |
5.2 软件可测性评估 |
5.2.1 故障被执行的概率 |
5.2.2 数据状态感染概率 |
5.2.3 被感染数据状态传播到输出的概率 |
5.2.4 软件故障可测性 |
5.3 软件功能验证 |
5.4 本章小结 |
第六章 总结与展望 |
致谢 |
参考文献 |
硕士期间取得的研究成果 |
(7)面向微服务应用的架构异味检测研究(论文提纲范文)
摘要 |
abstract |
第一章 绪论 |
1.1 研究背景 |
1.2 研究现状 |
1.2.1 架构异味 |
1.2.2 微服务 |
1.2.3 微服务架构异味 |
1.2.4 小结 |
1.3 主要工作 |
1.4 论文的组织结构 |
第二章 理论与技术支持 |
2.1 架构异味 |
2.1.1 基本概念 |
2.1.2 检测方法和工具 |
2.2 架构恢复 |
2.2.1 基本概念和方法 |
2.2.2 微服务架构恢复 |
2.3 技术支持 |
2.4 本章小结 |
第三章 架构异味检测方法 |
3.1 微服务架构形式化 |
3.2 微服务架构恢复 |
3.3 架构异味的定义和检测方法 |
3.3.1 枢纽型依赖(Hub-Like Dependency,HD) |
3.3.2 环依赖(Cyclic Dependency,CD) |
3.3.3 模块化违规(Modularity Violation,MV) |
3.4 本章小结 |
第四章 架构异味检测工具 |
4.1 需求分析 |
4.2 后端设计与实现 |
4.2.1 基础模块 |
4.2.2 架构异味检测模块 |
4.3 前端演示 |
4.4 工具测试 |
4.5 本章小结 |
第五章 案例研究 |
5.1 案例分析 |
5.2 可维护性外在表现 |
5.3 数据收集 |
5.3.1 代码仓 |
5.3.2 微服务 |
5.3.3 Git提交信息 |
5.3.4 版本信息 |
5.4 检测结果分析 |
5.4.1 枢纽型依赖 |
5.4.2 环依赖 |
5.4.3 模块化违规 |
5.5 相关性分析 |
5.6 本章小结 |
第六章 总结与展望 |
6.1 总结 |
6.2 工作展望 |
参考文献 |
简历与科研成果 |
致谢 |
(8)从局部到全局的代码语义克隆检测方法(论文提纲范文)
摘要 |
Abstract |
1 绪论 |
1.1 克隆检测的研究背景 |
1.1.1 克隆代码的产生原因及优缺点 |
1.1.2 克隆检测的定义及应用场景 |
1.1.3 四种克隆类型 |
1.1.4 通用的克隆检测流程 |
1.1.5 传统的克隆检测技术 |
1.1.6 基于深度学习的克隆检测技术 |
1.2 语义克隆检测的研究背景 |
1.2.1 语义克隆检测的研究意义 |
1.2.2 语义克隆检测的研究现状 |
1.3 研究思路概述 |
1.3.1 语义克隆类型划分 |
1.3.2 本文方法概述 |
1.4 本文主要贡献及章节安排 |
2 相关基础知识 |
2.1 TXL程序语言转换 |
2.1.1 语法定义 |
2.1.2 转换规则 |
2.2 动态时间规整算法 |
2.3 神经网络模型 |
2.3.1 自动编码器 |
2.3.2 双向LSTM模型 |
2.3.3 深度学习中的卷积 |
2.3.4 图结构上的卷积:图卷积理论 |
3 基于双向LSTM自动编码器+DTW算法的局部语义克隆检测 |
3.1 由源代码生成控制流图 |
3.1.1 源代码函数提取 |
3.1.2 控制流图生成 |
3.2 基于双向LSTM自动编码器的节点特征模型 |
3.3 基于动态时间规整算法的局部语义克隆检测 |
3.4 实验验证 |
3.5 基于本文方法实现的代码克隆检测工具 |
3.6 本章小结 |
4 基于带注意力机制的图卷积网络的全局语义克隆检测 |
4.1 基于图卷积网络的CFG特征模型 |
4.2 基于CFG特征模型的全局语义克隆检测 |
4.3 实验验证 |
4.4 本章小结 |
结论 |
参考文献 |
攻读硕士学位期间发表学术论文情况 |
致谢 |
(9)基于层次和代码变更的两阶异味重构推荐策略(论文提纲范文)
摘要 |
Abstract |
第1章 绪论 |
1.1 研究背景及目的 |
1.2 国内外研究现状 |
1.2.1 代码异味检测 |
1.2.2 代码异味相关性 |
1.2.3 代码异味排序 |
1.2.4 代码重构 |
1.3 课题来源 |
1.4 论文研究内容 |
1.5 论文结构 |
第2章 相关知识 |
2.1 代码异味 |
2.2 代码异味相关性 |
2.3 代码变更与软件易错性 |
2.4 代码异味排序 |
2.5 代码异味重构 |
2.6 本章小结 |
第3章 基于层次和代码变更的异味排序重构策略 |
3.1 重构策略设计 |
3.2 FCSP重构策略 |
3.3 RCCSP重构策略 |
3.4 本章小结 |
第4章 基于层次的代码异味排序方法 |
4.1 代码异味处理顺序 |
4.2 代码异味处理顺序改进 |
4.3 层次代码异味排序方法 |
4.4 实验设置与结果分析 |
4.4.1 实验设置 |
4.4.2 代码异味检测结果 |
4.4.3 层次排序与随机排序实验对比结果 |
4.4.4 层次排序与初始异味排序实验对比结果 |
4.5 本章小结 |
第5章 代码变更指数的异味类排序方法 |
5.1 异味类排序方法设计 |
5.2 代码变更指数计算 |
5.3 基于代码变更指数异味类排序 |
5.4 实验设置与实验结果 |
5.4.1 实验设置 |
5.4.2 CCI计算结果 |
5.4.3 基于CCI与 CLCI异味类排序的对比实验 |
5.4.4 基于CCI与 QDIR异味类排序的对比实验 |
5.5 本章小结 |
第6章 结论与展望 |
6.1 结论 |
6.2 未来工作展望 |
参考文献 |
攻读学位期间取得的研究成果 |
(10)基于逻辑回归的变更障碍代码异味检测的研究(论文提纲范文)
摘要 |
Abstract |
1 绪论 |
1.1 研究背景与意义 |
1.2 本文主要研究内容 |
1.3 本文主要研究动机 |
1.4 本文主要研究贡献 |
1.5 论文组织结构 |
2 相关工作 |
2.1 代码异味的实证研究 |
2.2 代码异味的检测方法 |
2.2.1 基于规则的检测方法 |
2.2.2 基于搜索的检测方法 |
2.2.3 基于文本结构的检测方法 |
2.2.4 基于概率的检测方法 |
2.2.5 基于可视化的检测方法 |
2.2.6 基于工具的检测方法 |
2.2.7 基于机器学习的检测方法 |
2.3 代码异味的重构 |
3 基于逻辑回归的代码异味检测框架 |
3.1 度量特征 |
3.2 数据预处理 |
3.3 基于逻辑回归的变更障碍检测算法 |
3.3.1 逻辑回归算法 |
3.3.2 基于逻辑回归的变更障碍检测算法 |
3.4 参数优化 |
4 算法的实现 |
4.1 数据提取 |
4.2 数据预处理 |
4.3 数据存储 |
4.4 模型构建及预测 |
4.5 实验工具调用 |
5 实验评估 |
5.1 实验数据集 |
5.2 对比算法 |
5.3 评估指标 |
5.4 研究问题 |
5.5 实验评估与结果分析 |
5.5.1 运行时间比较 |
5.5.2 算法比较 |
5.5.3 度量比较 |
5.5.4 度量相关性评估 |
5.5.5 度量重要性评估 |
5.5.6 跨项目检测 |
5.6 有效性威胁 |
结论 |
参考文献 |
攻读硕士学位期间发表学术论文情况 |
致谢 |
四、从代码重构探讨设计模式(论文参考文献)
- [1]差异代码克隆的检测算法研究及其应用[D]. 吴鸣. 中国科学技术大学, 2021(09)
- [2]多形态软件代码同源判定技术研究[D]. 吴鹏. 四川大学, 2021(01)
- [3]基于软件版本变更的相关性代码异味研究[D]. 张生栋. 上海师范大学, 2021(07)
- [4]语句包裹变更模式的识别方法研究[D]. 于永胜. 齐鲁工业大学, 2020(02)
- [5]基于多粒度分析的代码异味的影响与成因研究[D]. 朱灿. 苏州大学, 2020(02)
- [6]基于测试驱动的脉冲发生器软件设计[D]. 吴云云. 电子科技大学, 2020(08)
- [7]面向微服务应用的架构异味检测研究[D]. 李家琦. 南京大学, 2020(02)
- [8]从局部到全局的代码语义克隆检测方法[D]. 袁圆. 大连理工大学, 2020(02)
- [9]基于层次和代码变更的两阶异味重构推荐策略[D]. 位欢欢. 上海师范大学, 2020(07)
- [10]基于逻辑回归的变更障碍代码异味检测的研究[D]. 吕婷婷. 大连理工大学, 2020(02)