프로그램 분석 시작하기


10

프로그램 분석 을 시작하는 데 필요한 리소스를 찾고 있습니다.

제가이 주제에서 찾은 유일한 책은 Nielson & Nielson 책입니다.

그 외에는 "프로그램 분석"이 챕터 또는 그 행을 따르는 "컴파일러"책만있는 것 같습니다.

사람들이 다른 자원을 알고 있습니까?


3
시작하기 위해 Nielson과 Nielson을 이길 수 없습니다. 설문 조 사용 Google. 정적 분석 심포지엄 (SAS)의 최근 절차를 살펴보십시오. 그런 다음 관심있는 Google 분석이 필요합니다.
Dave Clarke

참고 우리는 꽤 목록 질문 좋아해요 . 운 좋게도 이것은 좋은 대답을 얻은 것 같지만 그러한 질문은 삼가십시오. Google 자신을 찾은 다음 찾은 리소스의 내용에 대해 문의하십시오.
Raphael

답변:


7

불행히도 주제에 관한 많은 교과서가 없습니다. 오늘 프로그램 분석을 배우는 가장 좋은 방법은 사용 가능한 여러 코스를 조사하고, 몇 가지 구현을하고, 특정 요구에 맞는 몇 가지 연구 논문을 보는 것입니다. 다음에 나오는 것은 매우 작은 것입니다. 컴파일러 중심 분석을 쉽게 찾을 수 있다고 언급 했으므로 아래에서는 이러한 자료를 다루지 않습니다.

웹 기반 리소스 다음은 컴파일 컨텍스트 외부에서 정적 분석 사용을 강조하는 기사입니다.

  1. 프로그램 분석에 대한 리버스 엔지니어링 Reddit 토론 에는 많은 유용한 링크가 있습니다.

  2. 추상적 해석에 관한 Mozilla Wiki .

  3. Flash Sheridan 의 Dr. Dobbs 기사 정적 분석 배포

  4. 수십억 줄의 코드 라인 : 정적 분석을 사용하여 실제 세계에서 버그 찾기 , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler ACM의 커뮤니케이션에서.

프로그램 분석에 대한 대학 과정

  1. Arhus University의 Anders Møller 는 객체 지향 및 웹 기술을 다루는 과정가르치고 있습니다.
  2. 콜로라도 대학교의 Bor-Yuh Evan Chang 은 OCaml 구현과 대학원 과정 을 포함하는 기초 과정 을 가지고 있습니다 .
  3. 캘리포니아 산타 바바라 대학교 (University of California Santa Barbara)의 벤 하데 코프 (Ben Hardekopf) 는 훌륭한 과제를 수행했지만 더 이상 온라인으로 제공되지 않습니다. 그의 과정을 수강 한 일부 학생들은 파이썬 구현을 가능 하게 한 것 같습니다 .
  4. Markus Müller-Olm 에는 Android 분석에 대한 대학원 과정 이 있습니다 .
  5. Sarbruecken 대학의 Reinhard Wilhelm 는 타이밍 분석, 캐시 동작 예측 및 일부 모양 분석과 같은 정적 분석 응용 프로그램을 다루는 대학원 과정강의 합니다.
  6. MSR의 Sumit GulwaniOregon Summer School on Programming Languages 에서 프로그램 (시간 / 메모리)의 자원 소비를 정적으로 추정하는 훌륭한 과정을 가르쳤습니다 .
  7. 코식 센 버클리 캘리포니아 대학에서이 과정 가르치고 그 주제 concolic 실행 및 소프트웨어 모델 검사를 포함 버그 발견과에 초점을 맞추고 있습니다.
  8. 메릴랜드 대학교의 Jeffrey Foster 는 유형 시스템, 모델 확인, 앨리어스 분석 및 기타 많은 일반적인 자료를 다루는 과정 을 가르치고 있습니다 .
  9. Patrick Cousot 은 MIT에서 1 년을 보냈으며 추상적 인 해석에 대한 포괄적 인 기초 과정가르쳤습니다 . 과제에는 구체적인 수집 의미론에서 알고리즘 적으로 사소한 아이디어로 넘어가는 OCaml 구현이 포함됩니다.
  10. 현장의 일부 지도자가 가르치는 추상 해석에 대한 대학원 과정 은 더 많은 이론을 따라 잡을 수있는 좋은 장소입니다.
  11. Patrick Cousot는 2009 년 Oregon Summer School of Programming Languages 에서 추상 해석에 대한 짧은 코스를 강의했습니다 .

가지고 놀 도구

여기에 많은 연구 도구가 없습니다. 그중 많은 것들이 있지만 나는 당신이 다운로드하고 지역을 더 잘 이해하기 위해 놀 수있는 몇 가지를 나열하려고했습니다.

  1. Interproc 은 수치 정적 분석에 대해 배우기 위해 사용하는 매우 교육적인 도구입니다.

  2. 실제로 숫자 분석을하고있는 경우 Apron Numeric Abstraction 라이브러리 .

  3. Slayer 는 Microsoft Research의 형상 분석 도구입니다.

  4. jStar 는 분리 로직을 기반으로하는 Java 용 분석기입니다.

  5. Microsoft Research 에는 수많은 도구를 개발하는 수많은 그룹이 있으며 그 중 다수는 다운로드하거나 웹 데모를 제공합니다. 나는 여기에 모든 것을 나열 할 수 없으며 당신이 그들과 놀기를 제안합니다.

더 많은 것이 있지만 아마도 당신을 잠시 동안 바쁘게 유지하기에 충분할 것입니다.


와우, 이제 포괄적 인 답변입니다! 고마워요!
abeln

@Vijay는 답변 주셔서 감사합니다! 컴파일러 분석을위한 몇 가지 포인터를 추가 할 수 있는지 궁금합니다.
AnneTheAgile

@AnneTheAgile, 확장은 별도의 질문과 답변이 필요하다고 생각합니다. 질문을 해주세요. 기꺼이 답변 해 드리겠습니다.
Vijay D

@VijayD, 감사합니다! 나는 그것을 썼다. cs.stackexchange.com/questions/13392/…
AnneTheAgile

답장이 너무 느리고 게시물이 삭제되었습니다. @VijayD 아마도 당신은 나를 메신저 또는 여기 추가 할 수 있습니까? 내가 관심있는 것은 기본 사항입니다. "찾아보기 쉬운" "컴파일러 지향 분석"을 찾는 것이 가장 잘 모르겠습니다. 나는이 분야에 처음 왔으며 올바른 방법으로 시작하고 싶습니다. 타이!
AnneTheAgile

2

이 분야는 매우 광범위합니다 ... 프로그램 정확성의 증거를 찾으십시오 ( Klee 와 같은 몇 가지 도구가 있습니다 ). 그런 다음 다양한 정교함을 가진 모든 종류의 "프로그램 검사기"(예 : 범위 샘플링을위한 부목 또는 결함 탐지기 참조 ), "프로그램 지침 준수"를 확인하는 프로그램이 있습니다. 리눅스의 일치조차도이 범주에 속합니다.

다이나믹 툴의 경우, 모든 종류의 성능 / 테스트 커버리지 툴과 valgrind 와 같은 메모리 검사를위한 툴이 있습니다 .

관심 범위를 좁힌 다음 드릴 다운하십시오.


감사. 당신이 언급 한 것은 도구 이지만 정적 프로그램 분석에 관한 서적이나 설문 조사는 어떻습니까?
abeln

1

있다 이 개 연구의 초점을 맞추고 : 프로그램 분석 dynamicstatic프로그램 분석.

프로그램 분석을 처음으로 맛 보려면 컴파일러에 대한 배경 지식이있는 경우 Dragon 책의 4 장, 6, 9 장을 읽는 것이 좋습니다 .

또는 최소한 기본 그래프를 알고 있다면 MIT 6.820CMU 17-355 / 17-665 / 17-819 와 같은 대학원 수준의 과정을 따르는 것이 좋습니다 .

위는 정적 프로그램 분석에 관한 것입니다. 동적 프로그램 분석에 대해 더 관심을 경우 , 프로그램 프로파일 링은 시작하기에 좋은 지점입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.