Barat을 이용한 Code Transformation

Slides:



Advertisements
Similar presentations
All Rights Reserved, Copyright© UBIVELOX co.,Ltd LG U+ 과금 API 소개 Version1.0 Authorubivelox Date21-Feb
Advertisements

자바 5.0 프로그래밍.
6.1 사용사례 6.2 객체 모델링 6.3 동적 모델링 6.4 시스템 설계 6.5 객체 설계 6.6 디자인 패턴
1. 기관별 맞춤형 집중교육 : 실습 및 개인별 집중지도    1. 기관별 맞춤형 집중교육 : 실습 및 개인별 집중지도 (상설) 기관별 맞춤형 교육 - 당 교육기관에서.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
Programming for the java Virtual machine
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
명품 JAVA Essential.
12장. JSP에서 자바빈 활용 제12장.
J2ME(Java 2 Micro Edition) 무선 장치용 UI의 핵심 컴포넌트
제 12장 예외 처리 12.1 설계 쟁점 12.2 PL/I의 ON-조건 12.3 Ada의 예외 처리
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
Chapter 11 – 예외 처리 Outline 11.1 설계 쟁점 11.2 Pl/I의 예외 처리 11.3 Ada의 예외 처리
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
제7장 제어구조 I – 식과 문장.
[ 단원 08 ] 예외처리와 스레드.
CDC Connected Device Configuration CLDC보다 많은 리소스를 가진 시스템을 대상으로 설정
Sookmyung Women’s Univ. PSLAB Moon, Se won
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
Java RMI (Remote Method Invocation)
Power Java 제4장 자바 프로그래밍 기초.
객체 지향 원리 송치형.
소프트웨어공학 UML 학기.
10장 객체-지향 프로그래밍 II ©창병모.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
Power Java 제15장 예외 처리 (Exception Handling).
이벤트 프로그래밍 안혜선.
AOP 개념 및 Spring의 AOP 기능.
10장 예외 (Exceptions).
소프트웨어설계 UML 학기.
명품 JAVA Essential.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Visual C++ Programming
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
프로그램 분석의 구현.
Visual Basic 기초 1 목표: 컴퓨터기반제어에 관련된 학습을 하기 전에 Visual Basic의 기초를 살펴본다.
Network Programming(1)
자바 5.0 프로그래밍.
제1장 서론.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
객체 지향 프로그래밍.
Sookmyung Women’s Univ. PSLAB Ohe, heejung
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
김 정 석 Web Programming 김 정 석
Chapter 7 Graphical User Interface
객체지향의 한계를 넘어, AOP 전은영,이재훈 고덕윤.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
myfood.com 상명대 맛집 홈페이지 구축 제안서
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Internet Computing KUT Youn-Hee Han
소프트웨어 형상관리: 목차 변경 및 형상관리의 기초 개념 형상항목 확인 및 버전관리 변경관리 감사 및 감사보고 99_11
Chapter 02. 소프트웨어와 자료구조.
SmartThings의 SmartApp을 위한 페이지 구조 시각화 도구
[ 단원 06 ] 상속과 다형성.
Outline 클래스의 해부 캡슐화(Encapsulation) 메쏘드의 해부 그래픽 객체(Graphical Objects)
Java RMI (Remote Method Invocation)
Analysis and Testing of Programs with Exception-Handling Constructs
창 병 모 숙명여대 전산학과 자바 언어를 위한 CFA 창 병 모 숙명여대 전산학과
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
Java 5장. 객체지향 개념 public class SumTest {
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Chapter2 : 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합개발환경(IDE)
Presentation transcript:

Barat을 이용한 Code Transformation Sookmyung Women’s Univ. PSLAB

1. Barat

1.1 Barat에 대하여 Java언어를 위한 전단부 (front-end) Barat의 역할 AST를 구성 이름 분석 및 타입 분석 AST 횡단 (traversal) Visitor 제공 이름 분석 타입 분석 Java Barat AST

1.2 이름 분석 및 타입 분석 이름 분석 타입 분석 사용된 이름의 해당 선언을 찾아 준다. 식에서 필드 이름 사용 extends에서 클래스 이름 사용 레이블 이름 타입 분석 각 Aexression의 타입을 자동 분석 타입분석결과 모든Aexpression에 대해서 메소드type()을 호출한다.

1.3 AST 횡단 (traversal) Visitor 패턴을 기반으로 한 AST 횡단 AST 노드와 방문 코드의 분리 Barat이 제공하는 Visitor DescendingVisitor Depth-first visitor OutputVisitor Depth-first visit Output source code DefaultVisitor 모든visit 메소드를 빈 메소드로 구현 일부AST 노드만을 방문할 때 유용

1.4 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 ClassVisitor { visitA(A x) { (x의 Child)B.accept(this); (x의 Child)C.accept(this); } visitB(B x) { … visitC(C x) { ... ① ② ③ ④

2. Project

2.1 Project 목적 J2ME Program의 자원 사용 정보, Trace/Profile을 제공 Exception Event Object Thread

2.2 프로젝트 동기 J2ME의 이용 가능한 자원 한정 효과적인 자원 사용 중요 자원사용 최적화 자원 사용 정보 제공

2.3 프로젝트 구현 + * 프로그램 변환을 이용한 실행 정보 제공(Trace/Profile) Java Program Barat Program Transfer Java Program X AST Java Program X Input Output + Trace정보 Profile정보 실행 정보

3. Event

3.1 동기 [Motivation] Event Analysis JVM에는 Event에 대한 정보를 제공해주는 기능이 없음 현재 Event에 대한 정보를 제공해주는 tool의 부재 Event Driven Program은 Debugging이 매우 어려움 J2ME 프로그램은 모두 Event Driven Program Event Driven Program의 Event에 대한 정보를 쉽게 얻을 수가 없음

3.2 Event Analysis 실행 전 Event에 대한 정보 제공 실행 중 Event에 대한 정보 제공 Implements된 Event Listener Interface를 알려줌 사용되어질 수 있는 Event Handler를 알려줌 실행 중 Event에 대한 정보 제공 Event Trace를 보여줌 Event 발생 시점 어떠한 Object에 어떠한 Event가 발생하는지 Event 처리 과정(시작과 끝을 보여줌) 실행 후 Event에 대한 정보 제공 Event에 log를 기록 어떠한 Event가 몇 번 발생하였는지 어떤한 Object에 어떤 이벤트가 몇 번 발생하였는지

3.3 기능 [Function] 실행 정보 선택 옵션 Trace 정보 제공 Profile 정보 제공 옵션을 통하여 사용자가 원하는 정보를 선택가능 Trace 정보 제공 Event 실행 과정을 프로그래머에게 제공 Profile 정보 제공 실행 결과 Summarization Dynamic Analysis를 하여 나온 결과를 프로그래머에게 제공 실행 결과 Visualization 분석 결과를 Graphical하게 제공

3.4 구조 (Architecture] Transfer과정 TransferEventVisitor.java extend OutputVisitor { Event 정보 출력 Code generate } Source Code Transferred Code (Event에 대한 실행 정보 제공) Trance 정보 Profile 정보 사용자로부터 Option입력받음

3.4 구조2 (Architecture] Visualization Transferred Code 실행 Visualization 프로그래머 옵션 입력 받음 Trance 정보 Profile 정보 저장

TransferEventVisitor 3.5 예 [Example] Dots.java class DotsMouseListener implements MouseListener { private Dots applet; public DotsMouseListener(Dots theApplet) { applet = theApplet; } public void mouseClicked(MouseEvent event) { Point clickPoint = event.getPoint(); applet.setPoint(clickPoint); applet.repaint(); class DotsMouseListener implements java.awt.event.MouseListener { public void implementedEventMethod() { System.out.println("Implemented Event Listener Interface"); System.out.println("java.awt.event.MouseListener"); } private Dots applet; public DotsMouseListener(Dots theApplet) { super(); this.applet = theApplet; public void mouseClicked(MouseEvent event) { System.out.println("Event Handler Name: mouseClicked"); System.out.println("Event Target Component: " + event.getSource()); System.out.println("Event Handler Line: 42line"); System.out.println("Event ID: " + event.getID()); System.out.println("Event's X coordinate: " + event.getX()); System.out.println("Event's Y coordinate: " + event.getY()); System.out.println("Event's Click Total Count: " + event.getClickCount()); Point clickPoint = event.getPoint(); this.applet.setPoint(clickPoint); this.applet.repaint(); TransferEventVisitor Source Code Generate

3.6 구현 [Implement] public class TransferEventVisitor extends barat.OutputVisitor { … visitClass() { getImplementedInterfaces() //Implement된 Event Listener Interface를 filter()를 이용해 찾음 getConcreteMethods() //Event Handler를 찾음 Event Handler의 Line number를 찾음 }//visitClass visitBlock(){ filer() { // 사용 가능한 Event Handler를 찾아서 필요한 정보를 얻어냄 handler() //사용 되어지는 Handler의 Name 정보 getSource() //Event 발생시 Target Component의 정보 LineNumber //발생되어지는 Event Handler의 소스코드내의 위치 getID() //발생되어지는 Event의 Type, 및 그 Event와 관련하는 것 외의 Event 변수는 어떤것인지 나타냄 getX() //발생되어지는 Event의 x좌표 값 getY() //발생되어지는 Event의 y좌표 값 getClickCount()//MOUSE_DOWN Event의 경우, 연속한 클릭 수를 나타냄 }

4. Exception

4.1 Motivation Motivation JVM이 제공하는 Exception 정보의 부족 추가적인 정보 제공 필요 Exception 발생 위치 Exception 처리 과정 Exception 전파 과정 JVM이 제공하는 정보 부족으로 인해 Exception의 실행 정보를 분석하기 위해서는 프로그래머의 수작업 요구 수작업의 번거로움과 분석 결과의 신뢰성이 떨어진다.

4.2 Subject Subject 기존의 정적 분석 툴과는 다르게 Java 프로그램에서 발생할 수 있는 Exception에 대한 실행 정보를 동적으로 분석 Barat을 이용하여 기존의 코드 내에 exception 정보를  자동적으로 출력해줄 수 있도록 코드를 transformation해준다. Barat Transformation 해주는 Visitor 작성 변환 코드 실행을 통한 실행 정보 제공 Exception 발생 정보 Catch문을 통한 Exception처리 정보 Try문 분석을 통한 전파과정 분석 정보 Method 분석

4.3 Program Functions 실행 정보 출력 선택 옵션 제공 실행 결과 summarization 옵션 기능을 통해 사용자가 얻고자 하는 trace정보를 선택 가능하게 함 실행 결과 summarization Dynamic Analysis를 통한 profile 제공 실행 결과 Visualization 분석 결과를 graphical하게 보여준다. 기타 실행 후 분석 정보를 통한 코드의 변환

4.4 Architecture CodeTransformation.java 실행 저장된 정보 분석 및 visualization 변환된 소스코드 public class MyVisitor extends barat.OutputVisitor{ // 옵션 처리 } 원래의 소스코드 + Trace 정보 Profile 정보 실행 정보 저장 메소드 구현 원래의 소스코드 Option 정보 //Exception 실행정보 분석 코드 실행 저장된 정보 분석 및 visualization

4.5 code translation의 예 Transfer Program Public void aaa(){ Throw문을 통한 Exception 발생 정보 Public void aaa(){ System.out.println(“Exception raised at line number : 2”) System.out.println(“Exception type : myException”) Throw new myException(); } System.out.println(“try line number : 5”) System.out.println(“call method : aaa()”) Try{ aaaa(); } catch(myException a){ System.out.println(“catch line number : 7”) System.out.println(“catch type : a.printStackTrace(); : Public void aaa(){ Throw new myException(); } Try{ aaa(); } catch(myException a){ : Transfer Program try문을 통한 Exception 전파 정보 catch문을 통한 Exception 처리 정보

4.6 Implementation Exception 정보분석 방법 Barat-1.6.1을 이용하여 Exception Analysis Barat이 제공해주는 Throw.class, Try.class, Catch.class를 통해서 Exception 정보 분석 Throw.class : throw문이 발생된 위치와 타입 정보 제공 Try.class : try문의 위치와 try 내의 메소드 호출 정보 Catch.class : catch 되는 exception의 타입 정보 제공 line_number(); J2SE 제공 메소드 printStackTrace(); getClass()

4.6 Implementation(cont..) Class CodeTransformation extends OutputVisitor{ visitThrow{ // Exception 발생 위치, 발생 Exception타입 정보 } visitTry{ // Try문 내의 Exception발생 메소드의 위치, 메소드 이름 visitCatch{ // Exception 처리 위치, 처리한 Exception의 type 처리된 Exception 오브젝트를 통한 printStackTrace()호출 visitConcreteMethod{ //Exception을 발생시킨 메소드의 전파과정 분석 // return propagation