论文部分内容阅读
随着软件规模的扩大和软件复杂度的不断升,软件配置故障已成为导致软件系统失效的主要原因之一。目前软件系统内的配置项约束及其相互之间关联关系的复杂性是导致软件配置故障频发的主要原因。更复杂的情况,当软件系统产生演化时,旧有的配置设置可能不再满足新版本的软件系统,从而导致软件配置故障。基于上述背景,本课题系统分析了常用软件的配置相关代码特征,并设计实现了面向软件演化的配置故障诊断辅助框架ConfExt。通过自动化完成配置项到程序变量的映射,并取配置变量相关约束,可以实现部分软件配置故障的快速诊断。当软件演化发生时,可以实现配置约束变更的自动分析,为软件使用者供配置修改的参考。ConfExt的主要工作包括:1.系统分析了广泛使用的六款C/C++开源软件,包括Apache Httpd、MySQL、Redis、Nginx、Postfix和PostgreSQL,总结出软件系统配置相关的代码特征。2.基于特征模式学习的方法,实现了开源软件系统中配置项到程序中变量名的自动映射,无需考虑软件源码中的复杂语义环境与编码风格,改进了现有研究工作中人工或者半人工实现配置项变量映射的现状。实验表明,ConfExt实现的配置项变量映射准确率达到了97.5%,并且平均可以挖掘出91.4%的潜在配置项。3.基于软件源代码特征,使用机器学习算法、数据流与控制流分析等技术,通过自动分析与配置相关的处理代码段,实现了配置约束的自动取,包括配置项的类型约束、数值范围约束、多配置项间的控制依赖、多配置项间的数值依赖以及枚举类型的取值空间约束。实验表明,ConfExt可以取出1123个各类配置约束条件,并且配置约束准确率达到97.9%。4.设计实现了面向软件演化的配置变更自动分析框架。通过在软件系统不同版本间实现配置约束差异自动分析,可以取版本间配置约束发生变化的配置项,为软件使用者供配置修改的参考,并供接口自动生成满足新约束的配置设置。