Análise estática (análise estática do código)

Análise estática, também chamada análise estática do código, é um método de depuração de programa de computador que é feito examinando o código sem executar o programa. O processo fornece uma compreensão da estrutura do código e pode ajudar a garantir que o código adere aos padrões da indústria. A análise estática é utilizada na engenharia de software pelas equipes de desenvolvimento de software e de garantia de qualidade. Ferramentas automatizadas podem ajudar programadores e desenvolvedores a realizar análises estáticas. O software irá analisar todo o código em um projeto para verificar vulnerabilidades enquanto valida o código.

Análise estática é geralmente boa em encontrar problemas de codificação como:

  • Erros de programação
  • Infracções padrão de codificação
  • Valores indefinidos
  • Infracções de sintaxe
  • Vulnerabilidades de segurança

O processo de análise estática também é útil para lidar com fraquezas no código fonte que podem levar a estouros de buffer -- uma vulnerabilidade de software comum.

Como é feita a análise estática?

O processo de análise estática é relativamente simples, desde que seja automatizado. Geralmente, a análise estática ocorre antes dos testes de software em desenvolvimento inicial. Na prática de desenvolvimento DevOps, ela ocorrerá nas fases de criação.

Após o código ser escrito, um analisador de código estático deve ser executado para olhar sobre o código. Ele irá comparar com as regras de codificação definidas a partir de padrões ou regras pré-definidas personalizadas. Assim que o código for executado através do analisador de código estático, o analisador terá identificado se o código cumpre ou não com as regras definidas. Às vezes é possível que o software marque falsos positivos, por isso é importante que alguém passe por eles e os descarte. Uma vez que os falsos positivos são dispensados, os desenvolvedores podem começar a corrigir qualquer erro aparente, geralmente a partir dos mais críticos. Uma vez resolvidos os problemas de código, o código pode passar para testes através da execução.

Sem ter ferramentas de teste de código, a análise estática exigirá muito trabalho, uma vez que os humanos terão que rever o código e descobrir como ele se comportará em ambientes em tempo de execução. Portanto, é uma boa idéia encontrar uma ferramenta que automatize o processo. Livrar-se de qualquer processo demorado fará com que o ambiente de trabalho seja mais eficiente.

Tipos de análise estática

Existem vários métodos de análise estática que uma organização poderia usar, que incluem:

  • Análise de controle -- foca no fluxo de controle em uma estrutura de chamada. Por exemplo, um fluxo de controle pode ser um processo, função, método ou em uma sub-rotina.
  • Análise de dados -- garante que os dados definidos sejam usados corretamente e também que os objetos de dados estejam operando corretamente.
  • Análise de falhas/falhas -- analisa falhas e falhas nos componentes do modelo.
  • Análise de interface -- verifica simulações para verificar o código e assegura que a interface se encaixa no modelo e na simulação.

Num sentido mais amplo, com menos categorização oficial, a análise estática pode ser dividida em categorias formais, cosméticas, propriedades de projeto, verificação de erros e preditivas. Formal significa se o código está correto; cosmetic significa se o código se sincroniza com padrões de estilo; design properties significa o nível de complexidades; error checking que procura por violações do código; e predictive, que pergunta como o código se comportará quando executado.

static analysis objectivesEsta imagem mostra alguns dos objetivos dentro da análise estática.

Benefícios e desvantagens da análise estática

Benefícios do uso da análise estática incluem:

  • Pode avaliar todo o código em uma aplicação, aumentando a qualidade do código.
  • Proporciona velocidade no uso de ferramentas automatizadas em comparação com a revisão manual do código
  • Parado com métodos de teste normais, os testes estáticos permitem uma maior profundidade na depuração do código.
  • As ferramentas automatizadas são menos propensas a erro humano.
  • I>I>I>I>I>I>I>I>I>I>Pode aumentar a probabilidade de encontrar vulnerabilidades no código, aumentando a segurança da web ou da aplicação.
  • I>Pode ser feito em um ambiente de desenvolvimento offline.

No entanto, a análise estática vem com alguns inconvenientes. Por exemplo, as organizações devem ficar atentas ao seguinte:

  • Positivos falsos podem ser detectados.
  • Uma ferramenta pode não indicar qual é o defeito se houver um defeito no código.
  • Nem todas as regras de codificação podem sempre ser seguidas, como regras que precisam de documentação externa.
  • Análise estática pode levar mais tempo do que métodos comparáveis.
  • Análise estática não pode detectar como uma função será executada.
  • Bibliotecas de sistema e de terceiros podem não ser capazes de ser analisadas.

Verificação estática vs. verificação dinâmica

A principal vantagem da análise estática é o fato de que ela pode revelar erros que não se manifestam até que um desastre ocorra semanas, meses ou anos após o lançamento. No entanto, a análise estática é apenas um primeiro passo em um regime de controle de qualidade de software abrangente. Após a análise estática ter sido feita, a análise dinâmica é frequentemente realizada num esforço para descobrir defeitos ou vulnerabilidades sutis. Em terminologia computacional, estática significa fixa, enquanto que dinâmica significa capaz de ação e/ou mudança. A análise dinâmica envolve o teste e a avaliação de um programa com base na execução. As análises estáticas e dinâmicas, consideradas em conjunto, são por vezes referidas como teste da caixa de vidro.

Ferramentas de análise estática e fornecedores

Existem muitas ferramentas de verificação estática por aí, pelo que pode ser confuso escolher a ferramenta certa. As ferramentas de software funcionarão em vários níveis. As ferramentas de nível unitário analisam os programas ou sub-rotinas. As ferramentas de nível tecnológico testarão entre programas de unidade e uma visão do programa em geral. As ferramentas de nível de sistema analisarão as interações entre os programas de unidade. E as ferramentas de nível de missão focarão nos termos, regras e processos da camada de missão. Antes de se comprometer com uma ferramenta, uma organização também deve certificar-se de que a ferramenta suporta a linguagem de programação que eles estão usando, bem como os padrões que eles querem cumprir.

Embold é um exemplo de ferramenta de análise estática que afirma ser uma plataforma analítica de software inteligente. A ferramenta pode automaticamente priorizar problemas com código e dar uma visualização clara do mesmo. A ferramenta também verificará a correção e precisão dos padrões de projeto usados no código.

Kiuwan é outro exemplo de um analisador estático. É uma grande plataforma que se concentra na implementação de análise estática em um ambiente DevOps. Ele apresenta até 4.000 regras atualizadas baseadas em cerca de 25 padrões de segurança. Ele também se integra bem com Jenkins.

PyCharm é outra ferramenta de exemplo que é construída para desenvolvedores que trabalham em Python com grandes bases de código. A ferramenta possui navegação de código, refatoração automática, bem como um conjunto de outras ferramentas de produtividade.