Sobes.tech
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')