500 likes | 582 Views
JaTS Java Transformation System Parte 1. 27/03/2008. Diêgo Santiago, Leila Soriano e Patrícia Lustosa. Sistema - JaTS. 2. Ferramenta e linguagem de transformação de código Java Permite geração e transformação de código Baseada em templates e variáveis. Sistema - JaTS. 3.
E N D
JaTS Java Transformation System Parte 1 27/03/2008 Diêgo Santiago, Leila Soriano e Patrícia Lustosa
Sistema - JaTS 2 Ferramenta e linguagem de transformação de código Java Permite geração e transformação de código Baseada em templates e variáveis
Sistema - JaTS 3 public class Livro { private String autor private String editora; } ModifierList:#MODIFICADOR class #NOME_CLASSE { FieldDeclarationSet:#ATRIBUTOS; } Código Fonte Transformação Fonte public class Livro { private String autor private String editora; private String isbn; } ModifierList:#MODIFICADOR class #NOME_CLASSE { FieldDeclarationSet:#ATRIBUTOS; private String isbn; } Transformação Destino Código Destino
Arquitetura JaTS 4 Parser Saída Saída Saída Saída Entrada Transformation PrettyPrinting Código FonteTemplate FonteTemplate Destino Código Destino
Parser Analisador Léxico e Sintático Identifica se o código Java/JaTS está bem formado Cria a Árvore Sintática de nós Java/JaTS 5 Parser Transformation PrettyPrinting
Transformation Matcher Faz o casamento entre o código fonte e o template fonte Replacer Casa os valores das variáveis no template destino que dará origem ao código destino Processor Processa declarações executáveis e iterativas 6 Parser Transformation PrettyPrinting
Pretty Printing “Imprime” o código destino da transformação 7 Parser Transformation PrettyPrinting
Parse Transformation Match Process Replacement Pretty Print Syntactic Tree ThrowsException Concerns 9
Atividade de Atribuição dos Concerns 14 • Número de linhas de código marcadas: 30.477 • Tempo total para marcar: 24 horas • Dúvidas • Classes do pacote util • Interface e classes abstratas • Classes geradas automaticamente • Main • Cloning • Problemas • ConcernTagger
Métricas 15
Conclusão 16 • Parser, Replacement e Pretty Printing não são crosscutting concerns • Transformation, Match, Process e Syntatic Tree são crosscutting concerns entre si • ThrowsException é crosscutting concern em relação a todos os outros concerns
Conclusão 17 • Foram analisados o CDC e o DOSC • As métricas foram úteis para avaliar os possíveis crosscutting concerns, mas não para avaliar a relação entre eles • Avaliamos os crosscutting pelo que era conhecido do projeto. A métrica que mais se aproximou do analisado foi DOSC.
Referências 18 • Eaddy, M et al. Do Crosscutting Concerns Cause Defects? • Eaddy, M et al. Identifying, Assigning, and Quantifying Crosscutting Concerns • Site do JaTS • http://www.cin.ufpe.br/~jats/
JaTS Java Transformation System Parte 2 07/04/2008 Diêgo Santiago, Leila Soriano e Patrícia Lustosa
Quantidade de Classes 27 591 pares de clones • Parser 24 pares de clones • Match 80 pares de clones • Replacement 330 pares de clones • Process 75 pares de clones • Pretty Print 82 pares de clones
JaTS Java Transformation System Parte 3 19/05/2008 Diêgo Santiago, Leila Soriano e Patrícia Lustosa
ThrowsAspect 29 • Aspecto criado para modularizar o lançamento de exceções. • Foram criados pointcuts e utilizados advices para verificação da nulidade dos parâmetros passados nos métodos.
MatchAspect 31 • Aspecto criado para modularizar o crosscutting concern Match. • Em cada nó da árvore sintática existe um método match. • O MatchAspect reúne todos os métodos match dos nós.
ProcessAspect 33 • Aspecto criado para modularizar o crosscutting concern Process. • Em cada nó da árvore sintática existe um método process. • O ProcessAspect reúne todos os métodos process dos nós. • Possui um pointcut process() e o advice around, que verifica a condição de um nó ser executavel
AcceptAspect 35 • Aspecto que modulariza as chamadas ao método accept. • Cada nó possui um método accept. • O Accept é usado pelos visitors, fazendo assim parte desse concern.
Refactorings 37 • Law 3 Add before-execution • Usando esta lei podemos mover o inicio do corpo do método para a um advice que roda antes da execução do método. • ThrowsAspect • 96 before • 554 advises
Refactorings Law 7 Add after-execution returning successfully Usando esta lei podemos mover o final do corpo do método para a um advice que roda depois da execução do método, executado com sucesso. ThrowsAspect 1 after returning 11 advises 38
Refactorings Law 11 Add around-execution Esta lei é usada quando a execução do núcleo lógico método é condicional, ou seja, o núcleo lógico do método pode ou não ser executado. ProcessAspect 1 around 50 advises 39
Refactorings 40 • Law 18 Soften exception • Esta lei é responsável por tornar uma exceção levantada por um join point numa exceção soft. • ThrowsAspect • 21 declare soft • Law 20 Remove exception from throws clause • Esta lei remove a exceção da cláusula throws do método que não a levanta mais. • Law 21 Move exception handling to aspect • Esta lei move o tratamento de uma exceção para um aspecto.
Refactorings 41 • Law 23 Move method to aspect • Esta lei tem o propósito de mover a implementação de um método num aspecto usando uma inter-type declaration. • ProcessAspect • 13 method inter-type declaration • MatchAspect • 16 method inter-type declaration • AcceptAspect • 13 method inter-type declaration
Quantidade de Clones 45 419 pares de clones
Diêgo Santiago, Leila Soriano e Patrícia Lustosa JaTS Java Transformation System Parte 4 09/06/2008
Design Rules 47 dr ExecucaoProcessNodes{ class SimpleNode{ Object process(Object o); } aspect{ pointcut process(SimpleNode node, Object data): execution(Object SimpleNode+.process(Object)) } }
Design Rules 48 dr ExecucaoVisit { class JaTSVisitor{ Object visit(JaTSNode node, Object o); } aspect{ pointcut visit(JaTSNode node, Object o): execution(Object JaTSVisitor+.visit(JaTSNode+, Object)) } }
Design Rules 49 dr ExecucaoMatchNodes{ class JaTSNode{ void match(JaTSNode node, ResultSet result); } aspect{ pointcut nodesMatch(JaTSNode nodeParameter, ResultSet rs, JaTSNode node): execution(void JaTSNode+.match(JaTSNode, ResultSet)) } }
Dúvidas? 50