论文部分内容阅读
关系数据库在1972年诞生后,数据库技术便取得了飞速的发展。随着数据库管理系统的广泛应用,人们收集数据的能力有了巨大的提高,积累的数据也越来越多。这些海量的数据中潜藏着大量重要的、有趣的信息。然而这些隐藏在海量数据中的有趣信息是很难被人们发现,所以许多学者都在研究如何从这个海量数据源中快速高效地获取有趣信息。由于传统的统计学分析方法已经不能够满足目前的需要,于是数据挖掘技术便应运而生。数据挖掘(Data Mining)是人工智能与数据库领域当前研究的一个热点,引起了大量学者与专家的关注。数据挖掘有许多功能,比如关联分析、聚类分析、例外分析等,与之相关技术的应用也非常成熟。利用这些成熟的数据挖掘技术[1]研究软件工程数据是本文的主要研究内容。一个软件工程在其周期里面会产生许多数据(如文档,源代码,代码库,配置文件等),当然这些数据中也隐藏着许多有用的信息。这些信息可以帮助程序员发现代码中的存在但是没有在当前系统中出现的潜在bug、更好的模块化系统、重构遗留系统、以及增加系统的稳定性、健壮性和可靠性等。软件工程数据挖掘在进几年受到了许多学者的关注,他们也提出了许多算法帮助程序员更好的了解软件数据。本论文的工作主要由以下几个内容组成:(1)数据挖掘和软件数据模式挖掘综述。对当前主要的数据挖掘技术以及应用做简要的叙述,接着从软件工程学的角度出发,分别从需求、文档、开发、测试、维护等五个方面阐述数据挖掘技术在软件工程中的应用。包括各个方面的经典算法,以及将来比较有挑战性的难题等。(2)系统运行时的有趣操作模式研究。软件系统在运行时会产生很多的运行日志,它记录系统所产生的所有行为,如用户操作历史,错误信息等,并按照某种规范表达出来。系统维护人员可以根据这些日志(如错误修复,负载均衡等)来维护系统。我们收集系统在运行时产生的操作流程日志,利用数据挖掘技术分析这些日志,从中找到有趣的知识。在这部分将讨论数据挖掘技术如何从运行日志中发现有趣的知识。(3)软件修改历史数据中的模式发现和软件代码(software repositories)bug检测技术研究。随着信息技术的发展,软件系统越来越大,代码量螺旋式的增长,从而程序中的bug和错误的出现是不可以避免的,这些bug和错误不仅增加了维护难度,也增加了软件的成本花费。软件开发人员对软件进行维护的时候,往往会出现这样的情况:由于模块之间存在依赖性,修改软件的一个小模块,通常都需要修改与之相关的模块,这种依赖性很难用传统的动态或静态分析技术[2]进行检测。本文通过数据挖掘技术来研究软件修改历史中的模式,即发现那些经常会一起被修改的代码。这些模式可以帮助软件开发人员发现模块间的依赖性,通过这些依赖性来检测代码潜在的bug。当软件开发人员对软件代码的某个地方进行修改时(假设执行一次维护任务),我们的方法可以有效的为其提供与本次维护有关的其它代码,即软件修改历史模式。(4)最后对本文所做的工作进行总结,包括本文的创新点、不足之处,以及本文进一步工作的展望。