基于重子节点抽象语法树的软件缺陷预测
2021-12-20黄晓伟范贵生虞慧群杨星光
黄晓伟,范贵生,虞慧群,杨星光
(1.华东理工大学 计算机科学与工程系,上海 200237;2.上海市计算机软件测评重点实验室,上海 201112)
0 概述
在软件项目开发过程中,软件项目的最终可靠性是所有开发人员以及项目负责人都十分关注的。软件缺陷是影响软件项目可靠性的重要因素,一般通过减少软件缺陷的引入以及修正已经存在的缺陷两种方法来减少软件缺陷。软件项目的开发人员和测试人员通过构建软件缺陷模式[1],能够利用积累的软件缺陷数据提高软件项目的可靠性。
软件缺陷预测(Software Defect Prediction,SDP)[2-3]利用软件开发过程存储的历史数据和测试人员对发现缺陷模块的标注,通过构建机器学习分类器对新开发的软件模块进行分类预测,判断该模块是否存在缺陷。根据源数据项目与目标数据项目的差异,软件缺陷预测可以进一步划分为项目内缺陷预测(Within-Project Defect Prediction,WPDP)[4-5]、跨项目缺陷预测(Cross-Project Defect Prediction,CPDP)[4,6]、异构缺陷预测(Heterogeneous Defect Prediction,HDP)[7-8]。根据预测程序规模,程序包括函数级、文本级、变更级等预测粒度。
传统缺陷预测方法根据项目源代码的行数、复杂度、耦合度等提取描述源代码的指标,利用构建的机器学习分类模型进行分类学习。但是,这些静态代码指标[9-10]只是代码的宏观描述,有缺陷代码和无缺陷代码很可能具有相同的代码指标,使分类器无法区分。这些宏观上无法区分的代码,具有不同语义和结构信息,因此利用项目代码的语义和结构信息能够提高缺陷预测性能。抽象语法树(Abstract Syntax Tree,AST)是以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。……
