[국내논문]역공학을 이용한 자바 소스 코드의 변화량 분석 및 시각화 도구 개발 Development of Analysis and Visualization Tool for Java Source Code Changes using Reverse Engineering Technique원문보기
소프트웨어 시스템을 효율적으로 유지보수 및 관리하기 위해서는 변경 전후의 시스템의 변경사항을 쉽게 파악할 수 있도록 시각적으로 표현해주는 것이 중요하다. 소프트웨어 변경사항 분석에 대한 연구는 많이 진행되어 왔으나 변경 유형뿐만 아니라 변경 정도를 정량화하고 이를 시각화하여 나타내려는 연구는 많지 않다. 이 연구에서는 자바로 구현된 시스템에 대해 클래스 다이어그램에서의 변경사항 분석 및 정량화 방법과 이를 시각적으로 나타내는 방법에 대해 제시한다. 먼저 소스 코드의 구조적인 변화를 검사하기 위해, 역공학을 이용하여 클래스 다이어그램을 추출한다. 그리고 클래스 다이어그램 정보를 이용하여 변경 유형 및 변경량을 정량화한 다음, 색상 스펙트럼을 이용하여 클래스 다이어그램에 변경량을 시각적으로 나타낸다. 이러한 시각화 기법을 이용하면, 유지보수 관리자가 쉽게 변경된 부분을 파악할 수 있어 유지보수에 소요되는 시간과 노력을 조금이라도 줄일 수 있다.
소프트웨어 시스템을 효율적으로 유지보수 및 관리하기 위해서는 변경 전후의 시스템의 변경사항을 쉽게 파악할 수 있도록 시각적으로 표현해주는 것이 중요하다. 소프트웨어 변경사항 분석에 대한 연구는 많이 진행되어 왔으나 변경 유형뿐만 아니라 변경 정도를 정량화하고 이를 시각화하여 나타내려는 연구는 많지 않다. 이 연구에서는 자바로 구현된 시스템에 대해 클래스 다이어그램에서의 변경사항 분석 및 정량화 방법과 이를 시각적으로 나타내는 방법에 대해 제시한다. 먼저 소스 코드의 구조적인 변화를 검사하기 위해, 역공학을 이용하여 클래스 다이어그램을 추출한다. 그리고 클래스 다이어그램 정보를 이용하여 변경 유형 및 변경량을 정량화한 다음, 색상 스펙트럼을 이용하여 클래스 다이어그램에 변경량을 시각적으로 나타낸다. 이러한 시각화 기법을 이용하면, 유지보수 관리자가 쉽게 변경된 부분을 파악할 수 있어 유지보수에 소요되는 시간과 노력을 조금이라도 줄일 수 있다.
In order to quickly understand which changes of source codes have been made and to perform effective maintenance of a system, it is important to visualize the changed parts. Although there are many works for analyzing software changes, there are few works for visualizing both of the change types and...
In order to quickly understand which changes of source codes have been made and to perform effective maintenance of a system, it is important to visualize the changed parts. Although there are many works for analyzing software changes, there are few works for visualizing both of the change types and change quantifications for Java based systems. In this paper, we propose a change analysis technique based on class diagram and provide a change visualization technique by using change quantification information. In order to check the structural changes in source codes, source codes are transformed to class diagrams by reverse engineering methods. On the class diagrams, the changes are analyzed and quantified by numbers. Based on the change quantification, the changes are visualized on the class diagram by color spectrum. By using visualization techniques, maintainers can easily recognize the code changes to reduce the cost and time of maintenance.
In order to quickly understand which changes of source codes have been made and to perform effective maintenance of a system, it is important to visualize the changed parts. Although there are many works for analyzing software changes, there are few works for visualizing both of the change types and change quantifications for Java based systems. In this paper, we propose a change analysis technique based on class diagram and provide a change visualization technique by using change quantification information. In order to check the structural changes in source codes, source codes are transformed to class diagrams by reverse engineering methods. On the class diagrams, the changes are analyzed and quantified by numbers. Based on the change quantification, the changes are visualized on the class diagram by color spectrum. By using visualization techniques, maintainers can easily recognize the code changes to reduce the cost and time of maintenance.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
앞 절에서 설명한 GMF로 생성한 클래스다이어그램을 이용하여 두 버전의 모델 간 변경분석 내용을 시각화하기 위해 시각화 규칙을 정의한다. 다이어그램 편집기에 나타날수 있는 클래스 노드 자체와 그 안에 포함된 속성, 메소드 그리고 클래스 간의 연관관계로 나타날 수 있는 상속관계, 연관관계, 집합연관, 의존성에 대해서 추가/삭제/변경에 따른 구분을 색깔을 다르게 입힘으로써 표현하고자 한다. 표현방법은 아래와 같다.
본 논문에서는 소프트웨어의 유지보수 측면에서 발생하는 구조적인 변화를 쉽게 파악할 수 있도록 하기 위하여 클래스 다이어그램 상에서 변경량을 시각화하는 방법을 제안하였다. 두 버전간의 변경부분을 모델로 변환하고 분석 알고리즘을 통해 변화량을 정량화했으며 클래스 다이어그램을통해 시각화해 줌으로써 구조적인 변화를 한눈에 파악할 수 있도록 하였다.
하지만 이 연구에서는 단순히 추가, 삭제, 변경의 변경유형 정보만을 나타내며 변경이 되었을 경우에는 변수 이름의 변경과 같은 단순 변경인지, 제어 구조의 변경과 같은 심화 변경인지 등의 변경 정도에 대한 정보를 나타내지 못하는 단점이 있다. 본 연구에서는 변경 유형뿐만 아니라 변경 정도인 변화량을 분석하여 사용자가 쉽게 변경사항 및 정도를 파악할 수 있도록 시각화하는 것을 목표로 한다.
이 논문에서는 소프트웨어의 유지보수 입장에서 변경 전후의 프로그램의 변화 모습을 시각화 기법을 통해 표현함으로써 시스템이 구조적으로 어떻게 바뀌었는지 어떤 영향을 미치는지를 한눈에 파악할 수 있도록 새로운 모델을 제시하 고자 한다. 먼저 변경된 소스코드를 역공학을 이용하여 클래스 다이어그램으로 표현하고 시각화함으로써 좀 더 직관적이고 구조적인 관점에서 프로그램을 바라볼 수 있는 방법을 제시한다.
제안 방법
은행의 고객 관리 프로그램은 처음 3개의 클래스인 Customer, Tree, TreeNode로 이루어져 있다. 다음 버전은 Account, Account2, Account3 클래스가 추가되어 총 6개의 클래스로 이루어져 있고 두 버전 간에 속성과 메소드에 변경을 가하였다. 또한 클래스간의 관계 또한 조금 변경된다.
본 논문에서는 소프트웨어의 유지보수 측면에서 발생하는 구조적인 변화를 쉽게 파악할 수 있도록 하기 위하여 클래스 다이어그램 상에서 변경량을 시각화하는 방법을 제안하였다. 두 버전간의 변경부분을 모델로 변환하고 분석 알고리즘을 통해 변화량을 정량화했으며 클래스 다이어그램을통해 시각화해 줌으로써 구조적인 변화를 한눈에 파악할 수 있도록 하였다. 단순 변경 유형만을 나타내는 기존 연구의 한계를 극복하여 변경 정도를 정량적으로 나타내고 역공학으로 생성한 모델에 시각화하여 나타내있다.
얻어진 모델 정보를 편집 거리(edit distance)라 불리는 레벤쉬테인 거리(Levenshtein distance)[10]에 근간을 둔 변화량 측정 규칙에 따라 서로 비교하고 변화된 부분을 테이블에 기록해 둔다. 마지막으로 클래스 다이어그램 편집기를 이용해서 소스 코드의 변화량을 다이어그램상에 시각화하여 변화된 부분과 변화량을 한눈에 파악할 수 있도록 한다.
이 논문에서는 소프트웨어의 유지보수 입장에서 변경 전후의 프로그램의 변화 모습을 시각화 기법을 통해 표현함으로써 시스템이 구조적으로 어떻게 바뀌었는지 어떤 영향을 미치는지를 한눈에 파악할 수 있도록 새로운 모델을 제시하 고자 한다. 먼저 변경된 소스코드를 역공학을 이용하여 클래스 다이어그램으로 표현하고 시각화함으로써 좀 더 직관적이고 구조적인 관점에서 프로그램을 바라볼 수 있는 방법을 제시한다. 변경 전후의 두 소스코드를 클래스 단위로 파싱하여 클래스내의 속성과 메소드의 정보들을 얻는다.
전체적인 과정은 (그림 1)과 같이 크게 두 부분으로 이루어진다. 먼저 역공학을 이용해 현재 시스템의 변경전과 후의 소스코드로부터 모델정보를 추출한다. 그리고 추출된 두 개의 모델로부터 변경된 부분을 분석 하고 변화량을 정량화한다.
또한 클래스간의 관계 또한 조금 변경된다. 속성의 변화량과 메소드의 변화량을 변경 분석 알고리즘을 통해 그 변화량을 구해보고 얻어진 변화량을 통해 GMF 다이어그램 편집기로 시각화 해본다. (그림 8)은 변경 전후의 클래스 다이어그램을 보여준다.
이 장에서는 제시한 변경분석 및 시각화 도구 개발방법으로 도구를 구현하고 간단한 예제 프로그램으로 테스트를 해본다. 실제 개발 과정은 입력받은 서로 다른 버전의 프로그램으로부터 모델을 생성하고 두 모델간의 변경부분을 변경 분석 알고리즘을 통해 추출하고 개발한 클래스 다이어그램의 포맷으로 변경한 후, 시각화를 통해 최종적으로 표현하는 과정으로 이루어진다. 자바 코드의 변화량을 분석과 시각화 도구를 개발하기 위해 이클립스 자바 프레임워크인 Europa를 사용하고 플러그인으로 EMF와 GMF를 사용한다.
앞 절에서 설명한 GMF로 생성한 클래스다이어그램을 이용하여 두 버전의 모델 간 변경분석 내용을 시각화하기 위해 시각화 규칙을 정의한다. 다이어그램 편집기에 나타날수 있는 클래스 노드 자체와 그 안에 포함된 속성, 메소드 그리고 클래스 간의 연관관계로 나타날 수 있는 상속관계, 연관관계, 집합연관, 의존성에 대해서 추가/삭제/변경에 따른 구분을 색깔을 다르게 입힘으로써 표현하고자 한다.
클래스 간의 관계에 대한 추가, 삭제, 변경은 다음과 같이 판단한다. 앞서 정의한 GOC(Generalization Of Class), AOC(Association Of Class), AGOC(Aggregation Of Class), DOC(Dependency Of Class) 요소를 위에서 언급한 클래스 전체의 추가, 삭제, 변경 과정을 참고하여 삭제된 관계와 추가된 관계를 판단한다. 관계에서의 변경은 클래스 내부의 변경으로 인한 관계의 종류가바뀐 것으로 판단한다.
이 연구에서는 버전관리 도구를 사용하지 않는 개발 환경에서 객체지향언어인 자바로 구현된 소프트웨어의 두 버전이 존재할 때, 변경된 부분과 변경 정도를 시각적으로 나타내는 방법에 집중한다. 이 연구와 가장 관련이 많은 연구로는 클래스의 추가, 삭제, 변경사항을 나타내는 연구[9]를 들 수 있다.
자바와 같은 객체지향 프로그램은 클래스 단위로 되어 있고 클래스 내부에는 여러 개의 메소드들이 존재하는 계층 구조이다. 이러한 계층구조로 된 프로그램을 텍스트 중심으로 비교하여 변경사항을 파악하는 것은 어려움이 많아 본 연구에서는 기존의 역공학 기술을 이용하여 소스 코드를 클래스 다이어그램으로 구조화한 다음, 두 클래스 다이어그램의 차이점을 비교한다. 전체적인 과정은 (그림 1)과 같이 크게 두 부분으로 이루어진다.
이러한 모델 정보들을 소스코드로부터 추출하기 위해 자바언어의 문법을 고려해 자바 라이브러리에서 제공하는 Lexical 함수인 패턴(Pattern)과 매춰(Matcher)를 이용하여 파서를 구현한다. 파서를 통해 얻은 모델 요소들은 트리 형태로 저장된다.
자바로 구현한 은행의 고객 관리 프로그램의 이전 버전과 다음 버전간의 변화를 변화량 분석을 통해 시각화 한다. 은행의 고객 관리 프로그램은 처음 3개의 클래스인 Customer, Tree, TreeNode로 이루어져 있다.
대상 데이터
실제 개발 과정은 입력받은 서로 다른 버전의 프로그램으로부터 모델을 생성하고 두 모델간의 변경부분을 변경 분석 알고리즘을 통해 추출하고 개발한 클래스 다이어그램의 포맷으로 변경한 후, 시각화를 통해 최종적으로 표현하는 과정으로 이루어진다. 자바 코드의 변화량을 분석과 시각화 도구를 개발하기 위해 이클립스 자바 프레임워크인 Europa를 사용하고 플러그인으로 EMF와 GMF를 사용한다. 자바 코드의 변화량을 분석과 시각화 도구를 개발하기 위해 이클립스 자바 프레임워크인 Europa를 사용하고 플러그인으로 EMF와 GMF를 사용한다.
즉 다이어그램에 필요로 하는 요소들만 XMI 파일 형태로 변환을 해주면 나머지는 GMF가 알아서 포맷을 변환한다. 클래스 다이어그램에서 표현되는 모델 정보로는 클래스 노드와 클래스가 포함하고 있는 속성, 메소드 및 클래스 간의 연관관계 정보들이다. 포맷으로 변환을 할 때 주의해야 할 사항은 클래스간의 연관관계를 관계가 있는 클래스의 이름으로 표현하지 않고 아이디로 값을 가지고 있기 때문에 처음 파일에 입력할때 모델로 변환하고자 하는 순서를 기억하고 연관관계를 지정해줘야 한다는 것이다.
이론/모형
변경분석 내용을 클래스다이어그램으로 나타내기 위하여 이클립스 기반의 플러그인 개발 도구인 GMF[11]를 이용한 다. GMF는 EMF(Eclipse Modeling Framework)[12]와 GEF(Graphical Editing Framework)[13]에 기반을 둔 그래픽 편집기 제작을 위한 프레임워크이다.
소스 코드로부터 클래스 다이어그램 모델을 생성하기 위해 역공학을 이용한다. 소스코드에서 모델요소를 추출하기 위해 파서를 생성한다.
성능/효과
단순 변경 유형만을 나타내는 기존 연구의 한계를 극복하여 변경 정도를 정량적으로 나타내고 역공학으로 생성한 모델에 시각화하여 나타내있다. 또한 객체지향 언어인 자바 개발환경 이클립스에 적합하게 파서를 개발하였고 이클립스 플러그인인 GMF 클래스 다이어그램 편집기를 통해 시각화해줌으로써 시각화 도구의 활용성을 높였다.
후속연구
향후 연구로는 자바 언어에 국한하지 않고 C++와 같은다른 객체지향언어의 변경 분석으로 그 영역을 확장할 필요가 있다.
질의응답
핵심어
질문
논문에서 추출한 답변
소프트웨어 시스템을 효율적으로 유지보수 및 관리하기 위해 무엇이 중요한가?
소프트웨어 시스템을 효율적으로 유지보수 및 관리하기 위해서는 변경 전후의 시스템의 변경사항을 쉽게 파악할 수 있도록 시각적으로 표현해주는 것이 중요하다. 소프트웨어 변경사항 분석에 대한 연구는 많이 진행되어 왔으나 변경 유형뿐만 아니라 변경 정도를 정량화하고 이를 시각화하여 나타내려는 연구는 많지 않다.
본 연구에서 소스 코드의 구조적인 변화를 검사하기 위해 무엇을 하는가?
이 연구에서는 자바로 구현된 시스템에 대해 클래스 다이어그램에서의 변경사항 분석 및 정량화 방법과 이를 시각적으로 나타내는 방법에 대해 제시한다. 먼저 소스 코드의 구조적인 변화를 검사하기 위해, 역공학을 이용하여 클래스 다이어그램을 추출한다. 그리고 클래스 다이어그램 정보를 이용하여 변경 유형 및 변경량을 정량화한 다음, 색상 스펙트럼을 이용하여 클래스 다이어그램에 변경량을 시각적으로 나타낸다.
유지보수 관리자가 쉽게 변경된 부분을 파악할 수 있도록 도와주는 시각화 기법을 본 연구에서 어떻게 표현하였는가?
이 연구에서는 자바로 구현된 시스템에 대해 클래스 다이어그램에서의 변경사항 분석 및 정량화 방법과 이를 시각적으로 나타내는 방법에 대해 제시한다. 먼저 소스 코드의 구조적인 변화를 검사하기 위해, 역공학을 이용하여 클래스 다이어그램을 추출한다. 그리고 클래스 다이어그램 정보를 이용하여 변경 유형 및 변경량을 정량화한 다음, 색상 스펙트럼을 이용하여 클래스 다이어그램에 변경량을 시각적으로 나타낸다. 이러한 시각화 기법을 이용하면, 유지보수 관리자가 쉽게 변경된 부분을 파악할 수 있어 유지보수에 소요되는 시간과 노력을 조금이라도 줄일 수 있다.
참고문헌 (14)
Ian Sommerville, Software Engineering, 9th Edition, Pearson, 2011.
Beat Fluri, Michael Wursch, Martin Pinzger, Harald C. Gall, "Change Distilling: Tree Differencing for Fine-Grained Source Code Change Extraction," IEEE Transactions on Software Engineering, Vol.33, No.11, Nov., 2007
Masatomo Hashumoto, Akira Mori, "Diff/TS: A Tool for Fine-Grained Structural Change Analysis," Proceedings of the 15th Working Conference on Reverse Engineering, 2008.
Jonathan I. Maletic, Michael L. Collard, "Supporting Source Code Difference Analysis," Proceedings of the 20th IEEE International Conference on Software Maintenance, 2004.
Jingwei Wu, Claus W. Spitzer, Ahmed E. Hassan, and Richard C. Holt, "Evolution Spectrographs: Visualizing Punctuated Change in Software Evolution," Proceedings of the 7th International Workshop on Principles of Software Evolution, 2004.
Dirk Beyer, Ahmed E. Hassan, "Animated Visualization of Software History using Evolution Storyboards," Proceedings of the 13th Working Conference on Reverse Engineering, 2006.
Tom Arbuckle, "Visually Summarising Software Change," Proceedings of the 12th International Conference on Information Visualization, 2008.
Daniel M German, Gregorio Robles, and Ahmed E. Hassan, "Change Impact Graphs: Determining the Impact of Prior Code Changes," Proceedings on 8th IEEE International Working Conference on Source Code Analysis and Manipulation, 2008.
Jochen Seemann, Jurgen Wolff von Gudenberg, "Visualization of Differences between Versions of Object-Oriented Software," Proceedings of the Second Euromicro Conference on Software Maintenace and Reengineering, 1998.
V. I .Levenshtein, "Binary codes capable of correcting deletions, insertions and reversals," Soviet Physics-Doklady, Vol.SE-10, No.8, pp.707-710, February, 1966.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.