프로그램 분석의 구현.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

6.1 사용사례 6.2 객체 모델링 6.3 동적 모델링 6.4 시스템 설계 6.5 객체 설계 6.6 디자인 패턴
1. 기관별 맞춤형 집중교육 : 실습 및 개인별 집중지도    1. 기관별 맞춤형 집중교육 : 실습 및 개인별 집중지도 (상설) 기관별 맞춤형 교육 - 당 교육기관에서.
어서와 Java는 처음이지! 제3장선택과 반복.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
객체지향 프로그래밍.
7장 배열 ②.
알기 쉽게 해설한 Java 8th edition
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
Java RMI (Remote Method Invocation)
Java RMI (Remote Method Invocation)
Power Java 제4장 자바 프로그래밍 기초.
객체 지향 원리 송치형.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Power Java 제10장 배열.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
화면(UI) 기반 도메인모델 작성 2014년 8월.
AOP 개념 및 Spring의 AOP 기능.
명품 Java Programming.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
XML DOM (Document Object Model)
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
2010학년도 2학기 객체지향의 이해.
5장 조건과 반복 ①.
김 정 석 Web Programming 김 정 석
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
제1장 서론.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Lecture 01: Compiler Overview
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
[CPA340] Algorithms and Practice Youn-Hee Han
[INA470] Java Programming Youn-Hee Han
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
Spring DI 이해 및 활용.
자바 5.0 프로그래밍.
5장 조건과 반복 ①.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
4. 어휘 분석(Lexical analysis)
Barat을 이용한 Code Transformation
Signature, Strong Typing
Signature, Strong Typing
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
Signature, Strong Typing
Java RMI (Remote Method Invocation)
6장 클래스(상속).
Java 5장. 객체지향 개념 public class SumTest {
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
자바 가상 머신 프로그래밍 Chapter 3. 메소드 작성하기 Pslab 오민경.
Presentation transcript:

프로그램 분석의 구현

정적 분석 구현을 위한 도구 Java를 위한 정적 분석 틀(framework) 프로그램 분석기 생성기 Vortex Barat BANE set-constraint analyzer generator Z/Z1/Z2 Abstract interpreter generator

Barat Java 언어를 위한 전단부(front-end) 설치 Java 프로그램의 정적 분석기 구현을 지원 소스 코드 및 실행 화일 이용 가능 http://sourceforge.net/projects/barat

Barat 역할 Abstract Syntax Tree(AST) 구성 이름 분석 및 타입 분석 AST 횡단(traversal)

AST 구성 자동 AST 구성 패키지 barat.Barat Barat의 진입점 메소드 getClass()와 getInterface()는 해당 AST node를 반환한다.

예제 public class FirstExample { public static void main(String[] args) { barat.reflect.Class c = barat.Barat.getClass(args[0]); System.out.println("accessible fields of class "+ c.getName()); for(barat.collections.FieldIterator i=c.getFields().iterator(); i.hasNext();) { barat.reflect.Field f = i.next(); if(!f.isPrivate()) System.out.println("\t" + f.getType() + " "+ f.getName()); }

관련 패키지 패키지 barat.reflect 패키지 barat.collections AST의 노드 타입들을 포함하고 있다 Class, Interface, AbstractMethod, Field, Parameter, Block, ObjectAllocation 등 패키지 barat.collections AST 노드 타입 객체들을 위한 iterator들을 포함한다.

AST 노드 Type nodes Structural nodes Expression nodes Statement nodes 타입(Primitive or Reference Type)을 위한 노드 Structural nodes 사용자-정의 타입(클래스 혹은 인터페이스)의 내부 구조를 위한 노드 Expression nodes 식을 위한 노드 Statement nodes 문장을 위한 노드

interface Node public interface Node { // container and containment aspect for this node public Object container(); public String aspect(); // helper methods for traversing the container chain public Object containing(java.lang.Class ofClass); public barat.reflect.Class containingClass(); public barat.reflect.AUserType containingUserType(); public barat.reflect.AMethod containingMethod() public int line_number(); // line number for a node: public boolean hasTag(String t); // access to tags (/*:special*/ comments): public barat.collections.StringList getTags(); public void accept (Visitor v); // method that calls back a visitor object: // defining attributes and retrieving attribute values: public void addAttribute(Object key, AbstractAttribute a); public Object attributeValue(Object key); }

Type nodes

Structural nodes

Expression nodes

Statement Nodes

Name Analysis 사용된 이름의 해당 선언을 찾아 준다. 식에서 필드 이름 사용 extends에서 클래스 이름 사용 레이블 이름

Type Analysis 각 Aexression의 타입을 자동 분석 타입 분석 결과 모든 Aexpression에 대해서 메소드 type()을 호출한다.

Java 프로그램의 AST 얻기 barat.reflect.Class c = barat.Barat.getClass("java.lang.Object");

AST 순회 Visitor 패턴을 기반으로 한 AST 순회 AST 노드와 방문 코드의 분리

Visitor 패턴 Visitor는 각 노드 A에 대해서 visitA(A o)를 구현 각 노드는 accept (Visitor v) 포함

Visitor 패턴 B C Barat.reflect class A { void accept(Visitor v) { AST 노드 예> Barat.reflect class A { void accept(Visitor v) { v.visitA(this); } class B { v.visitB(this); class C { v.visitC(this); Visitor AVisitor { visitA(A x) { (x의 Child)B.accept(this); (x의 Child)C.accept(this); } visitB(B x) { … visitC(C x) { ... ① ② ③ ④

Barat이 제공하는 Visitor DescendingVisitor OutputVisitor DefaultVisitor Depth-first visitor OutputVisitor Depth-first visit Output source code DefaultVisitor 모든 visit 메소드를 빈 메소드로 구현 일부 AST 노드만을 방문할 때 유용

DescendingVisitor 예: visitClass( ) public void visitClass (Class o) { for (ConstructorIterator i=o.getConstructors().iterator();i.hasNext();) { i.next().accept (this); } for (FieldIterator i = o.getFields().iterator(); i.hasNext();) { for(ConcreteMethodIteratori=o.getConcreteMethods().iterator();i.hasNext();) {

Visitor 만들기 방문 노드 XXX에서 하고자 하는 일을 visitXXX()에서 재정의한다. 예: java.lang.System.out 접근 빈도 조사 public class MyVisitor extends barat.DescendingVisitor { public int result = 0; public void visitStaticFieldAccess (StaticFieldAccess o) { Field f = o.getField(); if (f.qualifiedName().equals ("java.lang.System.out")) result++; super.visitStaticFieldAccess (o); }

Visitor 사용 barat.reflect.Class c = barat.Barat.getClass("example.MyClass"); MyVisitor v = new MyVisitor(); c.accept (v); System.out.println ("Result: " + v.result);

Attribute 사용 각 노드에 데이터 저장 및 검색 가능 Attribute 객체 저장 n.addAttribute(k, a) where k is a key attributeValue(k) Attribute 객체 저장 두 종류의 Attribute 객체 제공 ConstantAttribute CachedAttribute

ConstantAttribute 객체 o를 저장 저장된 객체 o를 반환 n.addAttribute(k, new ConstantAttribute(o)); 저장된 객체 o를 반환 n.attributeValue(k);

CachedAttribute calculate() 메소드에 의해 계산된 값을 저장 계산된 값이 있으면 사용하고 없으면 값 계산 c.addAttribute(key, new CachedAttribute() { protected Object calculate() { … return result; } )

Barat 이용 사례 1 정적 분석 2 단계로 구성 예외 분석(Uncaught exception analysis) 각 메쏘드의 처리되지 않는 예외들을 분석한다. 2 단계로 구성 집합 관계식(set-constraint) 구성 예외 관련 노드들에 대해서 집합 관계식 해답 구하기(solving) Repeat-until no change

Barat 이용 사례 2 프로그램 변환을 이용한 실행 정보 제공 event 발생 및 처리 과정 추적 exception 발생 및 처리 과정 추적 thread 생성 및 진행 과정 추적

프로그램 변환 + Barat Java Program P Java Program P’ AST Java Program P’ Transformer Java Program P Java Program P’ AST Java Program P’ Input Output + Trace정보 Profile정보 실행 정보

예외 발생 및 처리

숙제 #3 Java 프로그램의 각 클래스에 대해서 다음을 프린트한다. 클래스 이름 필드 변수 생성자 헤더 메소드 헤더 부모 클래스 구현한 인터페이스들의 집합