Análise dinâmica do programa - Dynamic program analysis

A análise dinâmica de programa é a análise de software de computador executada pela execução de programas em um processador real ou virtual. Para que a análise dinâmica do programa seja eficaz, o programa de destino deve ser executado com entradas de teste suficientes para cobrir quase todas as saídas possíveis. O uso de medidas de teste de software , como cobertura de código, ajuda a garantir que uma fatia adequada do conjunto de possíveis comportamentos do programa tenha sido observada. Além disso, deve-se ter cuidado para minimizar o efeito que a instrumentação tem na execução (incluindo propriedades temporais) do programa de destino. A análise dinâmica está em contraste com a análise estática do programa . Os testes unitários , testes de integração , testes de sistema e testes de aceitação usar o teste dinâmico.

Tipos de análise dinâmica

Cobertura de código

Calcular a cobertura do código de acordo com um conjunto de testes ou carga de trabalho é uma técnica de análise dinâmica padrão.

  • Gcov é o programa de cobertura de código-fonte GNU.
  • O VB Watch injeta código de análise dinâmica em programas Visual Basic para monitorar cobertura de código , pilha de chamadas, rastreamento de execução, objetos instanciados e variáveis.

Detecção de erro de memória

Localização de falhas

A localização de falha refere-se à localização do código com erros (por exemplo, a instrução com erros) de acordo com os casos de teste com falha e aprovação. Por exemplo, Tarantula é uma abordagem de localização de falhas bem conhecida com base no código coberto. A localização de falhas ilustra uma propriedade importante da análise dinâmica: os resultados da análise dependem da carga de trabalho considerada, entradas ou casos de teste. Para localização de falhas, foi demonstrado que é possível refatorar os casos de teste para obter melhores resultados.

Inferência invariante

Daikon é uma implementação de detecção de invariante dinâmica. O Daikon executa um programa, observa os valores que o programa calcula e, em seguida, relata as propriedades que eram verdadeiras sobre as execuções observadas e, portanto, provavelmente verdadeiras sobre todas as execuções.

Análise de segurança

A análise dinâmica pode ser usada para detectar problemas de segurança.

  • IBM Rational AppScan é um conjunto de soluções de segurança de aplicativo direcionado para diferentes estágios do ciclo de vida de desenvolvimento. O conjunto inclui dois produtos principais de análise dinâmica - IBM Rational AppScan Standard Edition e IBM Rational AppScan Enterprise Edition. Além disso, o conjunto inclui IBM Rational AppScan Source Edition - uma ferramenta de análise estática.

Erros de simultaneidade

  • O Parasoft Jtest usa detecção de erro em tempo de execução para expor defeitos como condições de corrida , exceções, vazamentos de recursos e memória e vulnerabilidades de ataques de segurança.
  • O Intel Inspector executa o threading do tempo de execução e a análise de erros de memória no Windows.
  • Parasoft Insure ++ é uma ferramenta de análise de memória de tempo de execução e detecção de erros. Seu componente Inuse fornece uma visão gráfica das alocações de memória ao longo do tempo, com visibilidade específica sobre o uso geral de heap, alocações de bloco, possíveis vazamentos pendentes, etc.
  • O Thread Sanitizer do Google é uma ferramenta de detecção de corrida de dados. Ele instrumenta o LLVM IR para capturar acessos atrevidos à memória.

Fatiamento de programa

Para um determinado subconjunto do comportamento de um programa, a divisão do programa consiste em reduzir o programa à forma mínima que ainda produz o comportamento selecionado. O programa reduzido é chamado de “fatia” e é uma representação fiel do programa original dentro do domínio do subconjunto de comportamento especificado. Geralmente, encontrar uma fatia é um problema insolúvel, mas ao especificar o subconjunto do comportamento alvo pelos valores de um conjunto de variáveis, é possível obter fatias aproximadas usando um algoritmo de fluxo de dados. Essas fatias são geralmente usadas por desenvolvedores durante a depuração para localizar a origem dos erros.

Análise de desempenho

A maioria das ferramentas de análise de desempenho usa técnicas de análise de programa dinâmica.

  • O Prism da CriticalBlue é uma ferramenta que rastreia dinamicamente os aplicativos de software em tempo de execução e captura dados que podem ser usados ​​para analisar e identificar as causas do baixo desempenho.

Técnicas

A maioria das técnicas de análise dinâmica é baseada em algum tipo de instrumentação ou transformação de código .

  • DynInst é uma biblioteca de patch de código em tempo de execução útil no desenvolvimento de probes de análise de programa dinâmico e na sua aplicação a executáveis ​​compilados. Dyninst não requer código-fonte ou recompilação em geral, no entanto, executáveis ​​não-stripped e executáveis ​​com símbolos de depuração são mais fáceis de instrumentar.
  • Iroh.js é uma biblioteca de análise de código em tempo de execução para JavaScript. Ele mantém o controle do caminho de execução do código, fornece ouvintes em tempo de execução para ouvir padrões de código executados específicos e permite interceptar e manipular o comportamento de execução do programa.

Veja também

Referências