Testes e Benchmarks¶
Testes buscam defeitos e documentam exemplos de comportamento esperado. Provas de correção estabelecem afirmações sobre um modelo. Nenhuma abordagem substitui a outra.
Dimensões de teste¶
- exemplos representativos;
- casos de fronteira: vazio, singleton, duplicatas, extremos;
- entradas inválidas e contratos de exceção;
- propriedades que valem ao longo de entradas geradas;
- casos de regressão para defeitos previamente descobertos;
- comportamento de integração em fronteiras reais.
Para ordenação, propriedades úteis incluem saída não-decrescente, preservação de comprimento e multiconjunto, idempotência e concordância com um oráculo confiável.
@ParameterizedTest
@MethodSource("arrays")
void insertionSortMatchesTheJdk(int[] input) {
int[] expected = input.clone();
Arrays.sort(expected);
int[] actual = input.clone();
insertionSort(actual);
assertArrayEquals(expected, actual);
}
Escopo unitário, integração e sistema¶
Um teste unitário isola um pequeno contrato e executa rapidamente. Um teste de integração verifica colaboração com uma fronteira real como banco de dados ou servidor HTTP. Um teste de sistema observa a aplicação implantada externamente. Substitutos de teste são úteis em limites selecionados, mas não podem estabelecer que uma integração real funciona. Consulte substitutos de teste, testes de contrato e testes baseados em propriedades para suas garantias distintas e modos de falha.
Benchmarking Java¶
Use JMH ou um framework equivalente. Um relatório sólido declara as entradas, o aquecimento, as iterações de medição, os forks, a JVM, o hardware, o resultado estatístico e a incerteza. Evite a eliminação de código morto e não combine o trabalho de preparação com a operação sob medição.
System.nanoTime() é uma primitiva de relógio, não uma metodologia de benchmarking.
Compilação JIT, coleta de lixo, otimização adaptativa, caches de CPU e ruído do
sistema operacional distorcem medições únicas e ingênuas.
Para investigações fora de um microbenchmark controlado, siga o fluxo de depuração, análise de desempenho e análise de memória.