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?
Respostas:
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.
Uma discussão do Reddit de Engenharia Reversa sobre análise de programas tem muitos links úteis.
Mozilla Wiki sobre interpretação abstrata.
Implantando a análise estática , um artigo do Dr. Dobbs de Flash Sheridan
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
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.
O Interproc é uma ferramenta muito educacional para se aprender sobre a análise estática numérica.
A biblioteca de abstração numérica do avental, se você realmente gosta de análise numérica.
Slayer é uma ferramenta de análise de formas da Microsoft Research.
O jStar é um analisador para Java baseado na lógica de separação.
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.
fonte
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.
fonte
Existem dois focos de pesquisa em análise de programas:
dynamic
estatic
aná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.
fonte