Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAdriano Quintão Galvão Alterado mais de 8 anos atrás
1
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1
2
Sistema - JaTS 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 2
3
JaTS Sistema - JaTS public class Livro { private String autor private String editora; } ModifierList:#MODIFICADOR class #NOME_CLASSE { FieldDeclarationSet:#ATRIBUTOS; } ModifierList:#MODIFICADOR class #NOME_CLASSE { FieldDeclarationSet:#ATRIBUTOS; private String isbn; } public class Livro { private String autor private String editora; private String isbn; } Código Fonte Transformação Fonte Transformação Destino Código Destino 3
4
Arquitetura JaTS Saída Parser Transformation PrettyPrinting Saída Código Fonte Template Fonte Template Destino Código Destino Saída Entrada 4
5
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 Parser Transformation PrettyPrinting 5
6
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 Parser Transformation PrettyPrinting 6
7
Pretty Printing “Imprime” o código destino da transformação Parser Transformation PrettyPrinting 7
8
Sistema - JaTS 8
9
Concerns Parse Transformation Match Process Replacement Pretty Print Syntactic Tree ThrowsException 9
10
Exemplo - Match 10
11
Exemplo - Replacement 11
12
Exemplo – Syntactic Tree 12
13
Exemplos – Código relacionado a mais de um Concern 13
14
Atividade de Atribuição dos Concerns 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 14
15
Métricas 15
16
Conclusão 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 16
17
Conclusão 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. 17
18
Referências 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/ 18
19
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 07/04/2008 JaTS Java Transformation System Parte 2
20
20 Gráfico de Clones
21
Exemplo – Classes Diferentes 21
22
Exemplo – Classes Diferentes 22
23
Exemplo – Classes Diferentes 23
24
Exemplo – Mesma Classe 24
25
Par â metros de Configuração 25
26
Quantidade de Clones 26
27
Quantidade de Classes 591 pares de clones Parser 24 pares de clones Match 80 pares de clones Replacement330 pares de clones Process 75 pares de clones Pretty Print 82 pares de clones 27
28
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 19/05/2008 JaTS Java Transformation System Parte 3
29
ThrowsAspect 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. 29
31
MatchAspect 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. 31
33
ProcessAspect 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 33
35
AcceptAspect 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. 35
37
Refactorings 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 37
38
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
39
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
40
Refactorings 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. 40
41
Refactorings 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 41
42
42 Gráfico de Clones
43
Exemplo – Classes Diferentes 43
44
Par â metros de Configuração 44
45
Quantidade de Clones 45 419 pares de clones
46
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 09/06/2008 JaTS Java Transformation System Parte 4
47
Design Rules dr ExecucaoProcessNodes{ class SimpleNode{ Object process(Object o); } aspect{ pointcut process(SimpleNode node, Object data): execution(Object SimpleNode+.process(Object)) } } 47
48
Design Rules dr ExecucaoVisit { class JaTSVisitor{ Object visit(JaTSNode node, Object o); } aspect{ pointcut visit(JaTSNode node, Object o): execution(Object JaTSVisitor+.visit(JaTSNode+, Object)) } 48
49
Design Rules 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)) } 49
50
Dúvidas? 50
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.