Uma Abordagem de Apoio à Extracão, Compreensão e Checagem da Política de Tratamento de Exceções
tratamento de exceções, análise do fluxo excepcional, regras do tratamento de exceções, política de tratamento de exceções, análise estática.
Os mecanismos de tratamento de exceções são recursos fornecidos pelas principais linguagens de programação para auxiliar no desenvolvimento de sistemas robustos. A política de tratamento de exceções corresponde ao conjunto de regras de design do tratamento excepcional e definem os elementos de código (métodos, classes ou pacotes) responsáveis pela sinalização, propagação, captura das exceções e as respectivas ações de tratamento. Historicamente, as políticas de tratamento de exceções dos sistemas são postergadas ou ignoradas no processo de desenvolvimento. Entretanto, estudos empíricos demonstraram que o tratamento inadequado de exceções é uma possível fonte de defeitos. Devido à natureza implícita dos fluxos de exceções, a identificação do tratamento de exceções torna-se uma tarefa complexa. Para amenizar os problemas decorrentes do tratamento inadequado e da falta de compreensão do tratamento de exceções, algumas abordagens propuseram expor graficamente os fluxos excepcionais e outras abordagens definiram linguagens de especificação das regras de tratamento com suporte ferramental para auxiliar na definição e checagem das regras. Porém nenhuma das abordagens propostas oferece suporte ao momento da definição das regras, de forma a auxiliar o arquiteto a extrair as regras a partir da análise de código pré-existente.
Este trabalho apresenta uma proposta para preencher a lacuna existente entre os passos de definição da política e sua compreensão e checagem. Para apoiar a execução da abordagem proposta, foi desenvolvida uma suíte de ferramentas de análise estática que permite: (i) coletar os fluxos excepcionas e as respectivas ações de tratamentos; (ii) a definição dos agrupamentos; (iii) a extração das regras; e, (iv) a checagem das regras e identificação das causas das violações à política. A abordagem é demonstrada em dois estudos empíricos. No primeiro estudo empírico foram analisadas 656 bibliotecas (libs) Java do repositório central Maven com objetivo de extrair e caracterizar a política de tratamento de exceções destas libs. Este estudo revelou que 80,9% das bibliotecas possuem fluxos excepcionais que implementam pelo menos um anti-pattern do tratamento excepcional. O segundo estudo empírico teve como objetivo investigar os benefícios que a extração das regras excepcionais pode ter na compreensão e refinamento da política de tratamento de exceções. Dois sistemas de informação Web (i.e., IProject e SIGAA) foram utilizados neste segundo estudo. Neste estudo pudemos observar que todas as regras extraídas pelo suporte ferramental correspondiam às regras reportadas pelos arquitetos, e que os resultados do processo de extração permitiram que novas regras fossem adicionadas pelos arquitetos. Essas regras adicionadas correspondiam à 57,1% (IProject) e 52,8% (SIGAA/Graduação) das regras da política dos sistemas analisados. O processo de checagem das regras definidas com o apoio da abordagem mostrou que 35,6% e 45,7% dos fluxos excepcionais do IProject e SIGAA/Graduação, respectivamente, violavam alguma das regras de tratamento de exceções.