软件API设计缺陷检测文献综述

 2023-08-04 17:53:30
  1. 文献综述(或调研报告):

随着计算机应用的不断深化,软件的需求和规模不断增加。如何快速高效地完成软件开发成为软件行业的追求目标。有效的复用是提高软件开发效率、降低开发成本的重要方式。 其中,API复用是最有效的手段之一。开发人员无须了解API的底层实现或理解其内部工作机制的细节,只需正确利用开放的函数接口即可实现相应的功能,从而提高了软件的开发效率。快速正确地理解API是使用API的前提。如果理解API花费的时间过长甚至超过了重新编写类似功能代码所需的时间,则失去了使用API的意义。API文档对帮助开发人员正确使用API起着至关重要的作用。API文档通过说明API的使用情境,如输入信息描述、版本信息、参数约束条件等,使得开发人员遵循这些规则而避免在使用API时出现错误。由于程序员的疏漏和软件维护升级等,导致API文档存在缺陷的现象时常发生,从而导致API设计缺陷。然而,几项研究已经揭露,即使是主要的API提供商也往往有不完整或不一致的API文档。这这些缺陷文档的存在会严重影响软件开发人员对API的理解,使得开发人员在使用API时陷入困境,从而影响基于这些API所构建的软件的质量。因此,软件API设计缺陷检测显得愈发重要。

近些年来,随着软件规模的不断扩大,API的使用越来越频繁,API设计缺陷的问题逐渐暴露,得到了学术界与工业界越来越多的关注。由于API存在设计缺陷,开发人员在学习以及使用这些不熟悉的API时更加面临挑战。很多学者针对API的使用问题进行了深入分析。2016年Nadi等人总结了开发人员在使用JAVA密码类API的时候所面临的问题:(1)65%的开发人员认为API过于复杂,难以确定正确的API调用序列;(2)文档不完善,开发人员需要基于例子或任务的说明文档作为额外的补充和参考。一旦API使用不正确,将会使程序出现缺陷甚至严重的安全问题,在这种形势下,近年来,关于API相关问题的研究主要有API文档研究,API调用规约研究,API推荐研究等几大类。这些工作为现在日趋热门的API缺陷检测奠定了基础。

API文档的不完整性或非正确性,是API设计缺陷的主要来源。1994年,Parnas的研究指出:如果没有高质量的文档保证,软件复用就难以实现.针对API文档的研究显示,现有文档的质量与文档的重要程度并不匹配.2010年,Robillard和DeLine采访了440位微软公司的工程师,研究他们使用API时面临困境的原因,发现开发人员在学习API的时候主要依赖API文档的使用,低质量的文档API使用的主要障碍。

在检测与修复API缺陷,提高API文档质量方面,代表性的工作很多。2011年,Monperrus等人针对API参考文档中的指示信息进行了经验研究,将指示信息分成了23类,包括参数、返回值、异常处理、字符串格式、数值范围等多个方面,为后续研究奠定了知识基础.2013年,Maalej和Robillard扩大了研究范围,并不局限于指示信息,而是针对JDK以及.NET的参考文档的全部内容进行了深入分析,文档内容被分类,同时统计了每一类信息所占的比例,结果显示:JDK参考文档中43%的内容参考价值并不高;而在.NET参考文档中,这样的内容占到了51%.2013年,Zhong和Su最先开始利用自然语言处理技术与代码分析技术针对API参考文档中存在的问题进行分析,这些问题包括:(1)API参考文档描述了失效的API;(2)API参考文档存在语法错误;(3)API参考文档中的示例程序使用了不存在的类或方法。2017年,南京航空航天大学的周宇等人研究发现,API参考文档存在指示信息与示例程序不一致的情况.针对这种类型的缺陷,研究人员提出了一种基于静态程序分析和自然语言处理的自动化的方案来检测 API文档描述的缺陷,分别抽取文档中的指示信息与示例程序的约束条件进行逻辑验证.结果显示:针对JDK1.8参考文档,该方法检测出了1158个文档缺陷,准确率达到81.6%,召回率达到82.0%。

对与软件API缺陷检测的技术,主要可分为两大类:基于动态分析的缺陷检测和基于静态分析的缺陷检测。基于程序动态分析的技术主要采用了程序谱方法。程序谱是指在程序运行过程中的详细运行信息,包括了条件分支和无循环方法内路径等,可以用来追踪程序行为。

Collofello和Cousins在早期研究中提出程序谱信息可以用来进行缺陷定位。当程序无法正常运行时,可以根据程序谱信息分析出导致程序无法正常运行的可疑代码。早期的研究工作仅利用执行失败的测试用例来实现基于谱方法的缺陷定位,之后的研究认为这种方法是低效的,因此后续工作在失败用例的基础上结合了成功的测试用例并进行对比,在检测结果上有一定的改善。基于动态程序分析的技术可以将错误定位到语句级别,但其执行代价大,同时需要依赖测试用例进行控制流分析。与动态分析技术不同,静态分析方法只需对源代码和API文档进行分析检测,不需要实际执行程序。南京航空航天大学周宇等人提出了一种结合了程序分析、自然语言处理和逻辑推理的自动检测方法它执行四个主要步骤:(1)首先,从源代码中提取带注释的文档;(2)其次,对源代码进行解析,得到一个抽象语法树(AST)。基于AST,分析控制流决策和异常处理以及各模式之间的调用;(3)利用自然语言处理技术对API文档中出现的文本特征进行标记,提取约束和约束的相关部分;(4)最后用一阶逻辑(FOL)公式表示提取的信息,利用可满足性模块理论检测文档和代码之间的潜在不一致性。该方法在实验验证中取得了较好的效果,实现了较高的准确率。

参考文献:

[1] Y. Zhou, C. Wang, X.Yan, T.Chen, S.Panichella, H.C.Gall. Automatic detection and repair of directive defects of java APIs documentation[J], IEEE Transactions on Software Engineering,2018

[2] Hoffman D, Strooper P. Tools and techniques for Java API testing[C].Proceedings 2000 Australian Software Engineering Conference. IEEE, 2000: 235-245.

[3] Nguyen A C, Khoo S C. Discovering complete api rules with mutation testing[C].2012 9th IEEE Working Conference on Mining Software Repositories (MSR). IEEE, 2012: 151-160.

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

以上是文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。