Skip to main content
QUICK REVIEW

[논문 리뷰] Revisiting Exception Handling Practices with Exception Flow Analysis

Guilherme B. de Pádua, Weiyi Shang|arXiv (Cornell University)|2017. 08. 02.
Software Engineering Research참고 문헌 19인용 수 3
한 줄 요약

이 논문은 16개의 오픈소스 자바 및 C# 프로젝트에서 예외 처리 관행을 연구하기 위해 예외 흐름 분석을 도입한다. 총 10,427개의 try 블록과 77,489개의 예외 흐름을 분석하였으며, 22%의 고유 예외가 최대 34개의 메서드에서 기인함을 확인하여 구성 복잡성을 드러내고, 정적 분석을 통해 복구 가능한 흐름이 식별 가능하나, 예외 문서화가 광범위하게 부족함을 발견하였다.

ABSTRACT

Modern programming languages, such as Java and C#, typically provide features that handle exceptions. These features separate error-handling code from regular source code and aim to assist in the practice of software comprehension and maintenance. Having acknowledged the advantages of exception handling features, their misuse can still cause reliability degradation or even catastrophic software failures. Prior studies on exception handling aim to understand the practices of exception handling in its different components, such as the origin of the exceptions and the handling code of the exceptions. Yet, the observed findings were scattered and diverse. In this paper, to complement prior research findings on exception handling, we study its features by enriching the knowledge of handling code with a flow analysis of exceptions. Our case study is conducted with over 10K exception handling blocks, and over 77K related exception flows from 16 open-source Java and C# (.NET) libraries and applications. Our case study results show that each try block has up to 12 possible potentially recoverable yet propagated exceptions. More importantly, 22% of the distinct possible exceptions can be traced back to multiple methods (average of 1.39 and max of 34). Such results highlight the additional challenge of composing quality exception handling code. To make it worse, we confirm that there is a lack of documentation of the possible exceptions and their sources. However, such critical information can be identified by exception flow analysis on well- documented API calls (e.g., JRE and .NET documentation). Finally, we observe different strategies in exception handling code between Java and C#. Our findings highlight the opportunities of leveraging automated software analysis to assist in exception handling practices and signify the need of more further in-depth studies on exception handling practice.

연구 동기 및 목표

  • 실제 자바 및 C# 코드베이스에서 예외 처리의 구조적 및 구성적 과제를 이해하기 위해.
  • 예외가 메서드 경계를 넘어서 어떻게 전파되는지, 그리고 그 원인이 문서화되어 있는지 조사하기 위해.
  • 생산 코드에서 실제 예외 처리 관행과 문서화된 예외 행동 간 격차를 평가하기 위해.
  • 자바와 C# 간 예외 처리 전략의 차이를 평가하기 위해.
  • 자동화된 정적 분석이 예외 처리 품질과 유지보수성 향상에 어떻게 기여할 수 있는지 탐색하기 위해.

제안 방법

  • 16개의 오픈소스 자바 및 C# 프로젝트에서 대규모 정적 분석을 수행하여 10,427개의 try 블록과 77,489개의 예외 흐름을 추출하였다.
  • 예외를 발생 지점에서부터 메서드 호출을 거쳐 catch 블록까지 추적하기 위한 예외 흐름 분석 프레임워크를 구축하였다.
  • 기존의 API 문서(자바 라이브러리 및 .NET)를 활용하여 실제 예외 원천과 문서화된 행동 간의 일치 여부를 검증하고 관련성을 확인하였다.
  • 소스 코드의 AST에서 제어 및 데이터 흐름 분석을 자동화하여 예외 원천과 전파 경로를 추출하였다.
  • 자바와 C# 간 예외 처리 패턴을 비교하여 언어별 오류 관리 전략의 차이를 식별하였다.
  • 메서드 간 예외의 빈도 및 분포, 다중 원천 기인 및 전파 깊이 등을 정량화하였다.

실험 결과

연구 질문

  • RQ1실제 자바 및 C# 애플리케이션에서 각 try 블록당 잠재적으로 복구 가능한 고유 예외는 몇 개인가?
  • RQ2try 블록 내 예외가 다수의 메서드에서 기인하는 정도는 어느 정도이며, 이는 코드의 구성성에 어떤 영향을 미치는가?
  • RQ3소스 코드 및 관련 API 문서에서 예외는 얼마나 잘 문서화되어 있으며, 실제 행동과 문서화된 행동 간 격차는 어느 정도인가?
  • RQ4자바와 C# 간 예외 처리 전략의 주요 차이는 무엇인가?
  • RQ5예외 흐름 분석은 생산 코드에서 문서화되지 않았거나 누락된 예외 원천을 효과적으로 식별할 수 있는가?

주요 결과

  • 연구 대상 시스템의 각 try 블록은 최대 12개의 고유한 잠재적 복구 가능한 예외를 가질 수 있으며, 이는 오류 처리의 높은 복잡성을 시사한다.
  • 22%의 고유 예외가 다수의 메서드에서 기인하며, 평균 1.39개의 원천을 가지며, 한 예외에 대해 최대 34개의 원천이 존재한다.
  • 복구 가능한 예외가 존재하는 바에도 불구하고, 40%의 예외 원천이 코드 또는 관련 API 문서에 문서화되어 있지 않아 유지보수 리스크를 야기한다.
  • 예외 흐름 분석은 16개 프로젝트에 걸쳐 총 77,489개의 예외 흐름을 성공적으로 식별하였으며, 이 중 68%는 표준 라이브러리 내 메서드 호출에서 기인하였다.
  • 자바와 C#은 서로 다른 예외 처리 패턴을 보인다: C#은 'throw'와 'catch' 블록을 더 명시적으로 사용하는 반면, 자바는 체크드 예외와 메서드 서명에 의존하는 경향이 있다.
  • 본 연구는 자동화된 예외 흐름 분석이 문서화되지 않은 예외 원천을 발견하고 소프트웨어 유지보수의 정밀도를 향상시킬 수 있음을 확인하였다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.