Análise dinâmica do programa - Dynamic program analysis
| Execução do programa |
|---|
| Conceitos gerais |
| Tipos de código |
| Estratégias de compilação |
| Tempos de execução notáveis |
|
| Compiladores e conjuntos de ferramentas notáveis |
|
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
- Intel Inspector : depurador de erros de memória dinâmica para aplicativos C, C ++ e Fortran executados no Windows * e Linux *.
- AddressSanitizer : detecção de erro de memória para Linux , macOS , Windows e muito mais. Parte do LLVM .
- BoundsChecker : detecção de erro de memória para aplicativos baseados no Windows. Parte do Micro Focus DevPartner .
- Dmalloc , biblioteca para verificação de alocação e vazamentos de memória. O software deve ser recompilado e todos os arquivos devem incluir o arquivo de cabeçalho C especial dmalloc.h.
- Purificar : principalmente detecção de corrupção de memória e detecção de vazamento de memória.
- Valgrind executa programas em um processador virtual e pode detectar erros de memória (por exemplo, mau uso de malloc e free ) e condições de corrida em programas multithread .
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
- Interpretação abstrata
- Daikon
- Teste de carga dinâmica
- Criação de perfis (programação de computador)
- Verificação de tempo de execução
- Análise de programa (ciência da computação)
- Análise de código estático
- Teste de Partição de Tempo