1 / 31

Refactoring de Programas Java

Projeto Orientado II. Refactoring de Programas Java. Dezembro de 2003. Aluno : Eduardo Magno Lages Figueiredo Orientador : Marcelo de Almeida Maia Colaborador : Marcone Jamilson Freitas Souza. Tópicos da Apresentação. Motivação / Problema Refactorings A ferramenta de refactoring JMT

clark
Download Presentation

Refactoring de Programas Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Tópicos da Apresentação • 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

  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. 3

  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? 4

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

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

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

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

  9. Disciplina boolean matriculado() ; Aluno boolean matriculado() ; Aluno Disciplina Refactoring Move Method 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. 9

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

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

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

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

  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 14

  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 15

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

  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) 17

  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 é nm • n é o nº de classes e m o nº de campos 18

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

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

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

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

  23. Grandes Médias Pequenas Método para aplicar o Extract Class • Separa as classes, pelo seu tamanho, em três grupos com o mesmo número de classes cada. • 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. • Seleciona alguns membros aleatórios da classe para compor uma nova classe (Criada pelo Extract Class). 23

  24. Método para aplicar o Inline Class • 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 24

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

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

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

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

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

  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 ? 30

  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 31

More Related