Pergunta

O que é Dinâmica de Análise de Código?

Como é que é diferente de Análise Estática De Código (ou seja, o que ele pode pegar que não pode ser capturado em estática)?

Já ouvi falar de verificação de limites e de análise de memória - o que são estes?

Que outras coisas são verificadas através de análise dinâmica?

-Adam

Foi útil?

Solução

Simplesmente coloque, análise estática coletar informações com base em código-fonte e a análise dinâmica é baseada no de execução do sistema, recorrendo , frequentemente, a instrumentação.

Vantagens da análise dinâmica

  • É capaz de detectar dependências que não são possíveis de detectar na análise estática.Ex.:dinâmica dependências usando a reflexão, injeção de dependência, polimorfismo.
  • Pode coletar informações temporais.
  • Trata real de entrada de dados.Durante a análise estática é difícil, se não impossível saber quais arquivos serão passados como entrada, o que solicitações da WEB virá, o que o usuário vai clicar, etc.

Desvantagens da análise dinâmica

  • Pode impactar negativamente o desempenho do aplicativo.
  • Não é possível garantir a cobertura completa do código-fonte, como ele é executado com base na interação do usuário ou automática de testes.

Recursos

Há muitas dinâmicas, ferramentas de análise do mercado, sendo depuradores o mais notável.Por outro lado, é ainda de uma pesquisa acadêmica campo.Há muitos pesquisadores que estudam como utilizar dinâmicas de análise para uma melhor compreensão de sistemas de software.Há anualmente um workshop dedicado à a análise de dependência.

Outras dicas

Basicamente instrumento de seu código para analisar o seu software de como ele está sendo executado (dinâmico) em vez de apenas analisar o software sem executar (estático).Veja também este JavaOne apresentação comparando os dois. Valgrind um exemplo é a dinâmica ferramenta de análise para a C.Você também pode usar ferramentas de cobertura de código como Cobertura ou EMMA para Java análise.

A partir da Wikipédia definição da dinâmica do programa de análise de:

Programa dinâmico de análise é o análise de software de computador que é realizada com a execução de programas construído a partir do que o software em um real ou processador virtual (análise realizada sem a execução de programas é conhecida como análise estática de código).Dinâmica do programa ferramentas de análise podem exigir carregamento de especial bibliotecas ou mesmo a recompilação de código de programa.

Você pediu uma boa explicação de "verificação de limites e de análise de memória" problemas.

Nossa Memória Verificação De Segurança ferramenta de instrumentos de seu aplicativo para assistir, em tempo de execução de acesso de memória de erros (saturações de buffer, subscrito da matriz de erros, más ponteiros, alocação/livre de erros).O link contém uma explicação detalhada completo com exemplos.Este ENTÃO, responder mostra dois programas que possuem ponteiros em mortos quadro de pilha, e como CheckPointer detecta e relata o momento do erro no código fonte

Um mais breves exemplo:C (e C++) vergonhosamente se não verificar os acessos a arrays, para ver se o acesso está dentro dos limites da matriz.O benefício:programa bem concebido não pagar o custo de tal verificação no modo de produção.A desvantagem:programas de buggy pode tocar coisas fora da matriz, e isto pode causar o comportamento, que é muito difícil de entender;assim, o buggy do programa é difícil de depurar.

O que uma instrumentação dinâmica como ferramenta de Memória de Segurança Verificador faz, é associar alguns metadados com todas as ponteiro (por exemplo, o tipo de coisa para a qual o ponteiro "pontos", e se for uma matriz, a matriz de limites) e, em seguida, verificar em tempo de execução, qualquer acessos através de ponteiros para matrizes, se a matriz dependente é violada.A ferramenta modifica o original programa para coletar os metadados, onde ele é gerado (por exemplo, na entrada para âmbitos em que as matrizes são declaradas, ou como o resultado de um malloc operação, etc.) e modifica o programa em cada matriz de referência (escrito como x[y], onde x ou y é uma matriz de ponteiro e o valor é algum tipo de tipo integral, da mesma forma *(x+y)!) para verificar o acesso.Agora, se o programa é executado, e executa um out-of-bounds acesso, a seleção pega o erro e relatado o primeiro lugar onde ele poderia ser detectada.[Se você pensar sobre isso, você vai perceber a instrumentação para metadados de recolha e de verificação tem de ser muito inteligente, para lidar com toda a variante de casos de uma linguagem como C pode ter.É realmente difícil fazer este trabalho completamente).

A boa notícia é que agora, tal acesso é relatado início onde é mais fácil detectar o problema e corrigir o programa.Tal ferramenta não se destina a produção de utilização;usa durante o desenvolvimento e testes para ajudar a verificar a ausência de erros.Se não existem erros detectados, em seguida, se faz uma normal compila e executa os programas, sem as verificações.

Este é um muito bom exemplo de uma dinâmica ferramenta de análise:o teste acontece em tempo de execução.

Verificação de limites

Isso significa que verificações de tempo de execução da matriz de acessos.Ao contrário do C do laissez-faire para acessos a memória e o ponteiro de aritmética, de outras linguagens como Java ou C#, na verdade, verificar se é ou não uma dada matriz tem o elemento que se está a tentar aceder.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top