论文部分内容阅读
为了满足用户不断增加的需求,软件产品需进行不断的维护与演化。而在软件维护与演化的过程中,开发人员面临的主要问题之一就是如何能够快速而又准确的理解整个软件系统。随着系统的演化,其规模和复杂度也在不停地增长,程序理解的任务则变得越来越有难度。程序理解的目的在于获得软件系统信息,以易于人理解的形式展现出来,来辅助开发人员理解软件。本文针对面向对象Java程序的理解进行了相关的技术研究,主要贡献如下:第一,软件系统中的包的规模大小不一。对于小规模的包开发人员可以很容易地进行理解,而对于大规模的包,靠人工理解则比较困难。我们对大规模的包提出了一种包分解技术,即利用主题模型将大规模的包进行聚类来辅助理解。这些大规模的包经过聚类之后分解为小规模的聚类簇,这样,这些聚类簇和小规模包一样更加易于开发人员理解。除此以外,在生成聚类簇的过程中,可利用主题模型技术为聚类簇生成标签,从而更加有助于对这些包的理解。我们通过实验对四个软件系统验证了我们方法的有效性,结果表明我们的方法的聚类结果好于LSI (Latent semantic indexing)的结果,我们的方法得到的每个聚类标签都能有效地辅助程序理解。第二,在实际程序理解过程中,程序员倾向并习惯于先对整个软件系统的特征做整体的了解,之后再去找到感兴趣的代码和所需要的文件。因此,给定了目标系统后,开发人员通常需要对整个系统有一般或层次的理解。传统的开发环境中可提供的视图是从包到类的一个结构,这并不易于理解这些大型软件系统的语义特征。本文我们利用层次主题模型生成一个软件系统的特征树方法,该特征树包含特征层次和文件结构层次,而这两个层次则是将软件系统的特征和文件结构以总体到部分的形式展示出来,从而有助于开发人员对系统语义特征的理解。通过对现实中的软件系统进行实验来验证我们方法的有效性,结果表明我们的方法所得的特征树可以对特征和文件给出很好的展示,而且我们方法的聚类结果在查全率方面优于层次聚类方法。第三,特征及其联系可以有效地帮助开发人员得到一个软件系统总体功能方面的特征信息。为软件系统建立一个基于特征的网络结构,可以帮助开发人员更加简单和快速的理解软件系统。我们通过使用相关主题模型,为软件系统的所有类层次的代码文件建立一个程序网络,并可视化地展示整个软件系统的相关结构和功能,辅助开发者理解整个程序代码。该技术综合考虑了软件代码中的结构性信息和内容性信息,所建立的程序网络可以帮助开发者更好地理解程序的语法依赖关系和语义功能相关关系。我们通过两个实验验证了我们建立的程序网络具有较好的准确性以及可以为指定的类有效地推荐相关类。