基于机器学习的软件缺陷识别的必要性

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:D_boy85
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:软件缺陷是影响软件质量的关鍵因素,及早发现并排除软件缺陷是软件生命周期中重要的环节。随着代码数量级的与日俱增,早期的人工排查显然降低了审查效率和准确性,同时增加了审查成本。所以基于机器学习的软件代码缺陷识别技术是一种提升软件可靠性,适应当今社会发展速度的必然选择。
  关键词:软件缺陷;软件可靠性;机器学习
  中图分类号:TP181 文献标识码:A 文章编号:1009-3044(2017)25-0185-02
  Abstract: Software defect is a critical factor that affected the quality of software, early detection and elimination of software defect is a vital link in software life cycle. With the increasing number of code order of magnitude, early manual inspections observably reduced the efficiency and accuracy of the review, while increasing the cost of the review. Therefore, the software code defect recognition technology Based on machine learning is an inevitable choice to improve software reliability and adapt to the speed of social development.
  Key words: software defect; software reliability; machine learning
  据统计,在软件开发中约42%的经费用于投入与软件缺陷相关的工作。可见现如今对软件缺陷进行研究在理论和实践中都极有价值。
  软件缺陷在软件开发周期内通常不可避免[1]。其中,.软件缺陷通常指可运行产品中可能导致软件失效的瑕疵,定义两个有较强的关联性的重要属性:严重性和优先级,从不同的角度描述软件缺陷对软件质量和最终用户的影响程度及处理方式[2,3]。其中严重性属性指缺陷对整个被测系统造成的破坏程度,优先级属性则指影响缺陷处理顺序的指标,是一种动态的拓扑结构。另一方面,故障、失效和问题是与缺陷密切相关的概念。每个故障(失效,问题)一定是一个缺陷,但并不是每个缺陷都是一个故障(失效,问题)。
  1 检查点
  定义计算机检查出的缺陷称为检查点,但检测出的缺陷并不是完全准确。有一部分缺陷会引发运行时异常(如空指针异常、内存溢出),另一部分则为误报。因此为保证准确性,需要对所有的检查点都进一步确认其真实性。
  表1为项目组前期对Android4.0的缺陷检测结果,共计算出35293个检查点,虽然计算机测试只花费了102个小时,但确认这些缺陷花费了近4个人/月的工作量。
  因此通过机器学习的方法实现软件代码缺陷识别是十分必要的,相较早期的人工检测能够以极低的成本,更高的效率,更精确的准确度提前预测产品缺陷分布状况的可能性,从而证明可通过机器学习的方法进行早期缺陷的预测来获得更高的可靠性[4,5]。
  2 检测工具DTS
  DTS可测试Java/C/C 故障模式、安全模式和疑问模式等约200种,规则模式约100种,已逐步成为可以和美国工具相抗衡的国产工具。 其依据的检测原理是通过静态的方法分析配置的缺陷模式,检测出在动态运行过程中可能出现的问题。其中用DTS测出的故障密度是1个缺陷/KLOC,其他国产软件大致是4~6个缺陷/KLOC。统计表明此类工具8小时可以处理50~100万行源代码。正因为此类工具的上述特点,使得目前在软件测试领域,代码缺陷检测技术已同单元测试、功能测试等一样的基本方法[6]。
  3 机器学习
  3.1 定义
  机器学习意旨通过计算机模拟人类的学习活动,包括有监督学习和无监督学习两大类。
  3.2 分类
  根据处理的数据是否存在人为标注来判断是否是机器学习,主要被分为两种学习方式,即监督学习和无监督学习。监督学习是指将学习目标进行有标签的数据作为辅助来完成的学习,这种方法在学习中的效果较好,但有标签的数据通常价格高昂,无监督学习是指计算机自主学习,利用多种数据进行先验式的知识吸取,但这种方法学习的效率较低。这两种方法的共性是相同的,通过构建数学模型进行最为优化的解答。
  3.3 模型构建
  模型构建可分为模型准备,模型假设和模型构成三步,如图1所示。
  3.4 模型评估
  3.4.1 留出法
  l 将数据集分为两个互斥的集合,即用S训练出模型后,用T来评估其测试误差。
  l S与T的划分要尽可能保持数据一致性(分层采样法)。
  l 一般采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
  l S与T的样本比例大约为1:2~1:4,一般而言,T中应至少有30个样例。
  3.4.2 交叉验证法
  l 将数据集划分成k个大小相似的互斥子集,每个子集都保持数据分布的一致性,每次用k-1个子集作为训练集,余下的那个子集作为测试集,进行k次训练和测试[7],最终返回的是这k个训练结果的均值。
  l 为了减少因样本划分不同而引起误差,交叉验证法通常要重复p次,最终的评估结果是这p次k折交叉验证的均值。
  4 实验
  Weka作为一款机器学习的工具,已经提供了诸如分类,聚类,关联规则等方法[8]。但是算法的选择很有学问,选择何种算法需要建立在大量的实验分析结果的基础上。同时Weka作为开源工具集成了众多算法,开发人员可通过面向对象的主流语言Java在其架构基础上进行扩展,开发出所需的更多算法来满足实验需求[9]。
  5 结束语
  综上所述,基于机器学习的软件缺陷识别技术在软件测试中的地位越来越重要,因为普遍存在的较高误报率,继续通过人工确认的方法的低效率与低准确性严重阻碍了该技术的发展。所以基于机器学习的软件代码缺陷识别技术是一种提升软件可靠性的必然技术,能够将人彻底从繁重的确认工作中解放出来,是适应当今社会发展速度的必然选择。
  参考文献:
  [1] 马皖王莹,陈林,陈芝菲,等. 基于复杂网络分析的软件高危缺陷评估方法[J]. 计算机科学与探索,2014(8):956-965.
  [2] 陈琰. 软件缺陷管理系统的设计与实现[D].华东师范大学,2006.
  [3] 陈顺. 试述软件缺陷的严重性与优先级[J]. 无线互联科技,2013(8):108-109.
  [4] 刘旸. 基于机器学习的软件缺陷预测研究[J]. 计算机工程与应用,2006(28):49-53.
  [5] 刘旸. 基于SVM的Web应用缺陷预测方法[D].中国科学院研究生院(软件研究所),2005.
  [6] 于超. 基于Java EE的高速公路收费管理系统的设计与实现[D].西安电子科技大学,2012.
  [7] 李涛. 支持向量机在风电功率预测中的应用研究[D].北京交通大学,2012.
  [8] 王淑珍. 机器学习算法的Weka嵌入[D].华南理工大学,2013.
  [9] 刘卓. 数据挖掘技术在高校图书推荐系统中的应用[D].大连理工大学,2012.
其他文献
移动互联网是移动通信和传统互联网融合的产物,能够让用户随时随地随心地接入互联网。迎新系统是高校进行新生信息管理与服务的平台,互联网时代下传统的迎新模式已无法适应当
摘要:该文介绍了MOOC模式及其在网络综合布线教学中的具体应用,利用Moodle开源软件包创建网络综合布线MOOC课程,具有五大功能,能解决网络综合布线教学中存在的问题与不足,从而提高学习效率,有利于培养学生的理论知识素养,提高实际操作能力。  关键词:MOOC;Moodle;网络综合布线  中图分类号:G424 文献标识码:A 文章编号:1009-3044(2017)30-0141-02  Th
随着社会的发展和人民生活水平的不断提高,人们对药品质量的要求越来越高,对药品检验的质量也相应提高.我国加入WTO后,在国际贸易中可能出现由于对检测数据的不信任,而造成贸
名家的作品,文采斐然,意义深邃。不过,从语言规范化的角度逐字逐句认真“咬嚼”下来,觉得也不无可以商榷之处。美玉微瑕,令人遗憾。虽说瑕不掩瑜,但为作者、编者,尤其是读者计,还是以及时指出为是。以下是笔者教学中发现的苏教版高中语文教材“必修一”和高中语文读本“必修五”中的几处错误,指出来并予以更正。  1.我细心收起了自己的那张白纸,一如收起了一张既定的船票。知道了航向和终点,剩下的就是帆起桨落战胜风
图像在变换成目标尺寸的缩放过程中,均匀缩放容易造成图像的失真,直接裁剪方式可能又会造成图像重要内容的缺失,seam carving算法是一种基于内容感知的图像自适应缩放算法,能较好地解决以上问题。该文对seam carving缩放算法进行了研究,首先实现了图像水平和垂直方向上的自适应缩放算法,并与传统的缩放算法进行实验对比分析;然后对seam carving算法进行改进,通过人工干预选择用户感兴趣
药品集中招标采购是药品流通领域改革中出现的新事物,无成功经验可借鉴。我省在药品采购改革试点工作时,综合考虑本省药品经营企业和医疗单位的实际情况,权衡了各方面、各部门的
摘要;伴随着技术发展进程的不断推进,计算机网络化运行模型逐渐渗透到人们的生活中,其中,网络工程建设对于生产能力以及生产活动的运行效率都会产生一定的影响,这就需要相关技术人员结合管控机制和故障检测机制等建构更加有效的运维体系。本文对软件编程和接口技术的相关内容、实现路径以及功能修正进行了简要分析,并针对相关发展趋势展开了讨论,旨在为相关技术人员提供有价值的参考建议。  关键词:软件编程;接口技术;实