Conceito e mecanismo
Análise estática investiga o programa sem executar os seus percursos. Pode revelar uso de uma variável antes de receber valor, escrita substituída antes de qualquer leitura ou um ramo aparentemente inacessível. Esses sinais precisam de contexto: uma segunda atribuição pode ser deliberada e um caminho reportado pode ser inviável segundo uma pré-condição que a ferramenta desconhece. Regista a justificação de cada supressão e prefere tornar o contrato explícito a desligar uma classe inteira de alertas. A complexidade ciclomática é um indicador estrutural; num grafo conectado com entrada e saída únicas, E menos N mais dois permite calculá-la. Não é uma contagem de todos os percursos possíveis, sobretudo quando existem ciclos.
Aplicação guiada
Análise dinâmica observa uma execução concreta e pode expor crescimento de recursos, acessos inválidos ou pontos de consumo de tempo. Num processo que cresce de memória durante muitas horas, compara alocações, libertações, cache e carga antes de concluir que há fuga. Reiniciar pode reduzir o sintoma sem corrigir a causa. Em código nativo, AddressSanitizer instrumenta a compilação e usa uma biblioteca de execução para detetar classes de erros de memória nos percursos exercitados. Essa instrumentação tem custo e não deve ser confundida com uma medição de desempenho do binário normal. Conserva a versão, a configuração e o percurso que reproduz o problema. A combinação de análise estática e dinâmica produz evidência complementar, não uma garantia de ausência de defeitos.
Num grafo conectado com E=9 e N=7, a complexidade é 4.
Armadilhas comuns
Alerta como defeito certo; crescimento como fuga provada; binário instrumentado como benchmark normal.
Tópicos relacionados: Risco técnico e evidência operacional · Cobertura lógica white-box · Desempenho e perfil de carga
Investiga sinais com hipóteses e contexto reproduzível.
Referência: LLVM Clang static analysis FAQ · CTAL-TTA v4.0 (2021)