As métricas DORA (DevOps Research and Assessment) são um conjunto de quatro indicadores-chave de desempenho (KPIs) que ajudam equipes de desenvolvimento e operações a medir a eficácia de suas práticas DevOps. Elas foram definidas pela equipe DORA do Google Cloud e são amplamente utilizadas para avaliar a maturidade e a performance de entrega de software. Nesta aula, vamos explorar cada uma dessas métricas, entender como calculá-las e interpretá-las, e ver exemplos práticos de sua aplicação.

Deployment Frequency

Deployment Frequency (Frequência de Implantação) mede quantas vezes uma equipe realiza implantações de código em produção ou em ambientes de homologação. Uma alta frequência indica que a equipe está entregando mudanças rapidamente, o que é um sinal de maturidade DevOps. A métrica pode ser calculada como o número de implantações bem-sucedidas em um período (ex.: por dia, por semana).

Exemplo:
- Equipe A: 10 implantações por semana (alta frequência)
- Equipe B: 1 implantação por mês (baixa frequência)

Código fictício para coletar dados:
# Simulação de contagem de deploys
from datetime import datetime, timedelta

def deployment_frequency(deploy_logs, period):
    count = 0
    start = datetime.now() - period
    for log in deploy_logs:
        if log['timestamp'] >= start:
            count += 1
    return count

# Uso
weekly_deploys = deployment_frequency(logs, timedelta(days=7))

Lead Time

Lead Time (Tempo de Entrega) mede o tempo que leva desde o momento em que um commit é feito até que ele seja implantado em produção. É um indicador da velocidade do pipeline de entrega. Um lead time curto significa que as mudanças são testadas e implantadas rapidamente. O cálculo pode ser feito pela diferença entre o timestamp do commit e o timestamp da implantação bem-sucedida.

Exemplo:
- Commit: 2023-10-01 10:00
- Deploy: 2023-10-01 14:00
- Lead time: 4 horas

Código fictício:
def lead_time(commit_time, deploy_time):
    return deploy_time - commit_time

# Agregação: mediana dos lead times
lead_times = [lead_time(c, d) for c, d in zip(commits, deploys)]
median_lead_time = sorted(lead_times)[len(lead_times)//2]

Change Failure Rate

Change Failure Rate (Taxa de Falha de Mudanças) mede a porcentagem de implantações que causam uma falha em produção, como um incidente ou degradação do serviço. Uma baixa taxa de falha indica que as mudanças são seguras e bem testadas. A métrica é calculada dividindo o número de implantações que resultaram em falha pelo número total de implantações em um período.

Exemplo:
- Total de deploys: 100
- Deploys que causaram incidentes: 5
- Change Failure Rate: 5%

Código fictício:
def change_failure_rate(total_deploys, failed_deploys):
    return (failed_deploys / total_deploys) * 100

# Uso
cfr = change_failure_rate(100, 5)  # 5.0%

MTTR

MTTR (Mean Time to Recovery) mede o tempo médio que uma equipe leva para se recuperar de uma falha em produção. É um indicador da capacidade de resposta a incidentes. Um MTTR baixo significa que a equipe consegue restaurar o serviço rapidamente. O cálculo é feito pela média do tempo entre a detecção do incidente e a resolução completa.

Exemplo:
- Incidente 1: 30 minutos
- Incidente 2: 45 minutos
- Incidente 3: 25 minutos
- MTTR: (30+45+25)/3 = 33.3 minutos

Código fictício:
def mttr(recovery_times):
    return sum(recovery_times) / len(recovery_times)

# Uso
mttr_value = mttr([30, 45, 25])  # 33.33

Referências

Exercícios

  1. Explique por que a Deployment Frequency é uma métrica importante para equipes DevOps.

    A Deployment Frequency mede a frequência com que uma equipe implanta código em produção. Uma alta frequência indica que a equipe está entregando valor rapidamente, reduzindo o tempo entre a escrita do código e sua disponibilidade para os usuários. Isso também permite feedback mais rápido e iterações mais ágeis, sendo um sinal de maturidade DevOps.
  2. Calcule o lead time para um commit feito em 2023-10-01 09:00 e implantado em 2023-10-01 13:30.

    Lead time = 13:30 - 09:00 = 4 horas e 30 minutos.
  3. Se uma equipe realizou 50 implantações em um mês e 3 delas causaram incidentes, qual é a Change Failure Rate?

    Change Failure Rate = (3 / 50) * 100 = 6%.
  4. Dados os tempos de recuperação de 3 incidentes: 20 min, 35 min e 45 min. Calcule o MTTR.

    MTTR = (20 + 35 + 45) / 3 = 100 / 3 ≈ 33,33 minutos.
  5. Descreva como a automação de testes pode impactar a Change Failure Rate e o MTTR.

    A automação de testes ajuda a detectar problemas antes da implantação, reduzindo a Change Failure Rate ao evitar que mudanças defeituosas cheguem à produção. Além disso, testes automatizados podem acelerar a identificação de causas de falhas, diminuindo o MTTR, já que a equipe pode rapidamente reverter ou corrigir o problema com base em evidências dos testes.