中文

利用异常流分析重新审视异常处理实践

软件工程 2017-08-03 v1 编程语言

摘要

现代编程语言(如Java和C#)通常提供处理异常的特性。这些特性将错误处理代码与常规源代码分离,旨在辅助软件理解和维护的实践。尽管认识到异常处理特性的优势,但其误用仍可能导致可靠性下降甚至灾难性的软件故障。先前关于异常处理的研究旨在理解其不同组件中的异常处理实践,例如异常的来源和异常的处理代码。然而,观察到的发现分散且多样。在本文中,为了补充先前关于异常处理的研究发现,我们通过利用异常流分析丰富处理代码的知识来研究其特性。我们的案例研究使用了来自16个开源Java和C#(.NET)库和应用程序的超过10K个异常处理块以及超过77K个相关异常流。我们的案例研究结果表明,每个try块最多有12个可能可恢复但被传播的异常。更重要的是,22%的不同可能异常可以追溯到多个方法(平均1.39,最大34)。这些结果突出了编写高质量异常处理代码的额外挑战。更糟的是,我们确认缺乏对可能异常及其来源的文档记录。然而,可以通过对文档完善的API调用(例如JRE和.NET文档)进行异常流分析来识别此类关键信息。最后,我们观察到Java和C#之间异常处理代码的不同策略。我们的发现强调了利用自动化软件分析来辅助异常处理实践的机会,并表明需要对异常处理实践进行更深入的研究。

关键词

引用

@article{arxiv.1708.00817,
  title  = {Revisiting Exception Handling Practices with Exception Flow Analysis},
  author = {Guilherme B. de Pádua and Weiyi Shang},
  journal= {arXiv preprint arXiv:1708.00817},
  year   = {2017}
}

备注

Pre-print for SCAM 2017