AULA 44 / 61 · ACESSO GRATUITO

Dívida técnica e refatoração com propósito

Graciliano TolentinoEngenharia Caracol · Edição 2.0
Nesta aula
  1. Descrever o custo que será herdado
  2. Registro de dívida preenchido
  3. Refatorar com um contrato pequeno
  4. Procedimento de decisão e execução
  5. Erros e condição de avanço
  6. Exercício e solução comentada

Descrever o custo que será herdado

Dívida técnica é uma condição que torna o trabalho futuro mais caro ou arriscado. O nome só ajuda quando conseguimos descrever a condição, o benefício presente e o custo esperado. Na Oficina Caracol, manter o registrador de reservas apenas em memória simplifica o laboratório e evita infraestrutura externa. A contrapartida é explícita: reiniciar o processo apaga as reservas e a memória de chaves. Essa escolha é compatível com uma simulação, mas precisaria ser revista antes de assumir compromisso persistente com pessoas reais.

Refatoração modifica a estrutura interna preservando o comportamento observável. A definição de referência enfatiza essa preservação [S17, definição de refatoração]. Os testes que já protegem os contratos podem fornecer a rede de segurança necessária. Testes de caracterização são especialmente úteis quando precisamos descobrir e registrar como um sistema existente se comporta; não são uma etapa adicional obrigatória em toda refatoração. Uma mudança de regra pública exige outra decisão e não deve ser escondida sob o rótulo de limpeza.

Registro de dívida preenchido

CampoExemplo didático
CondiçãoReservas e chaves existem somente durante a vida do processo
Benefício atualExecutar laboratório sem banco externo ou instalação de dependências
Custo futuroReinício perde a memória de uma operação; efeito único não cobre múltiplos processos
ResponsávelPessoa mantenedora da prática; nome a preencher no uso real
Gatilho de revisãoProposta de uso persistente, múltiplas instâncias ou dados reais
Decisão atualManter apenas como simulação e declarar a limitação na documentação
Próximo passoAntes de ampliar o escopo, projetar persistência, concorrência e política de retenção

Refatorar com um contrato pequeno

Considere um exemplo isolado, separado dos arquivos do pacote: duas formas de produzir os títulos dos registros ativos. A entrada já foi validada segundo o contrato do catálogo. O comportamento a preservar inclui a ordem relativa e a ausência de alteração na entrada. Este exemplo não substitui listarAtivos, cuja saída pública possui os três campos documentados.

javascript
const titulosAntes = casos => {
  const resultado = [];
  for (const caso of casos) {
    if (caso.ativo) resultado.push(caso.titulo);
  }
  return resultado;
};

const titulosDepois = casos =>
  casos.filter(caso => caso.ativo).map(caso => caso.titulo);

Com os registros A ativo, B inativo e C ativo, ambas devem produzir os títulos de A e C, nessa ordem. O conjunto vazio deve produzir um array vazio. Essas são expectativas para conferir, não uma alegação de execução do código acima. Se o exemplo removesse a validação exigida por uma função pública, mudaria o contrato em vez de apenas reorganizar sua estrutura.

Procedimento de decisão e execução

  • Registre o problema: duplicação específica, compreensão difícil ou custo mensurável. Associe a mudança a um benefício e a um responsável.
  • Identifique os comportamentos a preservar e examine a proteção existente. Acrescente testes quando houver lacunas; use caracterização se o comportamento atual precisar ser conhecido.
  • Separe a refatoração de novas funcionalidades e execute passos pequenos. Depois de cada passo relevante, verifique os contratos afetados.
  • Compare o resultado com o objetivo. Uma estrutura diferente sem benefício reconhecível não demonstra que a dívida diminuiu.
  • Atualize o registro com decisão, evidência e pendências. A responsabilidade permanece explícita mesmo quando a dívida é aceita temporariamente.

Erros e condição de avanço

ErroReparo específico
Dívida sem donoAtribuir responsável, gatilho e forma de acompanhamento
Reescrever durante incidente sem necessidade de contençãoConter o incidente com a menor ação adequada e planejar a reorganização separadamente
Mudar saída e chamar de refatoraçãoTratar a alteração de contrato como evolução, com decisão e proteção próprias

O avanço exige comportamento preservado nas verificações pertinentes e benefício demonstrado no escopo da mudança. A dívida remanescente possui impacto, responsável, prioridade e decisão. A aprovação não depende de zerar toda dívida; depende de compreender a consequência e de não ocultar uma limitação impeditiva para o uso proposto.

Exercício e solução comentada

Dados: duas telas duplicam a formatação de um título. Corrigir a mesma regra demanda alterar dois lugares; a equipe estima quinze minutos extras por mudança e prevê quatro mudanças semelhantes. A proposta de extração custa quarenta minutos. Registre uma decisão sem tratar a estimativa como certeza.

Ver solução comentada

Solução: o custo adicional estimado é de sessenta minutos, acima dos quarenta previstos para a extração. Pode fazer sentido refatorar, considerando também risco e compreensão. O registro deve nomear um responsável, proteger as duas telas com exemplos de entrada e saída e conferir a estimativa após o trabalho. A rubrica exige cálculo, incerteza, contrato preservado e critério de conclusão. Uma estimativa favorável não autoriza afirmar economia realizada antes de observar o resultado.

Fontes relacionadas

Consulte os limites e as seções de apoio de cada referência.

S17
Conseguiu explicar o que aprendeu?

Tente o exercício antes de consultar a solução. Marque a aula para organizar sua leitura.

A conclusão desta leitura não equivale a certificação ou aceite de um projeto real. Teste os exemplos no escopo indicado e registre as limitações.