• Nenhum resultado encontrado

Definição de Conjuntos de Junção Robustos usando Aspect-Aware Interfaces e Aspectos Anotadores

N/A
N/A
Protected

Academic year: 2021

Share "Definição de Conjuntos de Junção Robustos usando Aspect-Aware Interfaces e Aspectos Anotadores"

Copied!
35
0
0

Texto

(1)

Definição de Conjuntos de

Junção Robustos usando

Aspect-Aware Interfaces e

Aspectos Anotadores

Leonardo Humberto Guimarães Silva

Orientador:

Marco Túlio de Oliveira Valente

Programa de Pós-graduação em Informática

Pontifícia Universidade Católica de Minas Gerais

{leonardosilva,mtov}@pucminas.br

(2)

Objetivo



Apresentar uma proposta para atenuar o

problema dos conjuntos de junção frágeis

de AspectJ baseada na combinação de

aspect-aware interfaces (AAIs) e aspectos

(3)

Tópicos



Problema dos conjuntos de junção frágeis



Geração de aspect-aware interfaces



Aspectos anotadores



Conclusão

(4)

Exemplo motivador

aspect UpdateSignaling {

pointcut change() :

execution(void Figure+.set*(..))

|| execution(void Figure+.moveBy(..));

after() returning: change() {

Display.update();

}

(5)

Conjuntos de junção frágeis



Conjuntos de junção são definidos por

nomes e expressões regulares



Manutenções no sistema podem causar



Captura acidental de pontos de junção



Ex: inclusão de Point.setDate()



Falha na captura de pontos de junção

(6)

Aspect-aware interfaces (AAIs)



Propostas originalmente em:



Gregor Kiczales and Mira Mezini. Aspect-oriented

programming and modular reasoning. In 27th International

Conference on Software Engineering (ICSE), pages 49–58,

2005



Apóiam raciocínio modular na presença de

aspectos



Definidas para classes e interfaces



Associam métodos com os adendos que os

(7)

Exemplos de AAIs

(8)

Primeira contribuição



Uso de AAIs para controlar a evolução de

sistemas orientados por aspectos



Alteração no processo de weaving para

geração automática e incremental de AAIs

por meio de uma ferramenta



Registro das alterações feitas nas AAIs

em um arquivo de log

(9)

Geração de AAIs

(10)



Plug-in para o ambiente Eclipse



Utiliza classes e interfaces exportadas

pelo pacote AJDT



Registra um listener que é acionado

sempre que um projeto é compilado



Armazena AAIs em uma estrutura de

dados própria

(11)

Geração de AAIs

(12)
(13)



Manutenções realizadas sobre a classe

Point do programa exemplo:

1.

Acrescenta-se o método setDate (Date)

2.

Renomeia-se o método setX (int)

3.

Acrescenta-se o método setColor (Color)

4.

Remove-se o método setColor (Color)

5.

Acrescenta-se o método changeColor

(Color)

(14)

Não detecta Captura pendente 5) + changeColor Detecta Eliminação de captura 4) – setColor Detecta Captura adicional 3) + setColor Detecta Falha captura 2) setX -> changeX Detecta Captura acidental 1) + setDate Ferramenta Situação Manutenção

Exemplos de manutenção no código base e comportamento da solução proposta

(15)

Avaliação



O log gerado auxilia na detecção de

capturas acidentais e falhas na captura



A solução é compatível com AspectJ



A solução inclui uma ferramenta para

geração automática de AAIs



A solução não detecta pontos de junção

que não seguem as convenções de nome

esperadas

(16)



Utilização de anotações para classificar pontos

de junção



Vantagem



Anotações denotam propriedades semânticas de

elementos do programa base



Problemas



Anotações representam interesses transversais



Conjuntos de junção baseados em anotações são

frágeis

(17)



Uma ferramenta identifica elementos

candidatos a serem anotados



Desenvolvedores confirmam elementos que

devem ser anotados



Geração semi-automática de aspectos

anotadores



Introdução de anotações de forma

não-invasiva

Solução proposta: aspectos

anotadores

(18)
(19)

Linguagem para declaração de

anotações

AnnotationDeclarationFile ::=

{ annotation AnnotationSection end } AnnotationSection ::=

name = String

target = fields | methods [&& [!] MethQualifiers] | classes [&& [!] ClassQualifiers]

scope = Type | Package question = String

MethQualifier ::=

getters | setters | call(Method) | declare(Type) | catch(Type)

ClassQualifier ::=

(20)

Exemplo de declaração de anotação

annotation

name = @DisplayStateChange

question = Does method %target change the state

of the display?

target = methods && (! getters)

scope = Figure

end

(21)

Exemplos de uso



HealthWatcher



Persistência



Controle de transações



JAccounting



Controle de transações

(22)

HealthWatcher (persistência)

Implementação original:

pointcut remoteUpdate(PersistentObject o):

this(HttpServlet) && target(o) && call(* set*(..)); declare parents: Complaint implements PersistentObject;

Solução proposta:

annotation

name = @Persistent

question = Is class %target persistent? target = classes && usedAs(param)

(23)

HealthWatcher (transações)

Implementação original:

pointcut transactionalMethods(): execution(* ITransactionalMethods.*(..));

Solução proposta:

annotation name = @Transactional

question = Is method %target transactional? target = methods

scope = HealthWatcherFacade end

pointcut transactionalMethods():

(24)

JAccounting (transações) 1/2

Implementação original:

aspect Transaction { Transaction tx; pointcut p_0():

call(Session SessionFactory.openSession() && (( withincode(String ProductsPage.perform2()) || withincode(String InvoicePage.perform2()) || withincode(String RecurrencePage.perform2()) || withincode(String PaymentPage.perform2()) || withincode(String CustomerDetails.perform2()) || withincode(String CustomerForm.perform2()) || withincode(Account createInternalAccount(

Session, Integer, int));

(25)

JAccounting (transações) 2/2

Solução proposta:

annotation

name = @Transactional

question = Is method %target transactional? target = methods && call(Session.save)

scope = com end

pointcut p_0():

call(Session SessionFactory.openSession()) && (withincode(@Transactional * * (..));

(26)

Análise de robustez

1/4



Realizada sobre o Editor de Figuras



Utiliza os cenários de mudanças propostos em:



Klaus Ostermann, Mira Mezini, and Christoph

Bockisch. Expressive pointcuts for increased

modularity. In 19th European Conference on

Object-Oriented Programming (ECOOP), volume

3586 of Lecture Notes in Computer Science, pages

214–240. Springer-Verlag, 2005.

(27)



Alternativas de implementação utilizadas



Expressões regulares



Exemplo:

Figure+.set*(..)



Enumerações



Exemplo:

Point.setX(..) || Point.setY(..)



Anotações convencionais



Anotações introduzidas pelo Annotator

(28)

Análise de robustez

3/4

+/

-

+/-Incluir classe Pair para

armazenar campos de Point C6

-+

-Renomear Figure para FigureElements C5

+

-

+/-Incluir Circle na hierarquia de Figure C4

+

+

-Renomear setX da classe Point para changeX

C3

+

+

+

-Incluir campo Date e método setDate em Point C2

+

-+

Incluir campo Color e método setColor em Point C1

Annotator

Anotações

Enum

ER

Alteração

(29)

Análise de robustez

4/4

2

1

4

Annotator

4

0

3

Anotações

6

0

1

Enumerações

4

2

1

Expressões regulares

-

+/-+

Conjunto de junção

(30)



A solução é recomendada quando:



É possível associar anotações com propriedades de

elementos do programa base



É possível restringir o escopo e/ou o alvo de uma

anotação



A solução é compatível com AspectJ



A ferramenta Annotator gera aspectos

anotadores de forma semi-automática



A solução proposta não resolve todos os casos

(31)

Contribuições

1/2



Apresentação de uma proposta para

atenuar o problema de fragilidade dos

conjuntos de junção em AspectJ



Implementação de uma ferramenta para

geração de AAIs e aspectos anotadores



Uso de anotações, introduzidas de forma

não-invasiva, para definição de conjuntos

de junção

(32)

Contribuições

2/2



Demonstração do uso da solução nos

sistemas HealthWatcher e JAccounting



Realização de um estudo de robustez

(33)

Publicações



Publicação do artigo “Controlando a Evolução

de Sistemas Orientados por Aspectos por meio

de Aspect-Aware Interfaces” no LA-WASP 2007



Taxa de aceitação: 11 / 31



Artigo a ser publicado “invasive and

Non-scattered Annotations for More Robust

Pointcuts” na 24th IEEE International

Conference on Software Maintenance (ICSM)

2008

(34)

Trabalhos futuros



Verificar novas situações nas quais a

solução proposta reduz (ou não) a

fragilidade dos conjuntos de junção



Realizar estudos de caso avaliando o

desenvolvimento completo de um sistema



Avaliar o comportamento da ferramenta

(35)

Referências

Documentos relacionados

1.13 O convocado deverá comparecer ao local designado para a realização dos exames biométricos da avaliação médica e de entrega dos exames laboratoriais e complementares com

Figura 67 Dados de deformação na ruptura (apresentados como percentual em relação ao polímero não-irradiado) do PMMA-t em função da dose de radiação gama, ensaiado na

Foi presente o projeto em epígrafe, pertencente ao signatário em apreço, solicitando a apreciação do mesmo, acompanhado do parecer favorável nº 2938/10509 de

Por sua vez, ao avaliar a relevância destas ao ensino de matemática, apesar dos alunos, em sua maioria, afirmarem não dispor desta possível prática pedagógica, 80% dos alunos

i) Determine o polin´ omio interpolador da fun¸ c˜ ao, de grau 2, usando a tabela das diferen¸ cas divididas, e calcule um majorante para o erro cometido.. Sugest˜ ao Solu¸ c˜

É por isso que os dados do capítulo 3 relativos à impureza do alquifenol não podem ser usados para a classificação do produto tendo em conta a toxicidade em meio aquático. SF/CE

Sintomas/lesões em caso de inalação : Em condições normais de utilização, não se prevê um perigo significativo de inalação.. Sintomas/lesões em caso de contacto

Todavia num levantamento documental que fiz em campo, observei que esse procedimento é feito de forma arbitraria não levando em conta em seu interior um