没有合适的资源?快使用搜索试试~ 我知道了~
软件缺陷预测中基于聚类分析的特征选择方法_刘望舒1
需积分: 0 0 下载量 146 浏览量
2022-08-03
18:19:37
上传
评论
收藏 959KB PDF 举报
温馨提示
试读
23页
摘要软件缺陷预测通过挖掘软件历史仓库, 构建缺陷预测模型来预测出被测项目内的潜在缺陷程序模块. 但有时候搜集到的缺陷预测数据集中含有的冗余特征和无关特征会影响到
资源详情
资源评论
资源推荐
论 文
中国科学 : 信息科学 2016 年 第 46 卷 第 9 期 : 1298–1320
SCIENTIA SINICA Informationis
引用格式: 刘望舒, 陈翔, 顾庆, 等. 软件缺陷预测中基于聚类分析的特征选择方法. 中国科学: 信息科学, 2016, 46: 1298–1320, doi:
10.1360/N112015-00276
c
2016《中国科学》杂志社 www.scichina.com info cn.scichina.com
软件缺陷预测中基于聚类分析的特征选择方法
刘望舒
¬
, 陈翔
¨
, 顾庆
¬
*
, 刘树龙
¬
, 陈道蓄
¬
¬ 南京大学计算机软件新技术国家重点实验室, 南京 210023
南京大学计算机科学与技术系, 南京 210023
® 南通大学计算机科学与技术学院, 南通 226019
* 通信作者. E-mail: guq@nju.edu.cn
收稿日期: 2016–04–25; 接受日期: 2016–05–31; 网络出版日期: 2016–09–18
国家自然科学基金 (批准号: 61373012, 61321491, 91218302, 61202006)、国家重点基础研究发展计划 (973 计划)(批准号: 2009C
B320705)、江苏省高校自然科学研究项目 (批准号: 12KJB520014)、南京大学计算机软件新技术国家重点实验室开放课题 (批准号:
KFKT2016B18) 和南京大学软件新技术与产业化协同创新中心资助项目
摘要 软件缺陷预测通过挖掘软件历史仓库, 构建缺陷预测模型来预测出被测项目内的潜在缺陷程
序模块. 但有时候搜集到的缺陷预测数据集中含有的冗余特征和无关特征会影响到缺陷预测模型的
性能. 提出一种基于聚类分析的特征选择方法 FECAR. 具体来说, 首先基于特征之间的关联性 (即
FFC), 将已有特征进行聚类分析. 随后基于特征与类标间的相关性 (即 FCR), 对每个簇中的特征从
高到低进行排序并选出指定数量的特征. 在实证研究中, 借助对称不确定性 (symmetric uncertainty)
来计算 FFC, 借助信息增益 (information gain)、卡方值 (chi-square) 或 ReliefF 来计算 FCR. 以 Eclipse
和 NASA 数据集等实际项目为评测对象, 重点分析了应用 FECAR 方法后的缺陷预测模型的性能,
FECAR 方法选出的特征子集冗余率和比例. 结果验证了 FECAR 方法的有效性.
关键词 软件质量保障 缺陷预测 数据挖掘 特征选择 聚类分析
1 引言
软件缺陷产生于开发人员的编码过程. 需求理解不正确, 软件开发过程不合理或开发人员的经验
不足, 均有可能产生软件缺陷. 而含有缺陷的软件在运行时可能会产生意料之外的结果或行为, 严重
的时候会给企业造成巨大的经济损失, 甚至会威胁到人们的生命安全. 软件缺陷预测 (software defect
prediction, 简称 SDP)
[1, 2]
通过分析软件代码或开发过程, 设计出与软件缺陷相关的度量元 (metrics),
随后通过挖掘软件历史仓库 (software historical repositories) 来创建缺陷预测数据集. 最后基于上述搜
集的缺陷预测数据集, 构建缺陷预测模型, 并用于预测出被测项目内的潜在缺陷程序模块.
但在构建缺陷预测数据集时, 若考虑了大量度量元 (即特征), 会造成数据集中的部分特征是冗余
特征 (redundant feature) 或无关特征 (irrelevant feature). 这类特征的存在会提高缺陷预测模型的构建
时间, 甚至有时会降低模型的预测性能. 因此如何设计出新颖有效的特征选择方法来移除这类特征具
有重要的研究意义.
中国科学 : 信息科学 第 46 卷 第 9 期
Software
repository
Modules
Extracting
modules
Measuring and
labeling
Preprocessing and
building model
Metrics Label
Output
Model
New module
Measuring
Predicting
图 1 (网络版彩图) 软件缺陷预测过程
Figure 1 (Color online) A process of software defect prediction
通过分析特征之间的关联性以及特征与类标之间的相关性, 论文提出一种新颖的特征选择方法
FECAR (feature clustering and feature ranking), 尝试识别并移除缺陷预测数据集的无关特征和冗余特
征. 该方法首先通过分析特征之间的关联性进行聚类分析, 这样可以将具有冗余关系的特征集中于同
一聚类中. 随后对于每一个聚类, 根据特征与类标间的相关性从高到低进行排序, 并从中选出指定数量
的特征, 该阶段可以有效避免选出无关特征. 实证研究中, FECAR 方法借助对称不确定性 (symmetric
uncertainty, 简称 SU) 来计算特征之间的关联性, 借助信息增益 (information gain, 简称 IG), 卡方值
(chi-square, 简称 CS) 或 ReliefF (简称 RF) 来计算特征与类标间的相关性. 以 Eclipse 和 NASA 等实
际项目为评测对象, 结果表明: (1) 不论选择哪种特征与类标间的相关性度量方法 (即 IG, RF 或 CS),
与仅基于排序的特征选择方法相比, FECAR 通过考虑特征聚类可以有效提高缺陷预测性能. (2) 当使
用 IG 或 CS 作为特征相关性度量方法时, 特征聚类可以有效地降低所选出的特征子集的冗余率; 但
使用 RF 这一种可以有效处理冗余特征的度量方法时, 特征聚类反而会提高所选出的特征子集的冗余
率. (3) 若 FECAR 方法使用 IG 作为特征相关性度量方法, 则可以获得最好的缺陷预测性能, 同时也
要显著优于其他经典的特征选择方法.
论文剩余内容结构安排如下: 第 2 节首先介绍软件缺陷预测的研究背景和已有研究工作, 随后重
点介绍论文关注的特征选择方法及其在软件缺陷预测中的应用. 第 3 节介绍 FECAR 方法及其具体
实现细节. 第 4 节介绍论文的实证研究, 包括评测对象、评测指标、实验设计和结果分析等. 最后总结
全文并对下一步研究工作进行展望.
2 研究背景与相关工作
2.1 软件缺陷预测
软件缺陷预测
[1∼4]
是当前软件工程数据挖掘领域的一个研究热点
[5∼13]
. 缺陷预测模型可以将程
序模块的缺陷倾向性、缺陷密度或缺陷数设置为预测目标. 以预测模块的缺陷倾向性为例, 其典型的
模型构造和预测过程如图 1 所示.
该过程主要包括 4 个阶段:
(1) 挖掘软件历史仓库, 从中抽取出程序模块. 目前可以挖掘与分析的软件历史仓库包括项目所
1299
刘望舒等: 软件缺陷预测中基于聚类分析的特征选择方法
处的版本控制系统 (例如 CVS, SVN 或 Git 等), 缺陷跟踪系统 (例如 Bugzilla, Mantis, Jira 或 Trac 等)
或相关开发人员的电子邮件等. 程序模块的粒度根据实际应用的场景, 可设置为文件、包、类或函数
等. 随后将该程序模块标记为有缺陷模块或无缺陷模块, 在图 1 中, 我们将有缺陷模块用深色进行标
记, 无缺陷模块用浅色进行标记.
(2) 通过分析软件代码或开发过程设计出与软件缺陷存在相关性的度量元, 通过这些度量元对程
序模块进行软件度量并构建出缺陷预测数据集.
(3) 对缺陷预测数据集进行必要的数据预处理 (例如噪声移除、特征选择、数据归一化等) 后, 借
助特定的建模方法构建出缺陷预测模型. 目前大部分建模方法都基于机器学习方法.
(4) 当面对被测项目内新程序模块时, 在完成对该模块的软件度量后, 基于缺陷预测模型和度量元
取值, 可以完成对该模块的分类, 即将该模块预测为有缺陷倾向性 (defect-proneness) 模块或无缺陷倾
向性 (non defect-proneness) 模块.
针对软件缺陷预测的已有研究工作可以大致分为两类: (1) 一部分研究工作尝试设置与软件缺陷
存在强相关性的度量元
[14]
. 早期的研究工作主要集中于分析代码模块的规模和复杂度, 重点关注基
于代码的软件度量, 例如: McCabe 环路复杂度
[15]
, Halstead 科学度量
[16]
或 CK 度量元
[17]
等. 近些
年来, 更多的研究工作集中于挖掘软件历史存档, 重点关注基于软件开发过程的软件度量, 包括从代
码修改角度
[18∼20]
, 开发人员经验角度
[21∼23]
, 程序模块间的依赖性角度
[24, 25]
或项目团队组织构架角
度
[26∼28]
等出发来设计度量元. (2) 另一部分研究工作重点关注如何提高缺陷预测数据集的质量. 已
有研究表明数据集质量对缺陷预测模型的构建具有重要影响. 以研究人员经常使用的 NASA 数据集为
例, Shepperd 等
[29]
分析了该数据集的两个不同版本 (分别来自 Promise 库和 NASA 网站), 发现这些
数据集中存在诸多质量问题, 例如部分数据取值遗失或不一致, 以及一些实例存在重复等. 除此之外,
他们还发现不同版本的数据集对实证研究结论存在显著的影响, 因此他们认为研究人员在选用 NASA
数据集时, 需要明确使用的数据集版本并详细介绍数据集预处理步骤以确保实证研究可以重现. 目前
研究人员重点关注数据集中噪声产生的原因
[30∼32]
、维数灾难问题
[33∼38]
以及类不平衡问题
[39, 40]
等.
论文重点针对部分缺陷预测数据集中的维数灾难问题展开深入的研究.
2.2 特征选择方法及在软件缺陷预测中的应用
程序模块在度量时, 若考虑了大量与代码或开发过程相关的度量元 (即特征), 会使得一些数据集
存在维数灾难问题. Hall
[41]
发现: 如果一个特征子集里的特征和类标之间强相关, 同时子集中特征之
间的关联性很低, 那么该特征子集会取得比较好的预测性能. 因此特征选择是解决维数灾难问题的一
种有效方法, 通过识别并移除数据集中的冗余特征和无关特征, 来确保选出最为有用的特征子集来构
建缺陷预测模型. 其中无关特征是指和类标 (即模块是否含有缺陷) 相关性低的特征. 这些特征包含的
信息量对采用的数据挖掘算法不能提供任何帮助, 甚至有时会降低预测性能. 例如模块编号这一特征
就属于无关特征. 如果一个特征重复了其他单个或多个特征含有的信息, 则称该特征为冗余特征. 例
如操作符的数量和操作数的数量这两个特征大致呈正比例关系, 因此这两个特征之间存在一定冗余关
系. 冗余特征的存在会违背一些分类器对特征独立性 (例如 Naive Bayes 分类器假设特征之间条件独
立) 的假设, 从而降低模型的预测性能.
目前已有的特征选择方法可以简单分为两类: 基于排序的特征选择方法和基于子集搜索的特征
选择方法. 其中基于排序的特征选择方法将特征按照与类标之间的相关性从高到低进行排序, 并从中
选出最为相关的特征来构建出缺陷预测模型. 这类方法通过分析数据集特征来估算出一个特征与类
标间的相关性, 其相关性越高, 表明该特征区分不同类别实例的能力越强. 其计算开销与特征数呈线
1300
中国科学 : 信息科学 第 46 卷 第 9 期
性关系, 因此即使在特征数较多的数据集上, 其运行效率也较高. 但这类方法选出的特征子集内通常
会含有冗余特征. 例如操作符的数量和操作数的数量这两个特征, 虽然和类标的相关性很高, 但在使
用基于排序的特征选择方法时, 这两个特征都会被选择出来, 但这两个特征之间却具有冗余性, 因此
这类方法无法达到 Hall
[41]
需要的具有低冗余率的特征子集. 而基于子集搜索的特征选择方法 (例如
CFS
[41]
和 FCBF
[42]
) 虽然能够同时考虑特征与类标之间的相关性以及特征之间的冗余性. 但这类方
法需要搜索的特征子集空间较大, 尽管存在很多启发式搜索策略 (例如贪心算法或遗传算法等), 但在
特征数较多的数据集上, 这类方法的计算开销过大.
目前很多研究人员将特征选择方法应用到软件缺陷预测问题. 在 Menzies 等
[34]
和 Song 等
[35]
提出的通用缺陷预测方法中均包含了基于子集搜索的特征选择方法, 他们在特征子集搜索时分别考
虑了两种不同的基于贪心法的搜索策略, 即前向搜索策略和后向搜索策略. Gao 等
[33]
针对一个大规
模电信遗留软件系统, 考虑了一种混合特征选择方法, 在该方法中考虑了不同的特征排序评估方法和
特征子集评估方法. 最终结果表明移除 85% 的特征并不会大幅度降低缺陷预测性能, 甚至有时会提
高预测性能. Wang 等
[37]
尝试借助集成学习方法将多种特征选择方法进行融合, 他们考虑了 18 种不
同的特征选择方法, 最终发现集成少数特征选择方法, 其预测性能甚至要优于集成所有特征选择方法.
Khoshgoftaar 等
[38]
将特征选择方法与类不平衡学习方法相结合, 他们发现: 在特征选择的基础上, 若
通过采样方法来缓解类不平衡问题, 则可以进一步提高缺陷预测性能. Kim 等
[43]
通过分析源代码、代
码修改和修改日志, 抽取出大量与代码修改相关的特征来尝试构建基于代码修改的缺陷预测模型, 但
Shivaji 等
[36]
发现: 上述方法构造出的训练集含有过多的特征 (实证研究对象包含的特征数介于 6127
个到 41942 个之间), 因此存在明显的维数灾难问题. 他们考察了多种不同的特征选择方法. 结果表明
大部分时候最多只需使用其中 10% 的特征.
与上述研究工作不同, 为了有效地识别并移除特征集中的冗余特征和无关特征, 论文首次提出了
一种基于聚类分析的特征选择方法 FECAR. 该方法包括特征聚类阶段和特征排序阶段. 其中通过分
析特征之间的关联性进行聚类分析, 可以将具有冗余关系的特征集中于同一聚类中, 从而可以有效避
免传统的基于排序的特征选择方法可能选出的特征之间具有冗余关系的问题.
3 基于聚类分析的特征选择方法 FECAR
3.1 FECAR 方法描述
为了进行特征冗余性分析和相关性分析, 该节首先对特征关联性和特征相关性进行定义, 具体的
度量方法将依次在 3.2 和 3.3 小节中进行介绍.
定义 1 (特征关联性 FFC (feature-feature correlation)) 对于任意两个特征 f
i
和 f
j
(i = j), 用
FFC 定义它们之间的关联性, 并借助函数 C(f
i
, f
j
) 计算出两个特征间的关联性强度.
函数 C(f
i
, f
j
) 的取值范围是 [0, 1], 其取值越大, 表示特征 f
i
和 f
j
间的特征关联性越高. 若取值
为 1, 表示特征 f
i
和 f
j
完全相关, 即两者含有的信息量完全相同. 若取值为 0, 则表示特征 f
i
和 f
j
之
间相互独立.
定义 2 (特征相关性 FCR (feature-class relevance)) 用 FCR 定义特征 f
i
与类标之间的相关性,
并借助函数 R(f
i
) 计算出特征与类标间的相关性强度.
函数 R(f
i
) 的取值范围也是 [0, 1], 其取值越大, 表示特征 f
i
与类标间的相关性越高.
论文提出的特征选择方法 FECAR 包括两个阶段: 特征聚类阶段和特征排序阶段. 其中第一个阶
1301
刘望舒等: 软件缺陷预测中基于聚类分析的特征选择方法
图 2 FECAR 方法的流程图
Figure 2 Flow chart of FECAR framework
段通过分析特征之间的关联性进行聚类分析, 这样可以将具有冗余关系的特征集中于同一聚类中. 随
后在第 2 阶段, 对于每一个聚类, 根据特征与类标间的相关性, 从高到低进行排序, 并从中选出指定数
量的特征, 该阶段可以有效避免选出无关特征. 图 2 通过一个简单实例, 对 FECAR 方法的执行流程
进行解释. 图中空心圆圈代表原始特征 (假设共有 12 个特征), 首先执行聚类分析并生成两个聚类, 随
后进行特征选择, 假设从聚类 1 中选出两个特征, 从聚类 2 中选出一个特征, 选出的特征用实心圆圈
表示. 最终 FECAR 方法共选出 3 个特征.
算法 1 FECAR 方法
Input:
原有特征集 F , FCR 度量方法 Rel, FFC 度量方法 SU, 选出的特征子集规模 m, 簇的数量 k
Output:
选出的特征子集 S
/* 特征聚类阶段 */
1: for i = 1 to n do
2: for j = 1 to n do
3: 借助 SU 计算特征 f
i
与特征 f
j
之间的关联性.
4: end for
5: end for
6: 构造出矩阵 M , 其中 M
i,j
表示 C(f
i
, f
j
).
7: for i = 1 to n do
8: 借助 Rel 计算特征与类标之间的相关性, 并构造向量 V , 其中 V
i
表示 R(f
i
).
9: end for
10: 根据矩阵 M 和向量 V , 将原有的特征集划分成 k 个簇.
/* 特征排序阶段 */
11: for i = 1 to k do
12: 将簇 C
i
中的特征按照 R(f
i
) 从高到低进行排序.
13: end for
14: S ← ∅
15: for i = 1 to k do
16: 将簇 C
i
中前
[
|C
i
|×m
n
]
个特征添加到 S.
17: end for
18: return S
因此 FECAR 方法的输入是原有特征集, 指定的 FCR 和 FFC 度量方法, 选出的特征子集规模, 以
及聚类分析时需要生成的簇的数量. 输出是选出的特征子集. 我们使用 SU 来度量两个特征之间的关
联性, 使用 IG, CS 或 RF 来度量特征与类标之间的相关性. 具体如算法 1 所示. 接下来, 将对 FECAR
1302
剩余22页未读,继续阅读
明儿去打球
- 粉丝: 15
- 资源: 327
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0