论文部分内容阅读
日志记录语句由于具有捕获和记录系统运行时信息的能力,成为了软件系统遇到故障时分析问题原因的主要信息来源。另一方面,互联网领域日新月异的变化,带来了越来越多的用户以及丰富的功能需求,这导致软件系统质量和性能要求都日益提高。日志记录语句由于前述原因,吸引了越来越多实践者和研究者的关注。事实上,恰当地在软件代码中插入日志记录语句已成为开发人员日常工作中十分重要的一部分。一个日志记录语句会利用普通文本和可选的相关变量来记录系统关键的事件信息。在编写日志记录语句时,开发人员需要决策在哪里记录以及需要记录哪些内容。但是,仅仅考虑这两个方面是不足够的,现有的日志框架和工具都要求为每个日志记录语句分配一个用来描述记录信息详细程度的级别,它会影响最终保存下来的日志信息。如果一个日志记录语句被分配了不合适的级别,可能会导致本该记录的信息没有被储存下来,使得后续的日志分析等工作缺失了关键性信息。现有的研究中表明因为需要权衡内容足够的大量日志所带来的益处和所消耗的成本,开发人员在为一条日志记录语句分配级别时往往会花费较大的精力,他们往往只能依赖自己的开发经验和领域知识进行决策。为工业界提供日志记录语句级别分配的有效指导原则,已成为学术界一个紧急而重要的任务,因此本文提出了一种利用机器学习技术为开发人员进行日志级别推荐的方法。已有的相关研究中发现在为一条新添加的日志记录语句决定级别时,日志记录语句所在的包含代码块和文件所提供的信息发挥了最为重要的作用。所以本文把从包含代码块和文件中提取出的文本特征经过处理之后得到的数字文本特征以及数字特征和布尔特征作为算法模型的输入,便可以得到新添加的日志记录语句的合适级别预测。学习模型的训练数据来自具有良好日志实践、数据质量可靠的、涵盖多种产品类型、长时间运行的、GitHub上排名前一百的Java项目。本文不仅选取了三种传统的机器学习算法:决策树,支持向量机、logistic回归模型,还利用深度学习领域的卷积神经网络来构建预测模型。通过对GitHub上排名前100的Java项目中的日志记录语句级别进行特征学习,四种分类器模型的性能评估结果(AUC和BrierScore)都表现出色,在近似研究的数据集上也表现了更为优秀的性能。随机抽样数据的实验结果也证明了本文所提出方法具有较强的稳定性和广泛适用性。