Introdução à Análise de Programa

10

Estou procurando recursos para começar a analisar o programa .

O único livro que encontrei sobre o assunto é o livro Nielson & Nielson .

Fora isso, parece que existem apenas livros de "compiladores" em que "análise de programa" seria um capítulo ou algo nesse sentido.

As pessoas conhecem outros recursos?

abeln
fonte
3
Difícil de bater Nielson e Nielson para começar. Google para documentos de pesquisa. Veja os procedimentos recentes do Static Analysis Symposium (SAS). Em seguida, o Google analisa particulares que você está interessado.
Dave Clarke
Observe que não gostamos muito das perguntas da lista . Felizmente, isso parece ter atraído uma boa resposta, mas evite fazer essas perguntas. Pesquise no Google e pergunte sobre os recursos encontrados.
Raphael

Respostas:

7

Infelizmente, não há muitos livros sobre o assunto. Eu acho que a melhor maneira de aprender hoje a análise de programas é pesquisar diferentes cursos disponíveis, jogar com algumas implementações e depois examinar alguns documentos de pesquisa para suas necessidades específicas. O que se segue é uma amostra muito pequena do que está lá fora. Como você mencionou especificamente as análises orientadas ao compilador foram fáceis de encontrar, não abordarei esse material abaixo.

Recursos baseados na Web Estes são artigos que enfatizam o uso de análise estática fora de um contexto de compilação.

  1. Uma discussão do Reddit de Engenharia Reversa sobre análise de programas tem muitos links úteis.

  2. Mozilla Wiki sobre interpretação abstrata.

  3. Implantando a análise estática , um artigo do Dr. Dobbs de Flash Sheridan

  4. Algumas bilhões de linhas de código mais tarde: usando a análise estática para encontrar bugs no mundo real , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler em Comunicações da ACM.

Cursos universitários em análise de programas

  1. Anders Møller, da Universidade de Arhus, ministra um curso que abrange tecnologia orientada a objetos e web.
  2. Bor-Yuh Evan Chang, da Universidade do Colorado em Boulder, possui um curso básico que envolve a implementação do OCaml e um curso de pós-graduação .
  3. Ben Hardekopf , da Universidade da Califórnia em Santa Barbara, costumava ter um ótimo conjunto de tarefas, mas elas não estão mais disponíveis online. Alguns alunos que fizeram o curso parecem ter disponibilizado uma implementação em Python .
  4. Markus Müller-Olm tem um curso de graduação em análise do Android .
  5. Reinhard Wilhelm , da Universidade de Sarbruecken, ensina um curso de pós - graduação que abrange aplicativos de análise estática, como análise de tempo, previsão de comportamento do cache e algumas análises de forma.
  6. Sumit Gulwani, da MSR, ministrou um bom curso sobre estimativa estatística do consumo de recursos de programas (tempo / memória) na Escola de Verão do Oregon em Linguagens de Programação .
  7. Koushik Sen , da Universidade da Califórnia em Berkeley, ministra um curso focado na descoberta de bugs e cujos tópicos abrangem a execução concólica e a verificação de modelos de software.
  8. Jeffrey Foster , da Universidade de Maryland, ministra um curso que abrange sistemas de tipos, verificação de modelos, análise de alias e muitos outros materiais usuais.
  9. Patrick Cousot passou um ano no MIT e ministrou um curso abrangente e fundamental sobre interpretação abstrata. As atribuições incluem uma implementação OCaml, que vai da semântica de coleta concreta a algumas idéias não triviais do algoritmo.
  10. Um curso de pós-graduação em interpretação abstrata ministrado por alguns líderes da área é um bom lugar para se atualizar ainda mais com a teoria.
  11. Patrick Cousot ministrou um curso de interpretação abstrata na Escola de Verão de Oregon em Linguagens de Programação em 2009.

Ferramentas para brincar

Não estou listando muitas ferramentas de pesquisa aqui. Existem muitos deles, mas tentei listar alguns que você pode baixar e jogar para entender melhor a área.

  1. O Interproc é uma ferramenta muito educacional para se aprender sobre a análise estática numérica.

  2. A biblioteca de abstração numérica do avental, se você realmente gosta de análise numérica.

  3. Slayer é uma ferramenta de análise de formas da Microsoft Research.

  4. O jStar é um analisador para Java baseado na lógica de separação.

  5. A Microsoft Research possui vários grupos desenvolvendo inúmeras ferramentas, muitas das quais estão disponíveis para download ou têm demos na web. Não posso listar tudo aqui e sugiro que você brinque com eles.

Há muito mais, mas isso provavelmente é suficiente para mantê-lo ocupado por um tempo.

Vijay D
fonte
Uau, agora essa é uma resposta abrangente! Muito obrigado!
Abeln
@Vijay obrigado pela sua resposta! Gostaria de saber se você poderia adicionar alguns ponteiros para análise do compilador para mim?
AnneTheAgile
@AnneTheAgile, acho que essa extensão merece uma pergunta e resposta separadas. Portanto, faça a pergunta e tenho o prazer de fornecer a resposta.
Vijay D
@VijayD, obrigado! Eu escrevi; cs.stackexchange.com/questions/13392/…
AnneTheAgile
Estou com uma resposta muito lenta e minha postagem foi excluída. @VijayD talvez você possa me enviar uma mensagem instantânea ou adicionar aqui? O que me interessa é o básico. Não sei ao certo qual a melhor maneira de encontrar as "análises orientadas ao compilador" que "foram fáceis de encontrar"? Eu sou novo no campo e quero começar da maneira certa. ty!
AnneTheAgile
2

Este campo é extremamente amplo ... procure provas de correção do programa (existem algumas ferramentas disponíveis, como o Klee ). Depois, existem todos os tipos de "verificadores de programas" de sofisticação variada (veja, por exemplo, splint ou flawfinder para obter uma amostra da faixa), programas que verificam a "conformidade das diretrizes de programação". Até a incompatibilidade do Linux se enquadra nessa categoria.

Para ferramentas dinâmicas, existem todos os tipos de ferramentas de desempenho / cobertura de teste e itens para verificação de memória, como o valgrind .

Limite o intervalo de interesse e faça uma busca detalhada.

vonbrand
fonte
Obrigado. Os que você menciona são ferramentas , mas e os livros ou pesquisas, digamos, sobre análise estática de programas?
Abeln
1

Existem dois focos de pesquisa em análise de programas: dynamice staticanálise de programas.

Para experimentar pela primeira vez a análise do programa, recomendo ler o capítulo 4, 6, 9 no livro Dragon, se você tiver experiência em compiladores .

Ou, se pelo menos você conhece gráficos básicos, seria melhor seguir um curso de pós-graduação, como o MIT 6.820 e o CMU 17-355 / 17-665 / 17-819 .

Os itens acima são sobre análise estática de programas Se você se preocupa mais com a análise dinâmica de programas , a criação de perfil do programa é um bom ponto de partida.

emmmphd
fonte