时间:2024-05-04
房泳珂 嵇海进 雷尧 杨珊 徐会艳
摘要:软件缺陷预测技术是建立在软件历史信息基础上的预测模型,判断软件模块是否存在软件缺陷,从而实现测试资源的优化分配,实现软件测试工作效率的提高。随着软件缺陷预测技术的快速发展,许多机器学习方法相继被引入进来,以期提高软件缺陷预测的能力。文章针对基于机器学习的软件缺陷预测方法,系统地进行了分类和总结。
關键词:软件测试;软件缺陷预测;项目内缺陷预测;跨项目缺陷预测;机器学习
中图分类号:TP311.5 文献标识码:A
文章编号:1009-3044(2022)25-0047-02
开放科学(资源服务) 标识码(OSID) :
1 概述
随着软件技术的发展,软件系统已经深入日常生活的方方面面,在各行各业扮演着越来越重要的角色。然而随着软件规模的不断扩大和软件功能的不断增强,软件变得越来越复杂,软件系统中所存在的软件缺陷也越来越多,同时由于项目经费、项目时间等因素的限制,对软件项目进行详细、全面的测试也就变得越来越困难,给软件测试带来了巨大的挑战,如何提高软件测试的效率成为当务之急。
软件缺陷预测技术[1]正是解决上述问题的有效方法,它通过研究软件代码和开发过程中产生的历史信息,分析和建立预测模型,在软件测试之前对各个软件模块进行预测,并基于预测的结果进行测试资源的合理分配,从而达到提高软件测试效率的目的。鉴于软件缺陷预测技术对于软件测试的重要实践意义,许多学者积极开展相关研究,目前软件缺陷预测技术已经成为软件工程学科一个热点[2]。
基于机器学习的软件缺陷预测方法在2005年第一个软件缺陷数据仓库PROMISE 公布之后,得到了进一步的发展[3]。本文针对基于机器学习的软件缺陷预测方法,系统地进行了分类和总结,并分析了这些方法存在的不足。
2 软件缺陷预测技术及其分类
软件缺陷预测是在软件测试之前进行的,它通过研究软件代码和开发过程中产生的历史信息,分析和建立预测模型,具体的预测过程如图1 所示。
第一步:在软件缺陷预测模型的建立过程中,首先要提取历史软件模块的度量元信息(也就是特征) 和历史软件模块的缺陷类别(有缺陷或者无缺陷) ,可以作为软件缺陷预测模型的训练数据集。这里的软件模块可以是一个文件、一个包或者一个函数等。
第二步:预处理。主要采用特征工程等方法对软件的历史信息进行预处理。
第三步:建立预测模型。采用机器学习方法进行模型的构建,并对预测模型进行训练。
第四步:对新的软件模型模块进行预测。具体来说就是提取新软件模块的度量元(特征) ,并采用软件缺陷预测模型判断新的软件模块的缺陷类别(有缺陷或者无缺陷) 。
根据训练数据的来源不同,分为项目内缺陷预测和跨项目缺陷预测两类[3]。
3 软件缺陷预测方法
3.1 项目内缺陷预测方法
项目内缺陷预测方法采用的训练数据是本项目历史版本中软件模块的数据信息,即训练数据和测试数据都属于同一个软件项目,训练数据和测试数据的样本分布基本是相同的。项目内缺陷预测方法是早期传统软件缺陷预测的内容,研究人员提出了很多缺陷预测方法,下面就从不相关和冗余特征处理、分类不平衡处理和分类器构建这三个方面进行总结分析。
3.1.1 不相关和冗余特征处理
不相关和冗余特征也会降低缺陷预测模型的预测效果。为了降低其对预测效果的影响,通常有三种方法。
1) 特征加权方法
训练数据集中的不同特征与类别标签的关联度是不同的,有些特征和类别特征甚至是没有任何关联的。为了体现不同特征对预测效果的影响,特征加权方法通过为每个特征分配不同的权值来体现特征和类别标签的关联度,关联度越高的特征,其权值越高,关联度越低的特征,其权值越低。其中衡量特征和类别标签关联度的方法包括卡方、信息增益、信息增益率等方法。比如,Zhou等人[4]通过卡方来衡量特征和类别信息的关联度,并为每个特征分配不同的权值,实验结果表明该方法能够有效提高软件缺陷预测的效果。
2) 特征选择方法
该方法通过选择若干个与类别标签关联度最高的特征,去除不相关或者冗余的特征来提高软件缺陷预测的效果。比如Xu等人[5]采用基于ReliefF的聚类方法进行特征选择,经过选择原特征集的特征子集,进行软件缺陷预测并在NASA数据集上进行了实验,实验结果表明该方法能够有效提高软件缺陷预测的效果。
3) 特征提取方法
特征提取方法不同于特征加权方法,特征提取方法是一种降维算法,同时该方法能够保留原有训练数据集的原始结构,以达到去除不相关和冗余特征的目的。比如,Xu等人[6]运用核主成分分析的方法进行特征提取,并取得了较好的预测效果。
3.1.2 分类不平衡处理
分类不平衡问题指的是在软件缺陷数据集中,无缺陷软件模块的数量远远大于有缺陷模块的数量,这种分类不平衡问题的存在,会影响软件缺陷预测的效果。常见解决办法主要有三种:1) 过采样;2) 欠采用;3) 合成少数类过采样技术。过采样技术主要是指随机复制少数类样本,以达到分类平衡的目的;欠采样主要通过随机删除多数类样本的方式来达到分类平衡的目的;合成少数类过采样技术,主要是指在近邻之间插入合成的少数类样本,以防止过拟合。
3.1.3 分类器的构建
分类器的构建是软件缺陷预测模型的重要组成部分,许多机器学习方法被引入软件缺陷预测中来用以分类器的构建,以提高软件缺陷预测的效果。常用分类器如朴素贝叶斯、支持向量机、逻辑回归和随机森林等方法。同时许多机器学习领域新技术被引入软件缺陷预测中来,如Nevendra等人[7]在项目内缺陷预测的预测模型构建中,将深度学习方法引入进来,并通过实验证明了所提方法的有效性。
3.2 跨项目缺陷预测方法
项目内缺陷预测模型的训练数据集和测试数据都来自同一个项目,当需要对一个新项目或者缺乏历史数据的项目进行缺陷预测时,传统的项目内缺陷預测方法就不再可行。研究人员提出使用其他项目的历史数据对新项目进行缺陷预测成为一种替代方案,也就是跨项目缺陷预测。
跨项目缺陷预测和项目内缺陷预测相比,主要是训练数据集和测试数据集的来源不同,因此数据预处理方法与项目内缺陷预测中的数据预处理方法有所不同。如Liu等人[8]提出了一种两阶段的跨项目缺陷预测方法,该方法设计了一种源项目评价方法,主要用来筛选和目标项目高度相似的项目,以获取训练数据集,然后基于这个训练数据集,采用迁移成分分析的扩展方法构建了两个预测模型,最后综合两个模型的预测结果作为最终的预测结果,实验结果表明了该方法的有效性。
在模型建立的其他方面,如不相关和冗余特征的处理,分类不平衡问题和分类器的构建等,和项目内方法类似。
4 结论
本文从项目内和跨项目两个方面对软件缺陷预测技术进行了分析与总结,其中每个方面又从不相关和冗余特征处理,分类不平衡处理和分类器的构建三个角度进行描述,并详细分析了每个分类中缺陷预测模型的基本原理,为以后的研究奠定基础,具有一定实用价值。
参考文献:
[1] 滕俊元,高猛,郑小萌,等.噪声可容忍的软件缺陷预测特征选择方法[J].计算机科学,2021,48(12):131-139.
[2] Liu C,Yang D,Xia X,et al.A two-phase transfer learning model for cross-project defect prediction[J].Information and Software Technology,2018,107:125-136.
[3] 于巧.基于机器学习的软件缺陷预测方法研究[D].徐州:中国矿业大学,2017.
[4] Zhou L J,Li R,Zhang S D,et al.Imbalanced data processing model for software defect prediction[J].Wireless Personal Communications,2018,102(2):937-950.
[5] Xu X, Chen W, Wang X. RFC: a feature selection algorithm for software defect prediction[J]. Journal of Systems Engineering and Electronics,2021,32(2): 389-398.
[6] Xu Z,Liu J,Luo X P,et al.Software defect prediction based on kernel PCA and weighted extreme learning machine[J].Information and Software Technology,2018,106:182-200.
[7] Nevendra M,Singh P.Software Defect Prediction using Deep Learning[J]. Acta Polytechnica Hungarica,2021,18(10):173-189.
【通联编辑:唐一东】
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!