320 likes | 474 Views
프로그래밍 언어와 프로그램 오류 자동 검출 기술 Automatic Technology for Detecting Fatal SW Errors Before Testing. 이광근 교수 Programming Research Laboratory ropas.snu.ac.kr 11/07/2007 @ POSTECH CSE Seminar. Content. What Challenges Us & How We Responded Within SW Technology Within Programming Language Technology
E N D
프로그래밍 언어와 프로그램 오류 자동 검출 기술Automatic Technology for Detecting Fatal SW Errors Before Testing 이광근 교수 Programming Research Laboratory ropas.snu.ac.kr 11/07/2007 @ POSTECH CSE Seminar
Content • What Challenges Us & How We Responded • Within SW Technology • Within Programming Language Technology • What An Exciting Opportunities Ahead!
컴퓨터 하드웨어의 발전속도? 1997 Intel Teraflops 2002 IBM ASCI White 1946 ENIAC flops flops
에너지 1980년 원자력발전소1기 1899년 하인1명 hp hp
교통 Boeing Delta-II Rocket 가마 j j
SWs Are EverywhereSo, We Are As Advanced As Other Disciplines?No, Fortunately.
소프트웨어 기술의 발전은 얼마나 느린가? Open Problem: 작성한 소프트웨어가 제대로 실행될 지를 미리 엄밀하게 확인하는 방법은? 다른 분야에서는 이미 푼 문제: • 기계공학: 제대로 작동할 지를 미리 검증할 수 있는 기계설계 • 건축공학: 제대로 서 있을 지를 미리 검증할 수 있는 건축설계 • 화학공학: 제대로 진행될 지를 미리 검증할 수 있는 공정설계 • 전자공학: 제대로 작동할 지를 미리 검증할 수 있는 회로 설계 • 뉴튼역학, 미적분 방정식, 통계역학, XX이론, XX방정식 등등
소프트웨어 오류 자동 검출의 발달과정 3박자 1.오류의 정의(logic) 2.검증방법 고안(logic) 3.그 방법을 구현(logic and computation) 오류 자동 검출 방법의 연구 = 3박자의 반복된 발전과정
오류 자동 검출 프로그램: 1세대 문법 검증기: lexical analyzer & parser (80년대 초에 완성) 1.오류 = 프로그램 생김새 틀린것 “{intt x = 8*) }” 2.3. 100% 검증: 오류없슴 <=> 문법이 맞음
오류 자동 검출 프로그램: 2세대 타입 검증기: type checker (30년 PL분야의 결실) 1.오류 = 타입에 어긋나게 실행된다 “ free(1);” 2. Thm. “검증됨”(logic) => “오류없슴” 3. Thm. “검증됨”(logic) <=> “YES”(computation) • 효과적인 검증기 (10000 lines/sec) • 전자동 • higher-order & typed(HOT) languages: ML, Haskell • v.s. C, C++, Java, Python
오류 자동 검출 프로그램: 3세대 프로그램분석기: static program analysis (2000년이후) 1. 오류 = 타입보다 더 정교한 오류 “라면끓이기(신, 물, 불);” 2. Thm. “검증됨”(logic) => “오류없슴” 3. Thm. “검증됨”(logic) <= “YES”(computation) • 현재성능 (10-10000lines/sec) • 전자동
Open Problem • 소프트웨어가 실행되기 전에 • 우리가 바라는대로 실행될 지를 • no core dump/segmentation fault • no buffer overrun • no memory leak • “x.s > 0 at line 321” • “notNull(y) whenever x = 0” • etc. • 엄밀하게 미리 확인해주는 기술은?
3rd Gen. Solution:Static Program Analysis 프로그램의 실행 내용을 실행전에 자동으로 안전하게 어림잡는 일반적인 기술 “static analysis” “정적분석” “프로그램분석”
“실행전”: 프로그램을 실행시키지 않고 • “자동으로”: 프로그램이 프로그램을 분석 • “안전하게”: 모든 가능성을 포섭 • “어림잡는”: 실제 이외의 것들이 포함됨 • 어림잡지 않으면 불가능 • “일반적”: 소스 언어와 분석가능한 성질이 무제한 • C, C++, C#, Java, ML, UML, JVM, x86, bits, etc. • buffer overrun? memory leak? x=y at line 2? notNull(x) whenever y.s=0?
테스트와 다른점 • 테스트는 SW 를 실행시킬 수 있을 때 까지 기다려야 • 테스트는 찾고자 하는 오류를 모두 찾을 수 없음 • 프로그램 분석기(static program analyzer)는 • SW를 실행시키지 않고 타겟 오류의 위치를 자동으로 찾아줌 • SW의 소스만 준비되면 됨
정적분석이론 • 대상 언어 L • 디자인 • 분석기: L_PGM --> 분석결과 • 모든 L 프로그램 pgm에 대해서 모든실행성질(pgm) < 분석기(pgm) • 구현 • 많은 엔지니어링: cost-accuracy tradeoff, scalability • ropas.snu.ac.kr/~kwang/4541.664A/07
자동증명기술 SW오류 검증 기술의 진화 정적분석기술 효용 및 성숙도 coverity.com polyspace.com Sparrow 1.0 테스트기술 1980s 2000s 2010s 1990s
Sparrow 1.0 • 이론: Semantic-based Static Analysis • 타겟 소스언어 • C, C++ • ANSI, GNU, MS, ARM, etc. • 타겟 오류 • buffer overrun • memory leak • uninitialized access
Other Players • coverity.com • Stanford U., 미국시장에서 활발, ’05 국내 진출 • polyspace.com • Ecole Polytech., 유럽시장에서 활발, ’06 국내 진출 • grammatech.com • U. of Wisconsin-Madison, 미국정부시장, ’07 국내 진출 • 기타 (분석기술 미흡: “shallow” analysis) • fortify, klocwork, secure, seque, wily • 기존의 runtime tools • 상용 • PurifyPlus, Parasoft Insure++, Trace32, WinDBG, … • 공개SW • Valgrind …
BMT Results (by S company) • S사 내부 소스코드 오류분석의 BMT결과 • 총 약 200만 라인 C코드 분석 • Sparrow만 찾을 수 있는 오류 다수 존재 Prevent Sparrow 6 11 19 7 2 3 11 K7 찾은 실제 오류의 수
BMT Results (by D company) • 약 70만 라인 상용 OS source (Linux-base) buffer overrun memory leak 75 81 69 22 24 25 CodeSonar Sparrow CodeSonar Sparrow
자동증명기술 SW오류 검증 기술의 진화 정적분석기술 효용 및 성숙도 coverity.com polyspace.com Sparrow 1.0 테스트기술 1980s 2000s 2010s 1990s