Introduzindo Refatoramento a Metodologias Tradicionais Tiago Massoni Workshop de Artigos TAES3 19/08/2003 Temos Muitos Problemas com Estrutura do Código! Código-fonte mal estruturado – Spaguetti code Dificuldades de manutenção – Correção de erros – Adicionar novos requisitos 19/08/2003 Tiago Massoni 2 / 14 Refatoramento em uma Casca de Noz Refatoramento altera código-fonte... – Motivado por “bad smells” – Melhora estrutura interna em algum fator de qualidade ...e preserva comportamento externo – Usuário do sistema não percebe – Test-First 19/08/2003 Tiago Massoni 3 / 14 Exemplos de Refatoramento public void imprimeRelatorio () { preparaRelatorio(); enviaRelatorioImpressora(); } public void imprimeRelatorio () { //codigo preparar relatorio //codigo enviar relatorio para impressora } 19/08/2003 private void preparaRelatorio { //codigo preparar relatorio } private void enviaRelatorioImpressora() { // codigo enviar relatorio para impressora } Tiago Massoni 4 / 14 Exemplos de Refatoramento Pessoa nome : String idade : Integer Cliente Funcionario nome : String idade : Integer nome : String idade : Integer retornaNome() retornaIdade() retornaNome() retornaIdade() retornaNome() retornaIdade() Cliente 19/08/2003 Tiago Massoni Funcionario 5 / 14 Que tal Refatoramentos em Modelos? Podemos estender refatoramento para níveis mais abstratos – Refatoramentos em análise e projeto – Melhora qualidade, preserva semântica Algumas vantagens – Mais fácil visualizar mudanças – Exploração de decisões de projeto – Automatização pode ser poderosa 19/08/2003 Tiago Massoni 6 / 14 Extreme Programming fez a Fama de Refatoramento! Uma das práticas principais de XP Intrínseco ao ciclo de vida – Refatoramentos sucessivos Código fonte como único artefato relevante – Refatoramentos de código Mas e para metodologias como RUP e OPEN? – Sincronização entre modelo e código – Atividades e guias adicionais a metodologias 19/08/2003 Tiago Massoni 7 / 14 Contribuições Estudo sobre manutenção de consistência modelo-código – Automatização Sugestões para extensão do RUP – Atividades, guias, artefatos 19/08/2003 Tiago Massoni 8 / 14 Estudo dos Refatoramentos pelos Níveis de Abstração 19/08/2003 Tiago Massoni 9 / 14 Resultados... Alguns problemas claros – Geração de código – Mapear abstrato para concreto Alternativas para automatização – Modelo contendo código – Registro de refatoramentos 19/08/2003 Tiago Massoni 10 / 14 Refatoramento no RUP Aspectos Estáticos Planejamento (iteração) – Atividades: planejar e avaliar (métricas) – Artefato: Plano de refatoramento Análise & Projeto – Passo: Decisões técnicas – Passo: Refatoramentos de modelos Implementação – Passo: Transferir mudanças de modelo – Passo: Decisões técnicas – Passo: Mudanças no código 19/08/2003 Tiago Massoni 11 / 14 Refatoramento no RUP Aspectos Dinâmicos Elaboração – Refatoramentos consideráveis – Foco em modelos Construção – Refatoramentos adaptativos e corretivos – Mudanças rápidas no código Transição – Defeitos e problemas não previstos 19/08/2003 Tiago Massoni 12 / 14 Conclusão Refatoramento é técnica relevante – Pode aumentar produtividade – Tratamento em metodologias de software Trabalhos futuros – Formalização do relacionamento modelo e código em refatoramentos – Ferramentas CASE com suporte a refatoramento 19/08/2003 Tiago Massoni 13 / 14 Obrigado! Feedback é bem-vindo... 19/08/2003 Tiago Massoni 14 / 14