面向大规模开源软件的日志增强技术研究
作者单位:国防科学技术大学
学位级别:硕士
导师姓名:廖湘科
授予年度:2015年
学科分类:08[工学] 0835[工学-软件工程] 081202[工学-计算机软件与理论] 0812[工学-计算机科学与技术(可授工学、理学学位)]
摘 要:随着软件规模的持续增大,日志已经成为了故障诊断的重要手段。由于目前绝大多数大规模软件为多人开发,缺少共识的日志规范,导致现有的软件日志较为随意,日志质量严重依赖开发人员的编码风格。目前已有很多研究工作开始关注日志的自动化管理,但仅是针对固定的代码模式,难以分析逐渐增多的语义相关的错误。本课题针对大量实际的代码,从不同角度分析和总结了日志的特征,在此基础上设计和实现了SmartLog,通过学习代码中已有的质量较高的日志行为,推断出代码中应该加日志却没有加的类似的出错点,并自动添加日志。SmartLog的主要工作包括:1.系统分析了广泛使用的多个大规模开源软件如MySQL、Subversion、Apache Http、PostgreSQL、Wireshark,发现了一些与日志相关的新特征,包括系统的日志行为会受到上下文的影响、语义相关缺陷增多、多人开发的软件中会表现出文件/模块相关的编码风格、错误码的广泛使用影响系统日志、并非所有潜在出错点都会加日志以及日志密度分布会受测试模块影响等六个特点。2.支持自动的日志函数识别。区别于已有工作,SmartLog无需用户指定日志函数。通过分析实际代码中的日志函数,课题总结出日志函数编写的一般形式,在此基础上,基于机器学习技术设计和实现了一种日志函数自动识别方法。同时建立评价模型,量化SmartLog对日志函数的识别能力。实验表明,SmartLog日志函数识别能力为使用特定关键字的76倍,十折交叉验证方法得到分析结果的F-Score值为0.93。3.支持自动的系统日志增强。日志的增强包括日志行为识别、日志上下文分析以及日志插入三个阶段。为了有效识别代码中的日志行为,SmartLog结合数据流和控制流分析建立日志模型,增强了日志语句和易错程序点的对应关系的识别能力,抽样测试显示其误报率和漏报率分别为4%和13%。日志上下文的等价性判定是日志上下文分析的难点问题,SmartLog设计并实现了二分检测树进行语义分析,实验证明二分检测树具有良好的可扩展性,并且日志上下文等价判断的准确率超过到97%。在日志插入阶段,SmartLog设计了一种基于阈值的的统计方法,以支持对日志自动化增强的决策判定,同时根据等价上下文中日志的错误信息,决定新增日志的内容。基于轻量级的统计分析、机器学习以及程序分析技术,SmartLog在实际测试中分析复杂度随软件规模线性增长,每百万行代码约花费45秒,新增日志数量约为原有日志的5%,同时导致的目标软件性能损失在1%以内,在有效性评估中,86%的新增日志位于开发人员认定的易错程序点。