Refatoração: Melhorando a Qualidade de Código Pré-Existente Cursos de Verão 2008 – IME/USP Mariana Bravo & Hugo Corbucci.

Slides:



Advertisements
Apresentações semelhantes
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Advertisements

Extreme Programming Walfredo Cirne Universidade Federal da Paraíba.
Test Driven Development Nazareno Andrade Baseado no material do prof. Hyggo Almeida.
1 Test Driven Development John Jonathan da Silva /
1 Refatoração: Melhorando a Qualidade de Código Pré-Existente Prof. Dr. Fabio Kon Departamento de Ciência da Computação IME / USP JIM ’ São Lu í.
Desenvolvendo Software com Qualidade e Agilidade Prof. Dr. Fabio Kon Departamento de Ciência da Computação IME - USP
1 Refatoração: Melhorando o Design de Código Pré-Existente Prof. Dr. Fabio Kon Prof. Dr. Alfredo Goldman Departamento de Ciência da Computação IME / USP.
Evolução de Software e Refatoração
REFATORAÇÃO JOÃO LACERDA DJALMA LIMA. MARTIN FOWLER É um autor conhecido na área de arquitetura de software, especializado em análise orientada a objetos,
TÉCNICO EM INFORMÁTICA Linguagem e Técnica de Programação III PROF. MARCELO N. SANTOS
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Testes de Interface de Usuário AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão Hugo Corbucci.
Desenvolvimento Dirigido por Testes (TDD) Cursos de Verão Mariana Bravo.
Introdução a Testes Automatizados AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Padrões de Testes Automatizados Curso de Verão IME/USP Hugo Corbucci
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Testes Automatizados Cursos de Verão 2007 – IME/USP Dairton Bassi & Paulo Cheque.
CARTÕES CRC. O começo ● Ward Cunningham e Kent Back contratados pela Tektronix para um projeto de pesquisa.
Programação Orientada a Objetos com C++ Descrição do Trabalho Final.
Refatoração: Melhorando código existente AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Introdução a Testes Automatizados Cursos de Verão 2008 – IME/USP Paulo Cheque.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
07/06/ João Paulo Pizani Flor ( Síntese comportamental de componentes de um Sistema Operacional em hardware João Paulo Pizani.
Tracking – Acompanhamento de Projetos Ágeis Curso de Verão 2007 – IME/USP Danilo Sato & Mariana Bravo.
Código Limpo Curso de Verão IME/USP Hugo Corbucci.
Programação Extrema e outras práticas para elaboração de software Hugo Corbucci AgilCoop DCC - IME - USP
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Ferramenta de apoio aos testes baseados em requisitos Acadêmico: Leandro da Cunha Orientador: Everaldo Artur Grahl.
Introdução à Programação eXtrema (XP) Cursos de Verão IME/USP Mariana Bravo e Hugo Corbucci Departamento de Ciência da Computação.
Objetos Dublês AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Testes de Unidade Curso de Verão IME/USP Hugo Corbucci
Desenvolvimento Dirigido por Testes (TDD)
Laboratório de Engenharia de Software
Olá sou Willian Marques, natural de Minas Gerais que atualmente mora na cidade São Paulo. Programador.
Persistência de dados e padrão DAO
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
Programação Orientada a Objetos
Plano de liberação do Software UNI MAPS
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Módulo I Capítulo 2: IDE e Variáveis
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Desenvolvimento Dirigido por Testes / Testes a Priori
INTRODUÇÃO AO CONTROLE ESTATÍSTICO
Singleton e Template Method
Introdução à programação orientada por objetos
REFATORAÇÃO ASPECTOS BÁSICOS.
Edson Susumu Asaga JavaBeans Edson Susumu Asaga
Refatoração: Melhorando a Qualidade de Código Pré-Existente
Workshop Agile tdd - Test Driven development
A definição de Modelo de Negócios
Aula 5 Projeto Olimpíada.
Modelagem Orientada a Objetos com UML
4 CONCEITOS BÁSICOS EM POO
Desenvolvimento de Software de Qualidade através de Testes Automatizados 09/02/2009 Verão h.
Revisão Requisitos e Casos de Uso
Dr. Almir rogério camolesi
Módulo I Capítulo 4: Operador de Repetição
Linguagem de Programação
3.2 Sobrecarga de Métodos (Overloading)
Programação Orientada a Objetos
Prof.: Bruno Rafael de Oliveira Rodrigues
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Hierarquia de memória Memória Interna. Memória A.W. Burks, H.H. Goldstine e J. von Neumann Preliminary Discussion of the Logical Design of na Eletronic.
Leonardo M G Gallardo Trilha: Testes
Padrões de Projeto.
Leonardo M G Gallardo Trilha: DevTest
BUILDING INFORMATION MODELING = MODELAÇÃO DA INFORMAÇÃO DA EDIFICAÇÃO
Transcrição da apresentação:

Refatoração: Melhorando a Qualidade de Código Pré-Existente Cursos de Verão 2008 – IME/USP Mariana Bravo & Hugo Corbucci

copyleft agilcoop Refatoração ● Uma modificação no sistema que não altera o seu comportamento funcional, mas melhora sua estrutura interna. ● Limpa o código minimizando as chances de introduzir erros. ● Melhorar o design depois que o código foi escrito.

copyleft agilcoop De onde vem? ● Surgiu na comunidade de Smalltalk nos anos 80/90. ● Desenvolveu-se formalmente na Universidade de Illinois em Urbana-Champaign. ● Grupo do Prof. Ralph Johnson. – Tese de PhD de William Opdyke (1992). – John Brant e Don Roberts: ● The Refactoring Browser Tool ● Kent Beck (XP) na indústria.

copyleft agilcoop O espírito da refatoração Antes

copyleft agilcoop O espírito da refatoração (refatoração) Antes

copyleft agilcoop O espírito da refatoração (refatoração) Antes Depois

copyleft agilcoop Exemplos

copyleft agilcoop Extrair método ● Transforma um fragmento de código em um método com um nome explicativo. ● Motivação: – Diminuir e facilitar o entendimento de trecho de código. – Aumentar as chances de reutilização do novo método.

copyleft agilcoop Renomear variável ● Muda o nome de uma variável para expressar melhor o seu propósito ● Motivação: – Não é fácil entender a função da variável em seu escopo

copyleft agilcoop Dinâmica da refatoração ● Cada mudança é simples... ● Mas seu efeito acumulado pode melhorar muito o design e o código ● É construindo o sistema que podemos descobrir como melhorá-lo

copyleft agilcoop Refatorar para... ● Melhorar o design do software ● Tornar o software mais fácil de entender ● Encontrar falhas mais facilmente ● Programar mais rapidamente

copyleft agilcoop Quando refatorar ● Sempre que você precisar fazer algo e o código estiver atrapalhando: – Na terceira vez, refatore – Quando adiciona funcionalidade – Quando corrige um erro – Quando revisa o código ● Quando o código cheira mau – “If it stinks, change it.” (Se feder, troque-o.) Grandma Beck, falando sobre como cuidar de bebês.

copyleft agilcoop Alguns maus cheiros ● Nomes de variáveis obscuros ● Código duplicado ● Método muito longo ● Classe muito grande ● Intimidade inapropriada ● Comentários ● Muitos parâmetros

copyleft agilcoop Primeiro passo: testes ● Antes de refatorar, tenha um conjunto sólido de testes para garantir que o comportamento não seja alterado. ● Refatorações podem adicionar erros. – porém, como são feitas em pequenos passos, é fácil recuperar-se de uma falha ● Os testes ajudam a detectar erros se eles forem criados. ● Testes têm que ser automáticos e ser capazes de se auto-verificarem.

copyleft agilcoop Exemplos

copyleft agilcoop Mover método ● Move um método que utiliza mais funcionalidades de outra classe do que aquela em que se encontra. ● Motivação: – Uma classe tem muitos comportamentos – O acoplamento entre classes é muito forte ● O velho método delega ou é removido.

copyleft agilcoop Usando ferramentas

copyleft agilcoop Substituir temporário com chamada ● Substitui o uso de um variável por uma chamada a um método que realiza as operações. ● Motivação: – Variáveis temporárias incentivam seu uso prolongado por terem um escopo limitado

copyleft agilcoop Mais um exemplo

copyleft agilcoop E o desempenho? "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." (Devemos esquecer as pequenas eficiências em 97% do tempo: otimização prematura é a raiz de todo o mal.) Donald Knuth ● Usar profiling para encontrar os gargalos ● Otimizar apenas estes gargalos ● Código fatorado: – Compra tempo para otimizar – Aumenta a precisão na otimização

copyleft agilcoop Dois chapéus ● Refatoração ● Adicionando funcionalidades ● Corrigindo erros

copyleft agilcoop Problemas com refatorações ● Refatoração de sistemas grandes ou enormes ● Refatoração com bancos de dados ● Refatoração de APIs públicas ● Quando NÃO refatorar? – Quando é tão ruim que reescrever é melhor – Quando você está próximo de um prazo!

copyleft agilcoop Catálogo de Refatorações ● [Fowler, 2000] “Refatoração”, contém 72 refatorações. ● Análogo aos padrões de desenho orientado a objetos [Gamma et al. 1995] (GoF). ● [Kerievsky, 2004] “Refactoring to patterns”, catálogo com 27 refatorações que aplicam padrões!

copyleft agilcoop Formato de refatorações nos catálogos ● Nome da refatoração. ● Resumo da situação na qual ela é necessária e o que ela faz. ● Motivação para usá-la (e quando não usá-la). ● Mecânica, i.e., descrição passo a passo. ● Exemplos para ilustrar o uso.

copyleft agilcoop Ferramentas para Refatoração ● Refactoring Browser Tool. ● Dá suporte automatizado para uma série de refatorações. ● Pode melhorar em muito a produtividade. ● Existem há vários anos para Smalltalk. ● Já há várias para C++ e Java. ● Iniciativas acadêmicas ● Agora, integrado no Eclipse e no Visual Works.

copyleft agilcoop Referências ● ● Martin Fowler. Refactoring: improving the design of existing code. ● Kerievsky. Refactoring to patterns