Conceito e mecanismo
Executar uma linha não significa verificar todos os seus resultados lógicos. Se uma condição opcional acrescenta uma comissão e não tem else, um teste que entra nesse ramo pode executar todas as instruções sem observar a decisão falsa. Para avaliar cobertura, define o objeto, o critério e o denominador: instruções executáveis, resultados de decisão ou combinações. Num exemplo abstrato sem curto-circuito, a decisão A AND B pode ser verdadeira com TT e falsa com FF. Esses dois vetores cobrem resultados da decisão, mas não demonstram o efeito independente de cada condição. Acrescentar TF e FT permite comparar TT com FT para A e TT com TF para B. Estes pares explicam a intenção de MC/DC.
Aplicação guiada
Para três condições booleanas independentes, o espaço completo contém oito combinações; isso não significa que sejam todas viáveis num programa concreto. Condições repetidas ou relacionadas podem impedir certas alterações independentes. O curto-circuito também muda quais expressões são efetivamente avaliadas, por isso distingue uma tabela lógica abstrata do relatório de uma ferramenta. O gcov oferece cobertura de condições com instrumentação própria e descreve uma variante masking de MC/DC; não equipares automaticamente qualquer relatório de branches a essa medida. A cobertura ajuda a localizar lacunas, mas depende do código existente e não encontra por si só comportamento omitido do programa. Combina-a com testes baseados em requisitos e revê justificações de código inacessível antes de o excluir da medição.
TT, TF e FT demonstram o efeito independente das duas condições de A AND B no modelo abstrato.
Armadilhas comuns
Linha como decisão; branches como MC/DC; percentagem como correção.
Tópicos relacionados: Risco técnico e evidência operacional · Análise estática e dinâmica · Desempenho e perfil de carga
Explica o critério antes de interpretar a percentagem.
Referência: GCC gcov invocation and coverage metrics · CTAL-TTA v4.0 (2021)