Middle+
179
O que é dívida técnica e como lidar com ela?
Resposta da IA
sobes.tech IA
A dívida técnica são os compromissos acumulados no código e as soluções não ótimas adotadas para acelerar o desenvolvimento ou devido a uma compreensão incompleta dos requisitos. Pode manifestar-se na forma de código mal estruturado, duplicação, cobertura de testes insuficiente, bibliotecas desatualizadas, etc.
Pode trabalhar-se com ela das seguintes formas:
- Consciência e documentação: É importante reconhecer a existência da dívida e suas fontes. É útil documentar os pontos problemáticos no código ou num sistema de rastreamento de tarefas.
- Priorização: Nem toda a dívida técnica é igualmente crítica. É necessário determinar quais as partes que têm maior impacto negativo no desenvolvimento, estabilidade ou desempenho, e concentrar-se nelas.
- Atribuição de tempo: Reservar regularmente tempo nos sprints ou iterações para a sua eliminação (por exemplo, através de refatoração). Pode ser uma percentagem fixa do tempo da equipa.
- Integração contínua e refatoração: Manter altos padrões de codificação, escrever testes e realizar refatorações como parte do trabalho diário para evitar acumular nova dívida.
- Automatização: Utilizar analisadores estáticos de código, linters e ferramentas de controlo de qualidade de código para detectar problemas numa fase inicial.
- Correção na medida do possível: Eliminar pequenas dívidas ao fazer alterações na secção de código correspondente.
- Realização de "semanas da qualidade" ou "maratonas de refatoração": Dedicar periodicamente tempo para eliminar em grande escala a dívida técnica.
Exemplo de refatoração para reduzir a duplicação:
# Antes da refatoração
def process_order(order_id):
order_details = fetch_order_details(order_id)
if order_details:
price = calculate_price(order_details)
if price > 100:
apply_discount(order_details)
save_order(order_details)
send_confirmation_email(order_details)
def process_refund(refund_id):
refund_details = fetch_refund_details(refund_id)
if refund_details:
calculate_refund_amount(refund_details)
save_refund(refund_details)
send_refund_confirmation_email(refund_details)
# Após a refatoração com partes comuns extraídas
def save_data(data, data_type):
if data_type == 'order':
save_order(data)
send_confirmation_email(data)
elif data_type == 'refund':
save_refund(data)
send_refund_confirmation_email(data)
def process_order_refined(order_id):
order_details = fetch_order_details(order_id)
if order_details:
price = calculate_price(order_details)
if price > 100:
apply_discount(order_details)
save_data(order_details, 'order')
def process_refund_refined(refund_id):
refund_details = fetch_refund_details(refund_id)
if refund_details:
calculate_refund_amount(refund_details)
save_data(refund_details, 'refund')