Pós-Graduação em Ciência da Computação – UFPE
Defesa de Tese de Doutorado Nº 710

Aluno: Jairo Raphael Moreira Correia de Souza
Orientador: Prof. Leopoldo Motta Teixeira

Coorientador: Prof. Baldoino Fonseca dos Santos Neto (UFAL / IC)
Título: Taming Exception Handling: Mining Anti-Patterns, Understanding Bugs, and Recommending Handlers
Data: 14/08/2026
Hora/Local: 8h – Virtual – Interessados em assistir entrar em contato com a aluna
Banca Examinadora:
Prof. Breno Alexandro Ferreira de Miranda (UFPE / Centro de Informática)

Profa. Fernanda Madeiral Delfim (UFPE / Centro de Informática)

Prof. Lincoln Souza Rocha (UFC / Departamento de Computação)

Prof. Paulo Roberto Miranda Meirelles (USP / Departamento de Ciência da Computação)

Profa. Roberta de Souza Coelho (UFRN / Depto. de Informática e Matemática Aplicada)

RESUMO:

Mecanismos de tratamento de exceções são projetados para gerenciar eventos anormais que interrompem o fluxo normal de execução de um programa, ajudando o software a se recuperar de situações inesperadas. Embora sejam essenciais para robustez, confiabilidade e manutenibilidade, seu uso inadequado pode introduzir anti-padrões de tratamento de exceções e bugs de tratamento de exceções, levando a falhas, comportamentos incorretos, diagnósticos imprecisos, falhas silenciosas e degradação da qualidade do software. Pesquisas existentes têm se concentrado principalmente em Java e C#, deixando uma lacuna no entendimento empírico de bugs de tratamento de exceções em Python. Esta tese aborda essa lacuna por meio de três estudos complementares organizados em torno de uma perspectiva de detectar–compreender–recomendar: primeiro, desenvolvemos suporte ferramental para detectar anti-padrões de tratamento de exceções; em seguida, conduzimos uma caracterização empírica em larga escala de bugs de tratamento de exceções em Python; por fim, avaliamos se Large Language Models (LLMs) podem apoiar tarefas de recomendação de tratamento de exceções.

Para apoiar a detecção de práticas inadequadas de tratamento de exceções, projetamos e avaliamos a Exception Miner, uma ferramenta de análise estática que identifica anti-padrões de tratamento de exceções em Java, TypeScript e Python. Nossa avaliação em projetos open-source multi-linguagem mostra que anti-padrões de tratamento de exceções são comuns em diferentes linguagens. Python e TypeScript apresentam frequências semelhantes, enquanto Java exibe substancialmente mais ocorrências, com Exception Swallowing e Destructive Wrapping entre os anti-padrões mais prevalentes. Esses achados reforçam a necessidade de suporte unificado e multi-linguagem para analisar práticas de tratamento de exceções em projetos modernos de software.

Para compreender bugs de tratamento de exceções em Python, conduzimos um estudo empírico em larga escala em 550 projetos open-source. A partir de 18.904 candidatos a correções de bugs, identificamos 1.649 candidatos a bugs de tratamento de exceções e validamos manualmente 942 bugs genuínos de tratamento de exceções. Derivamos uma taxonomia com 12 causas-raiz e 25 padrões de correção. Unhandled Exception é a causa-raiz mais frequente, representando 50,64% dos bugs analisados. As estratégias de reparo mais comuns incluem adicionar blocos de tratamento de exceções, alterar tipos de exceção e introduzir condições de raise. Também realizamos uma análise antes-e-depois, que mostra que muitos anti-padrões de tratamento de exceções foram preservados a partir da versão defeituosa, enquanto as correções ainda introduziram um aumento de 196 ocorrências de anti-padrões de tratamento de exceções.

Para investigar suporte automatizado para recomendações de tratamento de exceções, avaliamos empiricamente LLMs baseados em prompting em quatro tarefas de tratamento de exceções em Python: detectar se o tratamento de exceções é necessário, localizar instruções que devem ser envolvidas por blocos try, recomendar tipos de exceção e gerar tratadores de exceções. Utilizando 21 projetos Python open-source, 479.345 funções coletadas e 379 snippets curados, avaliamos CodeLlama, Phi-4, GPT-4 Mini, Claude Haiku 4.5 e Gemini 3 Flash sob quatro estratégias de prompting. Os resultados mostram que LLMs são mais eficazes em tarefas iniciais de raciocínio, alcançando melhores F-scores de 0,752 para detecção da necessidade de tratamento de exceções e 0,733 para localização de blocos try. Entretanto, a recomendação de tipos de exceção e a geração de tratadores permanecem substancialmente mais desafiadoras. Os tratadores gerados frequentemente divergem semanticamente das implementações escritas por desenvolvedores e introduzem, em média, 104,2% mais violações de qualidade relacionadas a exceções, particularmente devido à ausência de encadeamento de exceções e à captura excessivamente genérica de exceções.

De modo geral, esta tese fornece ferramentas, taxonomias, datasets e evidências empíricas para apoiar a detecção, compreensão e recomendação de mecanismos de tratamento de exceções. Os achados sugerem que técnicas de análise estática e abordagens baseadas em LLMs podem auxiliar desenvolvedores na identificação de código propenso a exceções e na melhoria de práticas de tratamento de exceções. No entanto, código de tratamento de exceções gerado automaticamente deve ser validado por meio de análise estática, testes e revisão humana antes de sua adoção.

Palavras-chave: Tratamento de Exceções; Engenharia de Software Empírica; Bugs; Anti-padrões; Análise Estática; Large Language Models.

Comentários desativados

Sobre este site

Portal institucional do Centro de Informática – UFPE

Encontre-nos

Endereço
Av. Jornalista Aníbal Fernandes, s/n – Cidade Universitária.
Recife-PE – Brasil
CEP: 50.740-560

Horário
Segunda–Sexta: 8:00–18:00