Você está na página 1de 53

FERRAMENTAS DE REFATORAO: Uma Anlise Comparativa

Rodrigo Achilles Pereira

Universidade Federal do Rio de Janeiro Curso de Ps Graduao MBA em Engenharia de Software

Orientador: Eduardo Bezerra, D.Sc.

Rio de Janeiro

2011

II

FICHA CATALOGRFICA

Pereira, Rodrigo Achilles Ferramentas de refatorao: Uma Anlise Comparativa / Rodrigo Achilles Pereira Rio de Janeiro, 2011. xi, 42 f.: il. Monografia (MBA em Engenharia de Software) Universidade Federal do Rio de Janeiro - UFRJ, Escola Politcnica, 2011. Orientador: Eduardo Bezerra Captulo 1: Introduo. Captulo 2: Viso Geral de Refatorao. Captulo 3: Principais Ferramentas de Refatorao. Captulo 4: Concluso. I. Bezerra, Eduardo (Orient.). II. Universidade Federal do Rio de Janeiro. Escola Politcnica. III. Ttulo.

III

AGRADECIMENTOS

A Deus em primeiro lugar e a toda a minha famlia pela compreenso e incentivo em todas as fases do meu curso.

IV

RESUMO

Ferramentas de refatorao auxiliam no desenvolvimento de sistemas de software com qualidade. Este trabalho consiste em uma anlise comparativa das principais ferramentas de refatorao existentes, considerando sistemas escritos em linguagem Java. Apresentamos uma viso geral da Refatorao e tcnicas que so usadas para o comparativo entre as ferramentas. Apresentamos uma reflexo sobre esse comparativo e a importncia do auxlio das ferramentas automticas para a refatorao.

ABSTRACT

Refactoring tools assist in developing quality software systems. This study is a comparative analysis of the main tools for refactoring existing systems considering written in Java. Here's an overview of Refactoring and techniques that are used for the comparison between the tools. We present a comparative reflection on this and the importance of the aid of automatic tools for refactoring.

VI

SUMRIO

FICHA CATALOGRFICA ............................................................................................................II AGRADECIMENTOS ..................................................................................................................III RESUMO.................................................................................................................................... IV ABSTRACT ................................................................................................................................. V SUMRIO................................................................................................................................... VI LISTA DE FIGURAS ................................................................................................................. VIII LISTA DE TABELAS .................................................................................................................... X LISTA DE ABREVIATURAS E SIGLAS ...................................................................................... XI CAPTULO 1. 1.1. 1.2. 1.3. 1.4. 1.5. INTRODUO ...............................................................................................1

CONTEXTUALIZAO ................................................................................................. 1 JUSTIFICATIVA............................................................................................................. 1 OBJETIVOS .................................................................................................................. 2 METODOLOGIA............................................................................................................ 2 ORGANIZAO DOS CAPTULOS .............................................................................. 2 VISO GERAL DE REFATORAO .............................................................4

CAPTULO 2. 2.1. 2.1.1. 2.1.2. 2.1.3. 2.1.4. 2.2. 2.2.1. 2.2.2. 2.2.3. 2.2.4. 2.2.5. 2.2.6. 2.2.7. 2.2.8. 2.2.9.

REFATORAR NECESSRIO? ................................................................................... 4 REFATORAR MELHORA O PROJETO DO SOFTWARE ............................................. 4 REFATORAR TORNA O SOFTWARE MAIS FCIL DE ENTENDER ........................... 5 REFATORAR AJUDA A ENCONTRAR FALHAS ........................................................... 5 REFATORAR AJUDA A PROGRAMAR MAIS RAPIDAMENTE .................................... 5 TCNICAS DE REFATORAO .................................................................................. 6 EXTRAIR MTODO (EXTRACT METHOD) ................................................................. 6 MOVER MTODO (MOVE METHOD) .......................................................................... 7 EXTRAIR CLASSE (EXTRACT CLASS) ....................................................................... 8 ENCAPSULAR ATRIBUTO (ENCAPSULATE FIELD) ................................................. 10 RENOMEAR MTODO (RENAME METHOD) ............................................................ 10 MOVER CLASSE (MOVE CLASS) ............................................................................. 11 DESCER MTODO (PUSH DOWN METHOD) .......................................................... 12 DESCER ATRIBUTO (PUSH DOWN FIELD) .............................................................. 13 EXTRAIR SUPERCLASSE (EXTRACT SUPERCLASS) ............................................ 14 PRINCIPAIS FERRAMENTAS DE REFATORAO ....................................16

CAPTULO 3. 3.1. 3.1.1. 3.1.2. 3.1.3. 3.2.

CRITRIOS TCNICOS PARA UMA FERRAMENTA DE REFATORAO ............... 16 BANCO DE DADOS DO PROGRAMA ....................................................................... 16 RVORES DE ANLISE SEMNTICA ....................................................................... 17 ACURCIA.................................................................................................................. 17 CRITRIOS PRTICOS PARA UMA FERRAMENTA DE REFATORAO ................ 18

VII

3.2.1. 3.2.2. 3.2.3. 3.3. 3.4. 3.5. 3.6. 3.6.1. 3.6.2. 3.6.3. 3.6.4. 3.6.5. 3.6.6. 3.6.7. 3.6.8. 3.7. 3.7.1. 3.7.2.

VELOCIDADE ............................................................................................................. 18 DESFAZER ................................................................................................................. 18 INTEGRADA COM FERRAMENTAS .......................................................................... 18 ECLIPSE IDE .............................................................................................................. 19 INTELLIJ IDEA ............................................................................................................ 21 NETBEANS IDE .......................................................................................................... 22 TESTES REALIZADOS............................................................................................... 24 RENOMEANDO .......................................................................................................... 25 MOVENDO UMA CLASSE .......................................................................................... 27 ENCAPSULANDO UM ATRIBUTO ............................................................................. 28 EXTRAIR SUPERCLASSE ......................................................................................... 30 EXTRAINDO UM MTODO ........................................................................................ 32 EM LINHA (INLINE) .................................................................................................... 34 COMANDO DESFAZER (CTRL+Z) .......................................................................... 35 TCNICAS DE REFATORAO NO UTILIZADAS .................................................. 37 DESTAQUES .............................................................................................................. 37 FUNCIONALIDADE HISTRICO ............................................................................. 37 FUNCIONALIDADE EXCLUSO SEGURA.............................................................. 39 CONCLUSO ..............................................................................................40

CAPTULO 4. 4.1. 4.2.

ANLISE RETROSPECTIVA ...................................................................................... 40 TRABALHOS FUTUROS ............................................................................................ 41

REFERNCIAS ..........................................................................................................................42

VIII

LISTA DE FIGURAS

FIGURA 2-1 DIAGRAMA REPRESENTANDO UM EXEMPLO DE CLASSES EM QUE PODEMOS APLICAR A


REFATORAO DESCER MTODO (OBTIDA EM (FOWLER, 2010)) ...................................................12

FIGURA 2-2 DIAGRAMA REPRESENTANDO AS CLASSES QUE FORAM APLICADAS A REFATORAO DESCER MTODO (OBTIDA EM (FOWLER, 2010)).......................................................................................13 FIGURA 2-3 DIAGRAMA REPRESENTANDO UM EXEMPLO DE CLASSES EM QUE PODEMOS APLICAR A
REFATORAO DESCER ATRIBUTO (OBTIDA EM (FOWLER, 2010)) ..................................................13

FIGURA 2-4 DIAGRAMA REPRESENTANDO AS CLASSES QUE FORAM APLICADAS A REFATORAO DESCER ATRIBUTO (OBTIDA EM (FOWLER, 2010)) .....................................................................................14 FIGURA 2-5 DIAGRAMA REPRESENTANDO UM EXEMPLO DE CLASSES EM QUE PODEMOS APLICAR A
REFATORAO EXTRAIR SUPERCLASSE (OBTIDA EM (FOWLER, 2010)) ..........................................15

FIGURA 2-6 DIAGRAMA REPRESENTANDO AS CLASSES QUE FORAM APLICADAS A REFATORAO EXTRAIR SUPERCLASSE (OBTIDA EM (FOWLER, 2010)) ..............................................................................15 FIGURA 3-1 RVORE SEMNTICA PARA O MTODO AL MUNDO! (OBTIDA EM (FOWLER, 2004)) .....17 FIGURA 3-2 MENU DO ECLIPSE ......................................................................................................20 FIGURA 3-3 MENU DO INTELLIJ ......................................................................................................22 FIGURA 3-4 MENU DO NETBEANS ..................................................................................................24 FIGURA 3-5 FERRAMENTA PARA APLICAR A TCNICA DE REFATORAO RENOMEAR NO ECLIPSE ..........25 FIGURA 3-6 PAINEL DE PR-VISUALIZAO DO ECLIPSE MOSTRANDO AS FUTURAS ALTERAES PARA A
TCNICA DE REFATORAO RENOMEAR ..........................................................................................26

FIGURA 3-7 PAINEL DO ECLIPSE PARA A SELEO DO PACOTE FUTURO ONDE SER MOVIDA A CLASSE
DESEJADA ....................................................................................................................................27

FIGURA 3-8 CDIGO-FONTE DE COMO ERA ANTES DA REFATORAO ENCAPSULAR UM ATRIBUTO .......28 FIGURA 3-9 CDIGO-FONTE DE COMO FICOU APS A REFATORAO ENCAPSULAR UM ATRIBUTO ........28 FIGURA 3-10 PAINEL DE PR-VISUALIZAO DO ECLIPSE MOSTRANDO AS FUTURAS ALTERAES PARA A
TCNICA DE REFATORAO ENCAPSULAR ATRIBUTO ........................................................................29

FIGURA 3-11 PAINEL DO INTELLIJ QUE MOSTRA ATRIBUTOS E SUAS INFORMAES QUE PODERO SER
ENCAPSULADAS ............................................................................................................................30

FIGURA 3-12 CDIGO-FONTE DE COMO ERA ANTES DA REFATORAO EXTRAIR SUPERCLASSE...........31 FIGURA 3-13 CDIGO-FONTE DE COMO FICOU APS A REFATORAO EXTRAIR SUPERCLASSE ...........32 FIGURA 3-14 CDIGO-FONTE DE COMO ERA ANTES DA REFATORAO EXTRAIR MTODO ...................33 FIGURA 3-15 CDIGO-FONTE DE COMO FICOU APS A REFATORAO EXTRAIR MTODO ....................33 FIGURA 3-16 CDIGO-FONTE DE COMO ERA ANTES DA REFATORAO EM LINHA ...............................34 FIGURA 3-17 CDIGO-FONTE DE COMO FICOU APS A REFATORAO EM LINHA ................................35 FIGURA 3-18 MENU DO NETBEANS ONDE MOSTRA O COMANDO DESFAZER DESABILITADO E O SUB-MENU
DESFAZER ADICIONADO NO MENU REFATORAR.................................................................................36

FIGURA 3-19 MENU DO ECLIPSE PARA ACESSO FUNCIONALIDADE HISTRICO .................................37

IX

FIGURA 3-20 PAINEL DE EXIBIO DA FUNCIONALIDADE HISTRICO NO ECLIPSE .............................38 FIGURA 3-21 PAINEL DO NETBEANS UTILIZADO PARA A REFATORAO EXCLUSO SEGURA ................39

LISTA DE TABELAS

TABELA 3-1 ..................................................................................................................................20 TABELA 3-2 ..................................................................................................................................21 TABELA 3-3 ..................................................................................................................................23

XI

LISTA DE ABREVIATURAS E SIGLAS

XP Programao Extrema (eXtreme Programming) IDE Ambiente Integrado de Desenvolvimento (Integrated Development Environment)

CAPTULO 1.

INTRODUO

1.1. CONTEXTUALIZAO A Programao Extrema (eXtreme Programming, XP) uma proposta de desenvolvimento gil e iterativa. O mtodo visa ser um processo de desenvolvimento leve, centrado no desenvolvimento iterativo e com a entrega constante de pequenas partes da funcionalidade do software. Essas partes devem ser incrementadas e requerem a melhoria constante do cdigo (retrabalho). Segundo (BECK, 2000) XP uma maneira leve, eficiente, de baixo risco, flexvel, previsvel, cientfica e divertida de desenvolver software. Uma das prticas recomendadas da Programao extrema a refatorao visando melhorar o cdigo deixando mais limpo e fcil compreenso. Refatorao ganhou fora atualmente, pois ajuda na integrao das entregas das funcionalidades do software, na manuteno e no entendimento do cdigo. Imagine refatorar um sistema no qual o desenvolvedor no tem conhecimento de refatorao e no se preocupou em organizar e arrumar os cdigos por ele produzidos. Para ele o que importa apenas no hoje, no modo de funcionamento do sistema sem se preocupar com a manuteno que ocorrer. Manuteno essa que poder ser realizada por outros

desenvolvedores ou at mesmo o responsvel pelo desenvolvimento desse cdigo. Um sistema simples pode no ter a necessidade disso, mas um sistema coorporativo com grade nmero de linhas de cdigos e com inmeras classes interligadas ter mais necessidade de refatorao.

1.2. JUSTIFICATIVA Em uma empresa de grande porte sistemas so desenvolvidos e manutenidos por diversos desenvolvedores com jeitos diferentes em codificar os cdigos de um sistema. Uma boa escolha na ferramenta de

desenvolvimento vem para ajudar que esses desenvolvedores minimizem suas

manias e padronizem, ao mximo, os cdigos descritos. Com mtodos existentes de refatorao e com o auxlio de ferramentas automatizadas uma empresa poder criar uma identidade na codificao de seus sistemas. Este trabalho visa auxiliar escolha da ferramenta de refatorao que dentre os aspectos apresentados se adaptaria realidade da empresa.

1.3. OBJETIVOS O objetivo principal deste trabalho fazer um comparativo entre as ferramentas de refatorao mais usadas no mercado para auxiliar e automatizar a refatorao. Essa anlise envolve pesquisar o desempenho das ferramentas e mostrar os critrios tcnicos e prticos de cada uma delas.

1.4. METODOLOGIA Foi escolhido um sistema acadmico simples, que foi utilizado como um exemplo prtico, para que sejam aplicadas as tcnicas de refatorao. Ao aplicar as tcnicas, sero colhidos dados significativos para a anlise comparativa entre as ferramentas automatizadas apresentadas. A idia melhorar o cdigo fonte do sistema proposto e saber se as tcnicas de refatorao aliadas com as ferramentas obtiveram seus resultados esperados.

1.5. ORGANIZAO DOS CAPTULOS Esta monografia est dividida em quatro captulos, conforme descrito a seguir. Neste 0 foi apresentado o contexto na qual o trabalho se encontra a justificativa pela qual foi feita sua escolha, os objetivos que se pretende alcanar aps sua concluso e a metodologia de trabalho que foi utilizada. No CAPTULO 2 encontra-se uma viso geral de refatorao e suas principais tcnicas, pois atravs deste que as ferramentas construdas esto

baseadas. No CAPTULO 3 feito uma anlise das principais ferramentas existentes no mercado que auxiliam de forma automatizada os processos de refatorao. Por fim, no 0, apresentada uma reflexo sobre o que foi discutido alm de um comparativo das ferramentas demonstradas.

CAPTULO 2.

VISO GERAL DE REFATORAO

Este Captulo apresenta uma viso geral sobre os conceitos e tcnicas de refatorao. A Seo 2.1 apresenta de modo geral a real necessidade de se refatorar, mostrando o que temos a ganhar com isso. A Seo 2.2 apresenta algumas das principais tcnicas de refatorao existentes. Refatorao o processo de transformao de um cdigo confuso para um cdigo limpo e claro utilizando tcnicas e padronizao no

desenvolvimento. Vale ressaltar que a inteno da refatorao no atuar no funcionamento do sistema e sim na estrutura de como foi desenvolvimento internamente para melhorar futuras manutenes no cdigo do sistema. Um aspecto importante de uma refatorao que ela melhora o design sem mudar a semntica do design; uma refatorao no adiciona nem remove funcionalidade. Segundo (FOWLER, 2004), refatorao o processo de alterao de um sistema de software de modo que o comportamento externo do cdigo no mude, mas que sua estrutura interna seja melhorada. Podemos citar outro ponto da idia de (FOWLER, 2004), refatorar quando descobre que a deciso de ontem no faz sentido hoje, voc muda essa deciso. Agora voc pode fazer o trabalho de hoje. Amanh, parte da sua compreenso atual parecer ingnua, ento voc ir alter-la tambm.

2.1. REFATORAR NECESSRIO? Para responder tal pergunta precisamos olhar pro cdigo e avaliar quais os benefcios da refatorao, qual ganho em alterar o cdigo que muitas vezes est funcionando conforme o esperado. Abaixo visto alguns benefcios da refatorao: 2.1.1. REFATORAR MELHORA O PROJETO DO SOFTWARE Quando se fala em melhora no projeto de software, se fala em melhorar o entendimento do cdigo para futuras manutenes. Um projeto sem

refatorao tende a deteriorar, ficando cada vez mais difcil a sua manipulao. Segundo (FOWLER, 2004), quanto mais difcil visualizar o projeto a partir do cdigo, mais difcil ser preserv-lo e mais rapidamente ele se desestruturar. Na refatorao para que no haja essa deteriorao do cdigo desejvel que seja eliminado todas as duplicaes no cdigo. Eliminando as cpias de cdigo, garantido que este desempenhar o seu papel correto no lugar certo apenas uma vez, facilitando tambm a reutilizao. 2.1.2. REFATORAR TORNA O SOFTWARE MAIS FCIL DE ENTENDER Muitas vezes nos deparamos com cdigos difceis de entender, cdigos esses que s vezes foram escritos por ns mesmos. Com o passar do tempo, numa futura manuteno, ns no conseguimos lembrar-se da real funcionalidade, com isso perdemos um tempo enorme para reaprender a sim alter-lo. A refatorao essencial nesse caso, pois ajuda a esclarecer o cdigo, deixando-o mais limpo e inteligvel. 2.1.3. REFATORAR AJUDA A ENCONTRAR FALHAS Com cdigos bem estruturados e com sua funo bem definida achamos falhas com rapidez e eficcia. Para que isso ocorra necessrio que esteja refatorado. Em um projeto de porte grande, com muitos desenvolvedores envolvidos, cada um com seu jeito de programar, fundamental que haja uma padronizao na codificao. Problemas sempre surgiro e para que isso no atrapalhe uma futura manuteno precisamos ter essa disciplina. Segundo Kent Beck, apud (FOWLER, 2004) "No sou um grande programador; sou apenas um bom programador com timos hbitos." 2.1.4. REFATORAR AJUDA A PROGRAMAR MAIS RAPIDAMENTE Quando um cdigo est mais fcil de entender, quando encontramos

falhas rapidamente, quando um projeto est bem estruturado conseguimos nesse caso produzir novas funcionalidades com facilidade. O desenvolvimento fica agilizado quando utilizamos todas as tcnicas disponveis. Temos enormes ganhos na refatorao. Um dos pontos fortes a reusabilidade na qual utilizamos classes e mtodos bem definidos. Para consolidar a real necessidade da refatorao podemos citar Kent Beck (FOWLER, 2004), se voc consegue fazer hoje o trabalho de hoje, mas o faz de uma maneira na qual possivelmente no conseguir fazer amanh o trabalho de amanh, considerado perdido.

2.2. TCNICAS DE REFATORAO As tcnicas de refatorao no so simplesmente modelos para manuteno de cdigos. Ao aplicar uma tcnica o comportamento do sistema deve-se manter inalterado sem perdas na estrutura do programa. As tcnicas de refatorao incluem, entre outras coisas, metodologias para detectar possveis problemas no cdigo. Para aplicar refatorao podemos utilizar inmeras tcnicas. Segundo Martin Fowler existe mais de 70 tcnicas para refatorar um cdigo, entre elas podemos destacar: 2.2.1. EXTRAIR MTODO (EXTRACT METHOD) Extrair Mtodo uma operao de refatorao que fornece uma maneira fcil de criar um novo mtodo a partir de um fragmento de cdigo em um membro existente. Isso ocorre porque voc tem um fragmento de cdigo que pode ser agrupado. Abaixo podemos ver um exemplo de um cdigo-fonte transformado pela refatorao Extrair Mtodo.

void printOwing() { printBanner();

// print details System.out.println("name: " + _name); System.out.println("amount } " + getOutstanding());

Aps a refatorao o cdigo dever se transformar como mostrado abaixo.

void printOwing() { printBanner(); printDetails(getOutstanding()); } void printDetails(double outstanding) { System.out.println("name: " + _name); System.out.println("amount } 2.2.2. MOVER MTODO (MOVE METHOD) Mover Mtodo uma operao de refatorao que fornece uma maneira de criar um novo mtodo em um corpo semelhante na classe que ele usa mais. Ou transformar o velho mtodo em uma simples delegao, ou remov-lo completamente. Isso ocorre porque um mtodo ser usado por mais recursos de outra classe do que a classe em que ela est definida. Abaixo podemos ver um exemplo de um cdigo-fonte transformado pela refatorao Mover Mtodo. " + outstanding);

class Project { Person[] participants; } class Person { int id;

boolean participate(Project p) { for (int i = 0; i < p.participants.length; i++) { if (p.participants[i].id == id) return (true); } return (false); } }

Aps a refatorao o cdigo dever se transformar como mostrado abaixo.

class Project { Person[] participants;

boolean participate(Person x) { for (int i = 0; i < participants.length; i++) { if (participants[i].id == x.id) return (true); } return (false); } } class Person { int id; }

2.2.3.

EXTRAIR CLASSE (EXTRACT CLASS) Extrair Classe uma operao de refatorao que fornece uma

maneira de criar uma nova classe e mover os atributos relevantes e mtodos da classe antiga para a nova classe. Isso ocorre porque voc tem uma classe

fazendo um trabalho que deve ser feito por dois. Abaixo podemos ver um exemplo de um cdigo-fonte transformado pela refatorao Extrair Classe.

class Person { int id; String name; int areaCode; int number;

boolean participate(Project p) {..} }

Aps a refatorao o cdigo dever se transformar como mostrado abaixo.

class Person { int id; String name; TelephoneNumber telephone = new TelephoneNumber();

boolean participate(Project p) {..} } class TelephoneNumber { public int areaCode; public int number;

public TelephoneNumber() { } }

10

2.2.4.

ENCAPSULAR ATRIBUTO (ENCAPSULATE FIELD) Encapsular Atributo uma operao de refatorao que fornece uma

maneira de tornar um atributo privado e fornecer acessibilidade a esse atributo. Isso ocorre porque h um atributo pblico. Abaixo podemos ver um exemplo de um cdigo-fonte transformado pela refatorao Encapsular Atributo.

public String _name

Aps a refatorao o cdigo dever se transformar como mostrado abaixo.

private String _name; public String getName() {return _name;} public void setName(String arg) {_name = arg;}

2.2.5.

RENOMEAR MTODO (RENAME METHOD) Renomear Mtodo uma operao de refatorao que fornece uma

maneira de alterar o nome do mtodo. Isso ocorre porque o nome do mtodo no revela o seu propsito. Esta operao a mais usada na refatorao e nela possibilita que todo o sistema esteja coerente com a nova nomenclatura. muito til utilizar uma ferramenta automatizada evitando erros gerados desnecessariamente. Abaixo podemos ver um exemplo de um cdigo-fonte transformado pela refatorao Renomear Mtodo.

class Department { Project project = new Project();

public void showProjects() {

11

System.out.println(project.showInformation()); } }

class Project { String name;

public String showInformation() {..} } Aps a refatorao o cdigo dever se transformar como mostrado abaixo.

class Department { Project project = new Project();

public void showProjects() { System.out.println(project.show()); } } class Project { String name;

public String show() {..} }

2.2.6.

MOVER CLASSE (MOVE CLASS) Mover Classe uma operao de refatorao que fornece que mova a

classe para um pacote mais relevante a sua funcionalidade. Isso ocorre porque h uma classe que est em um pacote que no est relacionado com a funo que ele exerce. Abaixo podemos ver um exemplo de um cdigo-fonte transformado

12

pela refatorao Mover Classe.

package org.davison.ui // imports public class StringUtil ...

Aps a refatorao o cdigo dever se transformar como mostrado abaixo.

package org.davison.util // imports public class StringUtil ...

2.2.7.

DESCER MTODO (PUSH DOWN METHOD) Descer mtodo uma operao de refatorao que fornece uma

maneira de mover o mtodo para as subclasses. Isso ocorre porque o comportamento em uma superclasse relevante apenas para algumas de suas subclasses. Na Figura 2-1 podemos ver um exemplo de caso em que a refatorao pode atuar.

Figura 2-1 Diagrama representando um exemplo de classes em que podemos aplicar a

13

refatorao Descer Mtodo (Obtida em (FOWLER, 2010))

Aps a refatorao, perceba na Figura 2-2 que o mtodo foi transferido para a classe escolhida, no caso para uma de suas classes filhas na herana.

Figura 2-2 Diagrama representando as classes que foram aplicadas a refatorao Descer Mtodo (Obtida em (FOWLER, 2010))

2.2.8.

DESCER ATRIBUTO (PUSH DOWN FIELD) Descer atributo uma operao de refatorao que fornece uma

maneira de mover o atributo para as subclasses. Isso ocorre porque um atributo usado apenas por algumas subclasses. Na Figura 2-3 podemos ver um exemplo de caso em que a refatorao pode atuar.

Figura 2-3 Diagrama representando um exemplo de classes em que podemos aplicar a refatorao Descer Atributo (Obtida em (FOWLER, 2010))

14

Aps a refatorao, perceba na Figura 2-4 que o atributo foi transferido para a classe escolhida, no caso para uma de suas classes filhas na herana.

Figura 2-4 Diagrama representando as classes que foram aplicadas a refatorao Descer Atributo (Obtida em (FOWLER, 2010))

Esta refatorao muito parecida com o item 2.2.7, elas tem a mesma idia, porm muda apenas a sua finalidade. Enquanto uma refatorao se referencia no mtodo esta tem o foco no atributo. 2.2.9. EXTRAIR SUPERCLASSE (EXTRACT SUPERCLASS) Extrair superclasse uma operao de refatorao que fornece uma maneira de criar uma superclasse e mover as caractersticas comuns para a superclasse. Isso ocorre porque voc tem duas classes com caractersticas semelhantes. Na Figura 2-5 podemos ver um exemplo de caso em que a refatorao pode atuar.

15

Figura 2-5 Diagrama representando um exemplo de classes em que podemos aplicar a refatorao Extrair Superclasse (Obtida em (FOWLER, 2010))

Aps a refatorao, perceba na Figura 2-6 que as duas classes do exemplo viraram filhas de uma terceira. Foi utilizada a herana para auxiliar no melhor entendimento das classes.

Figura 2-6 Diagrama representando as classes que foram aplicadas a refatorao Extrair Superclasse (Obtida em (FOWLER, 2010))

16

CAPTULO 3.

PRINCIPAIS FERRAMENTAS DE REFATORAO

Neste Captulo, apresentaremos uma viso geral sobre as ferramentas de refatorao que iremos comparar e os testes realizados para a anlise da comparao. Na Seo 3.1 apresenta alguns critrios tcnicos que uma ferramenta de refatorao deve conter. Na Seo 3.2 apresenta alguns critrios prticos que uma ferramenta de refatorao deve conter. Na Seo 3.4 apresenta uma viso geral da ferramenta IntelliJ IDEA e o suporte refatorao que nela disponibilizada. Na Seo 3.5 apresenta uma viso geral da ferramenta NetBeans e o suporte refatorao que nela disponibilizada. Na Seo 3.3 apresenta uma viso geral da ferramenta Eclipse e o suporte refatorao que nela disponibilizada. Na Seo 3.6 mostra os testes realizados com as ferramentas e suas anlises.

3.1. CRITRIOS TCNICOS PARA UMA FERRAMENTA DE REFATORAO Nesta seo, apresentamos alguns critrios tcnicos de como uma ferramenta deve se comportar para desenvolver as refatoraes sem perdas para o funcionamento do projeto. 3.1.1. BANCO DE DADOS DO PROGRAMA Esse item importante para identificar a semntica da linguagem de programao no projeto a ser refatorado. Por exemplo, saber identificar que o atributo busca diferente do mtodo busca e que a alterao deste mtodo no altere os atributos com o mesmo nome no contexto do projeto, onde h inmeras classes interligadas. Para isso a ferramenta deve conter todas as informaes armazenadas referente ao projeto e cada alterao deve ser alterada sem que haja perda de desempenho. Esse processo deve ser transparente para o usurio.

17

3.1.2.

RVORES DE ANLISE SEMNTICA rvores de anlise semntica so estruturas de dados referentes ao

cdigo fonte do projeto. Nela encontramos as ligaes e representaes de todo cdigo e por ela que a ferramenta deve se basear para a busca de um determinado. Com um exemplo simples considere o seguinte mtodo:

public void alo() { System.out.println(Al Mundo!); }

A rvore de anlise semntica correspondente a esse cdigo se parece com a Figura 3-1, mostrada abaixo.

Figura 3-1 rvore semntica para o mtodo Al Mundo! (Obtida em (FOWLER, 2004))

3.1.3.

ACURCIA a preservao do comportamento do projeto, da funcionalidade, sem

que a refatorao automatizada gere um erro inesperado.

18

Quando acontecer problemas na refatorao, esta deve ser feita de forma manual e com a ateno para que o erro no volte a acontecer.

3.2. CRITRIOS PRTICOS PARA UMA FERRAMENTA DE REFATORAO Sero discutidos a seguir alguns critrios prticos de como uma ferramenta deve se comportar para desenvolver as refatoraes sem perdas para o funcionamento do projeto. 3.2.1. VELOCIDADE Critrio importante para se fazer uma refatorao automatizada, pois isso pode ser fundamental para que o mercado continue utilizando uma determinada ferramenta. Quanto mais tempo perdido numa refatorao, menos o desenvolvedor confiar na ferramenta. 3.2.2. DESFAZER Uma ferramenta de refatorao deve contar a opo de desfazer que significa voltar o cdigo fonte como era antes da refatorao em todas as classes alteradas. Essa opo fundamental para que a ferramenta passe confiabilidade e segurana ao fazer uma refatorao. Segundo (Fowler, 2004) a ferramenta Refactoring Browser, a primeira utilizada por ele, no tinha essa opo de desfazer. Caso o desenvolvedor se arrependesse da refatorao por algum motivo, mesmo se o comportamento do sistema no fosse alterado e a refatorao estivesse correta, no conseguiria voltar atrs. Nesse caso ruim, pois refatoraes sem sentido acarretariam em mais problemas em vez de ajudar o desenvolvedor. 3.2.3. INTEGRADA COM FERRAMENTAS As ferramentas de refatorao devem estar acopladas a um Ambiente de Desenvolvimento Integrado (IDE - Integrated Development Environment)

19

facilitando o desenvolvimento e a refatorao. Isso auxilia para que o desenvolvedor no sofra com as refatoraes, se tornando cada vez mais comum tanto quanto desenvolver. Refatoraes no sero vistas como algo custoso e trabalhoso, com tempo far parte do cotidiano dos projetos. Atualmente a maioria dos Ambientes de Desenvolvimento j contm essa ferramenta de refatorao integrada, com todas as facilidades. Sero apresentados alguns dos principais Ambientes abaixo. A ferramenta Refactoring Browser citada por (FOWLER, 2004) que nada mais que um editor que automatiza refatoraes. Essa ferramenta por ser antiga e as IDEs atuais j vem com plug-ins para a refatorao no apresentaremos nesse trabalho.

3.3. ECLIPSE IDE Eclipse uma comunidade de fonte aberta, cujos projetos esto focados na construo de uma plataforma de desenvolvimento aberta composta por extensveis frameworks, ferramentas e tempos de execuo para a construo, implementao e gerenciamento de software em todo o ciclo de vida. O projeto Eclipse foi originalmente criado pela IBM em Novembro de 2001 e apoiado por um consrcio de fornecedores de software. A Fundao Eclipse foi criado em janeiro de 2004 como uma corporao sem fins lucrativos independente para atuar como o mordomo da comunidade Eclipse. Hoje, a comunidade Eclipse consiste de indivduos e organizaes a partir de uma seo transversal da indstria de software. Para o comparativo foram feitos testes com a configurao do software mostrada na Tabela 3-1.

Eclipse Desenvolvedor Plataforma Verso utilizada Eclipse Foundation x64 3.7

20

Escrito em

Java

Sistema Operacional Microsoft Windows 7 Licena Pgina oficial Tamanho Licena Pblica Eclipse http://www.eclipse.org/ 212 MB
Tabela 3-1

Na Figura 3-2 mostramos o suporte s tcnicas de refatorao que a ferramenta disponibiliza em sua IDE.

Figura 3-2 Menu do Eclipse

Como visto na imagem o Eclipse apresenta uma grande variedade de tcnicas de refatorao e um timo suporte para ajudar o desenvolvedor de

21

maneira rpida e simples na codificao.

3.4. INTELLIJ IDEA IntelliJ IDEA uma ferramenta comercial de Java IDE construda pela empresa JetBrains em janeiro de 2001, na poca a nica IDE disponvel com avanado cdigo de navegao e refatorao de cdigo integradas. A ferramenta divida em duas IDEs a IntelliJ IDEA Ultimate (comercial e testvel por 30 dias) e a IntelliJ IDEA Community Edition (livre e aberta ao pblico). Para o comparativo utilizamos nos testes a IntelliJ IDEA Community Edition com a configurao do software mostrada na Tabela 3-2.

IntelliJ IDEA Desenvolvedor Plataforma Verso utilizada Escrito em JetBrains x64 10.5.1 Java

Sistema Operacional Microsoft Windows 7 Licena Pgina oficial Tamanho Apache 2.0 for Community Edition http://www.jetbrains.com/idea/ 89,2 MB
Tabela 3-2

Na Figura 3-3 mostramos o suporte s tcnicas de refatorao que a ferramenta disponibiliza em sua IDE.

22

Figura 3-3 Menu do IntelliJ

Como falado anteriormente, a primeira IDE que deu suporte a refatorao, a IntelliJ IDEA no poupou esforos em manter a grande maioria das tcnicas de refatorao superando as outras IDEs. Nela so apresentadas as principais tcnicas e um suporte excelente ao desenvolvedor.

3.5. NETBEANS IDE NetBeans um projeto Open Source com uma ampla base de usurios, uma comunidade crescente, perto dos 100 parceiros pelo mundo. A

23

Sun Micro system fundou o projeto Open Source NetBeans em junho de 2000 e continua sendo seu principal patrocinador. O NetBeans IDE um ambiente de desenvolvimento - uma ferramenta para programadores escrever, compilar, depurar e implantar programas. escrito em Java - mas pode suportar qualquer linguagem de programao. Existe tambm um enorme nmero de mdulos para aprimorar o NetBeans IDE. O NetBeans IDE um produto gratuito sem restries de como ser utilizado. Para o comparativo foram feitos testes com a configurao do software mostrada na Tabela 3-3.

NetBeans Desenvolvedor Plataforma Verso utilizada Escrito em Oracle Corporation x64 7.0 Java

Sistema Operacional Microsoft Windows 7 Licena Pgina oficial Tamanho Freeware http://netbeans.org/ 243 MB
Tabela 3-3

Na Figura 3-4 mostramos o suporte s tcnicas de refatorao que a ferramenta disponibiliza em sua IDE.

24

Figura 3-4 Menu do NetBeans

Apesar da IDE ser robusta em vrios aspectos para o desenvolvedor seu suporte refatorao pouco explorado, com tcnicas reduzidas em comparao as outras ferramentas. O foco da refatorao somente das principais tcnicas.

3.6. TESTES REALIZADOS Os testes realizados nas ferramentas so simples e visa analisar o comportamento de todas as IDE com o resultado esperado, com a usabilidade, com a velocidade das alteraes e com o suporte a determinada tcnica de refatorao. Como algumas tcnicas de refatorao no so suportadas pelo NetBeans vamos demonstrar nesse primeiro momento as tcnicas em comum as trs IDEs. Por fim, comentaremos das tcnicas que esto faltando na

25

ferramenta que por esse motivo, no puderam ser testadas. 3.6.1. RENOMEANDO A refatorao Renomear uma das mais teis tcnicas utilizadas atualmente. Ela permite renomear variveis, classes, mtodos, pacotes, pastas e quase todos os identificadores. Ao renomear um identificador, todas as referncias a esse identificador tambm so renomeadas. Na IDE Eclipse o atalho para se utilizar a refatorao Renomear o Alt+Shift+R. Ao invocar o atalho em um mtodo, no editor Eclipse, uma pequena caixa mostra, dentro do prprio editor, onde possvel alterar o nome do mtodo, como mostra a Figura 3-5. Digitando o novo nome e pressionando Enter, todas as referncias a esse mtodo tambm so alteradas.

Figura 3-5 Ferramenta para aplicar a tcnica de refatorao Renomear no Eclipse

Um dos destaques para a refatorao o painel de pr-visualizao como mostra a Figura 3-6. So mostradas com detalhes todas as classes e chamadas a esse mtodo, assim como o cdigo fonte de como ser aps a refatorao. Isto uma excelente opo para confirmar o trabalho que ser realizado antes da sua efetivao. Sua utilizao no obrigatrio o que facilita na velocidade e praticidade da refatorao.

26

Figura 3-6 Painel de pr-visualizao do Eclipse mostrando as futuras alteraes para a tcnica de refatorao Renomear

Na IDE IntelliJ o atalho para utilizar a refatorao Renomear Shift+F6. Diferentemente do que aconteceu com o Eclipse ao acionar o atalho aparecer uma caixa de dilogo para que seja includo um novo nome. Nesse caso se perde um pouco a questo da praticidade e dinamismo do software. Assim como no Eclipse, a IDE disponibiliza para o desenvolvedor a opo de pr-visualizao, porm no to detalhada quanto. Na IDE NetBeans o atalho para utilizar a refatorao Renomear Ctrl+R. Ao acionar o atalho a refatorao acontece exatamente igual ao Eclipse no que tange a questo de alterao dentro do prprio editor, porm no existe a possibilidade de pr-visualizao. A pr-visualizao estar disponvel somente quando acessado pelo sub-menu Renomear dentro do menu Refatorar. Esta opo no perde em nada para o Eclipse que tambm mostra as futuras alteraes, o antes e o depois da efetivao da refatorao alm da opo de prosseguir ou cancelar a ao. A refatorao em todas as IDEs foi realizada como esperada e sem problemas em sua execuo. Destaque para o Eclipse e NetBeans que pudemos renomear no prprio editor de maneira rpida e eficiente.

27

3.6.2.

MOVENDO UMA CLASSE A refatorao Mover tambm muito til e utilizamos para mover uma

classe de um pacote para outro. Ela move fisicamente a classe para a pasta que corresponde ao pacote e tambm altera todas as referncias classe para se referir ao novo pacote. No Eclipse o atalho para se utilizar a refatorao Mover Alt+Shift+V. Ao acessar o atalho aparecer um painel para a seleo do futuro pacote com a opo de pr-visualizao como mostra a Figura 3-7.

Figura 3-7 Painel do Eclipse para a seleo do pacote futuro onde ser movida a classe desejada

Na IDE IntelliJ foi realizado o procedimento atravs do atalho F6 de forma rpida e prtica bastando selecionar em uma caixa de dilogo o pacote que ser movida a classe. Pela ferramenta IDE NetBeans o atalho para a realizao da refatorao seria atravs do comando Ctrl+M, porm no funcionou e a

28

operao foi realizada atravs do caminho normal Refatorar > Mover. Para todas as IDEs possvel tambm arrastar e soltar uma classe para um novo pacote na visualizao Package Explorer, e a refatorao ocorrer automaticamente. Isso de grande valia e acontece de forma natural. A refatorao em todas as IDEs foi realizada como esperado e sem problemas em sua execuo. 3.6.3. ENCAPSULANDO UM ATRIBUTO A refatorao Encapsular Atributo, como j foi visto anteriormente, uma operao que transforma um atributo pblico em privado e fornece acessibilidade a esse atributo. Na Figura 3-8 podemos ver um atributo em que poderamos aplicar a refatorao.

Figura 3-8 Cdigo-fonte de como era antes da refatorao Encapsular um Atributo

Note abaixo na Figura 3-9 que o cdigo-fonte aps a refatorao ficou maior, mas isso no um problema. Estamos garantindo que estamos usando o encapsulamento que fundamental para a proteo do atributo e assegurarmos a integridade da classe e o isolamento do atributo.

Figura 3-9 Cdigo-fonte de como ficou aps a refatorao Encapsular um Atributo

29

Na IDE Eclipse foi realizado o procedimento deixando o cursor, obrigatoriamente, em um atributo que dever ser encapsulado, caso contrrio ocorrer um mensagem de alerta pedindo a sua seleo. Ponto forte seu reconhecimento da varivel simplesmente colocando o cursor focado na varivel para que seja feita a refatorao. Como j foi falado para nos itens anteriores para esta refatorao tambm existe esta tima opo de pr-visualizao antes de efetivar a tcnica como mostra a Figura 3-10.

Figura 3-10 Painel de pr-visualizao do Eclipse mostrando as futuras alteraes para a tcnica de refatorao Encapsular Atributo

Na IDE IntelliJ, ao contrrio do Eclipse, ao clicar no sub-menu Encapsular Atributo no necessrio selecionar o atributo e caso o cursor esteja em um atributo a ferramenta verifica se o atributo necessita de refatorao. Ao clicar no menu aparece um painel contendo todos os atributos da classe com suas respectivas informaes como mostra a Figura 3-11. Neste caso uma vantagem, pois o desenvolvedor poder escolher qual atributo se deseja encapsular alm de poder selecionar mais de um atributo.

30

Figura 3-11 Painel do IntelliJ que mostra atributos e suas informaes que podero ser encapsuladas

A opo de pr-visualizao perde em relao opo do Eclipse que detalha mais e bastante visual a modificao de como ser a refatorao. Na IDE NetBeans o tratamento do encapsulamento do atributo exatamente idntico ao IntelliJ. Nessa refatorao tambm existe o timo suporte da pr-visualizao bem definida e detalhada. A refatorao em todas as IDEs foram realizadas como esperada e sem problemas em sua execuo. 3.6.4. EXTRAIR SUPERCLASSE A refatorao Extrair Superclasse similar refatorao Extrair Interface. Se a classe j usa uma superclasse, a classe mais recentemente gerada ter essa classe como sua superclasse, mantendo a hierarquia de classes.

31

Na Figura 3-12 podemos ver um possvel cdigo-fonte em que poderamos aplicar a refatorao.

Figura 3-12 Cdigo-fonte de como era antes da refatorao Extrair Superclasse

Note que na Figura 3-13 foi criada uma classe na qual se tornou pai da classe mostrada na Figura 3-12. Este foi um clssico exemplo de como esperado que a ferramenta de refatorao extraia uma superclasse.

32

Figura 3-13 Cdigo-fonte de como ficou aps a refatorao Extrair Superclasse

Na IDE Eclipse para usar essa refatorao foi preciso certificar que o cursor estivesse em uma das declaraes ou um dos campos de mtodo da classe. Uma caixa de dilogo exibida e permite que voc nomeie a nova superclasse e selecione os mtodos e campos que sero colocados na superclasse. Na IDE IntelliJ e na IDE NetBeans os testes executaram e obtiveram o mesmo resultado, incluindo a caixa de dilogo. 3.6.5. EXTRAINDO UM MTODO A refatorao Extrair Mtodo permite selecionar um bloco de cdigo e convert-lo em um mtodo. Isso til quando um mtodo muito grande e voc deseja subdividir seus blocos em diferentes mtodos. Isso tambm til se voc tiver um pedao de cdigo que reutilizado em muitos mtodos. Na Figura 3-14 como podemos observar h uma replicao no cdigo e nesse caso poderamos aplicar a refatorao com segurana.

33

Figura 3-14 Cdigo-fonte de como era antes da refatorao Extrair Mtodo

Veja na Figura 3-15 que aps a refatorao foi criado um novo mtodo deixando o mtodo refatorado mais limpo e visualmente mais claro. Tivemos um ganho no que diz respeito a repetio do cdigo, ao reuso. Se por um acaso tiver um mtodo que solicite a mesma funcionalidade que o mtodo criado no precisaria copiar o cdigo, basta utilizar o mtodo que foi criado.

Figura 3-15 Cdigo-fonte de como ficou aps a refatorao Extrair Mtodo

Na IDE Eclipse foi realizado o procedimento atravs do atalho Alt+Shift+M. Primeiramente devemos certificar que o seu cursor esteja em um trecho de cdigo possvel de ser extrado. Aps o acionamento do atalho uma caixa de dilogo exibida e permite que voc nomeie um nome para o mtodo. A IDE descobre automaticamente os argumentos e os valores de retorno corretos. Por fim, automaticamente so alteradas todas as chamadas com a mesma nomenclatura do trecho de cdigo selecionado. Na IDE IntelliJ foi realizado o procedimento atravs do atalho Ctrl+Alt+M. Ao acionar o atalho, aparece uma caixa de dilogo para que seja colocado o nome do nove mtodo a ser criado. O interessante notar que a prvisualizao mostrada na mesma caixa de dilogo, possibilitando uma rpida

34

noo do que ser alterado. Outro ponto positivo na ferramenta passado ao usurio a informao que alm do trecho de cdigo selecionado foi encontrado outro trecho que poder ser utilizado e espera que o usurio decida qual melhor maneira de proceder, se alterando o cdigo encontrado ou no. Na IDE NetBeans no pudemos realizar os testes necessrios, pelo fato de no ter sido disponibilizado o suporte essa tcnica de refatorao Extrair Mtodo. Em todas as IDEs, com exceo da IDE NetBeans, foram realizadas os testes como esperado e sem problemas em sua execuo. 3.6.6. EM LINHA (INLINE) A refatorao Em Linha pode sequenciar uma referncia a uma varivel ou um mtodo. Quando usada, ela substitui a referncia varivel ou ao mtodo pelo valor designado varivel ou implementao do mtodo, respectivamente. Isso pode ser til para limpar o cdigo quando um mtodo for chamado somente uma vez por outro mtodo e fizer mais sentido como um bloco de cdigo ou quando uma expresso parecer mais limpa em uma linha, em vez de dividi-la em vrias linhas designando valores para variveis diferentes. Na Figura 3-16 podemos observar um desperdcio de memria, alocando em uma varivel antes de retornarmos o valor para a sada do mtodo. Esse um exemplo clssico de refatorao Varivel Local Em Linha.

Figura 3-16 Cdigo-fonte de como era antes da refatorao Em Linha

A Figura 3-17 mostra o mesmo cdigo aps ter realizado a refatorao Em Linha. Observe que onde eram duas linhas de cdigo agora se ajusta claramente em uma nica linha de cdigo.

35

Figura 3-17 Cdigo-fonte de como ficou aps a refatorao Em Linha

Na IDE Eclipse foi realizado o procedimento atravs do atalho Alt+Shift+I. Para usar esta refatorao, o cursor dever estar posicionado em uma varivel local ou um mtodo. Uma caixa de dilogo exibida solicitando a confirmao da refatorao. Na IDE IntelliJ foi realizado o procedimento atravs do atalho Ctrl+Alt+N. A refatorao Em Linha para uma varivel local e em um mtodo funciona exatamente igual IDE Eclipse. Somente em um teste em que um mtodo no podia ser feito a refatorao, na IDE Eclipse demorou um tempo considervel para que fosse informado que no poderia ser feita a refatorao. Em contra partida, na IDE IntelliJ no foi informado mensagem alguma, porm de alguma forma a ferramenta j havia guardado essa informao e por isso no prosseguiu para a realizao da refatorao. Na IDE NetBeans no pudemos realizar os testes necessrios, pelo fato de no ter sido disponibilizado o suporte essa tcnica de refatorao Em Linha. Assim como o item 3.6.5 os testes foram realizados como esperado e sem problemas em sua execuo com exceo da IDE NetBeans. 3.6.7. COMANDO DESFAZER (CTRL+Z) O comando desfazer muito utilizado nos editores de texto. Este comando foi criado por volta de 1976 quando duas pessoas: Lance A. Miller e John C. Thomas, que trabalhavam na IBM, deram a idia em um relatrio de pesquisa da IBM de poder voltar aquilo que foi alterado anteriormente. Depois disso, os programadores do instituto de pesquisa Xerox PARC decidiram atribuir a combinao de teclas Ctrl+Z para a funo desfazer (undo, termo em ingls). Pensando nisso fizemos um teste caso alguma refatorao indesejada

36

tenha acontecido e queiramos voltar como era antes da refatorao ter sido efetuada. Na IDE Eclipse o comando desfazer foi realizado com perfeio em todos os casos acima demonstrado. Os testes foram feitos diretamente com extrema rapidez. Na IDE IntelliJ tambm no tivemos problemas na execuo tanto no menu desfazer quanto no atalho que funcionaram conforme esperado de forma rpida e eficaz. Na IDE NetBeans houve uma particularidade nesse caso. O comando desfazer separado da aplicao. Conforme a Figura 3-18 para voltarmos a refatorao feito de forma separada. O atalho Ctrl+Z no funcionou, pois faz parte do editor e no da refatorao. Isso um erro gravssimo de usabilidade.

Figura 3-18 Menu do NetBeans onde mostra o comando desfazer desabilitado e o sub-menu desfazer adicionado no menu Refatorar

Como j comentado o desenvolvimento e a refatorao devem caminhar lado a lado. A refatorao deve, com o tempo, fazer parte do cotidiano do desenvolvedor. Separando esse comando estamos indo de encontro a essa idia.

37

3.6.8.

TCNICAS DE REFATORAO NO UTILIZADAS Algumas tcnicas de refatorao no puderam ser utilizadas, pois a

IDE NetBeans oferece pouco suporte, como podemos ver na Figura 3-4. Por esse motivo no pudemos apresentar uma anlise comparativa entre as ferramentas. No item 3.6.6 vimos que no foi possvel praticar a mesma tcnica em todas as IDEs. Abaixo citamos algumas das tcnicas de refatorao que no conseguimos reproduzir na ferramenta NetBeans: Descer Mtodo Em Linha Extrair Mtodo Extrair Varivel Local Mover Mtodo Subir Mtodo

3.7. DESTAQUES Avaliando todas as IDEs podemos destacar um suporte de grande ajuda ao usurio no que se refere refatorao. Podemos destacar duas funcionalidades: Histrico na IDE do Eclipse e Excluso Segura nas IDEs IntelliJ e NetBeans. 3.7.1. FUNCIONALIDADE HISTRICO No Eclipse podemos acessar a funcionalidade Histrico (menu History) como vemos na Figura 3-19.

Figura 3-19 Menu do Eclipse para acesso funcionalidade Histrico

38

Essa

funcionalidade

corresponde

ao

histrico

das

mudanas

produzidas pelas refatoraes ao longo de todo o desenvolvimento do projeto. Podemos obter um relatrio de todas as mudanas feitas. Clicando sobre um dos itens do histrico possvel ver detalhes, como por exemplo, a data da mudana, de qual para qual classe foi feita a operao, se a refatorao for um mtodo, superclasse ou interface extrada, e qual o nome e tipo de acesso desse novo componente, entre outras informaes que nos auxilia sobre o que aconteceu no projeto, podendo inclusive remover a refatorao efetuada em determinada poca. Na Figura 3-20 mostra todos os detalhes das alteraes de refatorao organizados pela data.

Figura 3-20 Painel de exibio da funcionalidade Histrico no Eclipse

39

3.7.2.

FUNCIONALIDADE EXCLUSO SEGURA A funcionalidade Excluso Segura podemos encontrar tanto na IDE

IntelliJ quanto na IDE NetBeans. uma tima ferramenta para excluir todas as chamadas a determinada classe, interface, atributo, mtodo e at mesmo qualquer tipo de varivel. Na Figura 3-21 vemos um exemplo de Excluso Segura de uma classe Negocio do sistema testado. A IDE procura e exclu todas as chamadas utilizadas no sistema sem afetar seu funcionamento.

Figura 3-21 Painel do NetBeans utilizado para a refatorao Excluso Segura

40

CAPTULO 4.

CONCLUSO

Neste

Captulo,

apresentaremos

um

resumo

final

sobre

as

consideraes apresentadas nos testes de forma a reforar o que foi mostrado.

4.1. ANLISE RETROSPECTIVA Pode-se concluir que refatorar exige um conhecimento das tcnicas tanto para a refatorao manual quanto pelo uso de ferramentas

automatizadas. Atravs do testes realizados podemos avaliar que as IDEs que se destacaram quanto ao completo suporte refatorao foram a IDE Eclipse e a IDE IntelliJ. Podemos perceber uma maturidade alta no suporte a refatorao, com flexibilidade nos comandos, atalhos bem simples, refatoraes de maneira gil e abrangendo um maior nmero de refatoraes possveis. Todas as IDEs mostravam uma visualizao prvia da refatorao antes de realmente efetiv-la. Esse item importante para que possa ser mostrado ao usurio o que ser feito na refatorao e nesse quesito as ferramentas apresentavam grficos e o passo a passo das alteraes com mais detalhamento do Eclipse e NetBeans. A IDE NetBeans deixou a desejar em fornecer algumas refatoraes automatizada e no que diz respeito ao comando Desfazer. Como comentado anteriormente, no quesito usabilidade mais uma vez pecou ao ser pouco intuitivo ao usurio final. Em relao ao suporte refatorao a IDE precisa melhorar para se igualar as outras. Segundo (FOWLER, 2004) o uso de ferramentas de refatorao automtica a melhor maneira de gerenciar a complexidade que aparece quando um projeto de software evolui. Sem ferramentas para lidar com esta complexidade, o software se torna inchado, frgil e com erros. Como pode ser notado o auxlio das ferramentas obtm a rapidez na refatorao, com isso h um ganho no desenvolvimento no s no presente, mas tambm numa futura manuteno.

41

4.2. TRABALHOS FUTUROS A abordagem empreendida nesse trabalho no se pretendeu exaustiva. Dessa forma, necessrio que haja uma investigao mais profunda sobre todas as tcnicas de refatorao nas trs IDEs citadas. Ainda cedo para que uma IDE chegue a maturidade ideal que traga de forma completa todas as tcnicas empregadas na refatorao. Assim sendo, merece um aprofundamento nas investigaes de cada IDE. Como vimos a IDE NetBeans ainda merece reparos no que diz respeito ao suporte s tcnicas de refatorao. Quando atingir um nvel esperado de maturidade, essa dever ser avaliada de modo a se equiparar com as outras IDEs e ser melhor avaliada.

42

REFERNCIAS

ASSOCIAO BRASILEIRA DE NORMAS TCNICAS. Informao e documentao - Trabalhos Acadmicos - Apresentao. Rio de Janeiro: ABNT NBR 14724, 2011. 11 p. BECK, K. Programao extrema explicada: acolha as mudanas. Porto Alegre: Bookman, 2000. 186 p. DEVA, P. Explore Funes de Refatorao no Eclipse JDT. developerWorks IBM, 07 Dezembro 2009. Disponivel em: <http://www.ibm.com/developerworks/br/opensource/library/os-eclipserefactoring/>. Acesso em: 28 jul. 2011. FOWLER, M. Refatorao Aperfeioando o Projeto de Cdigo Existente. Traduo de Acauan Fernandes. Porto Alegre: Bookman, 2004. 366 p. FOWLER, M. Refactoring. Refactoring Home Page, 2010. Disponivel em: <http://www.refactoring.com/>. Acesso em: 28 jul. 2011. PRESSMAN, R. S. Engenharia de Software. 6 Edio. ed. [S.l.]: McGraw-Hill, 2006. 720 p. REFATORAO com Netbeans e Eclipse. Blog Javaelinux, 2011. Disponivel em: <http://javaelinux.wordpress.com/2011/03/21/refatoracao-com-netbeans-eeclipse/>. Acesso em: 28 jul. 2011. WELLS, D. Extreme Programming: A gentle introduction. Extreme Programming, 2009. Disponivel em: <http://www.extremeprogramming.org/>. Acesso em: 28 jul. 2011.

Você também pode gostar