1. Program Verification
프로그램 검증
Software Engineering Laboratory
Department of Computer Science &
Engineering
ERICA Campus, Hanyang University
HyungLak Kim
1
2. Contents
• 검증 (Verification) 과 테스트 (Test) 의 차이
• 정형기법 (Formal Method)
• 정형명세 (Formal Specification)
• 정형검증 (Formal Verification)
• 모델검증 (Model Checking)
• 정형명세 기반 모델 검증 도구 (Formal Specification based
MCT)
• 코드 기반 모델 검증 도구 (Code based MCT)
2
8. Formal Method
• 정형검증 (Formal Verification)
• 정의
• 정 형 명 세 에 서 사 용 된 증 명 방 법 ( 정 형 논 리 ,
수리 논리 ) 를 사용
• 무 모순성 및 완전성을 검증
• 요구사항을 만족하는지 검증
• 종류
• 정형명세 (Formal Specification)
8
9. Formal Method
• 정형검증 (Formal Verification)
• 의미론적 증명 (Semantic)
• 시스템 모델이 특정 속성을 만족하는 상태를 추
적
• 오토마타 기반의 명세 대상
• 자동화가 가능
• 구문적 증명 (Syntactic)
• 시스템 모델이 특정 속성을 만족하는 구문적 규
칙을 적용해 증명
• 논리 기반의 명세를 대상
• Step by Step 증명 9
10. Formal Method
• 정형검증 도구 (Foraml verification Tool)
• Z/EVES
• EVES 와 ZF set 이론 기반
• 정형명세 종류중 수리 논리 기반인 Z 명세
를 검증
10
12. Formal Method
• 정형명세 (Formal Specification)
• 정의 :
• 정형 논리 또는 수리 논리에서 사용되는 기호
등을 이용
• 시스템이 동작할 환경에 대한 가정
• 시스템이 만족해야 할 요구사항
• 분류
• 수리 , 논리 기반
• 대수 (Algebra) 기반
• 오토마타 기반
12
13. Formal Method
• 정형명세 (Formal Specification)
• 수리 , 논리에 기반하여 시스템을 명세
• 시스템 상태를 나타내는 변수의 타입을 명
세하기 용이
• Funtion 의 전후 상태를 명세
• Ex) Z notation, B method, Event-B, Galina
• 논리언어 종류
– First-Order Logic
– Propositional Logic
– Temporal Logic
13
14. Formal Method
• 정형명세 (Formal Specification)
• 대수 (Algebra) 에 기반하여 시스템을 명세
• Algebra
– 일련의 공리들을 만족하는 수학적 구조들의 인
반적인 성질을 연구하는 수학의 한분야
• 병렬성과 동시성을 설명하기 용이
• Ex) Pi-caculus, CSP, ACSR
14
15. Formal Method
• 정형명세 (Formal Specification)
• 시각적 명세 언어에 기반하여 시스템을 명
세하는 오토마타 기반의 정형명세
• State 와 Transition 으로 시스템의 행위를
묘사
• Target 시스템의 행위를 표현하기 용이
• ex) FSM, Statechart, SCADE
15
22. Model Checking
• 정형명세 기반 모델 검증 도구
• 종류
• SPIN, SMV, UPPAAL, PRISM
• SPIN[3]
• 분산 시스템 디자인에서 논리적인 디자인 오류
를 추적하기 위해 널리 사용되는 모델검증 도구
• 모델 검증 알고리즘
– DFS, BFS 기반
– 완전한 증명 , 부분적 증명 가능
• 사례
– OSEK/VDX 검증 , Intel 트랜잭션 메모리 설계 검증
• 모델링 언어로 Promela 사용
22
23. Model Checking
• 정형명세 기반 모델 검증 도구
• Promela
• 비 결정적 오토마타를 통해 비동기적 분산 알고
리즘 설계 지원
• 동시성 프로세스의 동적 생성을 허용
• 메시지 채널을 이용한 메세지의 동기적 / 비동기
적 통신 모델링이 가능
• C 언어와 유사
23
28. Model Checking
• 코드 기반 모델 검증 도구
• 종류
• CBMC, JPF, SLAM project
• JPF(Java PathFinder)[4]
• 실행 가능한 자바 바이트 코드 프로그램 검증
• 다수의 스레드로 구성된 프로그램의 교착상태 검증
• JPF core 에 의한 Code 자동 모델링
• Explicit state, Symbolic Excution 지원
28
33. Related Research
• 관련 연구
• 최근 모델 검증은 자동차 분야와 소프트웨
시스템을 검증
• 특히 JPF, SPIN 을 사용한 검증 연구가 많
이 진행 [5]
• 현재는 머신러닝을 활용한 검증으로 점차
그 연구범위가 확대 [6]
• 인공신경망을 이용해 머신러닝의 성능이
향상
• 94% 까지 검증가능
33
34. Reference
[1]https://en.wikipedia.org/wiki/2009%E2%80%9311_Toyota_vehicle_recall
s
[2]Stecklein, Jonette M., et al. “Error cost escalation through the project life
cycle,” http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/
[3]SPIN: http://spinroot.com/spin/whatispin.html
[4]JPF:
http://babelfish.arc.nasa.gov/trac/jpf/wiki/intro/testing_vs_model_checking
[5] Kamali, Maryam, et al. "Formal Verification of Autonomous Vehicle
Platooning." arXiv preprint arXiv:1602.01718 (2016).
[6] Shim, S., Cai, S., Yang, J., Yang, S., Choi, B., & Shin, Y. (2015, March).
Verification of directed self-assembly (DSA) guide patterns through
machine learning. In SPIE Advanced Lithography (pp. 94231E-94231E).
International Society for Optics and Photonics.
34
#5:넥서스 급발진 리콜 사태- 브레이크 제어 소프트웨어 결함 - 40조
Ariane 5 – floating 계산 잘못 손실 - 200조
#6:아까전에 말씀들인 정형명세에서 사용된 증명방법을 사용해서 검증 한다고 했는데
정형명세가 무엇인지, 그리고 정형검증의 한 부분인 정리 증명이 먼지 알아보죠
#7:수학이나 논리 기반의 명세와 설계 기술을 사용해서 시스템을 개발하는 기법
2가지 종류가 있다.
수학적, 논리 적 기반을 사용하는 장점
애매성, 모호성이 제거
군더더기 정보와 구현 종속적인 정보를 초기에 제거
제시된 명제에 관한 증명이 가능하다.
2x-1 = y -> 직선
정형 검증와 모델검증
#8:아까전에 말씀들인 정형명세에서 사용된 증명방법을 사용해서 검증 한다고 했는데
정형명세가 무엇인지, 그리고 정형검증의 한 부분인 정리 증명이 먼지 알아보죠
#10:사람이 직접 step-by-step으로 증명해야 하며, 이 과정 중 도구의 도움을 받을 수 있다
#12:아까전에 말씀들인 정형명세에서 사용된 증명방법을 사용해서 검증 한다고 했는데
정형명세가 무엇인지, 그리고 정형검증의 한 부분인 정리 증명이 먼지 알아보죠
#15:Algebra = 대수학: 선형대수학, 추상대수학, 대수기하학
공리 : 어떤 이론체계에서 가장 기초적인 근거가 되는 명제
파이-카큘러스는 네트워크의 채널 통신의 concurrent computation 할 떄 사용
#16:유한 상태 머신이라고 하죠. Statechart –(FSM+ 계층), UPPAAL(FSM+시간), SCADE(원자력, 자동차 분야에서 사용)
#17:아까전에 말씀들인 정형명세에서 사용된 증명방법을 사용해서 검증 한다고 했는데
정형명세가 무엇인지, 그리고 정형검증의 한 부분인 정리 증명이 먼지 알아보죠
#19:정형 언어로 명세된 모델과 검증하고자 하는 검증 특성을 입력 받아 기능적 특성과 안전성 요구사항을 만족하는지 증명
그래서 모델 체킹을 하면 어떤 장점이 있을까?
#20:요구 명세, 소프트웨어 디자인 단계에서 핵심적인 시스템 논리에
오류가 발생한다면 테스팅 과정에서 파악하기 힘들다
#21:모델검증 기법은 요구사항 및 시스템 명세를 실행가능한 정형적인 모델로 표현하여
코드의 구현없이 시스템의 핵심적인 기능에 논리적인 문제점이 없는지를
미리 파악 할 수 있기 때문에 오류의 조기 발견에 효과적인 기법이다.
#23:깊이 우선 탐색, 너비 우선 탐색
OSEK/VDX : 명세의 구현 사례의 안전성 검증, 네트워크 상호 인증 프로토콜, 우주,
OSEK/VDX : 차량용 분산 제어 장치의 공개 아키텍처에 대한 산업 표준화 –프랑스, 독일
통신, 운영체제, 네트워크관리
#25:SPIN에서 검증하고자 하는 특성은 선형 시간 시제 논리(Linear Temporal Logic)으로 표현되고 -> 이는 BÜCHI 오토마타로 자동 변현되어 시스템 모델과 함께 모델검증 알고리즘으로 검증 된다
선형시제 논리 (LTL): 어떤 모델의 시간 흐름을 논리적으로 표현할 수 있게끔 나타낸것
#26:처음은 init 프로세스에서 하며 1명의 점원 프로세스와 2명의 고객 프로세스를 실행한다. -> 총 프로세스 4개 프로세스는 임이의 순서대로 실행될 수 있으며, SPIN에서 모든 상황들을 실행 할 수 있다.
고객 프로세스에서는 if구문과 3개의 skip구문 3개의 구문은 무작위 선택을 하기 위함이다.
결과적으로 고객은 상품을 1, 2, 3중에 하나를 주문하고 종료된다. 점원 프로세는 do 무한 루프내에서 g_oderChannel로 들어오는 주문량을 확인해 재고 수량 g_stock에서 빼는 처리를 반복 수행한다.
여기서 검증하고자 하는 것이 재고 수량이 5일 때 두명의 고객을 주문하여 재고가 부족한 경우가 발생할 수 있는지 검증
LTL식 p0로 나타냈다. LTL식 p0는 재고 수량이 항상 0이상인지 된다는 것으로 조건을 만족하지 못하는 경우가 있으면 검증은 실패한단. 두 고객이 상품을 3개씩 주문할 경우
#29:자바 바이트 코드로 프로그램 검증 하는 도구
다수의 스레드로 구성된 프로그램의 교착 상태를 검증
#30:여기서 처음 어플리케이션 단에서 .class파일을 바이트코드로 변환 하고, JPF core 에서는 .jpf 의 작성된 target프로그램과 option을 보고 실행될 바이트 코드에 무엇을 검증할지, 어떤 방식으로 검증할지, 검증할 때 쓰는 방법은 무엇인지 등의 정의된 클레스들의 메소드를 연결하여 저장하고, SMT Solver를 활용해 검증 한다.
SMT Solver : 이론들이 추가된 일차 논리의 만족성 여부를 판단한다.
#31:메인 쓰레드가 생성되고, t라는 쓰레드가 실행되겠죠
그리고 t 쓰레드는 doSomething 함수를 호출하는데, 이 메소는 호출한 쓰레드를 Sleep시키는 문입니다.
그리고 바로 메인 쓰레드에서 doSomething()을 한번더 호출하죠?
그럼 변수 C를 420에 race 클레스의 d변수를 나누는데 0또는 42겠죠,
0으로 나누면 exception이 발생할 것이고, 42로 나누면 10이겠죠, 하지만 우리는 이상황을 예측 못합니다.
#32:그래서 이 코드를 검증하고자 한다면 위와 같이 .jpf파일을 만들어서 target을 지정하고
검증하고자하는 특성과 출력하고자 하는 것을 세팅하고 JPF를 실행합니다.