Dívida técnica e refatoração com propósito
Nesta aula
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
| Campo | Exemplo didático |
|---|---|
| Condição | Reservas e chaves existem somente durante a vida do processo |
| Benefício atual | Executar laboratório sem banco externo ou instalação de dependências |
| Custo futuro | Reinício perde a memória de uma operação; efeito único não cobre múltiplos processos |
| Responsável | Pessoa mantenedora da prática; nome a preencher no uso real |
| Gatilho de revisão | Proposta de uso persistente, múltiplas instâncias ou dados reais |
| Decisão atual | Manter apenas como simulação e declarar a limitação na documentação |
| Próximo passo | Antes 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.
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
| Erro | Reparo específico |
|---|---|
| Dívida sem dono | Atribuir responsável, gatilho e forma de acompanhamento |
| Reescrever durante incidente sem necessidade de contenção | Conter o incidente com a menor ação adequada e planejar a reorganização separadamente |
| Mudar saída e chamar de refatoração | Tratar 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.
S17Tente 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.