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

简介: 本节书摘来自CCAI《中国人工智能学会通讯》一书中的第8章,第8.42节, 更多章节内容可以访问云栖社区“CCAI”公众号查看。

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] 通过挖掘源代码中给出的文字注释,将注释中指明的函数使用规则映射为一组规则模板,基于此发现程序中与注释所指明的函数使用规则不相符的缺陷。

目录
打赏
0
0
0
0
325
分享
相关文章
南京大学与阿里云联合启动人工智能人才培养合作计划,已将通义灵码引入软件学院课程体系
近日,南京大学与阿里云宣布启动人工智能人才培养合作计划,共同培养适应未来技术变革、具备跨学科思维的AI创新人才。
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
深挖“全栈智算”之力 中兴通讯开启AI普惠新纪元
深挖“全栈智算”之力 中兴通讯开启AI普惠新纪元
32 0
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
104 12
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
探索技术之巅:我的编程之旅探索未来:人工智能在医疗诊断中的应用
【5月更文挑战第31天】在这篇文章中,我将分享我的编程之旅,从最初的困惑和挫败,到逐渐掌握技术的过程。我将探讨我在学习编程语言、解决问题和参与项目开发中的经验和感悟。通过分享我的个人经历,我希望能够鼓励那些刚刚开始编程旅程的人,让他们知道他们并不孤单,每个人都会经历这样的过程。 【5月更文挑战第31天】当科技遇见生命,一场革命性的变革悄然发生。本文将深入探讨人工智能(AI)如何革新医疗诊断领域,通过具体案例揭示AI技术如何在提高诊断准确性、降低医疗成本以及个性化治疗方案制定中扮演关键角色。我们将一同见证,随着算法的进步和数据量的增加,AI如何在不久的将来彻底改变我们对疾病的认识和治疗方式。
智能时代的伦理困境:AI技术的道德边界探索人工智能在教育领域的革新之路未来编程:人工智能与代码共生的新篇章
【8月更文挑战第21天】在人工智能(AI)技术飞速发展的今天,我们正处在一个前所未有的科技变革时期。随着AI技术的深入人类生活的方方面面,它不仅带来了便利和效率的提升,同时也引发了关于道德和伦理的深刻讨论。本文将探讨AI技术发展中遇到的伦理挑战,以及如何建立合理的道德框架来指导AI的未来应用,确保技术进步与人类社会价值观的和谐共存。
327 61
人工智能浪潮中的编程教育革新
【10月更文挑战第21天】在人工智能飞速发展的今天,编程教育正面临着前所未有的变革。本文通过探讨AI技术对编程教育的深远影响,以及如何利用这些技术优化教学过程,旨在启发读者思考教育的未来方向。我们将一起探索从基础语法学习到复杂算法应用的转变,并讨论如何培养适应未来社会的创新人才。
人工智能浪潮下的编程新范式
【9月更文挑战第27天】在AI技术飞速发展的今天,编程领域也迎来了新的变革。本文将深入探讨AI如何改变编程范式,以及这种变革对程序员和整个软件开发行业的影响。通过分析AI技术的特点和优势,我们将揭示它如何为编程带来更高效、智能的解决方案,并展望这一趋势对未来软件开发的深远影响。
121 2
人工智能浪潮下的编程实践:从Python到深度学习的探索之旅
【9月更文挑战第6天】 在人工智能的黄金时代,编程不仅仅是一种技术操作,它成为了连接人类思维与机器智能的桥梁。本文将通过一次从Python基础入门到构建深度学习模型的实践之旅,揭示编程在AI领域的魅力和重要性。我们将探索如何通过代码示例简化复杂概念,以及如何利用编程技能解决实际问题。这不仅是一次技术的学习过程,更是对人工智能未来趋势的思考和预见。