关键词:
软件测试
静态分析
文档缺陷检测
自动化检测
摘要:
现代软件开发通常由许多个人的贡献组成,并且严重依赖可重用的软件构件,如库和框架等,以提高效率。为了正确使用他人的代码,开发人员需要理解文档和源代码,以熟悉必要的知识。文档作为承载软件系统领域知识的重要载体,其正确性与可靠性直接影响到包括程序理解、系统维护等软件工程任务的完成质量。由于现代软件系统的快速迭代与演化,文档很容易过时或包含错误信息。然而由于文档和源代码本身的体系繁杂,手动找出缺陷是非常耗时且容易出错的。因此,自动化检测出Python文档中的缺陷,提高系统文档的准确性和可维护性,具有非常重要的现实意义。本文的主要研究内容为一种基于静态程序分析的Python文档缺陷检测方法。针对Python项目来说,在优秀的代码注释中,通常会包含参数说明、设计原理、范例代码等信息。我们聚焦于以上三个方面,即示例代码错误检测、参数约束一致性检测以及反语言模式检测,这涵盖了API文档中对用户理解最重要的三个方面。本文通过将开源Python框架的源代码包解析成抽象语法树,对Python文档进行静态分析,从而对Python文档中的存在的缺陷进行自动检测。主要方法为:从源代码包的注释中提取代码示例,对示例中所提及的代码名进行分析,检测其是否被预定义过;提取源代码中方法的参数异常规范以及注释中相关的参数使用约束,检测是否存在不一致的情况;从源代码包中提取出对外开放的方法,对代码中的方法名进行反模式检测,最后统一输出文档缺陷。本文在包括Num Py、Sci Py、Sklearn等十个框架上开展实验验证,包括4000多个文件和170多万行Python代码。其中,输入内容为框架的源代码包,输出内容为所检测到的三类文档缺陷。我们检测到了示例代码缺陷数145个,约束条件缺陷数464个,反模式缺陷数324个,经人工检验,可达到68%的精度和75%的召回率,极大地提高了检测文档缺陷的效率。