一种基于程序语义的配置故障预测方法技术

技术编号:36212569 阅读:78 留言:0更新日期:2023-01-04 12:09
本发明专利技术公开了一种基于程序语义的配置故障预测方法,目的是解决配置参数约束信息提取能力不足,无法防止配置故障发生的问题。技术方案是:构建由配置参数相关代码对象提取模块、日志信息相关程序对象提取模块、配置相关日志信息识别模块、自然语言模板生成模块、配置约束信息识别模块组成的配置参数约束提取系统;配置参数相关代码对象提取模块和日志信息相关程序对象提取模块从软件源码中提取相关信息,配置相关日志信息识别模块识别配置相关日志信息;配置约束信息识别模块基于自然语言模板生成模块生成的模板识别包含配置约束的配置相关日志信息。采用本发明专利技术可有效提取软件配置参数约束信息,有效检测软件文档相关缺陷,防止配置故障发生。防止配置故障发生。防止配置故障发生。

【技术实现步骤摘要】
一种基于程序语义的配置故障预测方法


[0001]本专利技术涉及大型软件中的配置故障预防领域,具体涉及一种基于程序语义的配置故障预测方法。

技术介绍

[0002]随着社会的不断发展,软件被广泛应用于社会的各个方面,在各个领域发挥着至关重要的作用,已成为信息化社会的基础设施。软件配置是软件系统不可或缺的组成部分,广泛存在于软件部署、运行、升级以及迁移等应用场景中,主要指通过特定接口或者文件对软件系统调整相应配置参数的取值,从而保障软件用户通过配置参数设置选择不同实现的库、策略、规则等定制不同的功能,并调控资源使用保证软件适应不同的环境和负载,以提升软件的性能、可靠性等非功能性指标,满足不同的用户需求。区别于软件配置管理领域和软件测试领域中的配置项等相似概念,本专利技术中针对的配置参数主要是指通过特定接口或者配置文件进行设置的配置参数,通常以键值对(键是指配置参数名称,而值是指配置参数取值)的形式提供给软件用户,例如在数据库软件MySQL中,用户通过在配置文件中写入“datadir/home/”从而将MySQL数据库的数据目录(datadir)配置为本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于程序语义的配置故障预测方法,其特征在于包括以下步骤:第一步,构建配置参数约束提取系统,配置参数约束提取系统由配置参数相关代码对象提取模块、日志信息相关程序对象提取模块、配置相关日志信息识别模块、自然语言模板生成模块、配置约束信息识别模块组成;配置参数相关代码对象提取模块从文件系统读取软件源码和软件配置参数名称列表文件,从软件配置参数名称列表文件得到配置参数名称集合C,根据软件配置参数名称列表文件从软件源码中提取配置参数相关代码对象,得到配置参数相关代码对象集合,并将配置参数名称集合C、配置参数相关代码对象集合发送给配置相关日志信息识别模块;日志信息相关程序对象提取模块从文件系统读取软件源码,提取软件源码中的所有潜在日志信息,得到潜在日志信息集合L,并提取软件源码中潜在日志信息的相关程序对象集合,将潜在日志信息集合L和潜在日志信息的相关程序对象集合发送给配置相关日志信息识别模块;配置相关日志信息识别模块从配置参数相关代码对象提取模块接收C和配置参数相关代码对象集合,从日志信息相关程序对象提取模块接收潜在日志信息集合L和潜在日志信息的相关程序对象集合,通过匹配配置参数相关代码对象和日志信息相关程序对象识别出配置相关日志信息的二元对集合CL,将配置参数名称集合C和配置相关日志信息的二元对集合CL发送给配置约束信息识别模块;自然语言模板生成模块从用户接收配置约束描述文档集合DS和错误描述相关单词集合λ,生成配置约束自然语言描述模板集合,将配置约束自然语言描述模板集合发送给配置约束信息识别模块;配置约束信息识别模块从配置相关日志信息识别模块接收配置参数名称集合C和配置相关日志信息的二元对集合CL,从自然语言模板生成模块接收配置约束自然语言描述模板集合,从用户接收错误描述相关单词集合,使用配置约束自然语言描述模板匹配配置相关日志信息,识别配置相关日志信息中包含配置约束的配置相关日志信息,得到包含配置约束的配置相关日志信息;第二步,配置参数相关代码对象提取模块从文件系统读取软件源码和软件配置参数名称列表文件,从软件配置参数名称列表文件得到配置参数名称集合C,根据软件配置参数名称列表文件从软件源码中提取配置参数相关代码对象,得到配置参数相关代码对象集合,并将配置参数名称集合C、配置参数相关代码对象集合发送给配置相关日志信息识别模块,方法是:2.1配置参数相关代码对象提取模块从文件系统读取软件配置参数名称列表文件,得到配置参数名称集合C,C={c1,c2,

,c
i
,

,c
I
},c
i
为C中第i个配置参数名称,是常量字符串,I为C中配置参数名称的总数,1≤i≤I;2.2使用LLVM编译器框架的Clang前端解析软件源码,生成软件源码对应的抽象语法树AST
root
,AST
root
中的每个节点都表示源代码中的一种结构,且不同结构之间同样以树的结构表示相应从属关系;2.3在抽象语法树AST
root
中提取c1,c2,

,c
i
,

,c
I
相关的代码对象集合CS1,CS2,

,CS
i
,

,CS
I
,其中CS
i
=<CV
i
,CF
i
>,CV
i
为与名称为c
i
的配置参数相关的程序变量集合,CV
i
={cv
i1
,cv
i2
,

,cv
ip


,cv
iP
},cv
ip
为CV
i
中第p个与名称为c
i
的配置参数相关的程序变量;CF
i
为与名称为c
i
的配置参数相关的函数签名集合,CF
i
={cf
i1
,cf
i2
,

,cf
iq
,

,cf
iQ
},cf
iq
为CF
i
中第q个与名称为c
i
的配置参数相关的函数签名,函数签名定义了函数或方法的输入与输出,包含参数及参数的类型、返回值及其类型;
第三步,日志信息相关程序对象提取模块从文件系统读入软件源码,采用静态程序分析方法提取软件源码中的所有潜在日志信息,得到潜在日志信息集合L,L={l1,l2,

,l
j
,

,l
J
},其中l
j
为第j条日志信息,J为L中日志信息总条数,1≤j≤J,并得到l1,l2,

,l
j
,

,l
J
的相关程序对象集合LS1,LS2,

,LS
j
,

,LS
J
,LS
j
=<LV
j
,LF
j
>,LV
j
为与日志信息l
j
相关的程序变量集合,LV
j
={lv
j1
,lv
j2
,

,lv
ju
,

,lv
jU
},1≤u≤U,其中lv
ju
为第u个相关程序变量,LF
j
为与日志信息l
j
相关的函数签名集合,LF
j
={lf
j1
,lf
j2
,

,lf
jv
,

,lf
jV
},其中lf
jv
为第v个相关函数签名,1≤v≤V,方法为:3.1初始化L={};3.2使用Clang提供的相关遍历接口依次遍历AST
root
中的每一个节点,筛选AST
root
中类型为常量字符串类型即StringLiteral的节点,将常量字符串类型的节点标记为常量字符串t,并将t作为一条候选日志信息l
candidate
;若t所在的单条完整程序语句中包含多个常量字符串,用t

,t

,

,表示,则将该完整程序语句中出现的所有程序变量统一用字符串“_VARIABLE_”表示,最终将该单条语句中的所有常量字符串t,t

,t

,

和替换为字符串“_VARIABLE_”的程序变量按照在语句中的出现顺序进行组合,常量字符串t,t

,t

,

和字符串“_VARIABLE_”之间用空格进行分隔,组成一条候选日志信息l
candidate
;若l
candidate
长度小于10或者l
candidate
中未包括任何空格,将l
candidate
丢弃,否则,将l
candidate
加入潜在日志信息集合L中;当遍历AST
root
节点完成后,转3.3;3.3遍历AST
root
中的常量字符串类型节点完成,得到潜在日志信息集合L,L={l1,l2,

,l
j
,

,l
J
},其中l
j
为第j条日志信息,J为L中日志信息总条数,1≤j≤J;3.4初始化变量j=1,初始化程序变量集合LV
i
={},初始化函数签名集合LF
i
={};3.5对于L中第j个元素l
j
,基于后向切片技术提取l
j
的相关程序对象,构成l
j
的潜在日志信息相关程序对象集合LS
j
,LS
j
=<LV
j
,LF
j
>;LV
j
中存放与l
j
相关的程序上下文中的所有程序变量;LF
j
存放与l
j
相关的程序上下文涉及的函数调用对应的函数签名;3.6令j=j+1,若j≤J,转3.6;否则日志信息相关程序对象提取模块得到L和LS1,LS2,

,LS
j
,

,LS
J
,L={l1,l2,

,l
j
,

,l
J
};将潜在日志信息集合L和潜在日志信息相关程序对象集合LS1,LS2,

,LS
j
,

,LS
J
发送给配置相关日志信息识别模块;第四步,配置相关日志信息识别模块从配置参数相关代码对象提取模块接收C和CS1,CS2,

,CS
i
,

,CS
I
,从日志信息相关程序对象提取模块中接收L和LS1,LS2,

,LS
j
,

,LS
J
,从L中筛选出配置相关日志信息,得到配置相关日志信息的二元对集合CL,将配置参数名称集合C和配置相关日志信息的二元对集合CL发送给配置约束信息识别模块,方法是:4.1初始化变量j=1;4.2初始化变量i=1;4.3对L中的第j条日志信息l
j
和C中的第i个配置参数名称c
i
进行匹配,寻找存在关联关系的l
j
和c
i
二元对,方法是:4.3.1配置相关日志信息识别模块对c
i
根据单词组成和驼峰命名法进行分割,得到对应单词集合CWords
i
,令CWords
i
集合中单词数量为|CWords
i
|;4.3.2若|CWords
i
|=1,转4.3.3;若|CWords
i
|>1,转4.3.4;4.3.3取CWords
i
中的单词cword,检测cword是否与l
j
相关,若CWords
i
与日志信息l
j
匹配失败,转4.3.6;若CWords
i
与日志信息l
j
匹配成功,转4.3.7;
4.3.4将CWords
i
集合中的所有单词使用字符串“[._

]”进行连接,生成一个字符串,记为CReg
i
;4.3.5在日志信息l
j
中使用正则表达式匹配规则对字符串CReg
i
进行匹配,若匹配成功,转4.3.7;否则转4.3.6;4.3.6将c
i
相关代码对象CS
i
与l
j
相关程序对象LS
k
进行匹配,若匹配成功,转4.3.7;若匹配不成功,转4.4;4.3.7日志信息l
j
与配置参数名称c
i
成功,将二元对<c
i
,l
j
>加入集合CL中;4.4令i=i+1;若i≤I,转4.3;否则转4.5;4.5令j=j+1;若j≤J,转4.2;否则对C和L处理完毕,得到二元对集合CL,CL={<c1,l1>,<c2,l2>,

,<c
m
,l
m
>,

,<c
M
,l
M
>},转4.6;4.6配置相关日志信息识别模块将配置参数名称集合C和配置相关日志信息的二元对集合CL发送给配置约束信息识别模块;第五步,从Apache Hadoop、HDFS、Yarn、Alluxio、Cassandra、Spark、Hypertable、MongoDB、AOLServer、Subversion以及OpenLDAP共11款软件的配置相关文档和源码日志中人工筛选描述配置约束的文本,共收集338条配置约束文本描述信息,记为配置约束描述文档集合DS,DS中的配置约束文本描述信息条数|DS|=338;第六步,基于WordNet词典接口人工获取用于描述错误相关状态的单词,形成错误描述相关单词集合λ;第七步,自然语言模板生成模块从用户接收DS和错误描述相关单词集合λ,生成配置约束自然语言描述模板集合LanPatterns,方法是:7.1自然语言模板生成模块根据DS获得描述配置约束的自然语言模板,具体步骤为:7.1.1初始化变量y=1;7.1.2对于DS集合中的第y条文本描述信息d
y
,基于spaCy开源库生成d
y
对应的POS标签序列对<pos
y1
,lemma
y1
>,<pos
y2
,lemma
y2
>,

,<pos
yz
,lemma
yz
>,

,<pos
yh
,lemma
yh
>,将这h个POS标签序列对构成的集合简记为第一POS标签序列集合《pos
yh
,lemma
yh
》,其中pos
yz
(1≤z≤h)为d
y
中第z个单词的词性标签,lemma
yz
为d
y
中第z个单词词形还原后的原始单词,h是POS标签序列的总数;7.1.3采用移除、替换和合并方法对《pos
yh
,lemma
yh
》进行移除、合并和替换,得到第二POS标签序列集合《pos

yh
,lemma

yh
》,方法是:将《pos
yh
,lemma
yh
》中pos
yz
为限定词的词性标签DT或符号的词性标签SYM的二元对移除,并将连续出现的pos
yz
为名词的词性标签NN或形容词的词性标签JJ的二元对进行合并,即如果pos
yz
=NN且pos
y z+1
=NN或者pos
yz
=JJ且pos
y z+1
=JJ,则将<pos
yz
,lemma
yz
>和<pos
y ...

【专利技术属性】
技术研发人员:李姗姗周书林郑思董威贾周阳陈振邦陈立前张元良王腾廖湘科
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

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

1