APP下载

数据挖掘技术在软件工程中的应用分析

2022-07-09李昱良李均医陈磊

电子元器件与信息技术 2022年5期
关键词:开源漏洞数据挖掘

李昱良,李均医,陈磊

淮南师范学院,安徽,淮南,232038

0 引言

数据挖掘技术在软件工程领域的应用可以溯源至20世纪90年代中期,其在当时最主要的作用便是帮助工程师探寻可重复利用的代码。但随着软件系统复杂程度的日益进步以及数据挖掘技术的更新换代,其在软件工程领域中的应用范围与应用方式也越发广泛、复杂。软件项目开发是一项较为复杂的工作,其中涉及了大量的应用及开发数据,并且这些数据需要做到不断更新,数据挖掘技术在软件工程中的应用,能够实现对软件工程相关数据的有效整合及处理,为具体开发工作的开展提供技术支持和数据保障。针对数据挖掘在软件工程中的应用这一命题进行研究,旨在证明数据挖掘技术是实现低成本、高效率达成软件工程建设目标的有效解决方案,从而充分发扬数据挖掘技术的应用价值,解决传统软件工程开发中存在的数据不可靠、不安全、不稳定问题,促进软件工程技术的不断进步。

1 数据挖掘技术在软件工程中的应用概述

数据技术诞生初期被称为数据知识库中的知识发现,基于本质出发,数据挖掘技术的基础就是信息技术中所涵盖的数据库。软件工程的概念诞生于20世纪60年代,其主要概念便是通过工程化的方法开展系列软件建设与维护工作,进而在既定的成本与进度目标中,为客户开发出符合其需求的高质量、高实用性的软件。反观数据挖掘技术在软件工程中的应用这一概念,其兴起于20世纪末期,是由Allen等相关研究者所共同提出“应用数据挖掘的方式找出代码中的复用关系”,至此,数据挖掘技术在软件工程中得以广泛应用、不断发展。数据挖掘技术现在已经成为软件工程领域内较为关键的科学技术,但是学术界并没有形成对该技术的统一定义。

目前,学术界认可度较高的据挖掘技术定义是由W.J.Frawley等人提出的,他们认为数据挖掘技术指的是在海量数据中提取出具备显著应用价值、运用效率更高、应用形式更为新颖的关键数据,目的是实现对软件工程数据模式的非平凡处理[1]。基于上述定义,总结出数据挖掘技术应用特点:需要确保数据来源的真实性和合理性;确保数据量的充足程度,并且不能出现不完全问题和噪声问题;通过数据获取的知识应当是实用的、具有潜在价值的;如果是用于特定问题分析处理,技术应用对于知识量没有过多要求;能够用来获取终端客户兴趣较高的未知知识信息。

2 数据挖掘技术在软件工程中的应用分析

2.1 挖掘克隆代码

所谓的克隆代码,就是一副以应用为主要目的而所复制、粘贴的代码段,面向实际应用中的不同需求,有时也会做部分修改等特殊化处理。通常情况下,克隆代码在软件工程开发中会占到总代码量的7%~25%,针对克隆代码进行充分挖掘,有助于防止软件工程开发项目中的拷贝性故障,同时有助于软件测试过程中的安全维护[2]。针对克隆代码的检测工作是数据挖掘技术在软件工程领域中最早的应用方式之一,随着相关技术的不断发展,现阶段已经形成了多种应用方式,可归纳如下。

(1)基于标识符对比的应用方式。最为典型的应用方式便是对分词所形成的标识符序列构造前缀树进行分析与检测,并以此为基础,利用Dup、CCFinder等软件对克隆代码进行对比分析。

(2)基于程序结构的应用方法。主要运用抽象语法树抑或是抽象语法前缀树以及程序依赖图等方式表达软件工程中程序代码的语法信息。以此为基础,在相关前缀树、程序依赖图纸上进行深入挖掘,检测重复代码。现阶段可使用的工具主要有CloneDR、GPLAG等。

(3)基于文本对比的应用方法。主要通过对比软件工程程序代码中的语句来判断其重复率,而后采用Hash函数等技术提升程序代码字符串的匹配效率,以达成有效挖掘克隆代码、降低重复代码的目标。

2.2 挖掘漏洞

使用数据挖掘技术检测软件漏洞的重点,在于有效探寻软件开发阶段中已有的以及后续使用阶段中可能出现的技术漏洞与错误,而后结合有效的技术手段,确保其能够得到最高效的修复与完善,以提升软件整体的运行质量以及运行可靠性。数据挖掘技术应用于漏洞检测中通常可以依照如下步骤开展工作。

(1)确定漏洞检测方案、开展漏洞数据收集工作。针对用户的基本需求,确定软件的测试项目以及相应的漏洞检测方案与计划。针对软件全部信息进行大范围检测、分析、排查,而后结合分析结果探寻漏洞,确定软件漏洞信息,开展数据清理与转换。借助相关技术系统,对比软件源信息以及开发目标,选取与软件缺陷、漏洞相关联的数据,充分清理将无价值、不重要的数据。而后,对已丢失的项目数据开展补充工作,将相关数据的属性转换为数值表示[3]。

(2)结合恰当的数据模型,开展软件漏洞验证与训练工作。依照软件开发项目的实际目标,选择适宜的挖掘方式,促使其成为测试集、训练集后,横向对比所有结果,以探寻最合理、最高效的方式。而后结合上文所提及的方式,针对软件漏洞进行重复的描述、定位与分类,同时在软件数据库中应用漏洞数据库所收集到的信息,进一步探寻未知漏洞,并在结合相应规则描述其漏洞后完成分类,最后将挖掘出的漏洞数据知识应用到软件项目测试环节中。

2.3 故障定位

往往程序的多次崩溃、失效等都引发于同一个故障,因此无需在每次程序失效后都对其进行大规模的调试,仅需要对其故障进行定位以及聚类分析便可有效避免此类问题的再次发生。程序切片是最传统、最有效的故障定位技术之一,但基于现阶段愈发复杂的软件工程开发工作,传统的技术已经无法满足当下大型、复杂系统的切片,从而导致难以准确定位故障。基于此,可以在切片结果抑或是切片程序、切片记录上。进一步开展数据统计分析工作,从而有效缩小故障定位的范围、降低故障定位的难度[4]。

2.4 挖掘执行记录

所谓的程序执行记录挖掘,亦可以称为程序规约挖掘,便是指通过对程序执行跟踪过程的分析,对程序代码的协议进行挖掘。软件工程开发过程中针对执行记录的挖掘主要是对程序执行路径开展分析后,挖掘出相应软件程序代码中所具有的关联性。数据挖掘在检测执行记录中的应用,本质上便是通过跟踪相应的执行路径,利用逆向建模的方式检测相关数据信息,以达成有效维护、验证以及了解程序的目的。执行记录挖掘的应用过程,首先需要针对被分析的系统进行初步插装工序,而后针对挖掘软件所对应的编程接口、基本系统、程序模块等进行状态变量处理,同时记录相关数据。最后简约、聚类、过滤目标跟踪过程中所获取的数据信息,进而构建起能够表现系统全部功能的模型。其流程可参考图1(流程图中执行记录表达为程序规约)。

图1 执行记录挖掘基本流程

2.5 挖掘开源软件

开源软件挖掘项目的具体开发环境往往具有全局性、灵活性、动态性、开放性的特征。基于此,需要有效区分并甄别此类软件与其他传统软件,以防工作失误。一般情况下,针对较为成熟的开源软件项目,基于其所参与其中的错误报告、开发者程序以及相应软件应用等皆具有较为完善、具备参考价值的记录,参与开发的技术人员,能够在挖掘技术的帮助下组成较为典型的社会网络,但由于开源软件开放性的特征,致使相关工作人员需在不断变化的过程中完成开源软件的挖掘工作。并且由于开源软件中具有较为典型的动态性特征,由此可实现开源软件的灵活挖掘、优质管理。以牛津大学科研组所开发的Sima系统为例,基于该系统、挖掘技术以及开源软件的动态性、开放性特征,使得该系统可对开源项目的使用者以及跟踪者进行系统性、精准性的跟踪管理[5]。

2.6 挖掘版本控制信息

挖掘技术在版本控制系统中的应用,主要目的便是充分保障项目参与者所共同编制档案、文件以及程序数据库之间的统一性,以方便于后期全局性的更新工作。通常情况下,现阶段的软件工程开发工作基本都会使用到版本控制系统,实施软件工程开发的信息管理与保护工作。同时挖掘技术在版本控制信息中的应用,主要是对已变更历史信息的挖掘,探寻历史版本中不同模块、子系统之间存在的联系性与相互依存的关系。而后针对程序应用的实际使用效果以及未来变化、引入方式等进行持续性的检测与挖掘,以获取其中的漏洞、bug等。挖掘技术在版本控制信息中的应用,能够有效提升系统后期维护的有效性,同时降低开发成本,在有效规避后期变更所引发漏洞的基础上,充分发挥其对后期软件的持续性维护、预警价值[6]。

3 数据挖掘算法及应用方式

因为数据挖掘技术所需要面对更为复杂、多样且海量的数据信息,同时其所要解决的实际问题也是多种多样的。由此,为满足不同情境下软件工程开发的不同需求,便需要应用到各种类型的数据挖掘算法以及应用方式。

3.1 遗传算法

所谓的遗传算法,便是指对生物系统进行模拟后的一种计算机计算方式。该算法由三个算子组成,即为交叉、变异以及选择,是一种类似于生物进化的“模拟器”。该算法最大的优势在于,你解决问题的过程与初始条件并无过多关联,同时探寻最优解的能力极强。奇迹是一种概率性的搜索算法,又可以归纳为一种自适应迭代寻优过程。因为该算法的整体搜索策略以及优化搜索方式在实际计算过程中并不依赖于梯度信息抑或是其他辅助信息,因此结合该算法开展挖掘工作时,只需要探索影响搜索方向的目标函数以及相应的适应度函数,即可为遗传算法构建一种求解复杂系统问题的通用框架。遗传算法并不依赖于软件工程具体问题中的具体领域,其对于问题种类的探析具有极强的鲁棒性,因此可以广泛地应用于软件工程中各个子项目的设计开发中。

3.2 神经网络算法

所谓的神经网络算法是指通过模拟人脑神经元结构,以Mp模型和Hebb学习规则为基础所建立起来的计算模型,实际计算例图可参考图2。神经网络计算法中较具代表性的模型如下。

图2 神经网络计算图例

(1)前馈式神经网络。该网络系统中所包含的神经元之间存在相互联系,能够将输出信号直接作用到输入端。

(2)自组织神经网络。该网络计算中输出节点可以与其所相邻区间中其他节点进行广泛性的连接。当输入、输出节点之间通过某种介质相串联后,结合某种规则不断优化其串联强度,待到网络稳定后,每一邻近区间中的所有节点对某种输出介质都有类似的输出,例如Hopfield、Boltgmnn模型等。

3.3 分类法

数据挖掘技术中应用的分类方法指的是为某种预测分类标号的执行动作,具体需要事先构建特定的分析模型,随后按照既定规则输入相应的数据类集或概念集,数据类集或概念集便是分析模型展开分类操作的基础。

现阶段,在软件工程中应用频率较高的数据挖掘技术分类方法包括判定树法、K-最临近分类法等。判定树法的分类计算逻辑基础为贪心算法,具体需要按照自上而下递归的方式构建判定树,判定树上的每个子节点均代表了不同的软件类别标号,标号显示的便是软件工程数据挖掘对象的具体分类结果。K-最临近分类法是判定树法的一个主要分支,该方法的分类计算逻辑基础如下:假设分类对象在规定特征空间内有K个相似度最高的样本,并且这些样本能够被归到具体类别中,便能够认定分类对象可以被归到同一种类别中。K-最临近分类法对判定树法进行了进一步优化处理,适合应用在样本容量较大的软件工程数据挖掘对象分类中,不适合样本容量较小的分类,否则可能会导致分类失误问题。

3.4 关联法

关联方法指的是在软件工程数据挖掘对象中建立相关联系,该方法规则具备如下特征。

数据挖掘技术在软件工程中的应用对于支持度及置信度均有最低要求,强规则指的便是需要同时满足支持度及置信度最低要求的规则。在事物集中,数据挖掘技术强规则具体指的是,数据挖掘技术应用支持度、置信度需要大于软件终端用户设置的最低支持度、最低置信度。

3.5 聚类法

4 结语

总而言之,随着社会需求的变化,软件工程领域整体也正向着更为复杂、多元且挑战增多的方向发展。这导致在实际的软件开发项目中,需要结合具备量化特征且足够精准的技术,方能够满足不断变化的软件开发需求。得益于数据挖掘技术在软件工程中的应用范围较为广泛、应用技术体系及流程较为成熟的优势,使其成为适合应用在软件工程开发中各项环节的主流技术之一,但是在实际软件工程开发及应用过程中需要明确挖掘对象和挖掘技术。笔者谨以本文抛砖引玉,以期望能为相关研究者的研究工作提供一定理论参考,助力其更好地投入研究工作中,从而推动我国整体软件工程领域的不断发展。

猜你喜欢

开源漏洞数据挖掘
漏洞
改进支持向量机在特征数据挖掘中的智能应用
校园武术“学、练、赛”一体化实践探索
探讨人工智能与数据挖掘发展趋势
五毛钱能买多少头牛
2019(第十四届)开源中国开源世界
2019开源杰出贡献奖
侦探推理游戏(二)
软件工程领域中的异常数据挖掘算法
漏洞在哪儿