一种针对日志记录的变量推荐方法技术

技术编号:34274252 阅读:21 留言:0更新日期:2022-07-24 16:46
本发明专利技术公开了一种针对日志记录的变量推荐方法,首先使用图神经网络提取图结构信息,然后融合图结构信息和利用预训练模型提取的语义信息去推荐日志变量。针对目前对日志记录语句中的变量进行推荐的研究工作既少且效果未达到理想水平,并且缺少帮助开发人员编写高质量日志记录语句的问题,本方法能直接帮助开发人员编写高质量日志记录语句,以解决源代码中记录的日志变量不合理的技术问题。中记录的日志变量不合理的技术问题。中记录的日志变量不合理的技术问题。

A variable recommendation method for logging

【技术实现步骤摘要】
一种针对日志记录的变量推荐方法


[0001]本专利技术涉及日志挖掘
,更特别地说,是指一种针对日志记录的变量推荐方法。

技术介绍

[0002]参见图1所示的自动日志分析流程图中,软件运行(即运行源代码)时通过日志生成子系统产生日志(log),所述日志在日志压缩子系统中被压缩,输出压缩后日志;日志解析子系统中可以对所述日志或所述压缩后日志解析为日志模板集;最后在日志挖掘子系统中挖掘日志特征。通常来说,日志(log)由三部分组成—日志级别,静态(语境化)文本和动态内容(日志变量所记录的软件运行时状态)。一些实证研究表明,在研究的开源系统中,超过25%的日志语句更改与记录的变量相关。一方面,在日志记录语句(logging statement)里记录太多的日志变量(log variable)可能会导致性能开销以及阻止开发者放大(或聚焦)在真正的问题上。另一方面,缺少记录重要的日志变量(log variable)会增加开发人员执行许多纠正性软件维护任务的负担。例如,开发人员可能无法很好地理解影响已部署系统的问题的根本原因,因为没有统一的记录日志的日志变量(log variable)工具。这突出表明需要一种工具,可以为开发人员推荐日志变量(log variable),以帮助他们编写高质量的日志记录语句(logging statement)。参见图2所示,运行的源代码中至少存在有日志记录语句(logging statement),所述的日志记录语句中可能会存在有日志变量(log variable)。从日志(log)中表征的日志变量(log variable)来获取软件运行时的状态。
[0003]图是一种数据结构,可对一组对象(节点)及其关系(边)进行建模。近年来,由于图的强大的表达能力,利用机器学习分析图的研究受到越来越多的关注,也就是图可以用来表示跨越不同领域的大量的系统,包括社会科学(社交网络),自然科学(物理系统和蛋白质-蛋白质相互作用网络),知识图谱和许多其他研究领域。作为用于机器学习的独特的非欧氏(欧几里得)数据结构,图分析着重于节点分类,链接预测和聚类。图神经网络(GNN)是在图域上运行的基于深度学习的方法,它基于CNN和图嵌入来集合图结构中的信息。在标准神经网络中,依赖信息仅被视为节点的特征。但是,GNN可以通过图结构进行传播,而不必将其用作特征的一部分。由于其令人信服的性能和高解释性,GNN最近已成为一种广泛应用的图分析方法。
[0004]最近,大量的工作表明大型语料库上的预训练模型(PTM)可以学习通用语言表示形式,这对于下游自然语言处理(NLP)任务非常有益,并且可以避免从头开始训练新模型。第一代预训练模型旨在学习好的单词嵌入,例如Skip

Gram和GloVe。由于下游任务不再需要这些模型本身,因此它们的计算效率通常很弱。尽管这些经过预训练的嵌入可以捕获单词的语义,但是它们没有上下文,并且无法捕获上下文中的高级概念,例如歧义消除,句法结构,语义角色,复指。第二代预训练模型着重学习语境化词嵌入,例如CoVe,ELMo,OpenAI GPT和BERT。这些学好的模型仍然需要通过下游任务来表示上下文中的单词。其中,BERT更是在诞生之初就横扫了11项NLP任务。使用诸如BERT这类预训练模型或者改进预训练模型
用于日志记录语句(logging statement)的变量推荐将会是一件有意义的事情。

技术实现思路

[0005]针对目前日志生成子系统无法通过对日志记录语句来获取日志变量的问题,本专利技术提出了一种针对日志记录的变量推荐方法,首先使用图神经网络提取图结构信息,然后融合图结构信息和利用预训练模型提取的日志语义信息去推荐日志变量。本方法能直接帮助开发人员编写高质量日志记录语句,以解决源代码中记录的日志变量不合理的技术问题。
[0006]本专利技术的一种针对日志记录的变量推荐方法,包括有如下步骤:
[0007]步骤一,从源代码中获取每个代码段中标志对应的标签;
[0008]步骤二,构建代码段异构图;
[0009]步骤三,计算标志的标签取值;
[0010]步骤四,编码代码段的图结构信息;
[0011]步骤五,基于BERT的图结构信息融合;
[0012]本专利技术针对日志记录的变量推荐方法的优点在于:
[0013]①
首先,挑选优质开源Java项目的源代码,利用Java开发工具(JDT)并构建多条日志变量推荐提取规则,从中准确高效地提取并处理进行变量推荐所需要的各类标志的标签。然后,将提取处理后的数据转化可供后续模型使用的数据集。
[0014]②
本专利技术提出了一个新的推荐应该日志记录哪些日志变量的方法,在利用代码段的语义信息的同时还利用代码段的结构信息来进行变量推荐。具体来说,本专利技术模型能高效地去编码语义信息,并且利用神经网络去编码图结构信息。给定一个没有日志记录语句的代码段,本专利技术首先使用图神经网络提取图结构信息,然后融合图结构信息和利用预训练模型提取的日志语义信息去推荐日志记录变量。
附图说明
[0015]图1是自动日志分析总体框架示意图。
[0016]图2是源代码与日志记录语句的示意图。
[0017]图3是本专利技术针对日志记录的变量推荐的流程图。
[0018]图4是实施例中日志记录语句及对应的代码段示例图。
[0019]图5是步骤一应用在实施例中的流程图。
具体实施方式
[0020]下面将结合附图和实施例对本专利技术做进一步的详细说明。
[0021]参见图3所示,本专利技术的一种针对日志记录的变量推荐方法是存储于日志生成子系统中,其包括有下列步骤:
[0022]步骤一,从源代码中获取每个代码段中标志对应的标签;
[0023]在本专利技术中,开源Java项目的源代码,利用Java开发工具(JDT)并构建出多条日志变量推荐提取规则。
[0024]步骤11,从源代码中获取日志记录语句及对应的代码段;
[0025]在本专利技术中,从源代码中获取日志记录语句,记为ls;多个日志记录语句ls形成了日志记录语句集,记为LS={ls1,ls2,

,ls
n
,

,ls
N
}。每一个日志记录语句ls对应一个代码段cs,则有代码段集合,记为CS={cs1,cs2,

,cs
n
,

,cs
N
}。
[0026]ls1表示第一个日志记录语句。
[0027]ls2表示第二个日志记录语句。
[0028]ls
n
表示第n个日志记录语句。
[0029]ls
N
表示最后一个日志记录语句。
[0030]cs1表示ls1对应的代码段,即第一个代码段。
[0031]cs2表示ls2对应的代码段,即第二个代码段。
[0032]本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种针对日志记录的变量推荐方法,其特征在于包括下列步骤:步骤一,从源代码中获取每个代码段中标志对应的标签;步骤11,从源代码中获取日志记录语句及对应的代码段;从源代码中获取日志记录语句集,记为LS={ls1,ls2,

,ls
n
,

,ls
N
};每一个日志记录语句ls对应一个代码段cs,则有代码段集合,记为CS={cs1,cs2,

,cs
n
,

,cs
N
};ls1表示第一个日志记录语句;ls2表示第二个日志记录语句;ls
n
表示第n个日志记录语句;ls
N
表示最后一个日志记录语句;cs1表示ls1对应的代码段,即第一个代码段;cs2表示ls2对应的代码段,即第二个代码段;cs
n
表示ls
n
对应的代码段,即第n个代码段;cs
N
表示ls
N
对应的代码段,即最后一个代码段;步骤12,制定日志变量提取规则;日志变量提取规则集记为RULE={rule1,rule2,

,rule
γ
};rule1表示第一个日志变量提取规则;rule2表示第二个日志变量提取规则;rule
γ
表示最后一个日志变量提取规则;步骤13,提取日志记录语句中的日志变量;日志记录语句ls1依据RULE={rule1,rule2,

,rule
γ
}来提取得到的日志变量集记为且下角标g为ls1中日志变量的总个数;日志记录语句ls2依据RULE={rule1,rule2,

,rule
γ
}来提取得到的日志变量集记为且下角标h为ls2中日志变量的总个数;日志记录语句ls
n
依据RULE={rule1,rule2,

,rule
γ
}来提取日志变量,得到的日志变量集记为且下角标δ为ls
n
中日志变量的总个数;日志记录语句ls
N
依据RULE={rule1,rule2,

,rule
γ
}来提取得到的日志变量集记为且下角标u为ls
N
中日志变量的总个数;表示ls1的第一个日志变量;表示ls1的第二个日志变量;表示ls1的最后一个日志变量;表示ls2的第一个日志变量;表示ls2的第二个日志变量;
表示ls2的最后一个日志变量;表示ls
n
的第一个日志变量;表示ls
n
的第二个日志变量;表示ls
n
的最后一个日志变量;表示ls
N
的第一个日志变量;表示ls
N
的第二个日志变量;表示ls
N
的最后一个日志变量;步骤14,确定代码段中每个标志对应的标签;多个标志token组成了一个代码段cs;属于cs1的标志集记为则有:在代码段cs1中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量;当所述不存在于所述中,则对应的不是日志变量;属于cs2的标志集记为则有:在代码段cs2中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量;当所述不存在于所述中,则对应的不是日志变量;属于cs
n
的标志集记为在代码段cs
n
中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量;当所述不存在于所述中,则对应的不是日志变量;属于cs
N
的标志集记为在代码段cs
N
中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量;当所述不
存在于所述中,则对应的不是日志变量;表示cs
n
中的第一个标志;表示cs
n
中的第二个标志;表示cs
n
中的第y个标志;表示cs
n
中的最后一个标志;表示cs
N
中的第一个标志;表示cs
N
中的第二个标志;表示cs
N
中的第b个标志;表示cs
N
中的最后一个标志;统计代码段集合CS={cs1,cs2,

,cs
n
,

,cs
N
}中各个代码段的标志集,记为源代码段标志集步骤二,构建代码段异构图;步骤21,代码段集的随机选取;从CS={cs1,cs2,

,cs
n
,

,cs
N
}中随机选取70%的代码段记为训练代码段集TCS={tcs1,tcs2,

,tcs
α
,

,tcs
β
};从中随机选取70%的标志集记为训练标志集TCS与TTKK为一一对应选取;tcs1表示选取的第一个代码段;tcs2表示选取的第二个代码段;tcs
α
表示选取的第α个代码段;tcs
β
表示选取的第β个代码段;表示从TKK中选取的对应于tcs1的训练标志集;表示从TKK中选取的对应于tcs2的...

【专利技术属性】
技术研发人员:栾钟治戴邵徵黄绍晗
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1