array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 How Far We Have Progressed in the Journey? An Examination of Cross-Project Defect Prediction - 爱码网

题目: How Far We Have Progressed in the Journey? An Examination of Cross-Project Defect Prediction
作者: Yuming Zhou, Yibiao Yang, Hongmin Lu, Lin Chen, Yanghui Li, Yangyang Zhao
单位: Nanjing University, Guilin University of Electronic Technology
发表: TOSEM 2018

动机

调研我们在跨项目缺陷预测领域究竟取得了多大的进步。

跨项目缺陷预测

  • 一直是缺陷预测领域中的难点
  • 原项目和目标项目的数据常常呈现出截然不同的分布,违背了大多数模型的相似分布假设
  • 很多源项目和目标项目数据由不同度量元组成

方法

  • 首先利用目标项目来构建两个简单的缺陷预测模型:ManualDown和ManualUp,一个认为较大的软件模块更有可能包含缺陷,一个认为较小的软件模块更有可能包含缺陷,这两个模型的构建不需要源项目。
  • 然后利用相同的数据集,相同的性能指标来衡量以往工作中的模型与这两个简单模型相比的优势。以往模型的性能直接引用原文章中列出的实验结果数据。

准确性评估

分类模型的性能指标

  • Recall, Precision, PD, PF, Correctness, Completeness, Fβ, G1, G2, G3, Balance, ED, MCC, NECM, Z:在TP, FP, FN, TN基础上得到
  • AUC:ROC曲线下方区域的面积。ROC曲线是以二分类模型的PF为x轴,PD为y轴得到的一个曲线

排序性能指标

  • AUCEC, NofB20, PofB20, E2(R): 效率相关的指标,考虑检查被预测为有缺陷的模块的开销。衡量开销的指标是源码的行数(SLOC)。
  • FPA, E1(R), E2(R), [email protected]: 效率无关的指标,不考虑对测试开销的检查。其中E1(R)和[email protected]检查排名最高的部分结果的性能,而FPA检查整个排行榜的性能。

本文检查的工作

我们在2002年到2017年间的跨项目缺陷预测工作中展开研究,起始年份设置为2002年因为第一篇跨项目缺陷预测工作(下文中的BMW 2002 TSE paper)在2002年发表。我们设定了如下的挑选工作的标准:

  • 工作使用监督学习,研究跨项目缺陷预测
  • 论文用英文写
  • 能够获得全文
  • 如果文章在会议和期刊都发表过则选择期刊的版本
  • 预测场景是分类或排序

How Far We Have Progressed in the Journey? An Examination of Cross-Project Defect Prediction

上图是我们选择工作的过程:我们从Google Scholar,文献综述以及我们阅读过的文献中选择文献。我们以一种滚雪球的方式收集了引用过BMW 2002 TSE paper的46篇相关文章。然后,我们利用“cross project” + “defect prediction”作为关键字进行搜索,又找到了与这46篇文章相关的13篇文章,然后我们又利用“cross company” + “defect prediction”作为关键字,找到了3篇与上面59篇相关的文章,然后我们又用“cross project” + “fault prediction”作为关键字,找到了1篇相关文章,最后我们利用“cross company” + “fault prediction”作为关键字,没有找到任何新的相关文章。通过以上步骤,我们在Google Scholar上找到了共63篇监督学习的跨项目缺陷预测文章。

在谷歌学术之外,我们从Hosseini等人的综述中找到6篇相关文章。Hosseini等人从ACM,IEEE, ISI Web of Science,Google Scholar和Scopus上找到了46篇CPDP的文章,通过筛选和去重,我们找到了6篇符合标准并且没有被我们发现的文章。此外我们从我们阅读过的文献中又找到3篇不在以上集合中的文章,因此我们的研究共基于72篇CPDP文章。

下表是这些文章的总体框架,对于没篇文章,第二列和第三列分别列出了发表年份和标题。第4列和第6列列出了源项目和目标项目的属性,包括源/目标项目数,以及项目所用的语言。如果项目数和版本数相同我们将不会列出版本数。第4列和第5列的灰色背景表示源和目标项目是不同的项目(???)。7到12列是模型解决的问题或挑战,“Yes”表示文章明显考虑到了相关内容,表格为空表示文章没有做这件事。13列到16列表示评估内容,包括训练数据的选择,应用场景,主要性能指标,和测试数据是否可获得。第15列的灰色背景表示研究只以图的形式给出了结果,而没有给出具体数值。第17列表示文章是否使用了模块大小特征作为baseline。最后一列说明文章中的方法是否打得过我们提出的baseline。

表太大了截图截不下自行翻论文.jpg

从表中我们可以得到如下结论:

  • 最早的一篇CPDP工作把CPDP应用在了面向对象的软件项目上,结果显示利用一个项目构建的模型对另一个模型进行预测,分类的结果很差,然而排序的结果很好。
  • 近年来CPDP发展得很好,整体结果显示CPDP取得了与WPDP(项目内缺陷预测)相当甚至更好的效果。
  • 现有的CPDP工作涵盖了许多课题,包括在不同验证集(开源/不开源)上验证CPDP效果,不同开发阶段(设计/实现),不同编程语言(C, C++, C#, Java, JS, Pascal, Perl, Ruby),不同模块层级(change,函数,类,文件),不同缺陷特征(语义,文本,结构化信息)。
  • 结果显示了CPDP过程的不同模块分布的严重不平衡,在关键模块中,“样本过滤”和“迁移分布”是最重要的两个,而“数据私有化”和“数据同质化”是两个最少被涉及的模块。没有一篇工作涉及到了全部模块,绝大部分只涉及了不到3个模块。
  • 在分类工作中,绝大部分工作在完整的开源的目标项目上对CPDP进行评估,只有小部分工作利用一个项目的一部分进行模型的测试。
  • 大部分研究工作给出了模型评估结果的具体数值。
  • 在72篇文章中,只有两篇文章采取了我们所采用的简单模型作为评估baseline。

实验设计

简单模型

相关文章: