O GoConqr está de visual novo! Conte para nós o que você achou.

Mapa mental

Engenharia de Software Cap. 9: Refatoring

Edicleiton Alves Português

Engenharia de Software Cap. 9: Refatoring

Conteúdo do mapa

Engenharia de Software Cap. 9: Refatoring

  1. Manutenção corretiva

    • Quando um bug é detectado
  2. Manutenção evolutiva

    • Quando os usuários ou o dono do produto solicitam uma nova funcionalidade
  3. Manutenção adaptativa

    • Quando uma regra de negócio ou alguma tecnologia usada pelo sistema muda
  4. Leis de Lehman

    • Um sistema de software deve ser continuamente mantido para se adaptar ao seu ambiente.
    • Manutenções tornam o código e a estrutura interna de um sistema mais complexos e difíceis de manter no futuro, a não ser que um trabalho seja realizado para estabilizar ou evitar tal fenômeno.
      • Refactoring
        • São transformações de código que melhoram a manutenibilidade de um sistema, mas sem afetar o seu funcionamento.
        • Extração de método
          • É a extração de uma linha de código que é levado de um método A para outro B
          • Pode ser usada para diminuir a duplicação de código
          • Existem 11 motivações distintas porém, a principal motivação é extrair um código para permitir o seu reúso
        • Inline de Método
          • Diferente da extração, ela irá retirar métodos que possuem reuso e incremento de legibilidade do código com baixo impacto
        • Movimentação de Método
          • Garante que métodos estejam em classes apropriadas, movendo assim, um método 'a' para uma classe B
          • Pull Up Method.
            • Ocorre em uma mesma hierarquia de classes, exemplos: move um método de subclasses para uma superclasse
          • Push Down Method
            • Quando um método é movido para baixo na hierarquia de classes (superclasse para uma subclasse)
        • Extração de Classes
          • É utilizado quando um sistema possui uma classe A com muitas responsabilidades e atributos
        • Renomeação
          • Existem apenas duas coisas difíceis em Ciência da Computação: invalidação de cache e dar nomes às coisas.
          • Pode ser usado quando o nome de um elemento não tiver sido uma boa escolha, ou até memo pelo nome estar desatualizado
          • Depreciação
            • Mecanismo oferecido por linguagens de programação para indicar que um elemento de código está desatualizado
        • Extração de Variáveis
        • Remoção de Flags
        • Substituição de Condicional por Polimorfismo
        • Remoção de Código Morto
  5. Prática de Refactoring

    • A realização bem sucedida de refactorings depende da existência de bons testes
    • Refactorings oportunistas
      • São realizados no meio de uma tarefa de programação, quando se descobre que um trecho de código não está bem implementado e que, sendo possível melhorar o mesmo
      • Se for descoberto um trecho de código com problemas de implementação, deve ser aplicado a refatoração.
      • Refatorando o código dessa forma, a mudança será implementada de maneira menos complexa
    • Refactorings planejados
      • São mudanças mais profundas, demoradas e complexas, que não valem a pena encaixar no meio de uma outra tarefa de desenvolvimento.
      • Deve ser realizados em sessões planejadas e dedicadas
      • São episódios raros de se acontecer
  6. Refactorings Automatizados

    • IDEs fornecem suporte para automatizar as refactorings
    • É feito da seguinte forma: o usuário seleciona o trecho de código que pretende refatorar e a operação de refactoring que deseja realizar
    • É escolhido então, as opções de refactor e rename e em seguida o refactoring é automático
    • Verificação de Pré-condições de Refactorings
      • A IDE verifica as pré condições para o reactoring se ele não vai causar um erro de compilação ou mudar o comportamento do sistema
  7. Code Smells (bad smells)

    • São códigos difíceis de manter, entender, modificar ou testar e que talvez seja refatorados
    • Código Duplicado
      • Aumenta o esforço de manutenção, torna a base de código complexa e tem o maior potencial para prejudicar a evolução do sistema
      • Para evitar pode-se usar:
        • Extração de Método
        • Extração de Classe
        • Pull Up Method
          • Quando o código duplicado é um método presente em duas ou mais subclasses
      • Clones
        • Trechos de código que possuem código idêntico
        • Tipo 1
          • A e B têm o mesmo código
        • Tipo 2
          • A e B são clones do Tipo 1, porém as variáveis usadas em A e B podem ter nomes diferentes.
        • Tipo 3
          • A e B são clones do Tipo 2, porém com pequenas mudanças em comandos.
        • Tipo 4
          • A e B são semanticamente equivalentes, mas suas implementações são baseadas em algoritmos diferentes.
    • Métodos Longos
      • Tornam o código mais difícil de entender pois métodos devem conter poucas linhas de código
      • Não é possível classificar um método longo, dependerá da linguagem de programação, da relevância do método, do domínio do sistema, etc.
    • Classes Grandes (Large Class)
      • Classes não devem assumir muitas responsabilidades e prover serviços que não são coesos
      • Solução: Extração de Classe para extrair uma classe menor A' a partir de uma classe grande A. Em seguida, a classe A passa a ter um atributo do tipo para A'.
    • Feature Envy
      • Ele acessa mais atributos e métodos de uma classe B do que de sua atual classe A.
      • Solução: deve-se analisar a possibilidade de usar Movimentação de Método para migrá-lo para a classe invejada
    • Métodos com Muitos Parâmetros
      • Além de pequenos, métodos, na medida do possível, devem ter poucos parâmetros
      • Soluções:
        • Primeiro, deve-se verificar se um dos parâmetros pode ser obtido diretamente pelo método chamado
        • pode-se criar um tipo que agrupe alguns dos parâmetros de um método.
    • Variáveis Globais
      • variáveis globais dificultam o entendimento de um módulo de forma independente dos demais módulos de um sistema
    • Obsessão por Tipos Primitivos
      • Ocorre quando tipos primitivos (int, float, String, etc.) são usados no lugar de classes.
    • Objetos Mutáveis
      • É aquele cujo estado pode ser modificado
      • Depois de criado não pode ser alterado
      • Não é necessário sincronizar o acesso a threads aos métodos
    • Classes de Dados
      • São classes que possuem possuem apenas atributos e nenhum método
      • O importante é criar métodos nessas classes, para realizar operações que já estão sendo realizadas, mas de forma espalhada em outras classes.

Imagens e arquivos do mapa

  • Engenharia de Software Cap. 9: Refatoring
  • Engenharia de Software Cap. 9: Refatoring

Informações

Descrição
Mapa Mental sobre Engenharia de Software Cap. 9: Refatoring, criado por Edicleiton Alves em 13-08-2021.
Visualizações
0
Avaliação

Fale Conosco

Sobre o que é sua mensagem?

O que você acha do novo visual?

Você gostou?