一种基于程序分析的软件日志行为自动识别方法技术

技术编号:15248366 阅读:292 留言:0更新日期:2017-05-02 09:14
本发明专利技术公开了一种基于程序分析的软件日志行为自动识别方法,目的是解决现有日志增强工作难以自动、准确识别软件已有日志行为的问题。技术方案是先将目标工程Proj的源代码以函数为单位分割,识别函数中的分支语句、函数调用语句、日志语句,并分别放到该函数的分支语句集合、函数调用语句集合和日志语句集合中,筛选出调用集和分支集之间存在数据依赖的元素,在存在数据依赖的元素中再筛选出与日志集元素存在控制依赖的元素,得到日志行为集。采用本发明专利技术可以自动识别源代码中面向故障诊断的日志行为,也可以精确识别函数调用语句、分支语句与日志语句之间的对应关系,提升日志增强的有效性,使得日志行为识别更为快速、准确。

An automatic recognition method of software log behavior based on program analysis

The invention discloses a method for automatically identifying software log behavior based on program analysis, which aims at solving the problem that the existing log enhancement work is difficult to automatically and accurately identify the log behavior of the software. Technical scheme is the first goal of the project Proj source code to function as a unit segmentation, recognition function of branch statements, function call statements, log statements and into the function of the branch statement set, function call statement collection and log collection of statements, were screened for the presence of data dependent elements between the call set and set Branch in the presence of data dependent elements, and then were screened for the presence of control dependence element element set with log log by behavior set. The invention can automatically identify the source code for fault diagnosis of the log behavior, can accurately identify the relationship between the function call statements, branches and log statements, enhance the effectiveness of the log enhancement, the log is more rapid and accurate identification of behavior.

【技术实现步骤摘要】

本专利技术涉及计算机软件中日志行为的识别方法,尤其指大规模软件中面向故障诊断的日志行为识别方法。
技术介绍
当今计算机技术迅速发展、计算能力不断提高,计算机软件系统无论从规模上还是功能上都在增大、增强。随着软件需求的日益复杂,大规模软件系统在军用和民用领域中均被广泛使用。目前,中、小规模软件可以利用形式化等方法有效保障可靠性,但大规模软件的故障诊断主要依靠人力排查,定位问题不及时且效率低,错误重现和调试都十分困难。软件日志是大型软件中故障诊断的重要手段,它可以记录程序运行时的动态信息,帮助维护人员分析重现错误,进而更正系统错误。规范和充分的日志对于软件故障诊断非常重要,也是良好编程规范的必要因素。但目前软件中的日志多数是依赖编程人员的经验和个人习惯,缺乏统一的被普遍接受的标准,在大型开源软件中利用现有的日志信息进行故障重现和检测难度大、效率低。因此,通过增强日志代码质量,进一步改善大规模软件故障检测技术的研究愈加重要。同时,由于代码量巨大,人工改善软件日志几乎不可能完成,因此自动化地实现日志增强的需求越来越迫切,同时也面临重大挑战。日志自动增强的主要方法是通过学习软件已有日志,预测需要添加日志的程序点。其中,如何自动、准确地识别软件已有面向故障诊断的日志是日志增强过程中的一个关键技术。目前国际上已有日志的自动化增强工具,其中有代表性的有朱杰明的文章LearningtoLog:HelpingDevelopersMakeInformedLoggingDecisions(为开发人员提供有效日志决策)中设计的LogAdvisor,以及袁丁的文章BeConservative:EnhancingFailureDiagnosiswithProactiveLogging(保守地插入前瞻日志以增强故障诊断能力)中设计的Errlog。已有工作在识别日志时需要用户提供信息(如指定日志函数名),导致日志行为识别时效率、准确性较低,进而影响到后续日志增强的有效性。如何有效识别计算机软件中面向故障诊断的日志行为,是自动化的日志增强中重要技术问题,如何针对现有日志增强工作难以自动、准确识别软件已有日志行为的问题,提供一种日志行为自动识别方法,为软件日志的自动增强提供技术支持是本领域技术人员极为关注的技术问题。
技术实现思路
本专利技术要解决的技术问题是为支持软件日志的自动化增强提供一种精确的日志行为识别方法,解决现有日志增强工作难以自动识别软件已有日志行为的问题,使得日志行为识别过程更为快速、准确。给定目标工程的源代码,本专利技术可以自动识别出源代码中面向故障诊断的日志行为。本专利技术的技术方案包括以下步骤:第一步、准备输入输出。方法为:1.1记目标工程为Proj,将Proj的源代码以函数为单位分割,得到函数集F={func1,func2,...,funcf本文档来自技高网
...

【技术保护点】
一种基于程序分析的软件日志行为自动识别方法,其特征在于包括以下步骤:第一步、准备输入输出,方法为:1.1记目标工程为Proj,将Proj的源代码以函数为单位分割,得到函数集F={func1,func2,...,funcf},其中func1为Proj中的第1个函数,f为Proj中函数的个数;1.2建立日志行为集LB,用于保存日志行为识别结果,并将LB初始化为空;第二步、建立函数的分支语句、函数调用语句和日志语句的集合,方法为:2.1令变量i=0;2.2令i=i+1,如果i>f,执行第六步;否则执行2.3;2.3建立分支集B(i)、调用集C(i)和日志集L(i),分别表示funci中的分支语句集合、函数调用语句集合和日志语句集合,并将B(i)、C(i)和L(i)全部初始化为空;第三步、填充B(i)、C(i)和L(i),方法是:3.1填充分支集B(i):使用前端分析工具识别funci中的所有分支语句,并加入B(i)中,得到B(i)={brani,1,brani,2,...,brani,b(i)},其中brani,1为funci的第1个分支语句,b(i)为funci中分支语句的个数;3.2填充调用集C(i):使用前端分析工具识别funci中的所有函数调用语句,并加入C(i)中,得到C(i)={calli,1,calli,2,...,calli,c(i)},其中calli,1为funci的第1个函数调用语句,c(i)为funci中函数调用语句的个数;3.3填充日志集L(i),方法是:3.3.1令变量j=0;3.3.2令j=j+1,如果j>c(i),则L(i)={logi,1,logi,2,...,logi,l(i)},其中logi,1为第i个函数的第1个日志语句,l(i)为第i个函数中日志语句的个数,执行第四步;如果j<=c(i),执行3.3.3;3.3.3判断calli,j是否为日志语句,若是,则将calli,j所表示的函数调用语句作为日志语句加入L(i)中,若不是,则执行3.3.2;第四步、筛选出集合C(i)和B(i)之间存在数据依赖的元素,方法是:4.1枚举C(i)和B(i)中的元素,方法是:4.1.1令变量m=0,令变量n=0;4.1.2令m=m+1,如果m>c(i),执行第2.2步;否则执行4.1.3;4.1.3令n=n+1,如果n>b(i),执行4.1.2;否则执行4.2;4.2判断brani,n与calli,m之间是否存在数据依赖,若存在数据依赖,执行第五步;若不存在数据依赖,执行4.1.3;第五步、筛选出集合L(i)中与brani,n存在控制依赖的元素,方法是:5.1判断brani,n是if语句还是switch语句,是if语句时执行5.2,是switch时执行5.3;5.2使用前端分析工具获得if语句包含的then语句块和else语句块,执行5.2.1;5.2.1顺序搜索then语句块中的所有语句,当有语句stmt=logi,z时,执行5.2.2,否则执行5.2.3;5.2.2建立六元组lb=<i,m,n,y,z,if‑then>,并将lb加入LB,lb表示在目标工程Proj的第i个函数体中,通过第n个判断语句对第m个函数调用语句的第y个参数进行了判断,并在if‑then块中加了日志语句,且此日志语句为本函数体中的第z个日志语句,1<=z<=l(i),y等于0时表示函数返回值,y等于I时表示函数的第I个参数,I为正整数;5.2.3顺序搜索else语句块中的所有语句,当有语句stmt=logi,z时,执行5.2.4,否则执行5.2.5;5.2.4建立六元组lb=<i,m,n,y,z,if‑else>,并将lb加入日志行为集LB;5.2.5calli,m和brani,n之间存在的日志行为识别完成,执行4.1.3;5.3使用前端分析工具获得switch语句包含的case语句块和default语句块,执行5.3.1;5.3.1顺序搜索case语句块中的所有语句,当有语句stmt=logi,z时,执行5.3.2,否则执行5.3.3;5.3.2建立六元组lb=<i,m,n,y,z,switch‑case>,并将lb加入日志行为集LB;5.3.3顺序搜索default语句块中的所有语句,当有语句stmt=logi,z时,执行5.3.4,否则执行5.3.5;5.3.4建立六元组lb=<i,m,n,y,z,switch‑default>,并将lb加入日志行为集LB;5.3.5calli,m和brani,n之间存在的日志行为识别完成,执行4.1.3;第六步、识别日志行为结束,输出LB。...

【技术特征摘要】
1.一种基于程序分析的软件日志行为自动识别方法,其特征在于包括以下步骤:第一步、准备输入输出,方法为:1.1记目...

【专利技术属性】
技术研发人员:廖湘科李姗姗贾周阳刘晓东董威林彬周书林徐向阳郦旺
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南;43

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

1