论文部分内容阅读
随着软件复用技术的不断发展,软件开发者越来越依赖于使用第三方类库来实现特定的服务和功能。通过调用第三方类库中的应用程序编程接口(API),开发者可以节省大量的开发时间,有效地提高软件的开发效率。然而,API通常比较难以学习和使用。面对一个不熟悉的API,开发者倾向于寻找各种各样的API文档来学习API的正确使用。因此,API文档的质量对于API的学习和使用效率,乃至软件的开发效率都至关重要。近些年来,如何有效地解决API文档的各种问题,进而提高API的学习和使用效率是研究人员研究的热点问题。虽然研究人员已经提出了一些算法来解决API文档的问题,但是这些算法没有充分利用API文档的领域特定知识,算法结果有待进一步提升。本文围绕在API的学习和使用过程中产生的三种典型的API文档,即API教程,API技术问答对和API相关的缺陷报告开展分析与挖掘研究。针对API教程冗长且难理解的问题,本文分别提出了一种更精确的监督算法和一种无监督算法,为开发者推荐API教程解释片段。针对API技术问题难回答,本文提出了一种基于API规范和历史信息的API推荐算法,帮助开发者定位正确的API。针对API相关的缺陷难修复的问题,本文提出了基于贡献者写作风格的缺陷报告摘要构建算法,帮助开发者快速理解API相关的缺陷的修复过程。具体来说,本文主要研究工作包括:(1)监督与无监督API教程片段推荐算法设计。API教程的信息冗长延长了开发者学习API的时间。为了有效地解决API教程冗长问题,本文提出了一种监督的API教程片段推荐算法。该方法将API教程切分成片段,为开发者推荐期望的API教程片段。该方法充分挖掘API教程的内在联系,提出了两类重要的分类特征,即共现API特征和基于扩展的API特征,提高了 API教程片段推荐的准确率。同时,为了提高算法的实用性,本文进一步提出了一种无监督API教程片段推荐算法。经过对大量的API教程片段数据进行观察发现,并不是所有的API教程片段都是在解释API。本文提出了识别非解释性API教程片段的启发式规则,并且创新地利用PageRank算法和主题模型算法,分别从词法结构和语义的角度进行分析和推荐。本文提出的无监督算法不仅获得了最好结果,而且具有很好的实用性。(2)基于API规范和历史信息的API推荐算法设计。API类库中通常封装了成百上千的API,开发者面对众多的API难以选择。Stack Overflow等流行的技术问答网站上积累了海量的API相关问题,它们的解决时长显著超过其他问题。为了减少开发者的等待时间,加快API相关问题的解决,本文创新地利用API规范和历史信息来为API相关问题推荐正确的API。本文提出的API推荐算法显著提高了推荐准确率,节省了开发者选择API的时间。(3)基于贡献者写作风格的API相关的缺陷报告摘要构建算法设计。由于API错误使用导致的缺陷通常难以修复。在修复API错误使用导致的缺陷时,开发者通常需要参考以前已经修复好的缺陷的修复方法。因此,对缺陷报告构建精确的摘要可以减少开发者阅读和理解缺陷报告的时间,加快API相关缺陷的修复过程。现有的缺陷报告摘要构建算法仅仅考虑缺陷报告本身的内容,并没有考虑人的因素。本文创新地对贡献者的写作风格进行建模,并对典型的贡献者写作风格进行了实证研究。以贡献者写作风格相似的缺陷报告作为约简训练集构建算法,不仅可以有效减少训练时间,而且可以提高缺陷报告摘要构建的准确率。本文针对围绕API学习和使用过程中产生的典型的API文档开展分析与挖掘研究。在分析了已有工作及其存在的问题的基础上,充分考虑领域特定知识,提出了相应的解决方案。本论文的研究方法可以进一步用于软件工程其他领域的分析研究工作。