ADRIANOLAUREANO← Artigos
SÉRIE PROVA · CAPÍTULO 3 · RASCUNHO

Como um framework executa milhares de testes, mede cobertura e conversa com a CI?

Workers, instrumentação e relatórios no Prova 1.0.

Pergunta de abertura

Como acelerar uma suíte sem misturar estado, saída, ordem e significado dos resultados?

01
Antes de paralelizar, medimos.
A suíte correta ficou lenta
jobs 1 · 500 casos · 12,4 s · 40,3 casos/s

Descoberta, compilação, execução e relatório têm custos distintos. O baseline impede atribuir à concorrência um ganho vindo de outra mudança.

02
Descoberta, plano, execução e agregação são fases.
Ordem de término não é ordem do relatório
catálogo ─► plano numerado ─► fila ─► workers
                                      ↓ eventos
                                 agregador ─► relatório
03
O pool limita concorrência.
Fila protegida, VMs isoladas
[01][02][03][04][05]
  │   │   │
 W1  W2  W3 ─► eventos

jobs limita workers. Cada caso conserva stdout. Casos exclusivos aguardam o pool ficar ocioso.

04
Relatório determinístico não serializa execução.
Chegada fora de ordem
eventos:    03, 01, 04, 02
relatório: 01, 02, 03, 04

Fail-fast deixa de agendar itens novos, mas preserva resultados já concluídos.

05
Uma thread travada não pode ser morta com segurança.
Cancelamento cooperativo

A Cadência consulta um token entre instruções e operações controladas. Uma chamada nativa que não coopera exige processo por worker para isolamento mais forte, pagando startup, IPC e memória.

06
Repetir diagnostica; não fabrica verde.
Flaky, histórico e seed

Uma falha seguida de passes continua instável. O relatório guarda tentativas e seed; retry nunca apaga a primeira falha.

07
Cobertura pergunta quais instruções foram observadas.
Instrumentação da Cadência

O compilador já preserva posições. A VM marca o ID antes da instrução. Bitmaps por worker reduzem contenção e o agregador une os bits.

linha 8 ─► bytecode 17,18,19
branch 4 ─► verdadeiro ✓
         └► falso      ·
08
Linha, função e branch respondem perguntas diferentes.
O denominador importa
MétricaObservaNão prova
Linhalinha alcançadatodos os resultados
Funçãoentrada na funçãoqualidade da assertion
Branchbraços tomadoscorreção

Linhas vazias e comentários ficam fora do denominador; código gerado aparece separado.

09
100% não prova correção.
Execução observada não é suficiência
calcular_desconto(cliente_vip)
assert(true)

Todas as linhas podem executar sem que o preço seja verificado. Cobertura encontra ausência de execução; não certifica intenção.

10
Um evento alimenta pessoas e máquinas.
Humano, JSON e JUnit
prova test --format human
prova test --format json
prova test --format junit
prova test --coverage

JUnit é um subconjunto documentado. CI recebe exit code, artefatos, versão, seed e jobs. Seleção por alterações só é segura com grafo correto; sem ele, é heurística declarada.

11
Oficina e Vigia consomem contratos.
Eles não viram o framework
Crivo ─► diagnóstico
Oficina ─► listar e executar sob cursor
Vigia ─► depurar um caso
Pulso + Cadência ─► fonte, bytecode, execução
CI ─► exit code + artefatos
12
Paralelo só vence quando o custo compensa.
Throughput e overhead
jobs  tempo   casos/s
1     12,4 s   40,3
2      6,8 s   73,5
4      4,1 s  121,9
8      4,0 s  125,0

Os números são da fixture e devem ser regenerados; não são promessa universal. Cobertura também mede seu próprio overhead.

13
O caminho inteiro está visível.
Prova 1.0

Descoberta → plano → workers → ambientes isolados → execução → eventos → cobertura → relatório → exit code.

cargo test, JUnit, pytest, Jest e Vitest possuem ecossistemas maiores. O Prova é funcional no recorte didático e não reivindica equivalência industrial.

Baixar Prova 1.0 — estado exato deste capítulo

PROJETO COMPLETO · ESTADO EXATO DESTE CAPÍTULO

Baixe o Prova 1.0.

Pacote exclusivo com código Rust e fixtures Pulso. Nenhum download anterior é substituído.

O que este artigo fez você pensar?

Dúvidas, experiências e contrapontos ajudam a próxima pessoa a enxergar o assunto por outro ângulo.

Todos passam por moderação. Ao enviar, você concorda com a política de privacidade.

Receba os próximos artigos.

Uma mensagem quando uma nova investigação estiver pronta. Só isso.