50
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/200 8 JaTS JaTS Java Transformation Java Transformation System System Parte 1 Parte 1

Diêgo Santiago, Leila Soriano e Patrícia Lustosa

  • Upload
    maisie

  • View
    24

  • Download
    3

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Diêgo Santiago, Leila Soriano e Patrícia Lustosa27/03/2008

JaTSJaTS

Java Transformation Java Transformation SystemSystem

Parte 1Parte 1

Page 2: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Sistema - JaTS

Ferramenta e linguagem de Ferramenta e linguagem de transformação de código Javatransformação de código Java

Permite geração e transformação de Permite geração e transformação de códigocódigo

Baseada em templates e variáveisBaseada em templates e variáveis

2

Page 3: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Sistema - JaTSJaTS

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 FonteTransformação Fonte

Transformação Destino

Código Destino

3

Page 4: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Arquitetura JaTSArquitetura JaTS

Saída

ParserParser

TransformationTransformation

PrettyPrintingPrettyPrinting

SaídaSaída

Código FonteCódigo FonteTemplate FonteTemplate FonteTemplate DestinoTemplate Destino

Código DestinoCódigo Destino

SaídaSaída

EntradaEntrada

4

Page 5: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

ParserParser

Analisador Léxico e SintáticoAnalisador Léxico e Sintático Identifica se o código Identifica se o código

Java/JaTS está bem formadoJava/JaTS está bem formado Cria a Árvore Sintática de Cria a Árvore Sintática de

nós Java/JaTSnós Java/JaTS

ParserParser

TransformationTransformation

PrettyPrintingPrettyPrinting

5

Page 6: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

TransformationTransformation

MatcherMatcher Faz o casamento entre o Faz o casamento entre o

código fonte e o template código fonte e o template fontefonte

ReplacerReplacer Casa os valores das Casa os valores das

variáveis no template variáveis no template destino que dará origem ao destino que dará origem ao código destinocódigo destino

ProcessorProcessor Processa declarações Processa declarações

executáveis e iterativasexecutáveis e iterativas

ParserParser

TransformationTransformation

PrettyPrintingPrettyPrinting

6

Page 7: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Pretty PrintingPretty Printing

““Imprime” o código destino Imprime” o código destino da transformaçãoda transformação

ParserParser

TransformationTransformation

PrettyPrintingPrettyPrinting

7

Page 8: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Sistema - JaTS8

Page 9: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Concerns

Parse Transformation

Match Process Replacement

Pretty Print Syntactic Tree ThrowsException

9

Page 10: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo - Match 10

Page 11: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo - Replacement11

Page 12: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo – Syntactic Tree12

Page 13: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplos – Código relacionado a mais de um

Concern13

Page 14: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 15: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Métricas15

Page 16: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 17: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 18: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 19: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Diêgo Santiago, Leila Soriano e Patrícia Lustosa07/04/2008

JaTSJaTS

Java Transformation Java Transformation SystemSystem

Parte 2Parte 2

Page 20: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

20

Gráfico de Clones

Page 21: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo – Classes Diferentes

21

Page 22: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo – Classes Diferentes

22

Page 23: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo – Classes Diferentes

23

Page 24: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo – Mesma Classe24

Page 25: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Parâmetros de Configuração25

Page 26: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Quantidade de Clones26

Page 27: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Quantidade de Classes

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

27

Page 28: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Diêgo Santiago, Leila Soriano e Patrícia Lustosa19/05/2008

JaTSJaTS

Java Transformation Java Transformation SystemSystem

Parte 3Parte 3

Page 29: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 30: Diêgo Santiago, Leila Soriano e Patrícia Lustosa
Page 31: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 32: Diêgo Santiago, Leila Soriano e Patrícia Lustosa
Page 33: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 34: Diêgo Santiago, Leila Soriano e Patrícia Lustosa
Page 35: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 36: Diêgo Santiago, Leila Soriano e Patrícia Lustosa
Page 37: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 38: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 39: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 40: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 41: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 42: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

42

Gráfico de Clones

Page 43: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Exemplo – Classes Diferentes

43

Page 44: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Parâmetros de Configuração44

Page 45: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Quantidade de Clones45

419 pares de clones

Page 46: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Diêgo Santiago, Leila Soriano e Patrícia Lustosa09/06/2008

JaTSJaTS

Java Transformation Java Transformation SystemSystem

Parte 4Parte 4

Page 47: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Design Rules

dr ExecucaoProcessNodes{

class SimpleNode{

Object process(Object o);

}

aspect{

pointcut process(SimpleNode node, Object data): execution(Object SimpleNode+.process(Object)) }

}

47

Page 48: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 49: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

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

Page 50: Diêgo Santiago, Leila Soriano e Patrícia Lustosa

Dúvidas?50