Projeto 05: Benchmark e Comparativo Multiparadigma na Prática ⚖️
Escopo do Projeto
Objetivo: Desenvolver um benchmark científico comparando uma mesma aplicação crítica de negócio (Processamento de Pedidos) sob os três paradigmas (Estruturado, OO e Funcional), mensurando consumo de memória e tempo de execução.
🎯 1. Contexto & Desafio Prático
Qual paradigma é mais eficiente para o seu caso de uso? Para responder a essa questão com fundamentação de engenharia, você construirá um harness de benchmark que processa 100.000 pedidos, registrando a taxa de Throughput e o perfil de alocação de memória de cada abordagem.
📋 2. Requisitos Técnicos Obrigatórios
- R1 (Massa de Dados Sintética): Gerar lote de 100.000 pedidos com campos: id, cliente, status e lista de itens com preços.
- R2 (Três Implementações Isoladas): Executar o mesmo fluxo de regras (filtrar pedidos pagos, aplicar imposto e totalizar faturamento) nos 3 paradigmas.
- R3 (Medição de Tempo e Memória): Utilizar
time.perf_counter()etracemallocpara capturar tempo de CPU e pico de consumo de RAM. - R4 (Gráfico ou Tabela de Resultados): Gerar relatório conclusivo apontando quando cada paradigma é preferível.
📐 3. Diagrama Conceitual & Arquitetura
graph TD
Data["Lote: 100.000 Pedidos Sintéticos"] --> Benchmark["Harness de Benchmark (tracemalloc + perf_counter)"]
Benchmark --> RunImp["Execução 1: Estruturado (Iterativo)"]
Benchmark --> RunOO["Execução 2: Orientado a Objetos (Classes)"]
Benchmark --> RunFunc["Execução 3: Funcional (Generators / Streams)"]
RunImp & RunOO & RunFunc --> Report["Tabela Comparativa de Latência e Memória"]
style Data fill:#e1f5fe,stroke:#01579b
style Benchmark fill:#fff3e0,stroke:#e65100
style Report fill:#e8f5e9,stroke:#2e7d32 💻 4. Especificação Técnica & Código de Referência
// benchmark_paradigmas.py
import time
import tracemalloc
def benchmark_runner(nome: str, func, dados):
tracemalloc.start()
start_time = time.perf_counter()
resultado = func(dados)
elapsed = time.perf_counter() - start_time
current, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"[{nome:12}] Tempo: {elapsed*1000:6.2f}ms | Pico Memória: {peak / 1024:6.2f} KB | Total: {resultado:.2f}")
📦 5. Critérios de Avaliação e Entrega
- Script executando sem falhas para 100.000 registros.
- Tabela com dados de tempo (ms) e memória (KB) para as 3 abordagens.
- Análise crítica dos trade-offs observados.