论文部分内容阅读
随着信息化的快速发展,计算机数据库系统已经进入社会的各个领域,由此带来了行业数据的爆炸性增长。面对海量的数据,使得存储能力有限的计算机不得不抛弃一些过时的数据。然而,这些数据里面包含了大量的有价值信息却无法获取,面对这一难题,数据挖掘技术应运而生,数据挖掘技术一开始就是面向应用的,它是一门交叉学科,融合了数据库、人工智能、机器学习、统计学等多个领域的学科,基本功能有关联分析、分类分析、聚类分析、例外分析等,与之相关各种数据挖掘工具的应用也逐渐成熟。软件需求的日益增长和开发技术的快速更新,软件系统的规模和复杂性急剧增长,其开发活动和管理难以控制。在软件工程领域中,传统的方法和简单的数理统计方法难以解决数据及信息爆炸式增长所带来的困扰。因此从程序源代码、设计文档以及收集的相关软件数据集中发现有价值的信息并指导软件工程的开发和维护显得尤为重要。所以,一些专家学者想到利用这些成熟的数据挖掘技术研究软件工程项目中产生的大量数据(通常称为软件知识库),进一步发掘隐藏在软件数据背后的潜在的、有价值的信息。数据挖掘技术已经成为软件工程领域软件数据研究的一个热点问题,在软件生命周期中产生许多数据(如文档、程序源代码文件、Bug报告、软件版本更新历史等)中隐藏着许多有价值的信息,利用这些信息可以协助软件开发人员理解系统架构、函数调用依赖等,帮助维护人员了解当前系统中出现的Bug和潜在Bug,进一步增加系统的稳定性、健壮性和可靠性等。软件知识库的挖掘在近几年发展尤为迅速,研究人员已经提出了许多优秀的数据挖掘算法应用在软件工程的生命周期的各个阶段,并且得到了较好的实验结果。本论文的工作主要研究软件知识库中的软件开发、测试和维护过程中的2类数据:软件修改历史数据(存储在SVN)和Bug报告数据(存储在Bugzilla),并依此为切入点挖掘两类数据集来协助开发人员和维护人员。论文主要由以下几个部分展开:(1)数据挖掘和软件工程综述:对数据挖掘技术的由来、经典算法及应用方向进行概述。然后介绍了软件工程学。从大型软件工程项目出发,对庞大的软件工程知识库进行数据挖掘技术的应用。尤其对软件开发和维护方面做了阐述,以及将来比较有挑战性的问题等。(2)软件知识库数据抽取。目前最常用的版本控制工具是SVN或CVS,在软件系统的整个生命周期中,它会产生大量的源代码文件、文档或交流记录等演化历史数据。如果没有足够的经验,庞大的软件系统会让开发人员和维护人员无从下手。为了方便开发人员和维护人员我们需要抽取出软件系统演化历史数据中有价值的信息转化为可挖掘的数据集,然后利用数据挖掘技术分析这些数据,从中找到有意义和价值的知识。我们在这部分主要讨论如何建立抽取器(Java-RESC)从SVN版本控制库中抽取出适合挖掘的XML格式数据集。(3)知识库挖掘在软件开发中的应用。随着软件工程学发展,软件系统越来越庞大,代码文件呈螺旋状上升,从而程序中错综复杂的调用关系是不可以避免的,软件开发的成本不断增加,同时消耗大量的人力、物力。软件开发人员对软件架构不熟悉的话,会严重影响软件的开发周期,同时也会影响到软件系统的质量和稳定性。软件开发过程中往往会出现这样的情况:添加或修改源代码的一个文件,通常都需要添加或修改软件架构中关联的源代码文件,这是因为大型软件系统的各模块之间存在相互依赖性,这种依赖关系很难用传统的静态或动态分析技术进行检测。本文通过数据挖掘技术来研究软件系统各模块源代码文件关联依赖,通过了解各模块之间的调用相互关联来帮助软件开发人员快速理解软件体系结构,并且当开发人员添加、修改或删除某个文件或源代码时,我们的方法可以有效的为其提供修改路径建议。(4)知识库挖掘在软件维护中的应用。软件系统维护是软件生命周期中最重要的一个阶段,也是花费时间最长的阶段。要使软件系统能在实际和不断变化的计算机复杂环境中正常运行,维护人员就必须要及时的修正错误和不断完善系统,只有这样才能保证软件系统的正常运作,软件维护工作已成为延长软件生命周期的主要途径。但是随着操作系统程序的不断庞大、硬件和软件环境变化越来越频繁,加之各种项目文档的缺乏,软件系统维护变得越来越困难。尤其软件开发人员与维护人员不是同一个人的时候,难度是可想而知。为了减轻维护人员了解系统Bug缺陷和防止潜在缺陷修改等方面的工作量,本文就软件工程项目开发过程中的版本控制系统SVN与缺陷跟踪系统Bugzilla中大量的Bug修复源代码更新数据和Bug缺陷报告关联分析,力图通过数据挖掘技术对Bug缺陷报告分类:缺陷变更和潜在缺陷变更。并把潜在缺陷变更列为重点维护对象,及时地动态发现引入缺陷的源代码变更文件历史版本予以改正,避免系统后期的维护成本的增加。(5)最后对本文所做的工作进行总结,包括本文的创新点、不足之处以及本文的进一步工作。