论文部分内容阅读
开发者在执行软件任务时,需要与软件工件如bug报告、源代码仓库等进行交互,为了获取所需要的信息,也许需要彻底地通读整个工件。然而,从bug报告和源代码中提取有价值的信息是一项十分繁琐且耗时的任务。为了高效地求解这个任务,研究者建议为软件工件自动化地建立摘要信息。在本文,为了方便开发者从bug报告和源代码仓库中高效地提取所需要的信息,我们提出使用有监督的学习技术来建立摘要信息。我们使用重复的bug报告来建立bug报告摘要信息,作为自然语言文本摘要任务的一个实例。在另一个调研中,我们执行源代码片段摘要,作为源代码到源代码摘要任务的一个实例。对于bug报告,我们开发了一种基于PageRank的bug报告摘要算法(Page Rank based Summarization Technique),简称为PRST。该算法使用三种不同的相似度度量方法,分别基于VSM.Jaccard和WordNet,来计算主bug报告和对应的重复的bug报告之间的相似度。由于公共可用的bug报告语料库中缺乏主bug报告和重复bug报告的对应关系,无法利用重复bug报告中包含的信息来执行bug报告摘要任务。因此,我们从Mozilla、KDE、Gnome和Eclipse项目中抽取出59个bug报告并建立了一个独立的bug报告语料库,称为OSCAR.同时,我们通过增加重复的bug报告来重构已有的BRC语料库,并将其作为对比语料库。我们采用几种先进的统计评价指标,即精度(Precision)、召回率(Recall),F-Score 和 Pyramid Precision,外在地评价所提出的算法的有效性。结果显示我们提出的算法能够获得相对准确的bug报告摘要信息,并且,提高了已有的有监督的bug报告和精度。同样地,为了建立源代码摘要信息,我们开发了一种基于SVM和NB分类器的代码片段摘要算法(CodeFragment Summarization,CFS)自动生成源代码片段中源到源摘要信息。在软件工件摘要范式中,我们首次引入了基于数据驱动的小规模的众包方法来帮助我们抽取源代码句法特征。我们从Eclipse 和 NetBeans官方FAQs中检索到127个代码片段并构建一个用于测试的代码片段语料库。我们同样采用先前提到的统计评价指标并比较已有的方法来验证我们提出的方法的有效性。结果显示我们的代码片段摘要器在精度上超过已有的代码片段摘要生成方法,同时句法特征对生成的摘要信息上的准确度有着重要的影响。生成的摘要信息能够有效地帮助开发者解决在手的软件任务,并有效地改善软件的性能和质量。