01(567-574) SAV13-05.hwp



Similar documents
1. 서 론

회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제

04 Çмú_±â¼ú±â»ç

JVM 메모리구조

학습영역의 Taxonomy에 기초한 CD-ROM Title의 효과분석

45-51 ¹Ú¼ø¸¸

<30382E20B1C7BCF8C0E720C6EDC1FD5FC3D6C1BEBABB2E687770>

09권오설_ok.hwp

01( ) SAV12-04.hwp

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE. vol. 29, no. 10, Oct ,,. 0.5 %.., cm mm FR4 (ε r =4.4)

- 2 -

À±½Â¿í Ãâ·Â

<31362DB1E8C7FDBFF82DC0FABFB9BBEA20B5B6B8B3BFB5C8ADC0C720B1B8C0FC20B8B6C4C9C6C32E687770>

<31325FB1E8B0E6BCBA2E687770>


q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

....pdf..

<353420B1C7B9CCB6F52DC1F5B0ADC7F6BDC7C0BB20C0CCBFEBC7D120BEC6B5BFB1B3C0B0C7C1B7CEB1D7B7A52E687770>

exp

High Resolution Disparity Map Generation Using TOF Depth Camera In this paper, we propose a high-resolution disparity map generation method using a lo

untitled

05( ) CPLV12-04.hwp

878 Yu Kim, Dongjae Kim 지막 용량수준까지도 멈춤 규칙이 만족되지 않아 시행이 종료되지 않는 경우에는 MTD의 추정이 불가 능하다는 단점이 있다. 최근 이 SM방법의 단점을 보완하기 위해 O Quigley 등 (1990)이 제안한 CRM(Continu

춤추는시민을기록하다_최종본 웹용

gnu-lee-oop-kor-lec06-3-chap7

???? 1

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Mar.; 28(3),

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

디지털포렌식학회 논문양식

DBPIA-NURIMEDIA

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Nov.; 26(11),

결과보고서

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

슬라이드 1

<333820B1E8C8AFBFEB2D5A B8A620C0CCBFEBC7D120BDC7BFDC20C0A7C4A1C3DFC1A42E687770>

09È«¼®¿µ 5~152s

歯1.PDF

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

안 산 시 보 차 례 훈 령 안산시 훈령 제 485 호 [안산시 구 사무 전결처리 규정 일부개정 규정] 안산시 훈령 제 486 호 [안산시 동 주민센터 전결사항 규정 일부개정 규

<B1DDC0B6B1E2B0FCB0FAC0CEC5CDB3DDB0B3C0CEC1A4BAB82E687770>

Journal of Educational Innovation Research 2017, Vol. 27, No. 3, pp DOI: (NCS) Method of Con

ÀÛ¾÷

원고스타일 정의

DBPIA-NURIMEDIA

3. 클라우드 컴퓨팅 상호 운용성 기반의 서비스 평가 방법론 개발.hwp

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

I

Drucker Innovation_CEO과정

¾Æµ¿ÇÐ´ë º»¹®.hwp

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Jun.; 27(6),


JAVA PROGRAMMING 실습 08.다형성

03-서연옥.hwp

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Dec.; 27(12),

인문사회과학기술융합학회

Design Issues

6.24-9년 6월

DBPIA-NURIMEDIA

04_이근원_21~27.hwp

07.045~051(D04_신상욱).fm

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Mar.; 25(3),

04-다시_고속철도61~80p

[Brochure] KOR_TunA

슬라이드 1

<C7D1B1B9B1B3C0B0B0B3B9DFBFF85FC7D1B1B9B1B3C0B05F3430B1C733C8A35FC5EBC7D5BABB28C3D6C1BE292DC7A5C1F6C6F7C7D42E687770>

¨ë Áö¸®ÇÐȸÁö-¼Û°æ¾ðOK

Journal of Educational Innovation Research 2017, Vol. 27, No. 2, pp DOI: : Researc

정보기술응용학회 발표

°í¼®ÁÖ Ãâ·Â

<313920C0CCB1E2BFF82E687770>

<35335FBCDBC7D1C1A42DB8E2B8AEBDBAC5CDC0C720C0FCB1E2C0FB20C6AFBCBA20BAD0BCAE2E687770>

ISO17025.PDF

DBPIA-NURIMEDIA

금오공대 컴퓨터공학전공 강의자료

<C1A4BAB8B9FDC7D031362D335F E687770>

1

유니티 변수-함수.key

27 2, 17-31, , * ** ***,. K 1 2 2,.,,,.,.,.,,.,. :,,, : 2009/08/19 : 2009/09/09 : 2009/09/30 * 2007 ** *** ( :

< FC1A4BAB8B9FDC7D D325FC3D6C1BEBABB2E687770>

제11장 프로세스와 쓰레드

DBPIA-NURIMEDIA

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

<3136C1FD31C8A35FC3D6BCBAC8A3BFDC5F706466BAAFC8AFBFE4C3BB2E687770>

Journal of Life Science 2011, Vol. 21. No μ μ

[ReadyToCameral]RUF¹öÆÛ(CSTA02-29).hwp

8-VSB (Vestigial Sideband Modulation)., (Carrier Phase Offset, CPO) (Timing Frequency Offset),. VSB, 8-PAM(pulse amplitude modulation,, ) DC 1.25V, [2

1. KT 올레스퀘어 미디어파사드 콘텐츠 개발.hwp

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상


THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE. vol. 29, no. 6, Jun Rate). STAP(Space-Time Adaptive Processing)., -

Red Dot Award: Communication Design 에 참 하기 결정해 주셔서 기쁩니다. "성공을 위한 안내서"는 등 절 에 대해 안내 니다. 지체 말고 언 든지 연 해 주 오. Red Dot 은 등 절 또는 등 후 절 를 기꺼 와드 겠습니다. 01 Int

63-69±è´ë¿µ

Journal of Educational Innovation Research 2017, Vol. 27, No. 1, pp DOI: * The

C# Programming Guide - Types

Journal of Educational Innovation Research 2018, Vol. 28, No. 1, pp DOI: A study on Characte

???? 1

06_ÀÌÀçÈÆ¿Ü0926

레이아웃 1

(JBE Vol. 21, No. 1, January 2016) (Regular Paper) 21 1, (JBE Vol. 21, No. 1, January 2016) ISSN 228

<B8F1C2F72E687770>

Transcription:

성능기반 리팩토링 기법 연구: 무브 메소드 영역 추출 및 식별 567 성능기반 리팩토링 기법 연구: 무브 메소드 영역 추출 및 식별 (Performance-based Refactoring: Identifying & Extracting Move-method Region) 권 예 진 이 준 하 박 용 범 (Yejin Kwon) (Zuna Lee) (Youngbom Park) 요 약 소프트웨어가 복잡해지고 대형화됨에 따라 다양한 소프트웨어 구조개선 방법이 연구되고 있으 며, 특히 객체지향 시스템에서의 복잡도를 낮추고 가독성, 구조, 성능, 유지보수, 추상성 등을 향상시킬 수 있는 리팩토링(Refactoring) 기법이 활용되고 있다. 리팩토링은 객체지향 방법론에서 사용되는 높은 응집 도와 낮은 결합도 원칙에 따라 기존의 소프트웨어를 결과에 변화 없이 구조 개선을 제시하였다. 본 연구 에서는 자바의 GC(Gabage Collection)를 중심으로 메모리관리에 따른 성능향상 방법을 제시하고, 각 객체 와 메모리 관계를 주요 팩터로 하여 무브메소드를 선정하고 리팩토링을 시도하는 방법을 제안한다. 키워드: 리팩토링, 무브 메소드, 결합도. 성능 Abstract As software is getting more complicated and bigger, a variety of studies to improve software structure has been studied, which can reduce complexity of object-oriented systems and improve readability, structure, performance, maintenance, abstractness. Refactoring can be one of the those studies and has been widely used. Refactoring is a disciplined technique for restructuring an existing body of code without changing its external behavior which follows the high cohesion, low coupling principle in OOP. In this paper, it is proposed to improve performance by enhance memory usage based on Java garbage collector. And refactoring technique which identify move method region and extracting it, is demonstrated. Keywords: refactoring, move method, coupling, performance 1. 서 론 이 논문은 2013 한국소프트웨어공학학술대회에서 리팩토링을 위한 성능 기반의 무브 메소드 영역 추출 및 분석 연구 의 제목으로 발표된 논문을 확장한 것임 비 회 원 : 단국대학교 전자계산학과 kwon6838@dankook.ac.kr 비 회 원 : 서강대학교 컴퓨터공학과 zuna.lee@gmail.com 종신회원 : 단국대학교 전자계산학과 교수 ybpark@dankook.ac.kr (Corresponding author임) 논문접수 : 2013년 3월 6일 심사완료 : 2013년 7월 18일 CopyrightC2013 한국정보과학회ː개인 목적이나 교육 목적인 경우, 이 저작 물의 전체 또는 일부에 대한 복사본 혹은 디지털 사본의 제작을 허가합니다. 이 때, 사본은 상업적 수단으로 사용할 수 없으며 첫 페이지에 본 문구와 출처 를 반드시 명시해야 합니다. 이 외의 목적으로 복제, 배포, 출판, 전송 등 모든 유형의 사용행위를 하는 경우에 대하여는 사전에 허가를 얻고 비용을 지불해야 합니다. 정보과학회논문지: 소프트웨어 및 응용 제40권 제10호(2013.10) 소프트웨어가 복잡해지고 대형화됨에 따라 다양한 소 프트웨어 구조 개선 방법이 연구되고 있으며, 특히 객체 지향 시스템에서의 복잡도를 낮추고 가독성, 구조, 성능, 유지보수, 추상성 등을 향상시킬 수 있는 리팩토링 (Refactoring)[1]이 널리 사용되고 있다. 리팩토링은 결 과의 변경 없이 코드의 구조를 재조정하여 가독성을 높 이고 유지보수를 편하게 하는 기법으로, 1990년대 초반 부터 연구되기 시작하였으며 소프트웨어의 주요한 개발 분야로서 그 연구범위를 확대시키고 있다[2,3]. 리팩토링은 객체지향 방법론에서 사용되는 높은 응집 도와 낮은 결합도 원칙("High Cohesion, Low Coupling principle", Larry Constantine, Edword Yourdon, 1970)에 따라 기존의 소프트웨어를 개선하고 보수하는 것을 목표로 삼고 있다. 지금까지 리팩토링 연구는 주로 객체들의 구성 요소들을 정의하고 구성요소들 사이의

568 정보과학회논문지 : 소프트웨어 및 응용 제 40 권 제 10 호(2013.10) 응집도와 결합도, 복잡도를 측정할 수 있는 메트릭을 이 용하여 후보영역을 탐색하고 자동으로 리팩토링을 할 수 있는 방법으로 진행되어 왔다[4,5]. 또한 마틴 파울러 가 정의한 코드의 나쁜 냄새를 디자인 패턴으로 재구성 해 필요한 후보 영역을 재정의 하거나[6], 각 객체들 사 이의 유사성과 거리를 동시에 측정하여 리팩토링을 하 는 기법[7]을 제시하는 등 다양한 시도를 거듭해왔다. 리팩토링에는 다양한 기법들이 연구되어 왔다. 본 연구 에서는 현재 가장 많이 사용되고 있는 객체지향 언어인 자 바(Java)에서 발생할 수 있는 메모리 누수(Memory Leak)를 방지하고 소프트웨어의 성능을 향상시킬 수 있 는 리팩토링 기법을 제안한다. 자바에서는 자동화된 메모 리 관리 프로그램인 JVM(Java Virual Machine)이 제공 되며, JVM이 동작하는데 있어 GC(Garbage Collection) 는 Java 언어의 메모리 구조와 성능에 중요한 부분을 차 지하고 있다. 많은 프로그래머는 기존의 C언어나 C++언 어처럼 프로그래머가 메모리 할당과 반환을 일일이 처리 하지 않고 비사용중인 메모리는 자동으로 GC가 처리해 줄 것이라고 예상하기 때문에 자바를 편리하다고 생각하 지만 의외로 잘못된 변수 선언이나 객체 참조 관계 때문 에 비사용중인 메모리가 반환되지 않아 메모리 누수가 발생하는 경우가 많다[8]. 이러한 문제는 결국 소프트웨 어가 대형화되고 실시간 처리가 필요한 시스템과 같은 경우에는 치명적인 결함을 유도할 수 있는 문제가 된다. 본 연구에서는 자바에서 이슈 중에 하나인 메모리 관 리를 기반으로 각 객체와 메모리 관계를 주요 팩터로 선정하여 리팩토링을 시도하는 기법을 제안한다. 또한 리팩토링을 하기 위한 기준으로 메모리 성능을 개선할 수 있는 기준을 제시하며 리팩토링의 무브 메소드와 결 합도를 이용하여 클래스간의 실제 소프트웨어 시스템 내부 동작 메소드 호출을 통해 추출된 복합 요소를 통 해 클래스를 분해하여 재구성하고 리팩토링 하는 재구 성 기법에 대하여 정의한다. 2. 관련 연구 2.1 리팩토링과 무브메소드(Move Method) 리팩토링은 프로그램의 행위를 보전하면서 프로그램 의 가독성, 구조, 성능, 유지보수성, 추상성 등을 향상시 키는 향상시키는 방법이다[1]. 리팩토링은 프로그램의 가독성을 높일 뿐만 아니라 개발 속도를 높일 수 있도 록 효율적이고 통제된 방법을 제공하여 소프트웨어의 가치를 높인다는 장점을 가진다[9]. 여러 가지 리팩토링 기법중 하나인 무브 메소드(Move Method)는 클래스 내에 메소드를 다른 메소드로 이동 시키는 방법이다. 무브 메소드는 메소드가 자신이 정의 된 클래스보다 다른 클래스의 기능을 더 많이 사용하고 그림 1 무브 메소드 Fig. 1 Move method 그림 2 무브 메소드 프로세스 Fig. 2 Move method process 있다면, 이 메소드를 가장 많이 사용하고 있는 클래스에 서 비슷한 몸체를 가진 새로운 메소드를 만들고 이전 메 소드는 간단한 위임으로 바꾸거나 완전히 제거하는 것을 의미한다. 무브 메소드는 클래스가 너무 많은 동작을 가 지고 있거나, 다른 클래스와 공동으로 작업하는 부분이 너무 많아져 단단한 결합이 되었을 경우 사용하게 된다. 또한 자신이 속해있는 클래스보다 다른 클래스를 더 많 이 참조하는 메소드가 존재한다면 리팩토링을 하게 된다 [2]. 무브 메소드를 그림으로 표현하면 그림 1과 같다. 리팩토링 기법 중 무브 메소드를 진행하는 프로세스 는 그림 2와 같다. 첫 번째로 원본 클래스에 정의되어 있는 모든 기능을 검사하고 기능을 전부 옮겨야 하는지를 판단한다. 그 다 음으로 메서드를 대상 클래스에 선언하고 원본 메서드 의 코드를 복사한 후, 대상 클래스 안에서 잘 돌아가게 끔 약간씩 수정한다. 세 번째로 컴파일을 수행하여 정상 적으로 컴파일이 되는지 확인하고, 네 번째로 대상 클래 스를 참조하는 속성이나 메서드가 없다면 대상 클래스 를 참조할 수 있도록 참조 관계를 정의한다. 다섯 번째 로 컴파일과 테스트를 수행하고 여섯 번째로 참조가 많 을 경우 원본메서드를 그대로 유지하거나 원본 메서드 를 삭제하는 과정을 거친다. 마지막으로 컴파일과 테스 트를 수행한다[2].

성능기반 리팩토링 기법 연구: 무브 메소드 영역 추출 및 식별 569 리팩토링에서 무브 메소드를 결정짓는 요소는 클래스 간의 결합도이다. 너무 단단하게 결합되어 있는 클래스 들은 전체적인 프로그램의 성능을 저해시키는 요소가 된다. 따라서 결합도를 측정할 수 있는 메트릭을 통해 단단하게 결합되어 있는 클래스들을 탐색하고 자동으로 리팩토링을 하기 위해 무브 메소드를 통해 기존의 소프 트웨어를 개선할 수 있다. 2.2 결합도 메트릭 결합도는 모듈 또는 클래스들이 상호 의존하는 정도 를 나타내는 것으로 모듈이나 클래스들 간의 결합도를 최소화시켜야 모듈의 독립성이 증가되며, 시스템 전체의 성능이 좋아지고 복잡도가 줄어든다. 그러나 두 개의 모 듈이 서로 강하게 연결되어 상호간의 메시지 전송이 잦 고, 주고받는 데이터들의 수가 많은 경우는 시스템 자체 에 이해도가 떨어지며, 복잡도가 증가하고 객체지향 패 러다임에서 적절하게 설계되었다고 할 수 없다[10]. 결합도 메트릭은 지금까지 많은 연구가 진행되어 왔 다. 다양한 방법으로 정적 소스코드를 분석하거나 소프 트웨어 실행시에 나타나는 결합도를 측정하기 위한 동 적 메트릭 연구 등 코드 내의 결함을 자동으로 찾기 위 해 연구되고 응용되었다. 결합도 메트릭 중 클래스의 메소드 호출이나 메시지 전 달 방식을 측정하는 메트릭으로는 MM(Method-Method interaction), IPC(Information Flow-based Coupling), MPC(Message Passing Coupling)가 있다. MM은 클 래스 C에서 구현된 클래스 D의 정적 호출 메소드나 또 는 같은 메소드에 포인터를 받는 것으로 정의한다. MM 은 정의에서 분명하게 호출의 빈도를 계산하지 않고 클 래스 메소드나 시그니처(문법)을 통해 계산되므로 정적 결합도 측정 방법에 해당한다. 이 MM의 측정 메트릭의 일반화 공식은 다음과 같다[11]. (1) IPC는 메소드를 호출하는 수를 카운트하여 클래스들 의 가중치를 매개변수의 수에 따라 다르게 부과하는 정 보흐름에 기반한 커플링 측정 방법이다. 클래스 사이의 정보흐름, 즉 메소드 호출의 빈도를 이용하여 측정하는 것이기도 하자만 객체 호출에서 클래스의 메소드로부터 계산되기도 한다[12]. MPC는 다른 클래스에서 한 클래 스의 메소드에서 호출하는 문장의 개수로 결합도를 측 정하는 방법이다. 메시지 전송의 문장은 실제 객체의 메 소드 호출의 실행 수를 반영하지 않는다[13]. 또한 객체들 사이의 참조 관계나 어트리뷰트 접근과 같 은 호출 관계를 포함하는 메트릭으로는 RFC(Response for Class), CBO(Coupling Between Object), CP(Coupling Factor)가 있다. RFC는 클래스의 반응을 나타내는 원소를 포함하는 집합의 개수를 측정하는 방법이다. 반 응 집합(Response set)은 모든 지역적인 메소드에서 다 른 지역적인 메소드를 호출하는 클래스들로 이루어져 있다. 즉 RFC는 지역 메소드와 이 지역 메소드에서 호 출하는 따른 지역 메소드들로 구성되어 있다[14]. CBO 는 두 클래스는 한 클래스의 메소드를 사용하거나 또 는 인스턴스 변수의 메서드가 다른 클래스에 의해 정의 되면 결합된다. 로 정의 된다. 이 측정 방법은 실행되는 동안의 호출의 개수를 계산하지 않기 때문에 동적인 결 합도 측정 척도는 아니지만 호출된 메소드의 변수의 개 수로 계산된다[13]. CP(Coupling Factor)는 결합도를 메시전달 또는 클래스 인스턴스간의 의미있는 연결로 의해 정의된다. 따라서 동적 결합도 측정에 이용되는 방 법이다. CP는 클래스들의 상호작용에 가능한 다양한 방 식의 정보 교환을 포함하는 결합도 측정 방식이다. CP 는 다음 식 (2)와 같이 정의되어 있다[15]. 각 클래스들의 구조적인 결합도를 측정하는 메트릭으 로는 DIT(Depth of Inheritance Tree), NOC(Number of Children)가 대표적이다. DIT는 클래스의 상속관계 의 계층적 구조에서의 위치를 측정하는 메트릭이다. DIT 메트릭이 클수록 클래스를 유지하는 것이 더욱 어 려워 진다. 최상위 루트 클래스의 경우 DIT는 0이 된 다. NOC(Number of Children)는 현재 클래스에서 연 관된 자식클래스를 측정할 수 있는 메트릭이다. DIT가 계층적 구조에서 클래스의 위치를 측정하는 메트릭이라 면 DIT는 직접적으로 연관된 자식 클래스의 개수를 가 지고 측정하는 방법이다[14]. 기존의 결합도 측정 방식은 소스 코드 내의 메소드 호출이나 메시지 전송, 어트리뷰트 접근과 같이 소스코 드 자체의 결합도에 한정되어 있다. 소스코드의 결합도 를 측정하는 것은 실제 실행중인 소프트웨어의 결합도 와는 차이가 있을 수밖에 없고, 클래스간의 참조 관계가 없다고 하더라도 실제 수행중에 나타나게 되는 객체들 의 관계는 있을 수도 있다. 따라서 본 논문에서는 실제 수행중인 프로그램의 객체들의 관계를 기반으로 결합도 를 측정하고 메모리 성능을 향상시킬 수 있는 리팩토링 기법을 제안한다. (2) 3. 객체 참조 관계에 따른 리팩토링 영역 정의 자바에서는 자동화된 메모리 관리 프로그램인 JVM을 통하여 플랫폼에 상관없이 다양한 OS 환경에서 실행

570 정보과학회논문지 : 소프트웨어 및 응용 제 40 권 제 10 호(2013.10) 가능하기 때문에 가장 널리 사용되는 프로그래밍 언어 이며, 기존의 다른 프로그래밍 언어보다 속도가 느린 단 점을 가지고 있다. 자바에서 성능을 결정짓는 주요 요소 중 하나인 GC의 알고리즘은 객체들의 참조관계를 기준 으로 메모리를 할당하거나 반환한다. 따라서 본 연구에 서는 메모리 상주를 결정짓는 객체 참조관계를 기준으 로 하여 리팩토링을 하는 기법을 제안한다. 본 연구에 앞서 실제 자바 실행 환경에서 GC에 의한 메모리 결정 관계를 정의하고 해당 문제를 리팩토링의 주요 요소로 결정짓기 위해 프로그램의 실제 수행 단계에서의 객체 들의 참조 관계와 메모리 사용량을 비교 분석한다. 3.1 리팩토링을 위한 영역 정의 본 연구에서는 프로그램이 실행중에 나타나게 되는 메소드 호출 관계와 실행되는 시간에 따라 같은 시간대 에 존재하는 메소드들의 결합도와 확률을 측정하여 리 팩토링을 위한 후보 영역으로 선정한다. 실제 두 개의 클래스 인스턴스의 메소드들의 실행 시간을 간단하게 그림으로 표현하면 그림 3과 같다. 그림 3과 같이 시간에 따른 메소드의 수행시간을 보 면 각 클래스의 인스턴스에 존재하는 메소드별로 수행 되는 시간이 각기 다르게 나타나게 된다. 실제 JVM에 의해 프로그램이 실행 될 경우 ClassA에 대한 참조를 ClassB에서 가지고 있다면 두 클래스 모두 GC에 의해 제거되지 않고 메모리상에 존재하게 된다. 또한 ClassA 의 모든 기능이 끝났다고 하더라도 ClassB의 호출로 인 해 메모리에 상주하게 되면 메모리 누수가 발생할 가능 성이 높아진다. 따라서 각 시간별로 메소드들이 같이 존 재할 확률을 계산하고 또한 각 객체들 사이의 결합도, 어트리뷰트에 접근하는 내부 결합도를 복합적으로 측정 하여 동시에 수행되는 기능을 묶어 새롭게 소스코드를 수정하는 리팩토링 기법을 제안한다. 먼저 각 클래스의 메소드를 아래의 식 (3)과 같이 정의 한다. (3) 각각의 메소드를 메소드 호출 시간에 따라 처음 메소 드가 호출되는 시간과 메소드 호출이 끝나는 시간으로 표현한다. 메소드의 호출 시간과 메모리에 상주하게 되 는 시간을 통해 같은 시간에 호출된 메소드가 얼마나 있는지, 서로 다른 클래스에 존재하는 메소드들이 같은 시간에 존재하는지를 측정한다. 메소드의 호출에 따른 시간 정의와 호출 관계의 데이터를 통해 아래의 식 4와 같이 각각의 메소드가 같은 시간에 존재할 확률을 계산 하게 된다. (4) 메소드 와 가 같은 시간에 존재할 확률은 전체 시간을 일정한 구간별로 쪼개고 해당 구간에 와 가 존재할 확률을 곱한다. 프로그램이 동작하는 시간이 이라면 각 구간은 로 쪼개진다. 그 후 각기 쪼개진 시간동안 가 존재할 확률과 가 존재할 확률의 곱 을 구한다. 의 각각의 구간에서 와 이 같이 존 재할 확률들의 값을 모두 더하면 전체 프로그램이 동작 하는 시간인 동안 와 이 같이 존재할 전체 확 률을 구할 수 있다. 확률 계산적으로 같은 시간에 같은 클래스에 속해있지 않은 두 메소드가 존재할 확률이 더 크고, 같은 클래스내의 다른 메소드들과 존재할 확률보 다 다른 클래스내의 존재하는 메소드와 결합되어 있다 면 해당 클래스로 메소드를 옮기는 것으로 무브 메소드 의 영역을 정의하게 된다. 전체 계산과정을 알고리즘으 로 표현하면 아래와 같다. && if if 그림 3 클래스별 메소드 수행시간 Fig. 3 methods call of class in runtime 알고리즘 1 무브 메소드 추출 알고리즘 Algorithm 1. algorithm of extract move-method

성능기반 리팩토링 기법 연구: 무브 메소드 영역 추출 및 식별 571 그림 4 무브 메소드 영역 추출 Fig. 4 area extract of move-method 메소드를 다른 클래스로 옮기게 된다면 오히려 복잡도 가 증가하고 서로 관련 없는 클래스들 사이의 결합도가 증가하게 되는 문제가 발생할 수 있다. 따라서 본 연구 에서는 무브 메소드의 후보영역으로 추출된 두 메소드 들의 리스트를 통해 두 메소드의 결합관계를 측정하고 결합관계가 존재한다면 최종적으로 무브 메소드의 영역 으로 선정하고 리팩토링을 수행하도록 한다. 결합도를 측정하는 방법으로는 정적 메트릭을 사용하 며, 정적으로 측정하여 서로 결합되어 있는 클래스의 메 소드들 사이의 확률 분포를 통해 무브 메소드를 할 영 역을 결정한다. 3.2.1 결합도를 이용한 결정 3장에서 추출된 무브 메소드에서 결합도를 기반으로 최종 무브 메소드 결정을 하기 위한 프로세스는 아래의 그림 5와 같다. 해당 알고리즘에서 는 클래스 a 에 속해있는 메 소드들의 개수이다. 알고리즘을 살펴보면 처음 각 클래 스 내부에서 메소드들끼리 같은 시간대에 존재할 확률 을 계산한 와 가 있다. 위에서 정 의된 식 4에 따라서 각기 다른 클래스에 존재하는 메소 드들 사이의 확률을 계산한 후에 내부 메소드들과 확률 계산 결과와 비교 한 후 만약 다른 클래스에 존재하는 두 메소드의 확률 결과가 더 크다면 결과적으로 무브 메소드를 수행할 후보 영역으로 추출된다. 결과적으로 리팩토링의 후보 영역으로 추출되는 부분은 확률 계산 적으로 같은 시간에 같은 클래스에 속해있지 않은 두 메소드가 존재할 확률이 같은 클래스내의 다른 메소드 들과 존재할 확률보다 더 크고, 다른 클래스내의 존재하 는 메소드와 결합되어 있다면 해당 클래스로 메소드를 옮기는 것으로 무브 메소드의 영역을 정의하게 된다. 무 브 메소드의 영역은 그림 4와 같이 추출된다. 실제 프로그램이 동작하는 과정에서 메소드들 간의 참조관계나 객체들간의 참조관계로 인해 메모리에서 상 주하게 되는 메소드를 확률적으로 동시에 존재하게 되 는 메소드들의 무브 메소드를 하게 되면 메모리의 낭비 가 적어지고, 효율적인 성능을 기대할 수 있게 된다. 3.2 무브 메소드와 결합도 관계 무브 메소드를 수행해야 하는 후보 영역을 추출하게 되면 두 메소드들 사이의 참조 관계나 호출 관계가 존 재하는 경우도 있지만 단순히 메소드들이 동시에 존재 하게 되는 경우도 있다. 만약 메소드들 사이에 아무런 연관도 없지만 여러 스레드에서 동시에 동작하기 때문 에 무브 메소드를 하기 위한 후보 영역으로 선정되고, 그림 5 결합도 결정 프로세스 Fig. 5 coupling decision process 알고리즘 1의 알고리즘에 따라 프로그램의 메소드 호 출 관계를 가진 시퀀스를 통해 실제 메소드들의 호출 관계를 분석하고 같은 시간대에 존재하는 메소드들의 확률 계산을 한다. 확률적으로 같은 시간대에 존재하며, 같은 클래스들과 동시에 실행되지 않는 경우 최종적으 로 무브 메소드의 후보 리스트에 존재하게 된다. 그러나 리팩토링이 필요한 후보 영역일지라도 서로 연관성이 존재하지 않는 경우 리팩토링을 시도할 경우 오히려 프 로그램의 성능을 떨어뜨릴 수 있다. 따라서 결합도 측정 을 통해 서로 결합되어 있는 클래스들 사이의 메소드일 경우 무브 메소드를 통한 리팩토링을 한다. 3.3 객체 참조 관계와 리팩토링 프로세스 파울러는 무브 메소드의 적용 요인을 메소드가 자신 이 정의된 클래스보다 다른 클래스의 기능을 더 많이 사용하고 있는 경우 로 정의하고 있다[2]. 이러한 무브 메소드의 적용 요인을 프로그램 실행 시에 나타날 수 있는 메모리 관계를 통하여 정의한다. 실제 프로그램의 동작 과정에서 작은 메모리 영역을 차지하고 있는 클래 스에서 큰 메모리를 차지하고 있는 클래스의 하나의 기

572 정보과학회논문지 : 소프트웨어 및 응용 제 40 권 제 10 호(2013.10) 에 존재하게 되는 확률 계산과 함께 무브 메소드의 대 상이 되는 메소드들을 추출한다. 이렇게 무브 메소드의 대상이 되는 메소드를 통해 결합도가 높은 클래스들을 중심으로 무브 메소드의 영역을 한정한다. 결과적으로 무브 메소드의 영역을 지정하고 해당 메소드를 다른 클 래스로 옮겼을 경우 같은 시간에 존재하며, 클래스간의 결합도를 낮추게 되어 메모리 성능이 향상된 프로그램 으로 수정할 수 있게 된다. 그림 6 성능 개선을 위한 리팩토링 프로세스 Fig. 6 Refactoring process for improving the performance 능만을 수행하기 위해 참조관계를 가지고 있는 경우에 는 GC에서 제거하지 못하고 메모리에 상주하게 되는 경우를 초래하게 되어 성능적인 면에서 불리하게 작용 할 수 있다. 따라서 이러한 객체들 사이의 참조 관계를 통해 해당 영역을 추출하고 무브 메소드를 수행할 리팩 토링 후보영역으로 선정한다. 리팩토링의 후보 영역을 추출하기 위해서는 프로그램 동작 과정에서 전체적인 메소드 호출 관계를 통해 실제 동작 수행시 메모리 사 용량을 비교하여 리팩 프로그램의 수행중에 나타나는 객체들의 호출 관계에 따라 리팩토링이 필요한 영역을 추출하고 동시에 메모리에 상주하는 메소드들을 결합한 다. 해당 과정을 그림으로 나타내면 그림 6과 같다. 그림 6은 객체지향적으로 프로그래밍된 프로그램을 동작 과정 중에 나타나게 되는 메소드 호출 관계를 통 해 동시간에 수행되는 메소드를 기준으로 통합해 리팩 토링 하기 위한 프로세스이다. 동시간에 수행되는 메소 드들의 호출 관계와 시간와 시간을 기준으로 같은 시간 4. 사례 연구 간단하게 본 연구의 제안을 증명하기 위해 큰 클래스 와 작은 클래스 사이의 일반 연관 관계를 기반으로 메 모리 사용량과 메소드 호출 관계를 분석하였다. 그림 7 은 무브메소드를 하기전과 후의 예제 프로그램의 구조 를 도식하해 나타낸 것이다. LargeClass의 메소드인 testlarge1()은 LargeClass 의 inner 클래스인 GeneralClass를 호출하며, 간단한 기 능을 수행한다. SmallClass의 testsmall1() 메소드는 LargeClass의 testlarge2() 메소드를 호출한다. 전체적 인 프로그램의 흐름은 처음 LargeClass를 생성하고 내 부적인 기능을 수행한다. LargeClass는 내부적으로 해 쉬맵을 사용하여 대용량의 데이터를 생성하고 처리한다. LargeClass의 수행이 끝난 뒤에 SmallClass에서 내부 적으로 메소드를 호출하고 기능을 수행하게 되는데 Large Class의 testlarge2()메소드를 호출하기 때문에 LargeClass 는 메모리에 SmallClass가 종료될 때까지 상주하게 된다. LargeClass 내에서 testlarge2() 메소드를 보면 Large- Class 내의 다른 메소드들이 모두 끝났음에도 불구하고, 지속적으로 메모리에 존재하게 된다. 이러한 영역은 본 그림 7 무브 메소드 프로그램 Fig. 7 move method program

성능기반 리팩토링 기법 연구: 무브 메소드 영역 추출 및 식별 573 그림 8 무브메소드에 따른 메모리 사용량 분석 Fig. 8 Analysis of the memory usage according to the move-method 논문에서 리팩토링 후보 영역으로 산출되며 메소드를 옮기게 된다. 따라서 두 번째 무브메소드를 한 후의 두 클래스를 보면 LargeClass의 testlarge2() 메소드를 SmallClass로 옮겨 비교 분석하였다. 그림 8은 순서대 로 첫 번째 무브베소드를 하기 전 메모리 사용량을 나 타낸 그림이며, 두 번쨰 그래프는 무브메소드를 하고 난 후의 결과를 나타낸 그림이다. 전체적인 메모리 사용량은 아래의 표 1과 같다. 그래프 상에서는 미세한 메모리 사용량의 차이를 잘 보기 힘들지만 실제 두 프로그램이 동작시에 극명하게 차이를 나타내는 부분은 약 14초에서 15초 사이로 처음 LargeClass가 종료되는 시점이다. 이 시기에 첫 번째 TestSet1은 무브메소드를 하기전으로, LargeClass의 모 든 동작 수행이 끝났음에도 불구하고 지속적으로 메모 리상에 남아 상주하게 되는 것을 의미한다. 두 번째 TestSet2에서는 LargeClass의 동작이 모두 끝난 후에 LargeClass에 의해 사용되었던 객체들이 반환되는 것을 볼 수 있다. 이러한 차이는 실제 LargeClass의 모든 기 능이 끝났다고 하더라도 다른 클래스의 객체 참조 관계 때문에 아무런 동작을 수행하지 않으면서 지속적으로 메모리에 상주하게 되어 낭비되는 현상을 실제 관찰할 수 있는 부분이다. 또한 표 1에서는 무브 메소드를 하기 전의 프로그램과 무브 메소드를 하고 난 후의 프로그램 이 종료되는 시점의 메모리 사용량을 나타낸 결과로서, 표 1 메모리 사용량 비교 Table 1 Comparison of memory usage Experiment memory usage FreeSize before Move method 1.141GB 0.593GB after Move method 1.060GB 0.553GB 보는바와 같이 실제 메모리의 차이는 양 0.081GB 정도 이며 무브 메소드를 한 후 메모리 사용 효율이 더 좋아 진 것을 확인할 수 있었다. 해당 표 2에서 Freesize는 프로그램이 종료되는 시점에 반환된 객체의 사이즈로, 무브 메소드를 하고 난 후의 Freesize가 작은 이유는 그림 8에서 나타낸 바와 같이 프로그램의 동작 과정인 약 14초에서 15초 사이에 객체 반환이 더 많이 이루어 졌기 때문이다. 무브 메소드를 하기 전과 하고 난 후의 메모리 사용 량을 측정해 보면 실제 무브 메소드를 수행한 후에 메 모리 사용량이 감소한 것으로 측정된다. 이 결과 값은 LargeClass에 대한 SmallClass의 참조 관계를 끊고 메 소드를 옮김으로서 실제 같이 동작하는 메소드들을 한 클래스로 묶어 쓸데없는 참조 관계나 메모리 낭비를 줄 여주는 효과를 볼 수 있다. 5. 결 론 지금까지 리팩토링을 위한 성능 기반의 무브 메소드 영역을 추출하고 실제 적용하여 메모리의 효율성과 성 능에 어떠한 영향을 끼치는지 분석하였다. 리팩토링의 영역을 선정하기 위해 프로그램 수행 중에 같은 시간에 나타나게 되는 메소드들의 확률 분포와 결합도를 기반 으로 무브 메소드의 주요 팩터로서의 정의와 프로세스 를 제안하였다. 결합도를 참고로 하여 결합 관계에 있는 메소드들 중에서 확률적으로 같은 시간에 존재하며 실 제 메모리상에 문제를 야기할 수 있는 메소드를 리팩토 링의 무브 메소드를 기법에 따라 메소드를 옮기는 전체 적인 과정을 제안하였다. 본 연구에서는 실제 프로그램이 동작중에 나타나게 되는 메소드 호출관계와 성능간의 관계를 분석하고 확 률적으로 같은 시기에 존재하는 메소드들을 묶어 메모 리 효율성을 증대시키고 성능을 향상시킬 수 있는 리팩 토링 기법을 제안하였으며, 프로그램의 동작 과정에서 어떤 영향을 끼치는지 분석하였다. 사례연구에서는 본 논문에서 제안한 성능 기반의 무브 메소드 영역을 추출 기법을 적용하기 전과 적용한 후의 결과를 비교하였으 며, 실제 메모리 사용량과 객체 참조관계에 따른 객체 반환 등에 영향을 미치는 요인을 분석하였다. 현재까지 리팩토링 연구는 주로 객체들의 구성 요소 들을 정의하고 구성요소들 사이의 응집도와 결합도, 복 잡도를 측정할 수 있는 메트릭을 이용하여 후보영역을 탐색하고 자동으로 리팩토링을 할 수 있는 방법으로 진 행되어 왔다. 그러나 본 연구에서는 메모리 성능과 각 객체들의 메소드 참조 관계를 리팩토링의 주요 팩터로 서 선정하고 이를 적용하는 프로세스를 제안하였다. 이 는 리팩토링을 위한 새로운 지표로서 실제 프로그램의

574 정보과학회논문지 : 소프트웨어 및 응용 제 40 권 제 10 호(2013.10) 동작과 성능에 영향을 줄 것으로 기대된다. 향후 연구로는 자동화된 소스 분석과 성능에 따른 확 률 분포를 제공할 수 있는 툴을 제공할 예정이며, 또한 실제 메소드를 다른 클래스로 옮기기 위해 객체들의 관 계와 메소드들의 관계를 분석하고 자동화하기 위한 연 구를 할 예정이다. References [1] Bindu and Mehra, A Critique of Cohesion Measures in the Object-Oriented paradigm, Masters Thesis, Department of Computer Science, Michigan Technologial university, 1997. [2] Martin Fowler, Refactoring Improving the Desinge of Existing Code, Addision Wesley, 1999. [3] W.G. Griswold, "Program Restructuring as an Aid to Software Maintenance," PhD Thesis, Dept. of Computer Science & Engineering, University of Washington, 1991. Fowler s Definitions of Bad Smells," IEEE, 2009 [4] Frank Simon, Frank Steinbruckner, Claus Lewerentz, "Metrics Based Refactoring," IEEE, 2001. [5] Yoshiki Higo, Toshihiro Matsumoto, Shinji Kusumoto, Katsuro Inoue, "Refactoring Effect Estimation based on Complexity Metrics," IEEE, 2008. [6] Min Zhang, Nathan Baddoo, Paul Wernick, etc., "Improving the precision of Fowler s Definitions of Bad Smells," IEEE, 2009 [7] Nikolaos Tsantalis, etc., "Identification of Move Method Refactoring Opportunites," IEEE Transactions on software engineering, vol.35, no.3, May/Jun. 2009. [8] Wim De Pauw, Gray Sevirsky, "Visualizing reference patterns for solving memory leaks in Java," ECOOP, 1999. [9] Youngae Jung, Youngbom Park, "Comparative Analysis of Determination of Method Location between Classes," Journal of Korea Contents Association, vol.6, no.12, 2006. [10] Roger S. Pressman, Software Engineerignn A Practitioners Approach, Fourth Edition, McGraw-Hill, 1997. [11] Briand, L., P.Devanbu, and W.Melo, "An Investigation into Coupling Measures for C++," Proc. of the 19th International Conference on Software Engineering, ICSE 97, Boston, May 1997, pp.412-421. [12] Lee, Y., B. Liang, and S. Wu, "Measuring the Coupling and Cohesion of an Object-Oriented Program Based on Information Flow," Proc. of International Conference on Software Quality, Maribor, Slovenia, 1997 [13] Li, W. and S. Henry, "Object Oriented Metrics that predict Maintainability," Journal of Systems and Software, vol.23, no.2, pp.111-122, 1993. [14] Chidamber, S., and C.Kemerer, "A Metrics Suite for Object Oriented Design," IEEE Transactions on Software Engineering, vol.20, no.6, Jun. 1994, pp.476-493. [15] Ruchika Malhotra, Empirical Study of Object- Oriented Metrics, ETH Zurich, Chair of Software Engineering, 2006 권 예 진 2011년 단국대학교 컴퓨터 과학과 졸업 (학사). 2011년~현재 단국대학교 전자계 산학과 석사. 관심분야는 소프트웨어 테 스팅, 소프트웨어 품질 측정 이 준 하 2007년 8월 단국대학교 컴퓨터 과학과 졸업(학사). 2010년 8월 서강대학교 컴퓨 터 공학과 졸업(석사). 2010년~현재 서 강대학교 컴퓨터공학과 박사과정 재학, 관심분야는 소프트웨어 공학, 소프트웨어 재구성, 소프트웨어 아키텍처 박 용 범 1991년 6월 N.Y. Polytechnic University Couputer Sci. & Eng. Ph.D.1993년 3 월~현재 단국대학교 컴퓨터과학 교수 관심분야는 지능형 소프드웨어 공학, 보 안 소프트웨어 개발