Análise estática de código

Análise estática de código
para sistemas complexos

Encontre problemas no código antes da execução com o Visao, o componente de análise estática do Midair.

Analise o código-fonte, os caminhos de execução e as regras do seu projeto antes de o software correr.

Porque a análise estática de código é importante

Alguns defeitos custam menos a encontrar antes de o software correr em dispositivos ou em ambientes distribuídos. A análise estática examina o código-fonte sem o executar. Pode revelar problemas no código antes de começarem os testes.

No Midair, o Visao é essa camada anterior à execução. As ocorrências que encontra ficam ligadas às execuções de teste seguintes e às evidências de execução. Não acabam num relatório estático à parte.

O que é a análise estática de código?

A análise estática de código examina o código-fonte sem executar o programa. Serve para encontrar possíveis defeitos, comportamento inseguro e violações de regras definidas, antes de começarem os testes em execução.

A análise estática pergunta o que se consegue descobrir no código antes da execução. Os testes perguntam o que acontece quando o software corre de facto.

O artigo Análise de código estática vs. dinâmica explica a diferença com exemplos.

Desafios que a análise estática tem de resolver

Quatro problemas que decidem se um analisador é útil num sistema real.

Problemas que os avisos do compilador não mostram

O código pode compilar sem erros e, mesmo assim, ter comportamento que vale a pena investigar.

Regras de falha próprias do projeto

Os analisadores genéricos não conhecem todas as restrições que importam num sistema concreto.

Caminhos de execução complexos

Um defeito pode depender de um caminho específico pelo código. Uma simples procura de padrões não o encontra.

Ocorrências estáticas separadas dos testes

Uma ocorrência vale menos quando não se consegue ligar à execução de teste ou ao comportamento em execução que a confirma.

Visao

Como o Visao analisa o código

O Visao combina várias técnicas de análise para raciocinar sobre o código antes da execução. Cada ocorrência fica ligada ao local exato no código-fonte e à regra em causa.

Model checking

Percorre os estados que o programa pode atingir. Verifica se uma propriedade pode ser violada em algum deles.

Interpretação abstrata

Acompanha o intervalo de valores que uma variável pode ter. Isto reduz a pesquisa e, por si só, apanha alguns erros.

Raciocínio com SMT

Decide se as condições que levam a uma falha podem ser verdadeiras ao mesmo tempo.

Regras do projeto

Verificações escritas para as restrições de uma base de código. Correm ao lado das verificações integradas.

Exemplos de ocorrências

•

Uso inseguro da memória

Por exemplo, um buffer que fica sem terminador e depois é lido para lá do fim.

•

Transbordo de inteiro

Por exemplo, um deslocamento que chega ao bit de sinal depois de uma promoção de inteiro.

•

Violações de regras do projeto

Qualquer condição que a equipa tenha definido como falha no seu próprio sistema.

Uma ocorrência estática não fica no relatório

O Visao corre antes da execução. Quando uma ocorrência precisa de validação em execução, a mesma investigação continua no Midair. Segue para uma execução de teste no TS Factory e para as evidências de execução do Delta.

Ocorrência do Visao → Execução de teste → Evidências de execução

Casos de utilização

•

Software embebido e firmware

Código que acaba por correr em hardware com pouca observabilidade.

•

Software de rede e de sistema

Código de baixo nível ou de infraestrutura, cujo comportamento depende do contexto do sistema.

•

Software sensível em termos de segurança

Código em que o comportamento inseguro tem de ser encontrado antes da investigação em execução.

•

Bases de código C e C++ complexas

Árvores de código grandes e com muitos anos, onde um defeito se pode esconder num caminho raramente percorrido.

•

Projetos com regras do domínio

Casos em que os analisadores genéricos não apanham todas as condições de falha que importam.

Capacidades

Análise estática antes da execução

Encontre problemas no código sem executar o software.

Verificações do projeto

Aplique regras que refletem as restrições reais do projeto.

Análise sensível ao caminho

Investigue comportamentos que dependem da forma como a execução chega a um dado estado.

Integração com CI/CD

Execute a análise dentro dos fluxos de desenvolvimento que já usa.

Evidências ligadas no Midair

Leve as ocorrências relevantes para os testes seguintes e para a investigação em execução.

Iniciar o seu piloto

Comece pela sua própria base de código. Veja como as ocorrências do Visao se ligam aos testes e às evidências de execução no Midair.