论文部分内容阅读
软件复用是解决软件危机的一种有效途径,而基于API库的软件开发是软件复用的一种重要方式。API使用约束描述了程序在调用API方法时必须满足的要求。这些约束的违反将导致使用这些API的客户程序包含缺陷,并可能发生运行错误。因此,API使用约束对于开发正确的客户程序具有非常重要的作用。由于人工建立这些约束繁琐、费时、费力,越来越多的研究人员开展了API使用约束自动挖掘方面的研究工作。 API使用约束的自动挖掘技术通过分析API相关的数据,如API实现源码、API客户代码、API文档等,自动挖掘出API使用约束。然而,现有的工作仍然存在若干尚待解决的问题:首先,现有的工作大多都是基于单一数据源,难以同时保证较高的召回率(Recall)和准确率(Precision);其次,现有的工作难以较好地平衡挖掘到的约束的准确率和方法的执行效率;最后,现有的工作对于一些特殊类型的API使用约束的关注不够。 针对现有研究工作中的问题和不足,本文开展了综合利用多种数据源的若干约束挖掘方法研究。通过综合分析多种数据源,如API源码、文档、客户代码、以及API运行实体,针对不同的挖掘目标,选取不同的多数据源,从而挖掘出高质量的API使用约束。此外,通过采用两阶段式的挖掘,能够在执行效率与挖掘出的约束质量上取得较好的平衡:在初步挖掘阶段,主要是得到一个初步的候选约束集合,在质量优化阶段,从候选约束出发,得到更多或者更准确的约束,由此进一步提高准确率、召回率。 本文的主要工作与创新点包括: 1、基于API源码和文档的资源释放约束挖掘方法 在初步挖掘阶段,该方法使用基于模型的预测技术,综合分析API源码和文档中的多种信息,识别出初步的资源释放约束,由此克服了单一数据源中的信息局限。在质量优化阶段,该方法采用基于调用图、类继承关系的传播技术,识别出更多的资源释放约束,由此提高约束挖掘的召回率。特别地,由于初步挖掘阶段的模型特征会随着质量优化阶段的传播而动态发生变化,该方法将这两个阶段迭代交替进行,从而可以相互配合而发现更多、更准确的约束。 2、基于客户代码、API源码和文档的时序约束挖掘方法 该方法综合利用客户代码、API实现源码和API文档挖掘API调用的时序约束。在初步挖掘阶段,该方法首先从客户代码中挖掘得到一个候选约束的集合,由此降低了后续分析API源码的工作量,缩减了求解空间,提高了方法的总体效率。在质量优化阶段,该方法利用API实现源码和API文档中的信息对候选约束进行验证和筛选,从而最终得到一个准确率较高的约束集合,解决了仅基于客户代码挖掘出约束的误报率高的问题。 3、基于服务文档、客户代码(SDK)和服务运行实体的Web服务参数的依赖约束挖掘方法 该方法综合利用服务文档、客户代码(SDK)和服务运行实体,挖掘Web服务参数的依赖约束。Web服务参数的依赖约束是客户程序在调用Web服务时需要满足的传入参数上的一种重要的约束。在初步挖掘阶段,该方法从服务文档和客户代码(SDK)中挖掘出候选约束。在质量优化阶段,通过测试Web服务的方式,利用服务运行时信息,对候选约束进行自动验证,从而进一步提升约束挖掘的准确率。 实验结果表明,通过合理利用多种数据源,本文所提出的方法能够以较低的执行代价,挖掘出具有高准确率和召回率的约束。同时,本文也研究了一些特殊类型的约束的挖掘方法,如资源释放的约束、Web服务的参数依赖约束等。