KR101488188B1 - 시퀀스 다이어그램의 생성 방법 및 시스템 - Google Patents

시퀀스 다이어그램의 생성 방법 및 시스템 Download PDF

Info

Publication number
KR101488188B1
KR101488188B1 KR20130043573A KR20130043573A KR101488188B1 KR 101488188 B1 KR101488188 B1 KR 101488188B1 KR 20130043573 A KR20130043573 A KR 20130043573A KR 20130043573 A KR20130043573 A KR 20130043573A KR 101488188 B1 KR101488188 B1 KR 101488188B1
Authority
KR
South Korea
Prior art keywords
call tree
call
node
tree
sequence diagram
Prior art date
Application number
KR20130043573A
Other languages
English (en)
Other versions
KR20140125949A (ko
Inventor
박수용
민성현
윤성혜
박수진
Original Assignee
서강대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 서강대학교산학협력단 filed Critical 서강대학교산학협력단
Priority to KR20130043573A priority Critical patent/KR101488188B1/ko
Publication of KR20140125949A publication Critical patent/KR20140125949A/ko
Application granted granted Critical
Publication of KR101488188B1 publication Critical patent/KR101488188B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 시퀀스 다이어그램의 생성 방법 및 시스템에 관한 것으로, 보다 구체적으로는 입력부가 유지보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는 단계; 전처리부가 입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거하는 단계; 호출트리생성부가 상기 소스코드와 실행 추적 로그정보로부터 노드간 메소드 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성하는 단계; 프루닝처리부가 생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 단계; 호출트리통합부가 불필요한 메소드 정보를 갖는 노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합하는 단계; 및 시퀀스 다이어그램 생성부가 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 단계;를 포함한다.
이러한 구성에 의해, 본 발명의 시퀀스 다이어그램의 생성 방법 및 시스템은 유지보수를 수행하고자 하는 소프트웨어의 기능의 흐름을 나타내는 시퀀스 다이어그램을 생성함으로써, 생성된 시퀀스 다이어그램의 분석을 통해 상기 소프트웨어를 빠르고 용이하게 수행할 수 있는 효과가 있다.

Description

시퀀스 다이어그램의 생성 방법 및 시스템{Sequence diagram generating method and system}
본 발명은 시퀀스 다이어그램의 생성 방법 및 시스템에 관한 것으로, 특히 유지보수를 수행하고자 하는 소프트웨어의 시퀀스 다이어그램을 생성하여 이를 통해 상기 소프트웨어의 기능 흐름을 용이하게 파악할 수 있는 시퀀스 다이어그램의 생성 방법 및 시스템에 관한 것이다.
IT 기술의 급격한 발달로 인하여 소프트웨어의 규모는 커지고 복잡성은 점차 증가하였다. 이로 인해, 소프트웨어의 유지보수 비용이 증가하게 되는데, 일반적으로 소프트웨어의 전체 생명 주기 중 유지보수 단계에서의 소요 비용은 전체 소프트웨어 개발 비용의 약 60%를 차지한다. 따라서, 비용의 관점에서 본다면, 전체 소프트웨어의 개발 비용을 감소시키기 위해서는 유지보수에 소요되는 비용을 감소시키는 방법이 반드시 이루어져야 한다.
소프트웨어의 유지보수 작업을 수행하기 위해서는 먼저, 기존의 시스템을 이해하는 것이 선행되어야 한다. 왜냐하면, 유지보수 작업을 수행하기 위해 개발자가 기존의 시스템을 변경하거나, 확장하는 과정에서, 특정 기능의 변경이 전체 시스템에 미치는 영향을 정확하게 파악하고 있어야 하기 때문이다.
그럼에도 불구하고, 유지보수 단계에서의 시스템에 대한 이해 및 검토작업은 실제 소프트웨어 개발현장에서는 개발자들의 모델링에 대한 거부감 및 모델링 기술의 습득이 부족하는 등의 요인으로 인하여 원활히 수행되지 않는 실정이다. 이에 따라, 소프트웨어 설계 모델의 부재로 인해, 유지보수 대상이 되는 시스템을 파악하는 것이 시스템 전체의 유지보수 시간의 약 30%가 소요되고 있는 문제점이 발생했다.
상술한 바와 같이, 시퀀스 다이어그램의 생성 방법 및 시스템에 대한 선행기술을 살펴보면 다음과 같다. 선행기술 1은 한국공개특허 제2004-0024923호(2004.03.24)로서, 소프트웨어 유지보수성 측정 방법 및 시스템에 관한 것이다. 이러한 선행기술 1은 내장형, 반내장형 및 도립형의 소프트웨어를 절차지향, 객체지향, 컴포넌기반 개발방식, 또는 고급 프로그래밍언어에 의한 산출물을 기반으로 소프트웨어 유지보수성을 측정 또는 예측하는 방법 및 시스템에 있어서, 소프트웨어의 유지보수성을 자동적으로 측정하기 위한 대상 및 환경변수 입력부; 소프트웨어 요구사항 명세서를 분석하고 측정정보를 추출하는 소프트웨어 요구사항 명세서 분석엔진; 소프트웨어 유지보수성 측정기준을 계획, 생성, 관리 및 제공하는 소프트웨어 유지보수성 측정기준 데이터베이스; 상기 소프트웨어 유지보수성 측정기준 데이터베이스를 이용하고, 상기 소프트웨어 요구사항 명세서 분석엔진으로 부터의 추출된 정보에 기초하여 소프트웨어 유지보수성 측정기준을 설정하는 소프트웨어 유지보수성 측정기준 설정엔진; 소프트웨어의 유지보수성을 예측하는데 이용되는 통계적 또는 수리적 소프트웨어 유지보수성 예측모델을 계획, 생성, 관리, 제공하는 소프트웨어 유지보수성 예측모델베이스; 소프트웨어 규모 및 복잡도 측정결과 데이터베이스, 소프트웨어 기능 측정결과 데이터베이스, 소프트웨어 신뢰성 측정결과 데이터베이스에서 제공된 정보를 적용하고, 설정된 기준, 선정된 예측모델, 추출된 측정정보에 의하여 소프트웨어의 유지보수성을 측정하는 소프트웨어 유지보수성 측정엔진; 측정결과를 출력하는 측정결과 출력부를 포함하여 구성됨으로써, 다양한 소프트웨어 응용분야, 개발방법 및 프로그래밍언어의 환경에서도 소프트웨어의 유지보수성을 사용자가 원하는 형식으로 편리하게 자동적으로 측정하여 소요시간 및 경제적 손실을 최소화하는 효과가 있다. 또한, 본 발명은 편리하고 정확한 소프트웨어 유지보수성 측정결과를 제공하여 사업관리 및 엔지니어링의 보다 체계적인고 과학적인 접근을 가능하게 하고자 함이다. 또한, 본 발명의 용도 또는 적용분야는 기업경영, 엔지니어링 및 프로젝트 관리이며, 생산성, 품질, 비용, 기간, 위험, 인력 및 자원을 측정 또는 예측함에 효과가 있다.
또한, 선행기술 2는 한국공개특허 제2003-0018720호(2003.03.06)로서, 소프트웨어 유지보수를 위한 소스 코드 브라우저 자동생성 방법 및 시스템에 관한 것이다. 이러한 선행기술 2는 소프트웨어 유지 보수를 위한 소스 코드 브라우저 생성 방법에 있어서, 소스 코드에 대해 컴파일 및 번역을 수행하고 상기 소스 코드 브라우저 생성에 필요한 파일 및 함수 정보를 추출하는 제1단계; 상기 소스 코드를 파싱(parsing)하는 제2단계; 상기 파싱된 소스 코드로부터 키워드를 추출하여 하이라이팅하는 제3단계; 상기 파싱된 소스 코드로부터 주석문을 추출하여 하이라이팅하는 제4단계; 상기 추출된 파일 및 함수 정보를 기초로 상기 소스 코드의 전역변수/매크로/자료구조와 상기 전역변수/매크로/자료구조에 각각 대응하는 정보간에 하이퍼 링크를 생성하는 제5단계; 및 사용자로부터 입력된 블럭의 시작점을 기초로 소스 코드의 블록 구조를 분석하는 제6단계;를 포함함으로써, 소스 코드의 판독성 및 추적성이 용이한 고품질의 소스 코드 브라우저를 통해 프로그램 유지 보수자에게 소스코드에 대한 하이라이팅(highlighting)기능뿐만 아니라, 사용자 정의 변수의 정보를 이용하여 보다 편리하게 하이퍼(hyper)기능을 제공할 수 있어 사용자의 프로그램 이해도를 높일수 있으며, 블록의 시작과 끝을 쉽게 구분할수 있도록 실시간적으로 검색해 줄수 있어 프로그램을 유지 보수 하는데 있어, 시각적으로 이해도를 높일 뿐만 아니라, 각 파일 또는 함수내의 소스 크기(size)를 이용하여 토탈 라인, 주석 라인, 공백라인, 실행 라인 등의 소프트웨어 메트릭(metric) 정보를 제공함으로써 유지보수되어야 할 소스 코드를 분석하는데 용이하게 사용됨으로써, 프로그램의 유지보수 작업에 필요한 시간과 노력 및 비용을 최소화할 수 있으며, 다양한 형태를 갖는 소스 코드 브라우저를 자동 생성할 수 있는 효과가 있다.
상기와 같은 종래 기술의 문제점을 해결하기 위해, 본 발명은 유지보수를 수행하고자 하는 소프트웨어에 대한 시퀀스 다이어그램을 생성함으로써, 생성된 시퀀스 다이어그램을 통해 상기 소프트웨어의 기능 흐름에 대한 분석을 빠르고 용이하게 할 수 있는 시퀀스 다이어그램의 생성 방법 및 시스템을 제공하고자 한다.
위와 같은 과제를 해결하기 위한 본 발명의 한 실시 예에 따른 시퀀스 다이어그램의 생성 방법은 입력부가 유지 또는 보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는 단계; 전처리부가 입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거하는 단계; 호출트리생성부가 상기 소스코드와 실행 추적 로그정보로부터 노드간 메소드 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성하는 단계; 프루닝처리부가 생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 단계; 호출트리통합부가 노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합하는 단계; 및 시퀀스 다이어그램 생성부가 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 단계;를 포함한다.
특히, 상기 소스코드로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리를 생성하는 호출트리생성부가 정적 호출 트리 및 동적 호출 트리를 생성하는 단계를 포함할 수 있다.
특히, 상기 실행 추적 로그정보로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 동적 호출 트리를 생성하는 상기 호출트리생성부가 정적 호출 트리 및 동적 호출 트리를 생성하는 단계를 포함할 수 있다.
특히, 상기 실행 추적 로그정보로부터 획득한 노드간 메소드에 대하여 상기 메소드의 수행 시작 지점과 종료 지점을 기록하는 로그정보를 이용하여 동적 호출 트리를 생성하는 상기 호출트리생성부가 정적 호출 트리 및 동적 호출 트리를 생성하는 단계를 포함할 수 있다.
보다 바람직하게는 미리 정해진 속성값을 반환하거나, 범용적으로 사용되거나, 반복 수행되는 메소드를 기능 흐름에 불필요한 메소드로 판단하는 상기 프루닝처리부가 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 단계를 포함할 수 있다.
보다 바람직하게는 통합된 호출 트리의 구조로부터 메소드의 호출 순서 정보를 획득하고, 획득한 메소드의 호출 순서정보에 기초하여 상기 메소드를 시퀀스 다이어그램으로 변환하는 상기 시퀀스 다이어그램 생성부가 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 단계를 포함할 수 있다.
위와 같은 과제를 해결하기 위한 본 발명의 다른 실시 예에 따른 시퀀스 다이어그램의 생성 시스템은 유지보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는 입력부; 입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거하는 전처리부; 상기 소스코드와 실행 추적 로그정보로부터 노드간 메소드 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성하는 호출트리생성부; 생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 프루닝처리부; 노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합하는 호출트리통합부; 및 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 시퀀스다이어그램생성부;를 포함한다.
특히, 하나의 루트노드를 포함하여 메소드를 호출하는 복수 개의 노드 집합, 한 방향으로 호출이 이루어지는 메소드의 집합 및 반복 호출이 이루어지는 메소드의 집합 중 적어도 하나를 포함하도록 이루어지는 호출 트리의 구조를 포함할 수 있다.
특히, 클래스의 이름, 메소드 이름, 반환값의 매개변수, 메소드의 호출 시 수행되는 명령어 집합, 현재 호출 상황 중 적어도 하나를 포함하는 노드를 포함할 수 있다.
특히, 상기 소스코드로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리를 생성하는 호출트리생성부를 포함할 수 있다.
특히, 상기 실행 추적 로그정보로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 동적 호출 트리를 생성하는 호출트리생성부를 포함할 수 있다.
특히, 상기 실행 추적 로그정보로부터 획득한 노드간 메소드에 대하여 상기 메소드의 수행 시작 지점과 종료 지점을 기록하는 로그정보를 이용하여 동적 호출 트리를 생성하는 호출트리생성부를 포함할 수 있다.
특히, 미리 정해진 속성값을 반환하거나, 범용적으로 사용되거나, 반복 수행되는 메소드를 기능 흐름에 불필요한 메소드로 판단하는 프루닝처리부를 포함할 수 있다.
보다 바람직하게는 통합된 호출 트리의 구조로부터 메소드의 호출 순서 정보를 획득하고, 획득한 메소드의 호출 순서정보에 기초하여 상기 메소드를 시퀀스 다이어그램으로 변환하는 시퀀스 다이어그램 생성부를 포함할 수 있다.
본 발명의 시퀀스 다이어그램의 생성 방법 및 시스템은 유지보수를 수행하고자 하는 소프트웨어의 기능의 흐름을 나타내는 시퀀스 다이어그램을 생성함으로써, 생성된 시퀀스 다이어그램을 분석하여 상기 소프트웨어의 기능 흐름을 빠르고 용이하게 분석할 수 있는 효과가 있다.
또한, 본 발명의 시퀀스 다이어그램의 생성 방법 및 시스템은 유지보수를 수행하고자 하는 소프트웨어의 기능 흐름을 시퀀스 다이어그램의 분석을 통해 빠르게 분석함으로써, 상기 소프트웨어의 분석시간을 감소시킴에 따라 상기 소프트웨어의 유지보수에 소요되는 시간 및 비용을 감소시킬 수 있는 효과가 있다.
도 1은 본 발명의 일 실시 예에 따른 시퀀스 다이어그램의 생성 시스템의 블록도이다.
도 2는 본 발명의 다른 실시 예에 따른 시퀀스 다이어그램의 생성 방법의 순서도이다.
도 3은 정적 호출 트리 구조의 예를 나타낸 도면이다.
도 4는 제2 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 5는 제3 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 6은 제4 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 7은 제5 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 8은 본 발명의 시퀀스 다이어그램의 생성을 구현한 툴을 나타낸 블록도이다.
도 9는 실행 추적 로그정보와 제거할 메시지를 나타내는 도면이다.
도 10은 생성된 시퀀스 다이어그램을 나타낸 도면이다.
도 11은 프루닝처리부의 푸르닝(Pruning) 처리 알고리즘을 나타낸 도면이다.
도 12는 호출 트리의 통합 과정 알고리즘을 나타낸 도면이다.
도 13은 본 발명을 실험한 대상의 시스템 정보를 나타낸 도면이다.
도 14는 호출 트리의 노드 수를 비교한 도면이다.
이하, 본 발명을 바람직한 실시 예와 첨부한 도면을 참고로 하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며, 여기에서 설명하는 실시 예에 한정되는 것은 아니다.
이하, 도 1을 참조하여, 본 발명의 일 실시 예에 따른 시퀀스 다이어그램의 생성 시스템에 대하여 자세히 살펴보도록 한다.
도 1은 본 발명의 일 실시 예에 따른 시퀀스 다이어그램의 생성 시스템의 블록도이다.
도 1에 도시된 바와 같이, 본 발명의 시퀀스 다이어그램의 생성 시스템(100)은 입력부(110), 전처리부(120), 호출트리생성부(130), 프루닝처리부(140), 호출트리통합부(150) 및 시퀀스 다이어그램 생성부(160)를 포함한다.
입력부(110)는 유지보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는다.
전처리부(120)는 입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거한다.
호출트리생성부(130)는 상기 소스코드와 실행 추적 로그정보로부터 노드간 메소드 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성한다. 이와 같이, 생성된 정적 또는 동적 호출 트리의 구조는 하나의 루트노드(root node)를 포함하여 메소드를 호출하는 복수 개의 노드 집합, 한 방향으로 호출이 이루어지는 메소드의 집합 및 반복 호출이 이루어지는 메소드의 집합 중 적어도 하나를 포함하도록 이루어진다. 이때, 메소드를 호출하는 상기 노드는 클래스의 이름, 메소드의 이름, 반환값의 매개변수, 메소드의 호출 시 수행되는 명령어 집합, 현재 호출 상황 중 적어도 하나를 포함할 수 있다. 이러한 호출트리생성부(130)는 상기 소스코드로부터 획득한 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리를 생성하는데, 이때, 이클립스의 AST 파서(Parser)로 생성한 AST(Abstract Syntax Tree)를 이용하여 정적 호출 트리를 생성한다. 또한 상기 호출트리생성부(130)는 상기 실행 추적 로그정보로부터 획득한 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 동적 호출 트리를 생성한다. 특히, 상기 호출트리생성부(130)는 상기 실행 추적 로그정보로부터 획득한 호출된 메소드에 대하여 상기 메소드의 수행 시작 지점과 종료 지점을 기록하는 로그정보를 이용하여 동적 호출 트리를 생성하는데, 이때, 오픈 소스인 Btrace 툴을 이용하여 동적 호출 트리를 생성한다.
프루닝처리부(140)는 생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 노드를 제거한다. 이러한 프루닝처리부(140)는 미리 정해진 속성값을 반환하거나, 널리 범용적으로 사용되거나, 수행되는 메소드를 기능 흐름에 불필요한 메소드로 판단한다.
호출트리통합부(150)는 노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합한다.
시퀀스 다이어그램 생성부(160)는 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성한다. 이러한 시퀀스 다이어그램 생성부(160)는 통합된 호출 트리의 구조로부터 메소드의 호출 순서정보를 획득하고, 획득한 메소드의 호출 순서정보에 기초하여 메소드를 시퀀스 다이어그램으로 변환한다.
이하, 도 2를 참조하여, 본 발명의 다른 실시 예에 따른 시퀀스 다이어그램의 생성 방법에 대하여 자세히 살펴보도록 한다.
도 2는 본 발명의 다른 실시 예에 따른 시퀀스 다이어그램의 생성 방법의 순서도이다.
도 2에 도시된 바와 같이, 본 발명의 시퀀스 다이어그램의 생성 방법은 먼저, 입력부(110)가 유지보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는다(S210).
전처리부(120)가 입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거한다(S220).
특히, 종래의 시퀀스 다이어그램은 메소드의 호출 깊이 즉, 처음 호출되는 메소드로부터 몇 단계까지 호출되는 메소드를 포함할 것인지에 따라 시퀀스 다이어그램의 복잡도가 크게 차이가 나며, 소스코드로 구현되어 있는 클래스 외에 자바 표준 라이브러리, 프레임워크의 사용 등으로 참조가 되는 오브젝트를 모두 포함하게 되어 복잡도가 상승한다. 또한, 소스코드 상에 존재하는 모든 내용이 반영되는 경우에 시퀀스 다이어그램의 복잡도가 매우 커지게 된다. 따라서, 추후 생성되는 시퀀스 다이어그램의 복잡도를 감소시키고, 대상 소프트웨어의 분석 범위를 설정하기 위해, 소프트웨어의 초기 생성 시 참조되는 오브젝트를 사용자가 지정한 패키지로 한정하고, 시퀀스 다이어그램에 표현되는 오브젝트의 수준을 메모리 상에서 생성되는 모든 오브젝트를 구별하지 않고, 오브젝트의 타입인 클래스 수준으로 추상화하여 시퀀스 다이어그램에 표현한다. 이와 더불어, 사용자에 의해 선택되지 않은 자바 표준 라이브러리 또는 상용 라이브러리 등을 제외함으로써, 자동으로 내포 수준 또한 제한된다.
호출트리생성부(130)가 상기 소스코드와 실행 추적 로그정보로부터 메소드 호출 관계를 검출하고, 검출된 메소드 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성하는데(S230), 이때, 호출트리생성부(130)가 상기 소스코드로부터 획득한 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리를 생성한다. 또는 상기 호출트리생성부(130)가 상기 실행 추적 로그정보로부터 획득한 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 동적 호출 트리를 생성한다.
특히, 상기 호출트리생성부(130)가 상기 실행 추적 로그정보로부터 획득한 호출된 메소드에 대하여 상기 메소드의 수행 시작 지점과 종료 지점을 기록하는 로그정보를 이용하여 동적 호출 트리를 생성한다.
즉, 대상 소프트웨어의 각 기능을 수행하는 메소드의 호출이 이루어지는 흐름이 호출 트리 형태로 표현될 수 있다. 이러한 호출 트리의 구조는 메소드의 호출관계를 도식화한 것으로서, 메소드를 노드로 호출하는 관계를 에지(edge)로 표현한 그래프의 일종이다. 이러한 호출 트리의 구조는 일반적인 그래프와 달리 메소드로부터 다른 메소드까지 한 방향성만을 가지며, 메소드간 순환관계는 갖지 않는다. 또한, 상기 호출 트리 구조는 하나의 메소드에 대하여 호출의 시작을 나타내는 루트 노드(root node)를 가짐으로써, 모든 노드가 하나의 루트 노드와 거리를 나타내는 레벨(단계)를 갖는다. 이에 따라, 메소드 호출 순서를 중점적으로 나타내는 시퀀스 다이어그램과 달리, 호출 트리는 호출하는 메소드(caller)와 호출되는 메소드(callee)의 관계에 대하여 초점을 맞춤으로써, 특정 메소드로부터 시작되는 내부 흐름을 파악하는데 매우 유용하다.
이하, 도 3을 참조하여 호출 트리 구조 중 정적 호출 트리 구조를 자세히 살펴보면 다음과 같다.
도 3은 정적 호출 트리 구조의 예를 나타낸 도면이다.
도 3에 도시된 바와 같이, 정적 호출 트리를 구성하는 각각의 노드는 사각형으로 표현되며, 이때 노드에서 표현되는 A.a는 클래스 A에 속한 메소드 a를 나타낸다. 특히, 정적 호출 트리를 생성하기 위해 사용되는 AST는 호출하는 메소드의 클래스를 알 수 없기 때문에 이클립스의 프로젝트 탐색기의 트리 구조로부터 호출하는 메소드의 클래스 정보를 획득한다. 이때, 각각의 노드는 클래스와의 관계와 메소드의 시그니처를 속성으로서 갖는다. 특히, 반복적으로 나타나는 메소드의 호출 감소를 나타내기 위해, 반복적으로 나타나는 메소드를 '반복 메소드 블록'으로서 정의하고, 사각형으로 표시한 후, 순환하는 화살표로서 표시된다. 즉, 도 3에 도시된 바와 같이, 상기 노드 C.c와 노드 F.f를 하나의 사각형으로 묶고, 이러한 사각형에 순환하는 화살표를 표시함으로써, 노드 C.c와 노드 F.f가 반복적으로 나타나는 노드인 것을 표시하였다.
더불어, 정적 호출 트리 상에서 두 번 이상 나타나는 메소드 노드가 존재하는 경우에는 해당하는 메소드 노드의 중복된 자식 노드의 표현을 생략하고, 해당하는 메소드 노드에 *을 추가로 표시한다. 즉, 도 3에 도시된 바와 같이, 노드 B.b가 두 번 출현하였으므로, 상기 노드 B.b의 두 번째 출현 시, 상기 노드 B.b의 자식 노드인 D.d와, 노드 E.e의 표기를 생략하고, *이 추가로 표시한다.
더불어, 소스코드로부터 획득한 호출 관계에 따른 호출트리와의 매핑관계를 살펴보도록 한다.
프루닝처리부(140)가 생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 노드를 제거한다(S240). 이러한 프루닝처리부(140)가 미리 정해진 속성값을 반환하거나, 범용적으로 사용되는 메소드를 기능 흐름에 불필요한 메소드로 판단하고, 이와 같이 불필요하다고 판단한 메소드 정보를 갖는 노드를 상기 정적 호출 트리 또는 동적 호출 트리로부터 제거한다.
이하, 상기 불필요한 메소드에 대하여 자세히 살펴보도록 한다.
예를 들어, Getter method 는 미리 정해진 attribute의 값을 반환하도록 만들어진 메소드로 값을 읽기 위해, attribute에 접속하는 것을 제외하고, 시스템의 기능에 영향을 미치지 않는 메소드를 말한다. 또한, Utility method 는 특정 기능에 한정되는 것이 아닌 시스템의 다양한 부분에서 공통적으로 사용될 수 있는 메소드를 나타내는 것으로서, 많은 소프트웨어 시스템에서는 시스템의 기능을 구현하기 위해 도움을 주는 유틸리티를 사용하며, 이러한 유틸리티는 서브루틴 또는 서브시스템 또는 별도로 구현되는 클래스가 될 수 있다.
이와 같이 상술한 메소드를 기능 흐름에 불필요하다고 판단하고, 이러한 메소드의 정보를 갖는 노드를 정적 호출 트리 또는 동적 호출 트리로부터 제거할 수 있다.
따라서, 추후 생성되는 시퀀스 다이어그램에 포함되는 메시지 수를 줄임으로써, 시퀀스 다이어그램의 크기를 줄이고, 불필요한 정보를 제거하여 기능의 흐름을 최대한 단순하고 명료하게 나타낼 수 있다.
호출트리통합부(150)가 불필요한 메소드 정보를 갖는 노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합한다(S250).
이러한 호출 트리의 통합과정은 미리 설정된 제1 내지 제5 통합규칙에 기초하여 이루어진다.
먼저, 제1 통합규칙은 정적 호출 트리와 동적 호출 트리간 공통된 메소드 노드를 식별한다.
즉, 동적 호출 트리 TD의 현재 메소드 노드인 M(i, d)와 정적 호출 트리 TS의 현재 메소드 노드 M(j, d)가 동일한 메소드 노드인 경우에는 통합 호출 트리 TC에 M(i, d)를 추가한다.
또한, 제2 통합규칙은 메시지 호출 시퀀스의 중복을 제거한다.
예를 들어, 정적 호출 트리 TS의 현재 메소드 노드 M(j, d)가 반복 메소드 블록에 해당하는 경우에, 동적 호출 트리 TD의 d 번째 깊이에서 동일한 메소드의 반복이 존재하는지 검색하고, 반복적으로 동일한 메소드 노드들의 시퀀스가 존재한다면 통합 호출 트리 TC에 정적 호출 트리 TS의 반복 메소드 블록을 추가한다.
도 4는 제2 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 4(a)에 도시된 바와 같이, 정적 호출 트리 TS에 반복 메소드 블록(C.c, D,d) 이 존재하고, 동적 호출 트리 TD에 동일한 메소드들의 반복 시퀀스(C.c → D.d → C.c → D.d)가 존재하는 것을 알 수 있다. 이에 따라, 상기 제2 통합규칙을 적용하여 정적 호출 트리 TS와 동적 호출 트리 TD를 통합하면, 통합 호출 트리 TC는 반복 메소드 블록 C.c, D.d 를 가지게 된다.
특히, 도 4(b)는 이후, 동적 호출 트리 TD로부터 생성되는 시퀀스 다이어그램을 나타내고, 도 4(c)는 이후, 통합 호출 트리 TC로부터 생성되는 시퀀스 다이어그램을 나타낸다. 도 4(c)에 도시된 바와 같이, 반복 메소드 블록이 루프 프레임으로 표현됨에 따라, 도 4(b)에 도시된 시퀀스 다이어그램과 비교하여 보다 컴팩트하게 만들 수 있게 한다.
더불어, 제3 통합규칙은 실제로 참여하는 오브젝트를 식별하는 것이다.
예를 들어, 동적 호출 트리 TD의 현재 메소드 노드 M(i, d)와 정적 호출 트리 TS의 현재 메소드 노드 M(j, d)가 동일한 시그니처를 갖지만, 상기 두 메소드 노드가 속하는 클래스가 서로 다른 경우에는 상기 두 메소드 노드간에 관계를 검색한다. 이어서, 동적 호출 트리 TD의 현재 메소드 노드 M(i, d)의 클래스가 정적 호출 트리 TS의 현재 메소드 노드 M(j, d)의 클래스의 자식 클래스에 해당하는 경우, 통합 호출 트리 Tc에 상기 동적 호출 트리 TD의 현재 메시지 노드 M(i, d)를 추가한다.
도 5는 제3 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 5에 도시된 바와 같이, 정적 호출 트리의 노드 D.d 와 동적 호출 트리 TD의 노드 E.d에 있는 메소드 d()가 식별되었고, 클래스 E는 클래스 D의 자식 클래스이므로, 동적 호출 트리 TD의 노드 E.d가 상기 제3 통합규칙에 의해 통합 호출 트리 TC에 추가된다. 이에 따라, 추후 생성되는 시퀀스 다이어그램에서는 실제 호출된 클래스 E의 d()가 메시지로 나타나고, 동적 호출 트리 TD로부터 생성된 시퀀스 다이어그램과 비교하면, 통합 호출 트리 TC로부터 생성된 시퀀스 다이어그램은 실행시점에 실제로 참여하는 클래스를 지정하여 시스템 행위를 보다 명확하게 이해할 수 있도록 한다.
이와 더불어, 제4 통합규칙은 실행되지 않은 메소드를 식별하는 것이다.
예를 들어, 정적 호출 트리 Ts의 현재 메소드 노드 M(i, d)와 동적 호출 트리 TD의 현재 메소드 노드 M(j, d)를 상호 비교하여, 상기 동적 호출 트리 TD의 현재 메소드 노드 M(j, d)가 null이면, 상기 정적 호출 트리 Ts의 현재 메소드 노드 M(i, d)를 통합 호출 트리 Tc에 추가한다.
하지만 이와 달리, 상기 동적 호출 트리 TD의 현재 메소드 노드 M(j, d)가 null이 아니고, 노드 M(i, d)와 다르다면, 상기 정적 호출 트리 Ts의 M(i, d)는 동적 호출 트리 TD의 다음 노드 M(j+1, d)와 다시 비교한다.
이에 따라, 상기 노드 M(j+1, d)가 노드 M(i, d)와 다르거나 null 이면, 통합 호출 트리 Tc에 노드 M(i, d)를 추가한다.
이후, 상기 정적 호출 트리 Ts의 메소드 노드 M(i, d)는 생성된 시퀀스 다이어그램에서 옵션 프레임의 메시지로 표시된다.
도 6은 제4 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 6에 도시된 바와 같이, 정적 호출 트리 Ts의 메소드 노드 D.d는 동적 호출 트리 TD에서는 존재하지 않는데, 이는 클래스 D의 d()메소드는 구현이 되었지만 실행추적로그를 생성할 때 실행되지 않았기 때문이다. 이처럼, 제4 통합규칙을 이용하여 통합 호출 트리 TC에 메소드 노드 D.d가 추가됨으로써, 결과적으로 동적 호출 트리 TD로부터 생성된 시퀀스 다이어그램에서는 누락된 메소드 d()가 Tc로부터 생성된 시퀀스 다이어그램에서 나타내고 있어, 역공학의 커버리지를 향상시킬 수 있다.
마지막으로, 제5 통합규칙은 지연 바인딩 행위를 식별하는 것이다.
예를 들어, 동적 호출 트리 TD의 현재 메소드 노드 M(j, d)와 정적 호출 트리 Ts의 현재 메소드 노드 M(i, d)를 상호 비교한다.
상기 정적 호출 트리 Ts의 현재 메소드 노드 M(i, d)가 null이면, 소스코드로부터 동적 호출 트리 TD의 현재 메소드 노드 M(j,d)를 루트 노드로 갖는 신규 정적 호출 트리 Ts' 생성하고, 생성된 신규 정적 호출 트리 Ts' 의 루트노드를 이전 정적 호출 트리 Ts의 M(i,d) 노드의 다음 이웃 노드로 추가한다.
이때, 상기 M(i, d)가 null이 아니고, M(j, d)와도 다른 경우에는 동적 호출 트리 TD의 현재 메소드 노드 M(j, d) 와 다음 이웃 노드 M(i+1, d)를 상호 비교한다.
상기 다음 이웃노드 M(i+1, d)가 현재 메소드 노드 M(j, d)와 다른 노드이거나, 또는 null 이면, 신규 정적 호출 트리 Ts' 를 생성하고, 생성된 신규 정적 호출 트리 Ts' 의 루트 노드를 이전 정적 호출 트리 Ts의 현재 메소드 노드 M(i, d)의 다음 이웃 노드로 추가한다.
이후, 상기 동적 호출 트리 TD의 현재 메소드 노드 M(j, d)와 정적 호출 트리 Ts의 현재 메소드 노드 M(i, d)에서부터 비교를 다시 시작한다.
도 7은 제5 통합규칙을 적용하여 호출 트리의 통합 과정을 나타낸 도면이다.
도 7에 도시된 바와 같이, 동적 호출 트리 TD의 노드 D.d의 메소드 d()는 정적 호출 트리 Ts에서 식별되지 않는 것을 통해 메소드 d()가 동적 바인딩이 되었음을 알 수 있다. 상기 정적 호출 트리 Ts로부터 생성된 시퀀스 다이어그램은 A.a, B.b, C.c 의 세 가지 메소드 호출들로만 이루어져 있으며, 앞서 설명한 제5 통합규칙을 적용하여 생성된 통합 호출 트리 Tc 로부터 생성된 시퀀스 다이어그램은 메소드 D.d 뿐만 아니라, 다른 메소드 호출들 E.e, F.f, G.g 까지 포함하고 있다. 특히, 정적 호출 트리와 동적 호출 트리의 지속적인 비교과정을 통해 통합 호출 트리 Tc에 제1 통합규칙 및 제4 통합규칙 또한 적용되었으며, 결과적으로 도 10(c)와 같은 최종적인 통합 호출 트리를 확인할 수 있다.
이와 같이, 생성된 시퀀스 다이어그램은 정적 호출 트리와 동적 호출 트리가 통합된 호출 트리를 기반으로 함에 따라, 정적 호출 트리가 갖는 기능 흐름의 단절 문제가 해결되는 것을 알 수 있다. 더불어, 정적 호출 트리를 기반으로 시스템 문맥 정보를 반영함으로써 동적 호출 트리가 갖는 누락되는 기능 흐름에 대한 문제 역시 해결되는 것을 알 수 있다.
이하, 도 8 내지 도 14를 통해 본 발명에 따라 시퀀스 다이어그램을 실제로 구현한 예에 대하여 자세히 살펴보도록 한다.
먼저, 본 실험에서는 이클립스(Eclipse) 프로젝트에서 운용중인 Rich Client Platform(RCP)을 사용하여 개발을 진행하였다. 상기 Rich Client란 스스로 다량의 데이터를 처리하는 클라이언트로서, 서버에 의지하지 않는 프로그램을 말한다. 또한, Graphical Editing Framework을 사용하여 통합된 호출 트리의 정보를 시퀀스 다이어그램의 형태로 생성되도록 하였다.
본 도구의 기반이 된 RCP의 특징과 해당 도구의 시스템 아키텍처를 구성하는 컴포넌트 중 Rich Client Platform(RCP)은 Java 기반의 플랫폼 독립 실행이 가능하며, 기본적인 사용자 인터페이스를 제공하며, Graphical Editing Framework(GEF)는 시각 기반의 고품질 에디터 및 뷰를 쉽게 만들 수 있게 지원하는 이클립스 프레임워크로서, 이클립스 워크벤치 사용자 인터페이스와 통합성을 제공한다.
도 8은 본 발명의 시퀀스 다이어그램의 생성을 구현한 툴(Tool)을 나타낸 블록도이다.
도 8에 도시된 바와 같이, 로그 리더(Log Reader)는 실행 추적 로그와 Java Parser를 통해 소스코드로부터 추출된 호출관계 로그를 분석 데이터로 전환한다.
Call tree Builder는 분석 데이터를 소스코드 기반의 호출 트리와, 실행 추적 기반의 동적 트리 형태로 생성한다.
Call tree pruner는 생성된 두 개의 호출 트리에서 불필요한 메소드 정보와 그 하위 흐름을 제거 한다.
Call tree combiner는 생성된 두 개의 호출 트리를 규칙에 따라 하나의 호출 트리로 통합한다.
Sequence diagram Combiner는 통합된 호출 트리를 읽어 시퀀스 다이어그램의 형태로 변환한다.
Model Editor는 생성된 시퀀스 다이어그램의 정보를 읽어 화면에 표시한다.
Project Manager는 여러 개의 시퀀스 다이어그램을 포함하는 대상 시스템에 대해 하나의 프로젝트 단위로 관리한다.
상술한 시퀀스 다이어그램 툴의 기능 중 유저 인터페이스(UI) 부분에 대하여 자세히 살펴보도록 한다.
도 9는 실행 추적 로그정보와 제거할 메시지를 나타내는 도면이다.
도 9에 도시된 바와 같이, 먼저 1번 부분은 생성되는 시퀀스 다이어그램을 관리하는 프로젝트를 보여 주는 부분이다. 2번 부분은 시퀀스 다이어그램의 이름과 함께 Java Parser를 이용하여 소스코드로부터 추출한 호출 관계 정보를 담고 있는 로그, 자바 프로파일링(Java Profiling) 도구를 이용하여 시스템 실행 시 수행되는 메소드의 정보를 담고 있는 로그를 입력 받는 부분이다. 마지막으로 3번 부분은 입력받은 로그를 기반으로 현재 포함되는 모든 메소드의 정보를 나타낸다. 표시되는 메소드 중 사용자는 제거할 메소드를 선택할 수 있으며, 선택된 정보는 별도의 필터 파일로 저장하여 이후에 다시 사용할 수 있다.
이하, 도 10을 참조하여, 시퀀스 다이어그램의 생성화면에 대하여 살펴보도록 한다.
도 10은 생성된 시퀀스 다이어그램을 나타낸 도면이다.
도 10에 도시된 바와 같이, 로그파일이 모두 입력되고 제거할 메소드를 선택하고 나면 시퀀스 다이어그램이 생성된다. 1번은 생성된 시퀀스 다이어그램을 나타낸다. 2번은 해당 시퀀스 다이어그램 내에 포함된 오브젝트들을 간략하게 나타내고, 3번은 전체 시퀀스 다이어그램을 작게 나타내며, 마지막으로 4번은 시퀀스 다이어그램 내의 오브젝트와 메시지의 속성 정보를 나타낸다. 생성된 시퀀스 다이어그램은 프로젝트에 포함된다.
두 개의 호출 트리를 통합하기 앞서, 사용자가 선택한 메소드 정보를 담고 있는 노드를 제거한다.
이하, 해당 노드를 제거하기 위한 알고리즘을 도 14를 참조하여 살펴보도록 한다.
도 11은 프루닝처리부의 푸르닝(Pruning) 처리 알고리즘을 나타낸 도면이다.
도 11에 도시된 바와 같이, 해당 노드를 제거하기 위한 알고리즘은 수식 1과 같다.
사용자가 선택한 메소드는 filter라는 형태의 데이터로 저장된다(1). 필터에 저장된 모든 메소드에 대해 현재 노드가 가지고 있는 메소드 정보와 동일한지 검사하여(2), 동일한 경우에는 해당 노드를 트리에서 제거한다(3~5). 만약 현재의 노드가 필터에 저장된 메소드 정보들과 동일하지 않을 경우, 탐색은 현재 노드의 자식 노드들로 내려가며, 이를 위해 해당 메소드는 재귀적으로 호출된다(10).
이하에서는 도 12를 참조하여 호출 트리의 통합 과정에 대한 알고리즘에 대하여 살펴보도록 한다.
도 12는 호출 트리의 통합 과정 알고리즘을 나타낸 도면이다.
도 12에 도시된 바와 같이, 프루닝 과정을 통해 정제된 두 개의 호출 트리는 하나의 호출 트리로 통합된다.
먼저, 정적 호출 트리와 동적 호출 트리에서 각각 선택된 노드의 자식 노드들은 S, D의 노드 타입의 배열에 저장되며(1), 두 개의 배열은 하나의 배열로 통합된다. 이때, 상기 통합은 S의 노드들을 기준으로 D의 노드들을 덧붙이는 방법으로 이루어진다. 따라서, D의 모든 노드가 순서대로 S에 통합될 때까지 통합 과정은 반복된다(3). 먼저, D의 노드와 일치하는 노드를 S에서 찾아 해당 노드의 index를 lastIndex에 저장한다(6). lastIndex는 이미 통합이 완료된 지점을 의미한다. 만약 D[1]가 S[3]과 일치 한다면 lastIndex는 3이 되며, 이는 S[0]~ S[2]는 이미 D[1] 이전에 이미 호출 된 메소드로 D[2]의 통합을 고려할 때 살펴볼 필요가 없는 것을 의미한다. 만약 D[id]와 일치하는 노드가 S에 있을 경우(5) 해당 lastIndex를 업데이트하고 해당 노드들의 자식노드들에 대한 통합을 진행하기 위해 통합 메소드를 재귀적으로 호출한다(6).
만약 일치하는 노드가 없을 경우에는 오버라이딩의 관계를 갖는 노드가 존재하는지를 탐색한다(9). 그 다음 오버라이딩 관계를 갖는 노드가 반복 statement를 가질 경우에는 다음 통합 과정을 위해 해당노드의 앞에(12~14), 그렇지 않을 경우에는 해당 노드를 지우고 그 자리를 D[id]가 대체한다(16).
만약 대응되는 노드가 없다면 D[id]를 S의 맨 끝에 붙여 통합한다(19~20).
통합 과정은 현재 대상 노드의 자식 노드들로 내려가며, 이를 위해 해당 메소드는 재귀적으로 호출 된다(22).
본 발명의 효용성을 평가하기 위해 오픈소스 모델링 프로그램인 REQ_Modeler 와 페인팅 프로그램인TerpPaint, 연구용으로 개발된 명세서 및 소스코드 자동생성 도구인 Spec Generator를 대상으로 사례연구를 진행하였으며, 대상 시스템의 정보는 도 13과 다음과 같다.
도 13은 본 발명을 실험한 대상의 시스템 정보를 나타낸 도면이다.
본 발명을 통해 생성된 시퀀스 다이어그램을 활용하는데 있어서, 주로 발생하는 문제점이 동적 호출과 외부 프레임 워크 및 외부 라이브러리의 사용으로 인한 흐름의 불완전성과 시퀀스 다이어그램의 크기였다. 이러한 이유로 실험 대상은 이러한 동적 호출이 빈번하게 발생하는 사용자 인터페이스(UI)의 처리가 중요한 시스템 혹은 외부 라이브러리를 주로 활용하는 것으로 선택하였으며. 실험을 위해 구현된 도구인 Reverse Sequence Diagram Tool에서 분석 가능한 Java로 개발된 것을 선정하였다. 또한 실험의 객관성을 확보하기 위해 REQ_Modeler와 TerpPaint는 실행 가능한 형태로 배포된 프로그램 중 기능을 추출할 근거가 될 수 있는 사용자 매뉴얼과 소스코드가 함께 공개 되어있는 오픈 소스 프로그램들 중 서로 다른 카테고리에서 선정되었다.
실험을 위해, 대상 시스템에서 대표성을 갖는 기능들을 대상으로 정적 분석 도구인 Togeter와 동적 분석 도구인 TPTP, 그리고 본 연구에서 제안한 방식으로 생성한 시퀀스 다이어그램을 비교 분석하였다.
도 14는 호출 트리의 노드 수를 비교한 도면이다.
도 14에 도시된 바와 같이, 선정 기능들을 대상으로 본 발명에 따라, 생성된 정적 호출 트리, 동적 호출 트리, 통합 트리의 크기를 알 수 있다.
실험을 위해, REQ_Modeler는 사용 매뉴얼을 기반으로 16개의 기능을 추출했으며, 그 중 시나리오가 유사한 기능에 대해 하나의 대표 기능, 즉, 클래스 생성, 유스 케이스 생성, 액터 생성과 같이 화면상에 오브젝트가 생성되는 기능에 대해서는 클래스 생성 기능을 대표 기능으로 하여 8개의 대표 기능(1~7)을 추출하였다. 동일한 방법으로 TerpPaint에서도 5개의 기능(8~12)을 추출하였으며, Spec Generator에서는 2개의 기능(13~14)를 추출하여 실험을 수행하였다. ①열은 정적 호출 트리의 크기를 나타내고, ②열은 동적 호출 트리의 크기를 나타낸다. 상기 ③열은 ①, ②의 호출 트리를 규칙에 따라 통합한 트리의 크기이다. 이러한 트리 크기의 비교는 크게 세가지로 분류할 수 있다.
먼저, 정적 호출 트리의 흐름의 단절된 경우에는, 기능의 실행에 소스 코드만으로는 파악할 수 없는 동적 호출 흐름이 존재한다. REQ_Modeler와 TerpPaint는 사용자 인터페이스(UI) 관련 로직들이 동적 호출로 구성되어 있고 대부분의 기능이 상기 로직을 거치기 때문에 이러한 수치가 두드러지게 나타난 것을 알 수 있다.
두 번째, 동적 호출 트리의 흐름의 누락된 경우에는 실행 추적만으로는 파악되지 않았던 다양한 시스템 문맥에 의한 흐름이 존재한다. 예를 들어, REQ_Modeler의 클래스 이동, 삭제, 연결 등(4,5,6)에서 이러한 경우가 나타나는데, 기능이 수행될 때, 클래스의 상태에 따라 기능상의 여러 흐름 중 특정 흐름만 실행되었기 때문이다.
세 번째, 동적 호출 트리의 중복된 메소드 포함된 경우에는 반복문 등으로 인해 특정 로직의 반복이 나타난 경우이다. 특정 정보를 반복적으로 읽어와 변환하는 SpecGenerator(13,14)에서 나타났으며, 마우스를 드래그 하는 동안의 동작을 계속 보여주기 위해, 특정 메소드를 계속 호출하는 TerpPaint의 드래그(8,9)와 정해진 영역을 일정한 색으로 채우기 위해 해당 픽셀 수 만큼 메소드를 호출하는 TerpPaint의 페인트통(11)의 경우에서 나타났다.
상술한 세 가지 경우 가운데, 첫 번째의 경우는 주로 정적 분석 기반에서, 두 번째와 세 번째 경우는 동적 분석 기반에서 나타나는 문제로서, 수많은 연구에서 지적되어 왔으며, 본 발명에 따른 통합된 트리가 상술한 3가지 유형의 문제를 해결한 것을 알 수 있다.
또한, 이러한 시퀀스 다이어그램의 생성 방법 및 시스템은 컴퓨터로 실행하기 위한 프로그램이 기록된 컴퓨터 판독가능 기록매체에 저장될 수 있다. 이때, 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다. 컴퓨터가 읽을 수 있는 기록 장치의 예로는 ROM, RAM, CD-ROM, DVD±ROM, DVD-RAM, 자기 테이프, 플로피 디스크, 하드 디스크(hard disk), 광데이터 저장장치 등이 있다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 장치에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
본 발명의 시퀀스 다이어그램의 생성 방법 및 시스템은 유지보수를 수행하고자 하는 소프트웨어의 기능의 흐름을 나타내는 시퀀스 다이어그램을 생성함으로써, 생성된 시퀀스 다이어그램을 분석하여 상기 소프트웨어의 기능 흐름을 빠르고 용이하게 분석할 수 있는 효과가 있다.
또한, 본 발명의 시퀀스 다이어그램의 생성 방법 및 시스템은 유지보수를 수행하고자 하는 소프트웨어의 기능 흐름을 시퀀스 다이어그램의 분석을 통해 빠르게 분석함으로써, 상기 소프트웨어의 분석시간을 감소시킴에 따라 상기 소프트웨어의 유지보수에 소요되는 시간 및 비용을 감소시킬 수 있는 효과가 있다.
상기에서는 본 발명의 바람직한 실시 예에 대하여 설명하였지만, 본 발명은 이에 한정되는 것이 아니고 본 발명의 기술 사상 범위 내에서 여러 가지로 변형하여 실시하는 것이 가능하고 이 또한 첨부된 특허청구범위에 속하는 것은 당연하다.
110: 입력부 120: 전처리부
130: 호출트리 생성부 140: 프루닝처리부
150: 호출트리 통합부 160: 시퀀스 다이어그램 생성부

Claims (15)

  1. 입력부가 유지보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는 단계;
    전처리부가 입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거하는 단계;
    호출트리생성부가 상기 소스코드와 실행 추적 로그정보로부터 노드간 메소드 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성하는 단계;
    프루닝처리부가 생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 단계;
    호출트리통합부가 불필요한 메소드 정보를 갖는 노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합하는 단계; 및
    시퀀스 다이어그램 생성부가 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 단계;
    를 포함하는 시퀀스 다이어그램의 생성 방법.
  2. 제1항에 있어서,
    상기 호출트리생성부가 정적 호출 트리 및 동적 호출 트리를 생성하는 단계는
    상기 소스코드로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리를 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성 방법.
  3. 제1항에 있어서,
    상기 호출트리생성부가 정적 호출 트리 및 동적 호출 트리를 생성하는 단계는
    상기 실행 추적 로그정보로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 동적 호출 트리를 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성 방법.
  4. 제3항에 있어서,
    상기 호출트리생성부가 정적 호출 트리 및 동적 호출 트리를 생성하는 단계는
    상기 실행 추적 로그정보로부터 획득한 노드간 메소드에 대하여 상기 메소드의 수행 시작 지점과 종료 지점을 기록하는 로그정보를 이용하여 동적 호출 트리를 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성 방법.
  5. 제1항에 있어서,
    상기 프루닝처리부가 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 단계는
    미리 정해진 속성값을 반환하거나, 범용적으로 사용되거나, 반복 수행되는 메소드를 기능 흐름에 불필요한 메소드로 판단하는 것을 특징으로 하는 시퀀스 다이어그램의 생성 방법.
  6. 제1항에 있어서,
    상기 시퀀스 다이어그램 생성부가 통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 단계는
    통합된 호출 트리의 구조로부터 메소드의 호출 순서 정보를 획득하고, 획득한 메소드의 호출 순서정보에 기초하여 상기 메소드를 변환하여 시퀀스 다이어그램을 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성 방법.
  7. 삭제
  8. 유지보수를 수행하고자 하는 소프트웨어에 대한 소스코드와 실행 추적 로그정보를 입력받는 입력부;
    입력받은 상기 소스코드와 실행 추적 로그정보에 대하여 불필요한 오브젝트를 제거하는 전처리부;
    상기 소스코드와 실행 추적 로그정보로부터 노드간 메소드 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리 및 동적 호출 트리를 생성하는 호출트리생성부;
    생성된 상기 정적 호출 트리와 동적 호출 트리 내 기능 흐름에 불필요한 메소드 정보를 갖는 적어도 하나의 노드를 제거하는 프루닝처리부;
    노드가 제거된 상기 정적 호출 트리와 동적 호출 트리를 하나의 호출 트리로 통합하는 호출트리통합부; 및
    통합된 하나의 호출 트리를 변환하여 시퀀스 다이어그램을 생성하는 시퀀스다이어그램생성부;
    를 포함하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  9. 제8항에 있어서,
    상기 호출 트리의 구조는
    하나의 루트노드(root node)를 포함하여 메소드를 호출하는 복수 개의 노드 집합, 한 방향으로 호출이 이루어지는 메소드의 집합 및 반복 호출이 이루어지는 메소드의 집합 중 적어도 하나를 포함하도록 이루어지는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  10. 제9항에 있어서,
    상기 노드는
    클래스의 이름, 메소드 이름, 반환값의 매개변수, 메소드의 호출 시 수행되는 명령어 집합, 현재 호출 상황 중 적어도 하나를 포함하는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  11. 제8항에 있어서,
    상기 호출트리생성부는
    상기 소스코드로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 정적 호출 트리를 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  12. 제8항에 있어서,
    상기 호출트리생성부는
    상기 실행 추적 로그정보로부터 획득한 노드간 메소드의 호출 관계를 검출하고, 검출된 호출관계에 기초하여 동적 호출 트리를 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  13. 제12항에 있어서,
    상기 호출트리생성부는
    상기 실행 추적 로그정보로부터 획득한 노드간 메소드에 대하여 상기 메소드의 수행 시작 지점과 종료 지점을 기록하는 로그정보를 이용하여 동적 호출 트리를 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  14. 제8항에 있어서,
    상기 프루닝처리부는
    미리 정해진 속성값을 반환하거나, 범용적으로 사용되거나, 반복 수행되는 메소드를 기능 흐름에 불필요한 메소드로 판단하는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
  15. 제11항에 있어서,
    상기 시퀀스 다이어그램 생성부는
    통합된 호출 트리의 구조로부터 메소드의 호출 순서 정보를 획득하고, 획득한 메소드의 호출 순서정보에 기초하여 상기 메소드를 변환하여 시퀀스 다이어그램을 생성하는 것을 특징으로 하는 시퀀스 다이어그램의 생성을 위한 프로그램을 기록한 컴퓨터 판독가능한 기록매체.
KR20130043573A 2013-04-19 2013-04-19 시퀀스 다이어그램의 생성 방법 및 시스템 KR101488188B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR20130043573A KR101488188B1 (ko) 2013-04-19 2013-04-19 시퀀스 다이어그램의 생성 방법 및 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR20130043573A KR101488188B1 (ko) 2013-04-19 2013-04-19 시퀀스 다이어그램의 생성 방법 및 시스템

Publications (2)

Publication Number Publication Date
KR20140125949A KR20140125949A (ko) 2014-10-30
KR101488188B1 true KR101488188B1 (ko) 2015-02-06

Family

ID=51995461

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20130043573A KR101488188B1 (ko) 2013-04-19 2013-04-19 시퀀스 다이어그램의 생성 방법 및 시스템

Country Status (1)

Country Link
KR (1) KR101488188B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107644103B (zh) * 2017-10-16 2020-06-09 北京锐安科技有限公司 一种可追溯信息来源的信息存储的方法和系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090307654A1 (en) 2008-06-06 2009-12-10 Hiroshi Ishikawa System, method and computer program for generating sequence diagram
KR20110088846A (ko) * 2010-01-29 2011-08-04 서강대학교산학협력단 상태 기반의 요구사항 명세 생성 방법 및 장치, 그 기록 매체
KR20120074937A (ko) * 2010-12-28 2012-07-06 전자부품연구원 컴포넌트 기반 프로그램의 동작 시퀀스 다이어그램 자동 생성 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090307654A1 (en) 2008-06-06 2009-12-10 Hiroshi Ishikawa System, method and computer program for generating sequence diagram
KR20110088846A (ko) * 2010-01-29 2011-08-04 서강대학교산학협력단 상태 기반의 요구사항 명세 생성 방법 및 장치, 그 기록 매체
KR20120074937A (ko) * 2010-12-28 2012-07-06 전자부품연구원 컴포넌트 기반 프로그램의 동작 시퀀스 다이어그램 자동 생성 장치

Also Published As

Publication number Publication date
KR20140125949A (ko) 2014-10-30

Similar Documents

Publication Publication Date Title
Systä et al. Shimba—an environment for reverse engineering Java software systems
US8630824B1 (en) Comprehending waveforms of a circuit design
US10915302B2 (en) Identification and visualization of associations among code generated from a model and sources that affect code generation
Angerer et al. Change impact analysis for maintenance and evolution of variable software systems
US20210263833A1 (en) Code Generation Platform with Debugger
CN115639980A (zh) 一种低代码平台可拖拽的前端逻辑编排方法及装置
EP1548581A2 (en) Methods, apparatus and programs for system development
CN114020246A (zh) 导航卡尺h5页面编排方法、装置、设备及介质
US9298858B1 (en) System and method for reducing models based on a criterion
CN109063040B (zh) 客户端程序数据采集方法及系统
Borowski et al. Graph Buddy—an interactive code dependency browsing and visualization tool
Gawade et al. Stethoscope: a platform for interactive visual analysis of query execution plans
Soetens et al. Circumventing refactoring masking using fine-grained change recording
KR101488188B1 (ko) 시퀀스 다이어그램의 생성 방법 및 시스템
Alsarraj et al. Designing and implementing a tool to transform source code to UML diagrams
Fill et al. Integrating ontology models and conceptual models using a meta modeling approach
Singh Transformation of source code into UML diagrams through visualization tool
Drago et al. QVTR2: A Rational and Performance-Aware Extension to the Relations Language.
Szvetits et al. Enhancing root cause analysis with runtime models and interactive visualizations
Dolques et al. Fixing Generalization Defects in UML Use Case Diagrams.
Vianna et al. Squid: an extensible infrastructure for analyzing software product line implementations
Zhang et al. Java source code static check eclipse plug-in based on common design pattern
García-Díaz et al. MCTest: towards an improvement of match algorithms for models
KR100319776B1 (ko) 소프트웨어 프로세스 모형화 장치 및 그 방법
Alalawi et al. Reverse engineering approach for classes’ representations and interactions in software projects

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
FPAY Annual fee payment

Payment date: 20180102

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190107

Year of fee payment: 5