The invention relates to an odor detection method of feature attachment code based on depth learning, which belongs to the technical field of computer software. Firstly, the mobile method information and distance of open source software for training are extracted, and the training set is generated. The extracted mobile method information and distance are transformed into training data represented by word vector. The training data are input into convolution neural network to train neural network model. Then, the method information and distance of the movable method of open source software for testing are extracted, and the test data set is generated. All the data in the test data set is converted into the test data expressed by word vector. When the data to be tested is input into the neural network model, the model automatically outputs 0 or 1, where 1 represents the presence of characteristic attachment code odor, 0 represents the absence of. Compared with the existing detection methods, the detection method of the invention greatly improves the average recall rate and the average accuracy rate.
【技术实现步骤摘要】
一种基于深度学习的特征依恋代码异味检测方法
本专利技术涉及一种针对特征依恋的代码异味检测方法,属于计算机软件
技术介绍
代码重构(CodeRefactoring),是指在不改变软件系统外部行为的前提下,改善它的内部结构。代码重构可以通过调整程序代码改善软件的质量、性能,使程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。代码重构是一种经千锤百炼形成的有条不紊的程序整理方法,可以最大限度地减少整理过程中引入错误的概率。本质上说,代码重构就是在代码写好之后改进它的设计。软件重构被广泛应用于通过重构其每部结构来提高软件质量,而其外部行为保持不变。大多数现有的IDE(集成开发环境,IntegratedDevelopmentEnvironment)都为软件重构提供工具支持,例如Eclipse。Eclipse有一个专门用于软件重构的顶级菜单项,提供了大多数流行的软件重构的条目。软件重构的一个关键步骤是确定应用重构的地方。为了便于识别这些地方,人们提出了代码异味的概念。如果一段代码不稳定或者存在一些潜在问题,这段代码往往会包含一些明显的痕迹,类似于食物即将腐坏之前通常会挥发出一些异味一样,因此将这些痕迹称作“代码异味”。在程序开发领域,代码中任何可能导致深层次问题的症状都可以称为代码异味,比如重复代码、长方法、巨类、亲密关系、特征依恋等等。代码异味推动重构的进行,人们分析每个代码异味的特征,以及它们的影响和潜在解决方案(重构)。目前,大多数代码气味检测方法都依赖手动设计的启发式策略将手动定义/选择的代码度量映射到二元预测中,判断有异味或没有异味。但是,手 ...
【技术保护点】
1.一种基于深度学习的特征依恋代码异味检测方法,其特征在于,包括以下步骤:步骤1:提取用于训练的开源软件的可移动方法信息和距离,生成训练集;所述可移动方法是指该方法有可移动的类,并且移动之后未出现编译错误;所述方法信息包括方法名、方法源类名和方法目标类名;所述距离包括方法与源类的距离和方法与目标类的距离;具体实现过程为:首先,检测“方法”是否可以移动到其他类;若可以移动,提取该可移动方法的方法信息和距离,自动生成标签为0,代表不存在特征依恋代码异味,然后移动该方法,并提取移动后方法的方法信息和距离,自动生成标签为1,代表存在特征依恋代码异味,之后执行撤回操作,将移动后方法回归原位,并转向判断下一个方法;若判断结果为该方法不能移动,则丢弃并转向判断下一个方法;当所有方法判断完毕之后,生成所有可移动方法的方法信息和距离的训练集,其中正样本占50%,负样本占50%;步骤2:将步骤1提取出来的可移动方法信息和距离转换为词向量表示的训练数据;神经网络的输入分为两部分:一部分是将训练集中的每个方法名及其对应的源类名和目标类名转换为一个15维的向量表示,另一部分是将距离用一个二维的向量表示;每一个方 ...
【技术特征摘要】
1.一种基于深度学习的特征依恋代码异味检测方法,其特征在于,包括以下步骤:步骤1:提取用于训练的开源软件的可移动方法信息和距离,生成训练集;所述可移动方法是指该方法有可移动的类,并且移动之后未出现编译错误;所述方法信息包括方法名、方法源类名和方法目标类名;所述距离包括方法与源类的距离和方法与目标类的距离;具体实现过程为:首先,检测“方法”是否可以移动到其他类;若可以移动,提取该可移动方法的方法信息和距离,自动生成标签为0,代表不存在特征依恋代码异味,然后移动该方法,并提取移动后方法的方法信息和距离,自动生成标签为1,代表存在特征依恋代码异味,之后执行撤回操作,将移动后方法回归原位,并转向判断下一个方法;若判断结果为该方法不能移动,则丢弃并转向判断下一个方法;当所有方法判断完毕之后,生成所有可移动方法的方法信息和距离的训练集,其中正样本占50%,负样本占50%;步骤2:将步骤1提取出来的可移动方法信息和距离转换为词向量表示的训练数据;神经网络的输入分为两部分:一部分是将训练集中的每个方法名及其对应的源类名和目标类名转换为一个15维的向量表示,另一部分是将距离用一个二维的向量表示;每一个方法名、方法源类名和方法目标类名均为一个标识符;首先将标识符转换为向量表示,将每个标识符的名称分割为一系列的单词<t1,t2,……,tk>,假定标识符遵循驼峰或蛇形命名规则,分割标识符的依据是下划线和大写字母;然后将每个向量转化为词向量;步骤3:将训练数据输入卷积神经网络,训练神经网络模型;具体方式为:构建一个卷积神经网络,第一层为网络输入层,将文本序列展开成词向量的序列,之后连接卷积层、激活层,然后连接全连接层和激活层,激活层采用sigmoid并输出该文本属于某类的概率;将步骤2中得到的词向量作为网络输...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。