Instituto Superior de Engenharia de Lisboa Mestrado em Engenharia Informática e de Computadores Padrões e Anti-Padrões Engenharia de Software Manuel Felício, nº 29189 Francisco Covas, nº 29391 Agenda •Anti-Padrões: •Cut-and-Paste Programming •The Grand Old Duke of York •The Feud •Técnicas de Refactorização: •Rename Method •Encapsulating Downcast Cut-and-Paste Programming •Reutilização de código através da cópia •Replicação de bugs pelo código •Maior dificuldade na localização e correcção de bugs •Aumenta a quantidade de linhas de código sem um aumento directo de funcionalidade •Aumento de entropia Cut-and-Paste Programming •Criar código reutilizável demora tempo e requer elevado esforço •Baixo conhecimento técnico sobre técnicas de desenvolvimento •Ocorre com frequência quando não há familiaridade com a tecnologia usada Cut-and-Paste Programming •Solução: •Refactorizar o código repetido em módulos independentes, maximizando a sua reutilização •Módulos com uma interface bem definida •Numa biblioteca à parte The Grand Old Duke of York •Existem 2 grupos de indivíduos que desenvolvem software: •Abstraccionistas: •Têm uma visão mais abstracta do problema •Conseguem criar arquitecturas mais genéricas •Implementistas: •Mais focados em implementações concretas •Não têm facilidade em compreender abstracções The Grand Old Duke of York •De acordo com peritos, existem mais implementistas que abstraccionistas •No desenvolvimento de software as decisões de arquitectura são tomadas por consenso •As soluções dos implementistas são as escolhidas por estes serem em maior número •As arquitecturas tornam-se mais complexas como resultado de todos estes factores The Grand Old Duke of York •Solução: •Divisão de tarefas •Abstraccionistas responsáveis pela arquitectura •Implementistas responsáveis pela implementação The Feud •Conflitos entre gestores de projectos podem afectar o ambiente de trabalho •Estes problemas podem reflectir-se nas atitudes e comportamentos dos empregados •Fraca comunicação produtiva implica baixa transferência de conhecimento •Os comportamentos negativos podem prolongar-se durante anos The Feud •Solução: •Pequenos eventos de confraternização podem melhorar a relação entre os empregados •Os eventos melhoram a comunicação entre os vários níveis da hierarquia •Promoção de actividades em grupo (viagens, eventos desportivos) •Recorrer a ajuda profissional (psicólogos) Making Method calls Simpler •Rename Method •Encapsulate Downcast Rename Method •Nomes de métodos devem ser claros e explícitos •Nomes de métodos devem reflectir o seu propósito •O nosso código também é lido por humanos Rename Method : •Solução •Garantir que não há um método com o nome desejado na classe base. •Criar um método novo com o nome desejado e copiar o código do método antigo para o novo. •Colocar o método antigo a invocar o método novo. •Substituir as referências para o método antigo, de forma a chamar o método novo. •Eliminar o método antigo ou marcá-lo como deprecated, se não for possível eliminar. Rename Method •Visual Studio 2008: •Eclipse 3.2: Encapsulate Downcast •Minimizar os downcasts no código cliente do método •Tornar mais explícito os retornos dos métodos. •Muito frequente no acesso a colecções. Encapsulate Downcast •Exemplo: •Antes •Depois Referências •http://www.sourcemaking.com