摘要:近年来,数据挖掘技术在软件工程中产生的作用越来越不可忽视,本文主要从程序代码以及结构方面对数据挖掘技术的应用做了讨论,同时也对面向程序执行记录方面的挖掘进行了探索。
关键词:软件工程;数据挖掘技术;应用
作者简介:郑健(1980-),男,上海市人。硕士学位。现为上海同济大学电子与信息工程学院工程师。研究方向为计算机技术应用
信息技术成为新世纪的显著特征,广泛覆盖到各行各业,软件系统也在不断升级,规模日渐增大,其开发也越来越复杂。原本存在的直觉型处理模式已经渐渐满足不了工程中的过程、活动以及对象等的控制与管理方面的发展需求。这个时候数据挖掘技术的出现,给软件工程带来了发展的重大机会。
1关于程序代码及结构方面的挖掘
1.1克隆代码检测的方法
克隆代码实际上指以复用这样的目的为基础的情况下进行拷贝、粘贴的代码段,并且偶尔还是会对部分代码进行修改,通常情况下,可能会有在软件系统里面占有代码的总数量的百分之七到百分之二十三。其实对于其检测是为了避免故障的拷贝传播这样的不利情况发生,而且对其检测还能对软件进行演化这个过程里起到不错的维护作用,基本上可以说克隆代码检测这样的存在已经是软件工程这个大领域中最先时的数据挖掘需求,目前大概可以整理出四中比较常用的方式,分别为基于文本对比、标识符对比、度量、程序结构的方法。其一是基于文本对比这样的一个方式,它主要是针对程序代码中的一些语句经过对比从而判断,而其对后期的一个改进,这是通过使用一些技术或工具把字符串的匹配效率给提升上来,比如说可以利用Hash函数这样的一项技术用以提升字符串匹配效率,而且采用与其函数技术相对应的Duploe这样的工具予以辅助。其二则是基础标识符对比这样的一种方式,比如比较通用的一种办法就是在构造分词形成标识符序列前缀树完成的情况下在进行对比,与这种方式相对应的有CCFinder或者Dup等等工具。第三种以及第四种方式分别是基于度量的方法与基于程序结构表示的方法,这两种方法分别对应的工具是CLAN与GPLAG、Duplix等等。当然除了这四中比较常用的方法,还有其他的方式,比如频繁项集或潜在语义索引LSI等等。
1.2Aspect挖掘
软件开发的主要目的是为了处理好程序关注点之间关于散列还有其缠结这两方面出现的问题而提出的新程序开发范型。Aspect挖掘与重构是完成遗留系统改造成面向方面软件而必须要处理好的重要问题。原有的克隆代码检测技术因其某一关注点时不时在程序中呈现出相同或者是相近的代码段而依然作为横切关注点挖掘的有效解决途径。横切关注点挖掘也就是常说的Aspect挖掘。针对一些针对性比较强的一些方法,比如基于度量分析或者是形式概念分析等等这类相对而言具有很强针对的办法。利用这样算法而得出的横切代码候选集通常情况下都有点大,所以也可以说在候选集指导下开展面向方面的重构如何进行是比较难的问题。实际上数据挖掘技术还可以在许多方面产生不错的影响。
1.3代码检索
在软件开发方法学中提倡着复用这个重要的原则,近年来有一个软件复用这方面领域里的很重重要的议题,也就是关于在本地或者是面向WEB这些代码库中检索出符合现阶段项目的代码之类的议题,已经出现了几种比较有代代表性的方式,比如分类存储并检索、基于输入-输出映射的检索、基于构件形式化描述、基于代码相似性等等方法,这些方式主要会涉及到有关于聚类、分类、语义分析等等几种比较主要的技术。由于其Web的应用范围不断的扩大,也就不再单单只有文档在其中,还有许多犹如GoogleCod以及Mica等等类型的代码搜索引擎也随着那些Web中的可供参考的代码而出现。
2关于面向程序执行记录方面的挖掘
2.1程序规约方面的挖掘
把程序的执行跟踪进行分析后而知晓程序代码体现出来的协议也就是常说的程序规约挖掘。它实际上也就是根据执行跟踪信息二进行的逆向建模,不但对于程序理解的实施会产生不错的效果,而且对于其程序验证以及程序维护的实施也有着不错的效果。这种挖掘的过程通常是先对需要分析的系统做一个初步的插装,做了之后还需要把软件对API亦或是基本模块的调用以及系统状态变量的值做出记录。然后在对这些记录下来的信息进行一个必要的过滤以及聚类还有约筒,从而也就可以形成规约。从其规模的形式方面进行分析,现阶段有两类规约挖掘的方法,即基于自动机的规约挖掘方法和基于规则的规约挖掘方法。
2.2故障定位
在实际测试这类型的活动中通常情况下若是要保证其测试覆盖的充分性,都需要利用许多测试用例进行测试,这样一来就很有可能使得能让程序失效的用例数量比较可观,从而若是需要用时较短的的情况下全面找出后续程序诊断过程里的故障也就显得很有困难性,单单是调试人员的人工检查是很难达到要求的,因此,这个时候与数据挖掘技术相结合,就能比较容易的满足预期的效果。通常情况下程序面对的多次生效状况也有可能是同样一个故障而引发的。因此也就可以直接对其进行聚类,这样一来也就避免了对每次生效都进行调试。当前Dickinson与Podgurski已经先于其他人提出了关于程序失效这方面可以用聚类实现对调试代价降低的这样具有科学性的思想。而毛澄映那部分人则采取了相异性度量改进等类型的方式让聚类的精度得以提升。在这之后,还出现了某些研究者通过对函数调用对等以及返回值与程序失效之间的关联信息进行分析而实现对故障的定位。相对而言比较传统的一种故障定位技术就有程序切片这种技术,只是还有许多的维护人员对于比较大型的复杂系统类型的切片结果进行理解时通常都会比较有难度系统。
3结语
由于其软件工程中出现的一系列难题,数据挖掘技术的出现在很大程度上改善了软件工程中的一些问题,因此只有不断加深对数据挖掘技术在软件工程中的应用研究,才有利于进一步促使软件工程的发展与进步。
参考文献
[1]舒正渝.浅谈数据挖掘技术及其应用[J].中国西部科技,2010,05:38-39.
[2]李明江,等.数据挖掘技术及应用[J].中国新通信,2012,22:66-67+74.
[3]王晓燕,等.数据挖掘技术分析及其应用评价[J].办公自动化,2007,06:52-54
作者:郑健 单位:上海同济大学电子与信息工程学院