Page 97 - 《软件学报》2021年第9期
P. 97

贾统  等:基于程序层次树的日志打印位置决策方法                                                         2721


                  T
                             T
                                       T
         转换矩阵 A ,使得 P(Y S |A (X S ))≈P(Y T |A (X T )).为计算该转换矩阵,JDA 同样使用 MMD 来衡量 X S 和 X T 的距离.但
         是,由于目标系统特征向量集合没有标签数据,因此 Y T 是未知的.为生成 Y T ,JDA 使用源系统特征向量集合训练
                                                                     ˆ
                                                               ˆ
                                                                                            T
         一个简单的分类器(X S ,Y S ),然后对 X T 进行标注,进而得到仿造的标签 Y ,并以 Y 替代 Y T .训练完成后,X S 被 A φ(X S )
                                                               T      T
                   T
         取代,X T 被 A φ(X T )取代.
             分类模型采用 3 种经典的机器学习算法,包括支持向量机(support vector machine,简称 SVM)、k-最近邻(k-
         nearest neighbor,简称 kNN)和 Logistic 回归(logistic regression,简称 LR).SVM 的基本思路是,在共享特征空间中
         学习能够决策日志打印的最大边距超平面.kNN 算法的分类决策依据代码块在共享特征空间中最近邻的几个
         代码块所属的类别,如果与一个代码块相似的若干其他代码块中均包含日志打印语句,则该代码块也应包含日
         志打印语句.LR 的因变量即是否应添加日志打印语句,自变量是使用经过特征迁移后的代码块共享特征向量,
         经过回归分析,可以得到特征向量中的每一个维度对因变量的影响权重,进而判定目标系统代码块共享特征向
         量的因变量值.

         4    实验设计与结果验证

         4.1   实验设计
                                                    [9]
             为了评估所提出的方法,实验使用 Apache Hadoop ,Angel          [10] ,OpenStack [11] ,SaltCloud [12] 和 Tensorflow [13] 等
         5个流行的大型开源软件系统源代码进行了两组实验.Hadoop 是当今最流行的大数据分析平台之一,Angel 是腾
         讯开源的分布式机器学习平台,OpenStack 和 SaltCloud 是两个开源云计算平台,Tensorflow 是 Google 开源的深
         度学习平台.其中,Hadoop 和 Angel 由 Java 语言编写,OpenStack,SaltCloud 和 Tensorflow 由 Python 语言编写.
             这两组实验包括多场景评估实验和各阶段评估实验:多场景评估旨在验证本文所提出的跨组件、跨软件系
         统的日志打印决策方法在不同应用场景下的有效性;各阶段评估旨在分别评估特征向量生成和日志打印位置
         决策模型的效果.第 4.2 节和第 4.3 节详细介绍这两组实验的实验结果.本节接下来介绍实验过程中的数据处
         理、基线设置、参数设置、评价指标等.
         4.1.1    实验参数设置与数据处理
             实验参数的选择,可能会影响实验结果.在特征生成步骤,存在 3 个关键参数需要预设,包括子向量长度 l、
         子节点数量上限 m 和层数量上限 n.实验中,这 3 个参数的预设值分别为 50,10 和 10,使得最终特征向量的长度
         为 5 000(l×m×n).为提升训练速度,实验中使用了 PCA 算法对特征向量降维,在保证 95%以上数据方差的基础上,
         将特征向量降至 200 维.实验过程中使用了若干种不同的参数取值,实验结果对参数不敏感.由于论文长度限制,
         在本节并未将所有实验结果一一列举.
             实验过程中,由于软件代码中只有少量的代码块包含日志打印语句,因此整个训练集和测试集均存在正负
         样本不均衡的问题.例如,在 Hadoop 代码中共提取 397 442 个代码块,其中仅 13 470 个代码块中包含日志打印语
         句.为保障分类模型的训练和测试效果,在训练集和测试集中分别采用下采样的方式获取同正样本数量相同的
         负样本进行训练和测试.例如,在测试过程中,从 Hadoop 不包含日志打印语句的 383 972 个代码块中随机抽样出
         13 470 个代码块作为负样本,使用共计 26 940 个代码块作为测试集.在多场景评估实验中的版本升级场景中,由
         于训练集和测试集分别是软件系统一个组件的两个不同版本,因此训练集和测试集中可能包含相同的样本.为
         避免数据污染问题,将测试集中与训练集共同包含的样本删除,从而得到最终的测试集.
         4.1.2    评价指标
             评价指标采用使用经典的机器学习算法评价指标准确率(accuracy)和 F1 值.
             •   Accuracy 指日志打印决策正确的代码块占所有代码块的比例,它反映了日志打印决策模型的整体性
                能,计算如下:
                                           #code blocks being calssified correctly
                                  Accuracy =                           ;
                                                   #all code blocks
             •   F1 指标精确率(precision)和召回率(recall)的调和平均值,代表模型对正样本的分类效果.高精确率意味
   92   93   94   95   96   97   98   99   100   101   102