8.44 基于用户缺陷报告挖掘软件缺陷
缺陷报告是用户向软件开发者汇报软件使用过程中所遇故障的报告。该报告基于自然语言书写,记录了软件发生故障场景和症状等信息。通过分析软件缺陷报告,可以有效定位出导致该缺陷的程序代码,从而帮助程序员对其进行修复。
由于缺陷报告是终端用户通过自然语言书写,因此基于用户缺陷报告进行缺陷挖掘的关键在于如何建立缺陷报告与符合其功能描述的代码之间的联系。现有技术通常将程序代码视为自然语言,然后基于文本空间建立缺陷报告与程序代码之间的相关性,从而发现缺陷代码。向量空间模型 (vectorspace model) 是应用最多的一种技术,首先将缺陷报告和程序代码表示成空间中的向量,然后利用向量之间的余弦距离寻找与缺陷报告最相关的程序代码[33] 。Zhou et al [34]对此进行了扩展,通过综合考虑文本长度以及相似软件缺陷,进一步提升了发现缺陷代码的性能。Ye et al [35] 利用排序学习(learningto rank)直接建立缺陷报告与程序代码之间的关联关系,从而更准确地发现缺陷代码。
上述技术直接在词汇级构建缺陷报告和程序代码二者的关联关系,可能会因近义词、多义词问题造成语义失配。为解决这一问题, Poshyvanyk etal [36] 利用 LSI (latent semantic indexing) 将缺陷报告与程序代码从高维输入空间投影至语义相对紧凑的低维空间,并在此基础上挖掘缺陷报告与程序代码之间的关联关系;Lukins et al [37] 利用LDA (latentDirichlet allocation) 为缺陷报告与程序代码进行主题建模,并基于此计算二者之间的关联关系。Lamet al [38] 基于自动编码器 (auto-encoder) 从缺陷报告和程序代码中提取高层词汇特征,并结合多种元特征进行学习,有效提升了发现缺陷程序代码的性能。
然而,现有大多数技术均简单将软件程序视为自然语言,忽视了程序构件以及程序结构所体现的功能语义。最近,Huo et al [39] 提出了一种能够针对自然语言书写的缺陷报告与程序设计语言书写的程序代码学习统一语义特征表示的新型卷积神经网络模型 NP-CNN。该模型在学习统一特征过程中能够同时考虑程序代码词汇与程序结构,能够更加准确地建模缺陷报告与程序功能行为的关联关系,进而更加准确地发现包含缺陷的程序代码。