A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Refactoring de Programas Java Projeto Orientado II Aluno : Eduardo Magno Lages Figueiredo Orientador : Marcelo de Almeida Maia Colaborador : Marcone Jamilson.

Apresentações semelhantes


Apresentação em tema: "Refactoring de Programas Java Projeto Orientado II Aluno : Eduardo Magno Lages Figueiredo Orientador : Marcelo de Almeida Maia Colaborador : Marcone Jamilson."— Transcrição da apresentação:

1 Refactoring de Programas Java Projeto Orientado II Aluno : Eduardo Magno Lages Figueiredo Orientador : Marcelo de Almeida Maia Colaborador : Marcone Jamilson Freitas Souza Dezembro de 2003

2 Motivação / Problema Refactorings A ferramenta de refactoring JMT Métricas de código fonte (JSystemInfo) Função de avaliação da qualidade do software Heurística para aplicação automática Exemplo de código refabricado Conclusões Trabalhos futuros 2 Tópicos da Apresentação

3 3 Contexto Qualidade de Software Reutilização de módulos Adequação a padrões Legibilidade do código Facilidade de manutenção Facilidade para extensão Um projeto reutilizável e flexível é difícil, senão impossível, de obter corretamente da primeira vez." Gamma et al.

4 4 O Problema Manipulação de Programas Manipulação Manual X Programada X Automática Como escrever programas para manipular programas? –Sistemas para meta-programação Como melhorar a qualidade do software através de manipulações do código?

5 5 Tecnologia Utilizada Linguagem de manipulação de programas MetaJ Linguagem de Programação Java Aplicação

6 6 Refactoring Ferramentas de refactoring Catálogo de Fowler Um tipo especial de manipulação de programas: Transformação de programas Preservação da semântica

7 7 Refactoring Encapsulate Field Torna o campo privado, prove métodos get e set públicos para acessar o campo e atualiza as referências. Aluno public String nome ; Aluno private String nome ; public String getNome() public void setNome(String nome) public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; }

8 8 Refactoring Move Field Disciplina String professor ; Turma String professor ; DisciplinaTurma Cria um novo campo na classe destino, altera todas as referências feitas ao campo e o remove da classe origem.

9 9 Refactoring Move Method Disciplina boolean matriculado() ; Aluno boolean matriculado() ; Aluno Disciplina Cria um novo método na classe destino com um corpo similar ao corpo do método original e transforma o método antigo em um simples redirecionador, ou o remove atualizando as referências.

10 10 Refactoring Extract Class Cria uma nova classe, movendo os campos e métodos relevantes da classe antiga para a nova classe. Disciplina String codigo ; Aluno [] matriculados ; String professor ; boolean matriculado() ; Disciplina String codigo ; boolean matriculado() ; Turma Aluno [] matriculados ; String professor ; boolean matriculado() ; turma

11 11 Refactoring Inline Class Move todas as características de uma classe para outra e elimina a classe vazia. Oposto do Extract Class. Aluno String nome ; int prova1 ; int prova2 ; boolean getSituacao() ; Aluno String nome ; Avaliacao int prova1 ; int prova2 ; boolean getSituacao() ; avaliacao

12 12 A Ferramenta JMT Java Meta-programming Tool Programação e Aplicação de refactoring Plug-in de extensão para uma IDE

13 Demonstração da Ferramenta JMT Integrada ao JBuilder 13 JMT Integrada ao JBuilder

14 14 Refactoring Seleção e Aplicação Automática Objetivos: Melhorar a qualidade do software Seleção dos refactorings sem interferência do programador Requisitos: –Implementação de refactorings –Métricas de qualidade de software –Heurística para aplicação dos refactorings

15 15 Métricas de Código –Número de linhas de código –Número de arquivos existente no sistema –Número de tipos Java (classes ou interfaces) –Tamanho dos tipos (número de membros do tipo) –Número de campos públicos –Tamanho dos métodos (número de comandos) –Nível da árvore de hierarquia de um tipo Java –Número de subtipos de um tipo (filhos) –Nível de acoplamento entre dois tipos –Nível de reutilização por herança

16 16 JSystemInfo Ferramenta para coleta de informações de sistemas Java.

17 17 Função de Avaliação Baseado nas métricas de código fonte Configurado pelo arquivo FautValue.txt Penalidades: –Linhas de código = 1; No de classes = 1; Classes com mais de 10 membros = 5; Classes c/ mais de 20 membros = 20; Campo público = 20;... Benefícios: –Herança = 10; Método reutilizado por herança = 20. F(x) = (Penalidades) – (Benefícios)

18 18 Modelagem Heurística Justificativa da Modelagem Heurística: –Vasto espaço de soluções (NP-difícil) –Existência de uma função de avaliação –É relativamente barato gerar uma solução candidata. Considerando apenas o Move Field –Número de soluções é n m – n é o nº de classes e m o nº de campos

19 19 Heurística Principal Heurística tradicional Solução inicial = sistema original Algoritmo: 1.Avalia o sistema original 2.Seleciona um refactoring aleatório 3.Aplica o refactoring à solução corrente (inicial) 4.Avalia o sistema gerado –Se melhora a função: aceita o refactoring –Se não, desfaz o refactoring (undo) 5.Repete os passos 2, 3 e 4 por um número de iterações

20 20 Método para aplicar o Encapsulate Field Seleciona aleatoriamente um campo público do sistema.

21 21 Método para aplicar o Move Field 1.Seleciona aleatoriamente um campo qualquer do sistema. 2.Seleciona uma classe destino para o campo diferente da classe origem, mas no mesmo pacote.

22 22 Método para aplicar o Move Method 1.Seleciona aleatoriamente um método não privado (private) do sistema. 2.Seleciona uma classe destino para o método diferente da classe origem, mas no mesmo pacote.

23 23 Método para aplicar o Extract Class 1.Separa as classes, pelo seu tamanho, em três grupos com o mesmo número de classes cada. 2.Seleciona uma das classes pela prioridade: –Grandes têm 60% de chances; –Médias têm 30% de chances; e –Pequenas têm 10% de chances. 3.Seleciona alguns membros aleatórios da classe para compor uma nova classe (Criada pelo Extract Class). GrandesMédiasPequenas

24 24 Método para aplicar o Inline Class 1.Seleciona aleatoriamente um par de classes que possuem algum acoplamento entre elas. –Variáveis de instância –Variáveis de classe (estáticas) –Variáveis locais dos métodos –Argumentos dos métodos –Parâmetro de retorno dos métodos

25 25 Exemplo Refactoring Automático (Antes) ClasseA public String fileName; void methodA () myClasseB ClasseB public String extenssion;

26 26 PRIMEIRA AVALIACAO: -11 Selected Move Method Source class: ClasseA Method: methodA Target class: ClasseB AVALIACAO: -6 UNDO... Exemplo (Passo 1) Refactoring Automático

27 27 AVALIACAO: -11 Selected Encapsulate Field Class: ClasseB Field: extenssion AVALIACAO: -22 Aceito ! Exemplo (Passo 2) Refactoring Automático

28 28 Selected Inline Class Source class: ClasseB Target class: ClasseA AVALIACAO: -41 Aceito ! AVALIACAO FINAL: -41 Exemplo (Passo 3) Refactoring Automático

29 29 Exemplo Refactoring Automático (Depois) ClasseA public String fileName; private String extenssion; void methodA () public void setExtenssion(String arg) public String getExtenssion () –Campo extenssion foi encapsulado –ClasseB foi absorvida pela ClasseA (Inline Class)

30 30 Conclusões JMT X Ferramentas de refactoring –Fácil alteração do código dos refactorings; –Adição de novos itens; Aplicação de refactoring é indispensável para evolução do software. Seleção e aplicação automática de refactoring é possível. Não houve conclusões a respeito da viabilidade da seleção e aplicação automática de refactoring ?

31 31 Trabalhos Futuros Melhorar a função de avaliação. –Outras medidas de código como coesão de classe –Outras medidas de software como desempenho Implementação de novos refactorings Implementar uma meta-heurística Integrar todo o ambiente a uma IDE


Carregar ppt "Refactoring de Programas Java Projeto Orientado II Aluno : Eduardo Magno Lages Figueiredo Orientador : Marcelo de Almeida Maia Colaborador : Marcone Jamilson."

Apresentações semelhantes


Anúncios Google