Pular para o conteúdo

Trilha de estudo

Trilha Código Limpo e Refatoração: tudo o que estudar, tópico por tópico

Avaliação abrangente sobre princípios de código limpo, nomenclatura significativa, design de funções, maus cheiros de código, técnicas de refatoração, princípios SOLID, práticas de testes, gestão de dívida técnica e estratégias de refatoração em larga escala.

Resposta curta

Para aprender Código Limpo e Refatoração, percorra 7 módulos e 27 tópicos na ordem em que um apoia o próximo. Comece por Fundamentos e siga para Funções e Objetos e Comentários e Formatação. Use o mapa como checklist, ou meça seu nível e estude só o que falta.

7
módulos
27
tópicos
60
min para avaliar

O que você vai estudar

Os tópicos estão agrupados por módulo. Abra um para ver os objetivos e os conceitos-chave.

1 · Fundamentos4 tópicos
  • Princípios do Código Limpo

    Filosofia central do código limpo: o código deve ser legível por humanos primeiro, computadores depois. Cobre a Regra do Escoteiro, expressividade em vez de inteligência e o custo do código bagunçado ao longo do tempo.

    Objetivos

    • Articular por que código legível reduz os custos de manutenção a longo prazo
    • Aplicar a Regra do Escoteiro para melhorar incrementalmente o código existente

    Conceitos-chave

    • legibilidade em primeiro lugar
    • Regra do Escoteiro
    • expressividade
    • custo do código bagunçado
    • código como comunicação
    • excelência técnica
    • propriedade coletiva do código
  • Nomenclatura Significativa

    Escolher nomes que revelam intenção, evitam desinformação e tornam as distinções significativas. Cobre nomenclatura de variáveis, funções, classes e como evitar codificações como notação húngara.

    Objetivos

    • Renomear variáveis e funções para revelar intenção sem comentários
    • Identificar nomes desinformativos e substituí-los por alternativas precisas

    Conceitos-chave

    • nomes que revelam intenção
    • evitar desinformação
    • distinções significativas
    • nomes pronunciáveis
    • nomes pesquisáveis
    • evitar notação húngara
    • alinhamento com linguagem de domínio
  • Complexidade Cognitiva

    Compreender e reduzir a carga mental da leitura de código. Cobre complexidade ciclomática, profundidade de aninhamento, teoria da carga cognitiva aplicada ao código e técnicas para achatar o fluxo de controle.

    Objetivos

    • Reduzir código profundamente aninhado usando cláusulas de guarda e retornos antecipados
    • Medir e interpretar a complexidade ciclomática de uma função

    Conceitos-chave

    • complexidade ciclomática
    • profundidade de aninhamento
    • retornos antecipados
    • cláusulas de guarda
    • carga cognitiva
    • achatamento do fluxo de controle
    • métricas de complexidade
  • Maus Cheiros de Código

    Identificar sintomas de problemas de design mais profundos: métodos longos, classes grandes, código duplicado, código morto, inveja de funcionalidade, grupos de dados, obsessão primitiva e mudança divergente.

    Objetivos

    • Identificar pelo menos seis maus cheiros distintos em uma base de código
    • Mapear cada mau cheiro ao seu problema de design subjacente e refatoração adequada

    Conceitos-chave

    • método longo
    • classe grande
    • código duplicado
    • código morto
    • inveja de funcionalidade
    • grupos de dados
    • obsessão primitiva
    • mudança divergente
    • cirurgia de espingarda
2 · Funções e Objetos4 tópicos
  • Design de Funções

    Princípios para escrever funções pequenas e focadas: fazer uma coisa, um nível de abstração por função, argumentos mínimos, sem efeitos colaterais e Separação Comando-Consulta.

    Objetivos

    • Decompor uma função longa em subfunções com propósito único
    • Aplicar a Separação Comando-Consulta para eliminar efeitos colaterais surpreendentes

    Conceitos-chave

    • responsabilidade única em funções
    • um nível de abstração
    • minimização de argumentos
    • sem efeitos colaterais
    • Separação Comando-Consulta
    • funções puras
    • regra do descenso
  • Tratamento de Erros

    Escrever tratamento de erros limpo: preferir exceções a códigos de erro, fornecer contexto com exceções, definir classes de exceção por necessidades do chamador, evitar retornar nulo e o princípio falha rápida.

    Objetivos

    • Substituir fluxo de controle baseado em código de erro por tratamento de exceção estruturado
    • Projetar hierarquias de exceção que transmitem contexto significativo aos chamadores

    Conceitos-chave

    • exceções em vez de códigos de erro
    • contexto de exceção
    • design de classe de exceção
    • evitar retornar nulo
    • evitar passar nulo
    • princípio falha rápida
    • exceções verificadas vs não verificadas
  • Design de Objetos

    Design orientado a objetos limpo: Lei de Deméter, encapsulamento de dados, evitando encadeamentos, distinguindo objetos de transferência de dados de registros ativos e a diferença entre objetos e estruturas de dados.

    Objetivos

    • Refatorar um encadeamento de métodos para cumprir a Lei de Deméter
    • Distinguir quando usar uma estrutura de dados versus um objeto com comportamento

    Conceitos-chave

    • Lei de Deméter
    • encadeamentos
    • encapsulamento de dados
    • objetos de transferência de dados
    • registros ativos
    • objetos vs estruturas de dados
    • diga, não pergunte
  • Estruturas de Dados e Fronteiras

    Uso limpo de estruturas de dados: evitando objetos híbridos, mantendo fronteiras entre camadas do sistema, encapsulando código de terceiros e usando adaptadores para isolar dependências externas.

    Objetivos

    • Encapsular uma biblioteca de terceiros para isolá-la do código de domínio
    • Definir interfaces limpas nas fronteiras do sistema para prevenir acoplamento

    Conceitos-chave

    • objetos híbridos
    • fronteiras do sistema
    • encapsulamento de terceiros
    • padrão adaptador
    • testes de aprendizado
    • propriedade de interface
    • abstração de dados
3 · Comentários e Formatação2 tópicos
  • Comentários

    Filosofia dos comentários: bom código se explica, comentários compensam falhas de expressão no código. Tipos de bons comentários (legais, informativos, intenção, aviso, TODO) versus maus comentários (ruído, enganosos, diário, murmúrio).

    Objetivos

    • Remover ou substituir comentários desnecessários melhorando o código subjacente
    • Identificar os cinco tipos de comentários aceitáveis e quando cada um é justificado

    Conceitos-chave

    • código autodocumentado
    • comentários informativos
    • comentários de intenção
    • comentários de aviso
    • comentários TODO
    • comentários de ruído
    • comentários enganosos
    • código comentado
  • Formatação

    Formatação consistente como comunicação de equipe: abertura vertical entre conceitos, densidade vertical para código relacionado, ordenação de funções, alinhamento horizontal, indentação e o valor de guias de estilo padronizados.

    Objetivos

    • Aplicar regras de formatação vertical para organizar um módulo com máxima legibilidade
    • Justificar por que convenções de formatação consistentes da equipe reduzem a sobrecarga cognitiva

    Conceitos-chave

    • abertura vertical
    • densidade vertical
    • ordenação de funções
    • alinhamento horizontal
    • padrões de indentação
    • ferramentas de padronização de estilo
    • convenções de formatação de equipe
4 · Testes3 tópicos
  • Testes Unitários

    Princípios F.I.R.S.T. de testes limpos: Rápido, Independente, Repetível, Autovalidante, Oportuno. Uma asserção por teste, conceito único por teste e estrutura de teste legível com Arrange-Act-Assert.

    Objetivos

    • Escrever testes que seguem os princípios F.I.R.S.T.
    • Estruturar testes com seções claras Arrange-Act-Assert para legibilidade

    Conceitos-chave

    • princípios F.I.R.S.T.
    • Arrange-Act-Assert
    • conceito único por teste
    • legibilidade do teste
    • independência do teste
    • testes rápidos
    • asserções autovalidantes
  • Desenvolvimento Orientado a Testes

    O ciclo TDD: Vermelho-Verde-Refatoração. Três leis do TDD, o impacto na qualidade do design, dublês de teste (mocks, stubs, fakes) e quando o TDD compensa versus quando adiciona sobrecarga.

    Objetivos

    • Demonstrar o ciclo Vermelho-Verde-Refatoração em uma funcionalidade concreta
    • Explicar como o TDD influencia decisões de design de API e acoplamento

    Conceitos-chave

    • Vermelho-Verde-Refatoração
    • três leis do TDD
    • dublês de teste
    • mocks vs stubs vs fakes
    • feedback de design por testes
    • TDD de fora para dentro
    • disciplina de teste primeiro
  • Qualidade de Testes

    Avaliando e melhorando suítes de testes: cobertura de testes versus efetividade, testes de mutação, testes frágeis, excesso de mocks, pirâmide de testes e distinguindo testes unitários, de integração e de ponta a ponta.

    Objetivos

    • Diagnosticar uma suíte de testes frágil e propor melhorias estruturais
    • Explicar por que 100% de cobertura de linhas não garante efetividade dos testes

    Conceitos-chave

    • cobertura de testes
    • testes de mutação
    • testes frágeis
    • excesso de mocks
    • pirâmide de testes
    • unitário vs integração vs ponta a ponta
    • efetividade do teste
5 · Refatoração4 tópicos
  • Fundamentos de Refatoração

    Definição e disciplina de refatoração: mudar a estrutura interna sem mudar o comportamento externo. O princípio dos dois chapéus, quando refatorar versus reescrever e manter uma rede de segurança de testes antes de refatorar.

    Objetivos

    • Aplicar o princípio dos dois chapéus para separar adição de funcionalidades de melhoria de estrutura
    • Construir uma rede de segurança de testes antes de executar uma refatoração arriscada

    Conceitos-chave

    • preservação de comportamento
    • princípio dos dois chapéus
    • rede de segurança de testes
    • refatorar vs reescrever
    • pequenos passos
    • refatoração contínua
    • refatoração oportunista
  • Extrair Método e Variável

    As operações de refatoração mais comuns: Extrair Método, Extrair Variável, Método Inline, Extrair Classe e Mover Método. Mecânica, quando aplicar cada um e armadilhas comuns.

    Objetivos

    • Aplicar Extrair Método para decompor um método longo em submétodos coesos
    • Usar Extrair Variável para nomear resultados intermediários e melhorar a legibilidade

    Conceitos-chave

    • Extrair Método
    • Extrair Variável
    • Método Inline
    • Extrair Classe
    • Mover Método
    • nomenclatura de elementos extraídos
    • preocupações de escopo
  • Simplificando Condicionais

    Refatorando lógica condicional complexa: Decompor Condicional, Consolidar Expressão Condicional, Substituir Condicional Aninhado por Cláusulas de Guarda e Substituir Condicional por Polimorfismo.

    Objetivos

    • Substituir uma árvore condicional aninhada por cláusulas de guarda
    • Eliminar um switch aplicando Substituir Condicional por Polimorfismo

    Conceitos-chave

    • Decompor Condicional
    • Consolidar Expressão Condicional
    • Cláusulas de Guarda
    • Substituir Condicional por Polimorfismo
    • padrão objeto nulo
    • eliminação de switch
    • complexidade condicional
  • Catálogo de Padrões de Refatoração

    Padrões avançados de refatoração do catálogo de Fowler: Substituir Temporário por Consulta, Introduzir Objeto de Parâmetro, Substituir Valor de Dados por Objeto, Separar Consulta de Modificador e Substituir Número Mágico por Constante Simbólica.

    Objetivos

    • Aplicar Introduzir Objeto de Parâmetro para reduzir listas de argumentos
    • Usar Substituir Temporário por Consulta para remover variáveis temporárias desnecessárias

    Conceitos-chave

    • Substituir Temporário por Consulta
    • Introduzir Objeto de Parâmetro
    • Substituir Valor de Dados por Objeto
    • Separar Consulta de Modificador
    • Substituir Número Mágico por Constante Simbólica
    • Encapsular Campo
    • Substituir Construtor por Fábrica
6 · Princípios de Design4 tópicos
  • Princípios SOLID na Prática

    Aplicando todos os cinco princípios SOLID em bases de código reais: identificar violações, refatorar para conformidade e entender quando a aderência rígida ao SOLID cria engenharia excessiva.

    Objetivos

    • Identificar violações SOLID em uma hierarquia de classes fornecida
    • Refatorar uma classe que viola o SRP em classes coesas com propósito único

    Conceitos-chave

    • Princípio da Responsabilidade Única
    • Princípio Aberto/Fechado
    • Princípio da Substituição de Liskov
    • Princípio da Segregação de Interface
    • Princípio da Inversão de Dependência
    • violações SOLID
    • aplicação pragmática de SOLID
  • DRY, YAGNI e KISS

    Três heurísticas fundamentais: Don't Repeat Yourself (evitando duplicação de conhecimento), You Aren't Gonna Need It (evitando generalidade especulativa) e Keep It Simple Stupid (favorecendo a solução mais simples).

    Objetivos

    • Distinguir duplicação de conhecimento de duplicação acidental de código
    • Rejeitar uma proposta de funcionalidade usando raciocínio YAGNI com justificativa concreta

    Conceitos-chave

    • princípio DRY
    • duplicação de conhecimento vs duplicação de código
    • YAGNI
    • generalidade especulativa
    • KISS
    • complexidade acidental
    • simplicidade como disciplina
  • Gestão de Dependências

    Gerenciando dependências para testabilidade e manutenibilidade: injeção de dependência, Inversão de Controle, princípio de dependências estáveis e evitando dependências circulares.

    Objetivos

    • Refatorar classes fortemente acopladas usando injeção por construtor
    • Detectar e quebrar dependências circulares em um grafo de módulos

    Conceitos-chave

    • injeção de dependência
    • Inversão de Controle
    • princípio de dependências estáveis
    • princípio de dependências acíclicas
    • injeção por construtor
    • localizador de serviço vs injeção de dependência
    • grafo de dependências
  • Acoplamento e Coesão

    Compreendendo tipos de acoplamento (conteúdo, comum, controle, carimbo, dados) e níveis de coesão (coincidental, lógica, temporal, comunicacional, funcional). Buscando alta coesão e baixo acoplamento no design de módulos.

    Objetivos

    • Classificar o tipo de acoplamento entre dois módulos e propor uma alternativa de menor acoplamento
    • Medir e interpretar o acoplamento aferente/eferente de um pacote

    Conceitos-chave

    • tipos de acoplamento
    • níveis de coesão
    • acoplamento aferente vs eferente
    • métrica de instabilidade
    • design de pacotes
    • design de fronteira de módulos
    • fan-in fan-out
7 · Avançado6 tópicos
  • Trabalhando com Código Legado

    Técnicas de Feathers para modificar código legado com segurança: costuras, testes de caracterização, método/classe broto, método/classe invólucro e a técnica do mestre dourado para código não testável.

    Objetivos

    • Aplicar método broto para adicionar comportamento a código legado não testável
    • Escrever testes de caracterização para documentar comportamento existente antes de refatorar

    Conceitos-chave

    • costuras
    • testes de caracterização
    • método broto
    • classe broto
    • método invólucro
    • testes mestre dourado
    • testes de fixação
  • Refatoração em Larga Escala

    Estratégias para refatoração em escala de sistema: padrão estrangulador de figueira, ramificação por abstração, mudança paralela (expandir-contrair) e gerenciamento de risco de refatoração em sistemas de produção com implantação contínua.

    Objetivos

    • Projetar um plano de migração estrangulador de figueira para um subsistema monolítico legado
    • Aplicar ramificação por abstração para substituir uma camada de banco de dados sem tempo de inatividade

    Conceitos-chave

    • padrão estrangulador de figueira
    • ramificação por abstração
    • mudança paralela
    • expandir-contrair
    • migração incremental
    • sinalizadores de funcionalidade para refatoração
    • gestão de riscos
  • Práticas de Revisão de Código

    Revisões de código eficazes para qualidade: o que procurar, técnicas de feedback construtivo, design de lista de verificação de revisão, limites de tamanho para PRs revisáveis e automação versus julgamento humano.

    Objetivos

    • Projetar uma lista de verificação de revisão de código que visa os sinais de qualidade de maior valor
    • Fornecer feedback específico e acionável em um trecho de código sem crítica pessoal

    Conceitos-chave

    • lista de verificação de revisão
    • feedback construtivo
    • limites de tamanho de PR
    • linting automatizado
    • julgamento humano
    • cultura de revisão
    • nit vs bloqueador
  • Dívida Técnica

    Tipos de dívida técnica (deliberada/inadvertida, imprudente/prudente), modelo de quadrante de dívida, quantificação do impacto da dívida, comunicação com stakeholders não técnicos e estratégias de pagamento de dívida.

    Objetivos

    • Classificar itens de dívida técnica usando o modelo de quadrante de dívida
    • Construir um argumento de negócio para investimento em refatoração usando a metáfora dos juros

    Conceitos-chave

    • modelo de quadrante de dívida
    • dívida deliberada vs inadvertida
    • dívida imprudente vs prudente
    • metáfora dos juros
    • quantificação da dívida
    • comunicação com stakeholders
    • estratégias de pagamento de dívida
  • Arquitetura Limpa

    Arquitetura Limpa de Robert Martin: regra de dependência, camadas concêntricas (entidades, casos de uso, adaptadores de interface, frameworks), portas e adaptadores e como a arquitetura limpa possibilita testabilidade em escala.

    Objetivos

    • Mapear uma funcionalidade às camadas concêntricas da Arquitetura Limpa e aplicar a regra de dependência
    • Explicar como as fronteiras da Arquitetura Limpa permitem substituição de framework e banco de dados

    Conceitos-chave

    • regra de dependência
    • camadas concêntricas
    • camada de entidades
    • camada de casos de uso
    • adaptadores de interface
    • portas e adaptadores
    • independência de framework
  • Métricas de Código

    Medidas quantitativas de qualidade de código: complexidade ciclomática, linhas de código, rotatividade de código, taxa de falha de mudança, instabilidade/abstração e as armadilhas de otimizar para qualquer métrica única.

    Objetivos

    • Interpretar os valores de instabilidade e abstração de um pacote no diagrama de sequência principal
    • Explicar por que otimizar uma única métrica de código pode degradar a qualidade geral

    Conceitos-chave

    • complexidade ciclomática
    • linhas de código
    • rotatividade de código
    • taxa de falha de mudança
    • métrica de instabilidade
    • métrica de abstração
    • Lei de Goodhart em métricas

Níveis: Júnior, Pleno, Sênior e Especialista

Explique com suas palavras

Corrigido por IA · sem cadastro · 1 pergunta

Sem alternativas para chutar: você escreve, a IA corrige com a rubrica do tópico e diz em que nível sua resposta está.

0 / 600

Já estuda Código Limpo e Refatoração?

A avaliação mede tópico por tópico, e o plano pula o que você já sabe.

Aberto para ler. A conta só é necessária para ser medido.

Perguntas frequentes

Por onde começar a estudar Código Limpo e Refatoração?

Comece por Fundamentos: Princípios do Código Limpo, Nomenclatura Significativa e Complexidade Cognitiva. O mapa ordena os tópicos pelo que depende de quê, então cada um prepara o seguinte.

Quanto tempo leva uma avaliação completa de Código Limpo e Refatoração?

Uma avaliação completa desta trilha leva cerca de 60 minutos. O tempo de estudo depende de onde você começa; o diagnóstico mostra quais tópicos você pode pular.

Preciso de conta para usar esta página?

Não. O mapa, os objetivos e os conceitos-chave são abertos. A conta só é necessária para ser medido, ver seu gap por tópico e receber um plano.