《中国人工智能学会通讯》——8.42 基于编程模式挖掘软件缺陷

8.42 基于编程模式挖掘软件缺陷

软件缺陷种类繁多且新缺陷不断出现、不同缺陷形成的原因各不相同。试图通过直接描述软件缺陷模式来发现软件缺陷非常困难。所幸,由于程序编写过程需要遵循程序设计语言确立的各种编程规范和约定,无缺陷的正常程序大都应与此“正常模式”相符。因此,要挖掘软件缺陷,可以设法对正常程序需要符合与遵循的编程模式进行建模,据此发现与此“正常模式”相违背的潜在软件缺陷。对编程模式的刻画,可通过对软件项目中的源代码以及其他相关非代码数据的分析和挖掘来实现。

从源代码挖掘编程模式
获得程序正常模式描述的最直接方法是基于程序设计语言的领域知识定义出一套模板,然后根据所定义的模板实现软件缺陷的检测[3] 。,然而,该方法对软件缺陷的甄别效果很大程度上依赖于所定义的模板正确性与完备性,需要经验丰富且对当前程序设计语言构造理解深的专家才能定义出正确且相对完备的模板,因此难以在实际中广泛应用。为此,Li et al [4] 提出了自动模板生成。他们假设程序中缺陷是因不慎引入的,缺陷自身的数量远不及正常模式多。因此,通过频繁模式进行挖掘,即可有效发现与描述程序中的正常模式。他们利用编码规则将函数作为项 (item) 进行关联规则挖掘,获得了函数之间使用的耦合关系,据此发现不满足关系的潜在缺陷。Livshitz et al [5] 通过关联规则挖掘从软件的修改记录 (change log) 中挖掘出了函数的成对使用模式 ( 如函数 malloc () 与 free() 通常成对使用 ),据此发现因未成对使用某些函数而造成的缺陷。

从其他数据源挖掘编程模式
仅利用当前软件项目的源代码进行挖掘,有时并不能涵盖所有有用的正常编程模式。例如,在这个软件中仅对某个 API 使用了一两次,因此很难从中挖掘出针对这个 API 的频繁模式。因此,需要利用其他数据来源来辅助对编程规则的挖掘。Taoet al [6] 借助 Google 代码搜索获得大量对该 API 使用的历史记录,并通过对此进行关联规则挖掘获得API 的使用模式与规范。Tan et al [7] 通过挖掘源代码中给出的文字注释,将注释中指明的函数使用规则映射为一组规则模板,基于此发现程序中与注释所指明的函数使用规则不相符的缺陷。

时间: 2024-11-08 22:18:17

《中国人工智能学会通讯》——8.42 基于编程模式挖掘软件缺陷的相关文章

《中国人工智能学会通讯》——12.6 增量序列模式挖掘

12.6 增量序列模式挖掘 在动态更新的流式数据中进行数据挖掘的需求由来已久[34] ,对于序列模式挖掘来说,当数据发生少量更新时对全体数据重新进行挖掘是不可取的.因此,一些增量序列挖掘算法被提出以适应不断增长的数据,这类算法在更新迅速的大数据中显得十分重要. Parthasarathy 等人[35]提出的 ISM 增量序列模式挖掘算法,基于 SPADE 算法进行扩展,以最小的 I/O 和计算代价处理新增数据.具体地,一种增量序列晶格的结构被用于存储所有频繁序列 , 以及原数据库中位于负边界中的

中国人工智能学会通讯——一种基于众包的交互式数据修复方法 5 相关工作

5 相关工作 数据修复旨在发现和修正数据库中错误的数据.在过去的几十年里,研究人员提出了各种各样自动发现并修复数据库中错误数据的方法[1].这些方法大致可以分为如下三类. (1)传统的方法先依赖各种约束条件,包括FDs[5,7].CFDs[6].完整性约束[4]和包含关系(INCs)[5]来检测数据中的由错误数据引起的不一致性(或冲突):然后用文献[2-4]中的方法修正所有的错误数据,从而解决所有的冲突.对一般的文本数据库,这一类方法中的大部分工作都是使用FD/CFDs进行修复,因为FD/CFD

《中国人工智能学会通讯》——12.5 并行序列模式挖掘

12.5 并行序列模式挖掘 早期的并行序列模式挖掘算法大多被用于解决算法效率低下的问题.因此,许多并行算法是由其串行版本改进得到.例如,Zaki [28] 扩展了由他自己提出的 SPADE 算法,提出了在内存共享框架下的并行算法 pSPADE.pSPADE 的并行性主要来源于对垂直格式数据库的划分,这种划分既可以横向也可以纵向,最终实现了并行.采用了相似策略的算法还有 Par-ASP [29] 和 Par-CSP [30] 等. 近年来,随着数据量的不断增大.数据类型的不断变化,以及新型并行计算

《中国人工智能学会通讯》——8.41 软件缺陷挖掘

8.41 软件缺陷挖掘 软件是计算机系统的灵魂,软件的质量是计算机系统安全可靠运行的保障.伴随着软件运行环境逐渐从封闭.静态的单机环境向开放.动态多变的网络环境过渡,系统功能变得越发复杂,代码规模也不断增加,如何有效保证庞大而复杂的软件系统的质量使其能够正确.可靠的运行,已成为软件研究者和软件开发人员所面临的巨大挑战. 软件质量主要体现为软件的可靠性.可用性.有效性和可维护性[1] ,其中软件的可靠性尤为重要.导致软件系统不可靠的主要诱因之一是软件缺陷[2] .软件缺陷是软件中存在的某种破坏其正

《中国人工智能学会通讯》——8.43 基于缺陷标注挖掘软件缺陷

8.43 基于缺陷标注挖掘软件缺陷 除通过描述程序的正常模式以发现软件缺陷外,另一类有效的软件缺陷挖掘技术则是通过直接对带有人工缺陷标注的程序模块进行学习建模,建立从程序模块的特征表示到软件缺陷的映射关系,以预测给定程序模块的是否可能包含缺陷. 基于缺陷标注挖掘软件缺陷的一般流程如图 1所示.首先人工对软件源代码进行详细软件测试,获得每个模块的缺陷情况标注.然后,利用软件度量 (software metric) [8] 技术提取多种与软件模块的缺陷相关的代码级统计指标 ( 如代码长度.代码分支数

《中国人工智能学会通讯》——12.4 基于模式增长的序列模式挖掘算法

12.4 基于模式增长的序列模式挖掘算法 FreeSpan [15] 和 PrefixSpan [22] 都是由 Han 和 Pei等人提出的基于模式增长的序列模式挖掘算法.它们都是基于频繁模式挖掘中的 FP-growth [23] 思想而被提出的.其中,FreeSpan 基于频繁项将数据库划分成若干投影子数据库,然后在各个子数据库中进行序列模式的挖掘.PrefixSpan 则优化了构建投影数据库的过程,它首先检查前缀序列的位置并且只对后缀子序列进行投影,从而进一步缩小了搜索空间.当挖掘出长度的

中国人工智能学会通讯——混合智能概念与新进展

脑科学以阐明脑的工作原理为目标,近年来已成为最重要的科学前沿领域之一.脑功能计算.脑智能模仿再度成为学术界和产业界热议话题[1-4].欧盟.美国.日本相继启动了大型脑研究计划,强有力推动了人们对脑结构.脑功能和脑智能的探索和认识:另一方面,人工智能研究风起云涌,最近一个标志性事件是谷歌的AlphaGo以4:1战胜围棋世界冠军李世石[5],实现了围棋人工智能领域史无前例的突破.2016年9月斯坦福大学发布了<2030年的人工智能与生活>报告[6],全面评估了当前人工智能的进展.挑战.机遇与展望.

中国人工智能学会通讯——机器学习里的贝叶斯基本理论、模型和算法

非常感 谢周老师给这个机会让我跟大家分享一下.我今天想和大家分享的是,在深度学习或者大数据环境下我们怎么去看待相对来说比较传统的一类方法--贝叶斯方法.它是在机器学习和人工智能里比较经典的方法. 类似的报告我之前在CCF ADL讲过,包括去年暑假周老师做学术主任在广州有过一次报告,大家如果想看相关的工作,我们写了一篇文章,正好我今天讲的大部分思想在这个文章里面有一个更系统的讲述,大家可以下去找这篇文章读. 这次分享主要包括三个部分: 第一部分:基本理论.模型和算法 贝叶斯方法基础 正则化贝叶斯推

中国人工智能学会通讯——无智能,不驾驶——面向未来的智能驾驶时代 ( 下 )

到目前为止似乎比较完美,而实际还 存在着一些问题.我们现在看到很多道 路上面,交通标志牌它的分布非常稀疏, 可能每过一两公里才能够检测出来一个 交通标志牌,因为毕竟这个深度学习算 法是目前最完美的,它有时候还会错过 一个交通标志牌,这时候怎么办呢?我 们会发现在路面上也有非常明显的视觉 特征,我只要把路面的这些视觉特征识 别出来进行匹配,其实是有连续的绝对 的视觉参考的.所以我们做的办法是, 把这个路面粘贴起来.这个粘贴的方法 很简单,跟我们手机拍场景图片一样, 我们慢慢移动的时候可以把这个场景