Skip to content
Latchkey

O Que É Cobertura de Branch?

A cobertura de branch mede se cada caminho possível através de cada ponto de decisão no seu código foi percorrido pelos seus testes.

A cobertura de branch, às vezes chamada de cobertura de decisão, é uma prima mais rigorosa da cobertura de linha. Em vez de perguntar se uma linha foi executada, ela pergunta se cada resultado verdadeiro e falso de cada if, loop e condicional foi exercitado. Isso a torna muito mais difícil de enganar com testes superficiais.

Branches versus linhas

Uma única linha pode conter uma decisão com dois resultados. A cobertura de linha marca a linha como coberta se ela foi executada, mesmo que apenas um resultado tenha sido testado. A cobertura de branch exige que tanto o caminho verdadeiro quanto o falso tenham sido percorridos, então ela detecta caminhos else não testados que a cobertura de linha deixa passar.

Um exemplo claro

Uma cláusula de guarda precisa de dois testes para ter cobertura de branch completa: um em que a condição é verdadeira e um em que é falsa. Um único teste do caminho feliz deixa o outro branch no escuro.

Two branches to cover
function discount(price, isMember) {
  if (isMember) return price * 0.9; // need member case
  return price;                      // and non-member case
}

Por que é um sinal melhor

  • Ela expõe caminhos else e default não testados.
  • É mais difícil de inflar com testes triviais.
  • Correlaciona-se melhor com a detecção real de defeitos.
  • Destaca condicionais complexos que precisam de mais testes.

Limites práticos

A cobertura de branch completa em condicionais profundamente aninhados pode exigir muitos testes, com retornos decrescentes. As equipes muitas vezes definem uma meta de cobertura de branch abaixo de 100 por cento e concentram os objetivos mais rigorosos em módulos críticos em vez de código repetitivo.

Cobertura de branch no CI

A maioria das ferramentas de cobertura reporta a cobertura de branch junto com a cobertura de linha, e os pipelines podem usá-la como portão. Como a instrumentação de branch adiciona sobrecarga, rodar a suíte em runners rápidos evita que a medição mais rigorosa desacelere cada push.

Principais conclusões

  • A cobertura de branch exige que ambos os resultados de cada decisão sejam testados.
  • Ela é mais rigorosa e mais honesta do que a cobertura de linha.
  • Busque alta cobertura de branch em código crítico, não em todo lugar.

Guias relacionados