[pt] Os mecanismos de tratamento de exceções têm o objetivo de
aumentar a
robustez e a modularidade do software na medida em que
promovem a separação entre
o código dedicado ao tratamento de erros e código associado
ao fluxo normal de
execução do programa. Estes permitem a detecção de erros e a
associação de respostas
adequadas aos mesmos, através da execução de códigos de
recuperação que são
geralmente encapsulados em tratadores (do inglês: handlers).
A importância dos
mecanismos de tratamento de exceção é atestada pelo fato
destes fazerem parte da
maioria das linguagens de programação mais utilizadas na
atualidade: Java, C++ e C#.
Na última década a programação orientada a aspectos (POA)
vem sendo
amplamente utilizada como forma de modularizar interesses
que se encontram
espalhados nas decomposições primarias de um sistema (e.g.,
funções, classes,
métodos) em uma abstração chamada aspecto. Os aspectos
utilizam construções
especificas para promover modificações externas nos
programas, incluindo
comportamentos adicionais em pontos específicos do código.
POA vem sido utilizado
com o objetivo de aumentar a modularidade do código de
tratamento de exceção e de
interesses transversais igualmente importantes tais como:
persistência, distribuição,
segurança, controle de transações e monitoramento.
De acordo com alguns estudos empíricos, POA tem sido usado
com sucesso com
o objetivo de promover o tratamento de erro modular em
vários cenários de tratamento
de exceções. Porém, é sabido que mecanismos de programação
flexíveis (e.g., herança
e polimorfismo) podem ter um efeito negativo no tratamento
de exceções. Se por
um lado os mecanismos de composição POA baseados na inversão
de controle
podem trazer um novo leque de possibilidades de projeto,
promovendo em
muitas circunstâncias uma maior estabilidade do projeto (do
inglês: design
stability), eles podem perder seu valor se ele torna o
tratamento de exceções
propenso a erros (do inglês: error-prone). Refinamento
aspectuais do
comportamento do código base, podem por um lado promover a
robustez do
sistema em situações onde exceções são lançadas ou
contribuir para os
problemas típicos de tratamento de exceções mal projetados
tais como: (i)
exceções não capturadas (do inglês: uncaught exceptions);
(ii) exceções
capturadas por tratadores genéricos (do inglês: exception
subsumption) (i.e.,
exceções capturadas por um tratador cujo argumento é um
supertipo da exceção
a ser tratada); (iii) e exceções capturadas por tratadores
errados (do inglês:
unintended handler action).
Infelizmente, não existe nenhuma avaliação sistemática dos
efeitos positivos e
negativos da programação orientada a aspectos na robustez do
código de tratamento de
exceções. Os trabalhos de pesquisa descritos na literatura
têm se limitado a analisar os
impactos dos aspectos no fluxo normal de execução do
programa. Além disso, a
maioria dos estudos empíricos não vai além de discussões
sobre os ganhos de
modularidade e as ciladas associadas à utilização de
aspectos - para o tratamento de
exceções e de outros interesses transversais. Por exemplo,
estes estudos não levam em
consideração as conseqüências inerentes as novas exceções e
tratadores que são
adicionadas ao código base junto com a nova funcionalidade
adicionada pelos aspectos.
Esta tese descreve o primeiro estudo sistemático que avalia
quantitativamente o
impacto da composição aspectual no fluxo excepcional de
programas. Este estudo se
baseou na utilização de uma ferramenta de análise do fluxo
de exceções chamada
SAFE (do inglês: Static Analysis for the Flow of Exceptions)
desenvolvida ao longo
deste trabalho e na inspeção manual do código de tratamento
de exceções de um
conjunto de sistemas para os quais a versão Java e AspectJ
estavam disponíveis. A
ferramenta SAFE foi construída com base no framework SOOT
para a análise e
ot / [en] It has been empirically observed that aspect-oriented (AO)
decompositions
promote the modularity and the design stability of software
systems containing
crosscutting concerns. However, most of this existing
empirical research has focused
on the positive and negative impacts of AO programming in
the modularization of
crosscutting concerns in the context of normal control flow
of programs.
Consequently, most of these works do not account for the
exceptions that may flow
from aspects: when an aspect adds a new functionality to
specific points in the code,
this additional behavior may also bring new exceptions. An
aspect also has the ability
to handle exceptions that were previously handled inside the
base code. Moreover, the
exceptions that escape form aspects also flow inside the
program, and may lead to
unexpected error-prone scenarios, such as: unintended
handler actions and uncaught
exceptions. This thesis presents an empirical study to
evaluate the impact of aspects on
the exception flow of programs. To support the reasoning
about the flow of exceptions
on AO programs, a static analysis tool called SAFE (Static
Analysis for the Flow of
Exceptions) was implemented. Based on data empirically
collected during the study we
characterized a catalogue of bug patterns related to the
exception handling code of AO
programs. To help AO developers to check the reliability of
the exception handling
code, this work presents verification approach - supported
by the SAFE tool - which
provides guidelines to counter these bug patterns. Our
findings show that the exception
handling code in aspect-oriented programs tends to be
error-prone, but that a
verification approach based on static analysis can lead to
significant improvements.
Identifer | oai:union.ndltd.org:puc-rio.br/oai:MAXWELL.puc-rio.br:12968 |
Date | 15 January 2009 |
Creators | ROBERTA DE SOUZA COELHO |
Contributors | ARNDT VON STAA |
Publisher | MAXWELL |
Source Sets | PUC Rio |
Language | English |
Detected Language | Portuguese |
Type | TEXTO |
Page generated in 0.0028 seconds