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

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

Refatoração: Melhorando código existente

Refatoração: Melhorando a Qualidade de Código Pré-Existente. Cursos de Verão 2007 IME/USP Alexandre Freire & Paulo Cheque

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 26 de outubro de 12

Refatoração: uma introdução. Prof. André Luiz Peron Martins Lanna

Prof. Dr. Fabio Kon Prof. Dr. Alfredo Goldman. Departamento de Ciência da Computação IME / USP. 3 de Abril de 2003 VI Semana da Computação

Introdução à Programação extrema (XP)

Oportunidades de refatoração. Prof. André Luiz Peron Martins Lanna

Desenvolvimento Dirigido por Testes (TDD)

Modulo II Técnicas para desenvolvimento de Software Ágil

Refatoração de Software

Evolução de Software e Refatoração. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 1

Reengenharia, Refatoração e Bad Smell

Princípios em refatoração. Prof. André Luiz Peron Martins Lanna

Testes Automatizados. Cursos de Verão 2007 IME/USP Dairton Bassi & Paulo Cheque

Padrões de Testes Automatizados

Dificuldades na implantação de Métodos Ágeis

Introdução a Métodos Ágeis. Curso de Verão IME/USP

Desenvolvimento Dirigido por Testes (TDD)

Módulo I Princípios e Padrões de Projeto de SW em Java

UNIVERSIDADE FEDERAL DO PARANÁ - UFPR Bacharelado em Ciência da Computação

Desenvolvimento Dirigido por Testes (TDD)

Introdução a Testes Automatizados

Introdução a Métodos Ágeis com ênfase em XP. Alfredo Goldman Professor do IME - USP

Desenvolvimento de Software de Qualidade através de Testes Automatizados

Python Sistemas legados, qualidade de código e bad smells Gisele Zomer Rossi

CAMILO LOPES DE MEDEIROS NETO. SIMONE P. CRUZ (Orientador Geral) ADONAI ESTRELA MEDRADO (Orientador Específico)

BibIme - Um Software Gerenciador de Bibliotecas Produzido de Forma Cooperativa

Código Limpo. Curso de Verão IME/USP Hugo Corbucci

MAC Tópicos de P.O.O.

Estratégias de Escrita de Testes Automatizados

Simplificando expressões condicionais

10 Lições Aprendidas ao Desenvolver um Estudo na Indústria

Desenho e documentação de arquitectura de software e de aplicações empresariais

A Evolução de XP segundo Kent Beck Parte 1

2 Fundamentação. 2.1 Problemas de qualidade de código

Refatorando

Tracking Acompanhamento de Projetos Ágeis

Testes de Unidade. Curso de Verão IME/USP Hugo Corbucci

Disciplina: Engenharia de Software. 3 Bimestre Aula 2: EVOLUÇÃO DE SOFTWARE

Refatoração Melhorando o sistema e preparando pra a Web

Tracking Acompanhamento de Projetos Ágeis

Roni Fabio Banaszewski UTFPR Universidade Tecnológica Federal do Paraná

Desenvolvimento de Software de Qualidade através de Testes Automatizados

Desenvolvimento orientado por testes, padrões de testes e JWebUnit

Refatorando o SimGrIP: um estudo de caso acerca da aplicação de técnicas de refatoração de software

REFATORAÇÃO: APERFEIÇOANDO UM CÓDIGO EXISTENTE

Tipos para uma Linguagem de Transformação

Métodos Ágeis de desenvolvimento de software: uma abordagem humana

Agile Methods for the Traditional Guy

Evolução de Software. Agenda a Aula. Evolução de Software. Evolução de Software. Atividades Comuns. Atividades de Desenvolvimento

PROGRAMAÇÃO EXTREMA - XP

Tópicos Avançados em Linguagem de Programação. Padrões de Software. Prof. Alexandre Vidal DEINF-UFMA. Ciência da Computação

Extreme Programming. Projeto de. Desenvolvimento. Software. Prof.: Ari Oliveira

Programação extrema (XP)

Programação Extrema na Prática

Gerenciamento de Redes. Introdução

Modulo I Princípios e Padrões de Projeto de SW em Java

Alterações no design do Admin Console

Erich Silvestre. Ferramentas de fatoração para o ambiente telis

Objetos Dublês. AgilCoop Cursos de Verão Mariana Bravo IME/USP

O catálogo de refatorações é composto de 72 operações agrupadas em 5 categorias:

Padrões de Testes Automatizados. Exame de Defesa de Mestrado Paulo Cheque Bernardo Orientador: Fabio Kon DCC IME/USP 4 de julho de 2011

Extending Extreme Programming With Practices From Other Methodologies

Mas o que é mesmo Padrão de Projeto?

Projeto de software Estrutura do software e arquitetura SWEBOK

JUnit: framework de testes unitários. Fred Lopes

Programação extrema (XP)

Programação extrema (XP)

TEST DRIVEN DEVELOPMENT. Prof. Bruno Henrique Pachulski

Metodologias Ágeis de Desenvolvimento de Software FEUP, MEI e LEIC, 2005/06

Repositório. de Componentes em Delphi. Josiane Gianisini Orientador Marcel Hugo

Sumário. Escrita de Programas. Qualidades. Objectivos. Engenharia de Software. Caracterização. Técnicas Casos Notáveis Conclusões

Escrita de Programas. António Rito Silva

Por que pensar computacionalmente?

Testes Automatizados. Paulo Cheque. 27/01/2009 Verão 2009

2. Uma Metodologia para o Problema de Restauração de Cadastros

Extração de Aspectos. PUC Minas Instituto de Informática. Mestrado em Informática. Aluno: Marcelo Nassau Malta

PADRÕES DE PROJETO: DESIGN PATTERNS

FACULDADE ZACARIAS DE GÓES CAMILO LOPES DE MEDEIROS NETO IMPLICAÇÕES DA TÉCNICA DE REFATORAÇÃO EM DESENVOLVIMENTO E MANUTENÇÃO DE SOFTWARE

Módulo III Padrões GOF: Bridge

Sistemas Especialistas

Metodologias Ágeis. Equipe WEB Cercomp

Representação do Conhecimento de Forma a Buscar Oportunidades de Refatoração Através de uma Ontologia

Metodologias Ágeis. Gerenciando e Desenvolvendo Projetos de forma eficiente. Gabriel Verta Rafael Reimberg Vinicius Quaiato

DA PRÉ-IMPRESSÃO AO ACABAMENTO DIGITAL

UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO CURSO: CIÊNCIAS DA COMPUTAÇÃO

REFERÊNCIA BIBLIOGRÁFICA

Programação extrema (XP)

abraçando a mudança extreme Programming Helder da Rocha

SUnit Referências. SUnit. Jefferson Serafim Ascaneo, Suzana de Siqueira Santos

Introdução a Métodos Ágeis de Desenvolvimento de Software

Engenharia de Software Experimental

Facetas da Reusabilidade de Software

BUSCA POR OPORTUNIDADES DE REFATORAÇÃO PARA APLICAÇÃO DE PADRÕES DE PROJETO

Engenharia de Software

DIVISÃO DE ASSUNTOS ACADÊMICOS Secretaria Geral de Cursos PROGRAMA DE DISCIPLINA

Transcrição:

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

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 2008 2

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

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

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

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

Exemplos copyleft agilcoop 2008 7

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 2008 8

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 2008 9

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 2008 10

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

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 2008 12

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 2008 13

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 2008 14

Exemplos copyleft agilcoop 2008 15

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 2008 16

Usando ferramentas copyleft agilcoop 2008 17

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 2008 18

Mais um exemplo copyleft agilcoop 2008 19

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 2008 20

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

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 2008 22

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 2008 23

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 2008 24

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 (Ralph@UIUC). Agora, integrado no Eclipse e no Visual Works. copyleft agilcoop 2008 25

Referências www.refactoring.com Martin Fowler. Refactoring: improving the design of existing code. Kerievsky. Refactoring to patterns copyleft agilcoop 2008 26