本文基于马樱博士《基于机器学习的软件缺陷预测技术研究》归纳总结而成,不具备论文作用,仅为学校交流

中文摘要

自过去几十年来,软件规模不断扩大,计算机程序设计变得更加复杂,软件规模显著增长,不同大小复杂度的软件被广泛应用于各个领域,电信、商业、国防、交通等各个行业都脱离不开软件的驱动,数据驱动未来,软件定义世界!然而这些行业的正常运行必须依赖软件的正常运行,一个细小的软件故障,都会为企业或者使用者带来不小的麻烦甚至经济损失,这些故障如果发生在国防软件中,更将产生难以估量的损失。但正是这些软件的存在,我们的生活才能顺利进行。但由于我们对这些软件或系统的以来,通常不知道何时,软件运行将会产生错。所以,与现实中其他可见的工程项目相比,软件质量的可靠性工程进度缓慢,也正因如此,这种缓慢的进步,阻碍了软件工程实践研究的发展;且软件的好坏并没有较为成熟和严格的标准,大多为主管喜好决策。因此对于软件缺陷的研究显得更为困难和重要。

英文摘要

Since the past few decades, the scale of software has continued to expand, computer programming has become more complex, and the scale of software has grown significantly. Software of different sizes and complexity has been widely used in various fields. Various industries such as telecommunications, commerce, national defense, and transportation have been separated from different industries. Driven by software, data drives the future, and software defines the world! However, the normal operation of these industries must rely on the normal operation of the software. A small software failure will cause a lot of trouble or even economic losses for the enterprise or user. If these failures occur in the national defense software, it will cause incalculable damage. loss. But it is the existence of these softwares that our lives can proceed smoothly. But because of our experience with these software or systems, we usually don't know when the software will run incorrectly. Therefore, compared with other visible engineering projects in reality, the progress of software quality reliability engineering is slow, and because of this, this slow progress hinders the development of software engineering practice research; and the quality of software is not relatively good. Mature and strict standards, mostly for supervisors’ preferences. Therefore, the research on software defects is more difficult and important.

关键词

软件缺陷预测、机器学习、监督学习、半监督学习

  1. 引言

1.1软件可靠性面临挑战

自过去几十年来,软件规模不断扩大,计算机程序设计变得更加复杂,软件规模显著增长,不同大小复杂度的软件被广泛应用于各个领域,电信、商业、国防、交通等各个行业都脱离不开软件的驱动,数据驱动未来,软件定义世界!然而这些行业的正常运行必须依赖软件的正常运行,一个细小的软件故障,都会为企业或者使用者带来不小的麻烦甚至经济损失,这些故障如果发生在国防软件中,更将产生难以估量的损失。但正是这些软件的存在,我们的生活才能顺利进行。但由于我们对这些软件或系统的以来,通常不知道何时,软件运行将会产生错。所以,与现实中其他可见的工程项目相比,软件质量的可靠性工程进度缓慢,也正因如此,这种缓慢的进步,阻碍了软件工程实践研究的发展;且软件的好坏并没有较为成熟和严格的标准,大多为主管喜好决策。因此对于软件缺陷的研究显得更为困难和重要。

但早在2000年左右,由美国国家科学基金会成立的经验软件工程中心根据多为专家讨论的结果表明,由于软件缺陷对软件项目成败带来的影响和检测的相关问题,同时也提出了软件缺陷预测的研究目标和方向。他们也为该领域的研究贡献了大量样本数据,为软件缺陷预测研究的开展提供了条件。

软件缺陷预测方法的实际应用对软件的生产过程有很大的用处,例如,通过软件缺陷预测,可能获得一个更加高度可靠的软件系统;通过对容易产生错误的模块的关注,提高软件测试过程中的准确率和速度;通过使用面向对象的方法来使得设计更加合理,确定能重构的模块;基于结果分配资源。从而使得项目整体质量得以提高。

1.2软件缺陷预测技术研究内容及意义

软件缺陷预测对于软件质量保证而言是一个重要的活动,能够使用它来对有缺陷的软件模块进行风险预警。目前常用的技术有逻辑回归分析,判别分析和人工神经网络等各种方法。

1.2.1 软件缺陷预测的概念

软件缺陷可从两个方面进行定义,基于产品内部而言,软件缺陷指在系统开发时或维护的过程中存在的各种问题;基于产品外部而言,软件缺陷是指系统没有达到客户需求的某种功能的失效。

导致软件缺陷的原因有很多,例如:

  1. 由于设计问题导致软件功能与需求不一致使得,软件产生外部缺陷。
  2. 由于系统结构复杂,导致在软件测试的过程中不饿能测出所用函数或者对象类之间的相互作用。
  3. 程序之间协调不一致。
  4. 逻辑或者数据范围出问题等

根据机器学习的表示方法,软件缺陷预测模型可以表示为:

设包含n个样本数据集为Dn={(x1,y1),……,(xn,yn)},其中xi∈Rd表示当前model i的属性,yi∈Y为第i个model的标记。这些集合单独包含了k个属性,可以表示为:xi=(a1,a2,……,an)其中ai表示如模块的代码行数等的属性。这些属性可以认为是判断软件是否具有缺陷的重要属性。Y是一个有限集合,表示为标记的类别数。一般情况下只有两种即为有缺陷和无缺陷两种结果。其函数模型f可以表示为f(Rs) →Y。

1.2.2软件缺陷预测研究的基本内容

软件缺陷研究预测模型将模块的耦合渡河复杂度等结构方面的属性作为指标,其目的是探索不同方面的缺陷问题,并解决,以提高预测性能。影响预测模型的主要因素可以为数据集、建立模型的方法,以及软件内在属性和关系建立的合理性等。

1.2.2软件缺陷预测的研究意义

软件质量模型能用来确定有缺陷的程序模块,通过相关技术,对相关软件模块质量进行有针对性的分析。从而能够进行资源分配的合理化。但由于基于机器学习的预测是基于历史数据集的因此受训练数据集的影响较大,且由于行业的不断发展和变化,建立准确的预测模型是十分重要的研究内容。

  1. 软件缺陷预测相关技术

从缺陷预测模型使用的技术来看,经历了单变量统计分析法,多变量统计分析,统计分析联合专家分析,机器学习,以及机器学习联合统计分析的发展过程。

2.1软件缺陷预测的模型及相关算法

用于软件缺陷预测的模型主要有。基于监督学习的预测模型,基于半监督的预测模型,基于无监督的预测模型,基于回归方法的预测模型,基于属性约束的预测模型。

2.1.1 基于监督学习的缺陷预测算法

设有一样本空间为X,x是模块的若干属性组成的向量,x=(a1,a2,a3…..an)其中n为属性个数,ai为属性值,在以软件缺陷为模型的监督学习中,设结果为Y={0,1},0为软件无缺陷,1为软件有缺陷。基于监督的预测模型就是要学习下列目标函数C:X→Y

2.1.2 基于无监督学习的软件缺陷预测模型及相关算法

在日常生活中,很多软件模块都并非标记模块,尤其是面对多样化的工业领域,软件日新月异,很难判断一个软件是否为有缺陷的软件模块,因此很难对这部分数据进行标记。这时默认所有有缺陷的软件模型的某些属性具有类似的特征,所有没有却显得软件模块也拥有类似属性,通过聚类算法,对拥有这些属性的样本进行标记和区分预测。

常见的聚类方法主要包括K-means,X-menas,Fuzzy C-means等。

其中K-means算法可被描述为:

先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:

1)没有(或最小数目)对象被重新分配给不同的聚类。

2)没有(或最小数目)聚类中心再发生变化。

3)误差平方和局部最小。

2.1.3 基于半监督学习的软件缺陷预测模型及相关算法

通过半监督方法简历软件缺陷预测模型的算法有期望最大化算法(EM)建立预测模型,该方法主要分为两步,有E-Step和M-Step,在E-step中,通过统计参数来估计缺失值。此算法把模块标记看作是缺失值,Y={Yobs,Ymiss},其中Yobs = ( yobs,1, yobs,2 ,……, yobs,n )为n个样本的变量集,其中K个变量服从正态分布,均值参数可设为m = (m1, m2 ,……, mk ),协方差矩阵为s jk由此进行似然估计为:

其中,E-step 的计算式为:

M-step估计两参数式为

此为多个分类器集成的方法,设H = {h1, h2 ,…, hc},首先用带标记数据进行初始化,再通过投票原则,更新数据集,用新数据集建立新的分类器,最终集成方法为

2.2基于主动学习的软件缺陷预测

2.2.1研究背景

在上文中提到,软件缺陷样本的有些数据集是没有标记的,那么当数据集中没有标记样本时,如何进行高效的模块标记问题呢?

这里就得用到上文所说的聚类方法。最先进行聚类研究的是由zhong提出的。他们应用K-means聚类算法和Nearal-gas算法将软件分为几个聚类,但是需要专家进行分类,显然这种方法依赖人力较多,效率较低

在后来的发展中,Seliya和Khoshgoftaar提出一种基于约束的半监督聚类方法,该方法利用初始具有标记的模块来进行聚类,然后由专家进行分析。在这个阶段中,初始标记数据是十分重要的,甚至还会大幅度影响实验结果。因此仍然具有较为严重的缺陷

Catral团队提出了基于K-means聚类和指标阈值的方法,使用阈值来减少人力的小号,然而对于聚类数k的值究竟取何值仍然是不明确的,这个因素也会对实验结果产生大幅度影响。最终试验结果表明,使用聚类方法和阈值的无监督软件缺陷预测可以使整个过程自动化,产生有效的预测结果。

而中国马樱博士对该问题提出了一种解决办法即为两阶段的主动学习算法,此算法在没有任何代表及的数据的情况下,能够有效减少人力代价,通过此算法建立的模型也具有较高的预测性能。

2.2.2两阶段主动学习算法

在上文提到的软件缺陷预测模型中,L = {(x1, y1),…..,(xl , yl )} Ì X ´Y 代表了已经有标记的数据集, 其样本数目为lU = {xl +1,……., xl +u} Ì X 表示未标记样本数据集,其样本数目为u .  在软件缺陷预测中, Y Ì (+1, -1) ,有缺陷模块被标记为“ +1”,无缺陷的模块都标记为“ -1”。在之前的方法中,初始阶段的数据都是有标记的,而在此算法中,通过假设l=0的方式让初始阶段的数据不具有标记。

因此在这个阶段不能直接使用主动学习的方法,因为无法在没有标记的数据集上进行分类,为了得到初始标记数据,这里将这类数据命名为代表性数据,通过聚类技术再通过基于SVM的主动学习的算法,获得数据集中的关键数据,将其称为关键信息。由于代表性数据集和关键信息数据的数量都是有限的,因此大幅降低了标记代价。

2.2.3获取代表性数据集

将数据集D表示为Y R (D),设子集和{D1, D2 , …, Dn}其中D1∪D2∪, …, ∪ Dn=D,且任意两个子集之交必为空集,即Di∩Dj=Æ (i, j = 1, 2, …, n;i ¹ j )。子集Di的中心表示为Ri,则

为了找出代表性数据集Y R (D),使用K-means方法,将k设为固定值,设k个数据点即为k个聚类中心。聚类质量公式为

Cj为第j个聚类,x指数据集合岩本,通过K-means便能找到代表数据集。但是可能存在样本“溢出”问题即样本不包含在Y R (D)中。因此对这种算法进行改进得到级联聚类法,该算法伪代码为:

该算法基于K-means聚类算法通过反复进行聚类,寻找聚类中心,直到找到所有不同类别的中心点。由于在软件缺陷预测研究中只有两类,所以从理论上进行计算得到在最坏的条件下,需要调用的时间为「logn+1」「或log(n+1)」,n表示样本的数量。

2.2.4获取关键信息数据

       设Y I (D)为数据集D的关键性数据集。该集合表示分类边界面附近的子集。

这部分数据由于数量少容易被错分,但又包含了建立分类器的重要信息,为了能够正确获得这部分数据集,可利用支持向量机技术。SVM是监督分类器,能够很大限度的减少错误与其上线。能够找到问题的最大超平面。

两阶段主动学习法需要获得关键性数据集,需要考虑两个类的分类问题,即:y∈{1,-1}的线性SVM函数如下:

在标准化数据集后,样本满足g(x)>=1,点x到超平面距离为| w × x + b | / || w ||。支持向量是最接近超平面H的店,满足|g(x)|=1。因此,两类中最接近样本的距离等于2/||w||。所以,寻找最优超平面可描述为:

在使用拉格朗日乘子方法后,优化问题等价于

在本算法中建立的SVM分类器伪代码如下

  1. 总结感悟

3.1本文总结

软件预测是软件行业中十分重要的内容,本文只是展示了基于机器学习的软件缺陷预测的部分内容,实乃冰山一角,软件的发展离不开软件工程师与科研人员的努力,模型的建立更离不开无数科研人才的智慧。本文立足于机器学习,主要讲述了机器学习中基于主动学习的软件预测缺陷,重点描述了马樱博士的科研成果——两阶段主动学习法,该方法对之前传统的软件预测技术进行了改进和研发,提高了软件缺陷预测的效率。

3.2行业未来工作

(1)研究软件模块的内部结构表示方法

针对无本地训练数据的情况,提高软件缺陷预测模型的性能的方法以及在跨领域项目上的预测性能等。

(2)研究半监督学习方法在软件缺陷预测领域的应用

半监督学习犹如直推式半监督方法,基于图理论的半监督方法等。今后的研究可以比较各种半监督方法的预测性能

(3)软件噪音处理和数据偏斜研究

在软件进行预测或者进行机器学习的时候,由于一些不关键数据等各种原因往往会产生噪音,导致实验数据偏斜,我们仍然需要攻克这一难关,使得噪音对预测的影响接近于无

基于机器学习的软件缺陷预测技术的研究综述相关推荐

  1. python预测股票价格论文_基于机器学习的股票分析与预测模型研究

    金融观察 ◎ 基于机器学习的股票分析与预测模型研究 ① 姚雨琪 摘 要 : 近年来 ꎬ 随着全球经济与股市的快速发展 ꎬ 股票投资成为人们最常用的理财方式之一 ꎮ 本文研究的主要目标是利用 机器学习技 ...

  2. 【ML】基于机器学习的心脏病预测研究(附代码,lightgbm模型)

      Hello,大家好,我是augustqi.今天手把手带大家做一个机器学习实战项目:基于机器学习的心脏病预测研究.多的不说,少的不唠,下面开始今天的教程.   以下内容,完全是我根据参考资料和个人理 ...

  3. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,多层感知机模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  4. 【ML】基于机器学习的房价预测研究(系列7:双向LSTM模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 本次实战的项目是:基于机器学习的房价预测研究(附完整代 ...

  5. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,随机森林模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  6. 基于机器学习的个性化推荐算法的研究

    基于 机器学习 的个性化推荐算法的研究 摘要: 如今互联网发展 十分迅速,每天产生的数据量一直在增加,传统的搜索引擎已经不能够适用当前的需求,推荐系统已经成为互联网时代的新宠儿.它已经发展成为一门跨学 ...

  7. GitChat · 安全 | 基于机器学习的 Webshell 发现技术探索

    GitChat 作者:兜哥 原文: 基于机器学习的 Webshell 发现技术探索 关注公众号:GitChat 技术杂谈,一本正经的讲技术 第十一章WebShell检测 WebShell就是以ASP. ...

  8. 让智能交互更加个性化:基于用户的交互设计技术的研究

    作者:禅与计算机程序设计艺术 <5. 让智能交互更加个性化:基于用户的交互设计技术的研究> 引言 5G 通信技术的发展,人工智能技术的普及,以及人们对个性化需求不断提高,让智能交互变得更加 ...

  9. 基于OpenGL的地形建模技术的研究与实现

    毕业论文 基于OpenGL的地形建模技术的研究与实现 诚信声明 本人郑重声明:本设计(论文)及其研究工作是本人在指导教师的指导下独立完成的,在完成设计(论文)时所利用的一切资料均已在参考文献中列出. ...

最新文章

  1. HDOJ2270(How Many Friends Will Be Together With You)
  2. R语言包_recharts
  3. 为什么你那么努力,却很难突破技术瓶颈?
  4. Android中NFC编程
  5. matlab截图放不下,[转载]【MATLAB】MATLAB的自带数据及可生成数据的函数——图片形式...
  6. 数据中心布线系统构成及不同规模范例
  7. 普通进程的守护进程化
  8. hive怎样决定reducer个数
  9. 在windows上模拟linux环境,MSYS2——Windows平台下模拟linux环境的搭建-Go语言中文社区...
  10. iOS 限制输入字数完美解决方案
  11. 深入解析Java字节码和字节码操作类库ASM源码解析
  12. 最常问的Java面试题,有Get吗?
  13. 2016年1月29日报
  14. vue获取tr内td里面所有内容_React中遍历多个数据tr,td
  15. Android集成百度语音识别API
  16. jQuery-实例方法
  17. 场景能量初显,这里有小程序的11个新发现(附2018年7月微信小程序TOP100榜单暨研究报告)...
  18. CCNA认证考试介绍
  19. 在CSDN发布付费资源
  20. 基于STM32战舰开发板的内部温度传感器实验

热门文章

  1. h5红包雨代码_js+css实现红包雨效果
  2. 知识创造的组织特征及过程
  3. 【Some】【Other】程序员的忧虑
  4. 分享一篇价值不错的Python入门教程
  5. 相似度系列9: unify USR: An Unsupervised and Reference Free Evaluation Metric for Dialog Generation
  6. OCR识别/本地DLL
  7. Python简易版的停车管理系统
  8. 微博枪口对准今日头条, 新旧势力***战正式打响
  9. 2021年高处安装、维护、拆除考试题及高处安装、维护、拆除考试题库
  10. 苹果手机怎么生成PDF文件?