KR100607462B1 - 컴포넌트 추출을 위한 시스템 분할 방법 - Google Patents

컴포넌트 추출을 위한 시스템 분할 방법 Download PDF

Info

Publication number
KR100607462B1
KR100607462B1 KR1020010038631A KR20010038631A KR100607462B1 KR 100607462 B1 KR100607462 B1 KR 100607462B1 KR 1020010038631 A KR1020010038631 A KR 1020010038631A KR 20010038631 A KR20010038631 A KR 20010038631A KR 100607462 B1 KR100607462 B1 KR 100607462B1
Authority
KR
South Korea
Prior art keywords
class
level
oriented
classes
component
Prior art date
Application number
KR1020010038631A
Other languages
English (en)
Other versions
KR20030003317A (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 KR1020010038631A priority Critical patent/KR100607462B1/ko
Publication of KR20030003317A publication Critical patent/KR20030003317A/ko
Application granted granted Critical
Publication of KR100607462B1 publication Critical patent/KR100607462B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 객체지향 시스템에서 컴포넌트 추출을 위한 시스템 분할 방법에 관한 것이다.
본 발명은 객체 지향 언어로 작성된 시스템에서의 컴포넌트 추출을 위한 시스템 분할 방법은, 객체 지향 시스템 내에서 비의존 클래스를 추출하는 제 1 단계; 상기 비의존 클래스를 제 n(n=1) 레벨 클래스로 지정하는 제 2 단계; 상기 제 n 레벨 클래스에 의존하는 제 1 클래스 및 상기 제 1 클래스가 의존하는 제 2 클래스를 추출하는 제 3 단계; 상기 제 1 클래스 및 제 2 클래스를 묶어서 제 (n+1) 레벨 클래스로 지정하는 제 4 단계; 상기 제 4 단계 후 남은 클래스가 메인(main) 클래스 하나뿐인지를 판단하는 제 5 단계; 및 상기 제 5 단계에서의 판단 결과, 남은 클래스가 메인 클래스 하나뿐이면 시스템 분할 작업을 종료하고, 그렇지 않으면 레벨 클래스를 n = n+1로 하여 상기 제 3 단계로 복귀하는 제 6 단계를 포함한다.
객체 지향, 컴포넌트, 클래스, 시스템 분할

Description

컴포넌트 추출을 위한 시스템 분할 방법 {Method for dividing system for drawing out components}
도 1은 본 발명의 일 실시예에 따른 컴포넌트 추출을 위한 장치의 블록 구성도이고,
도 2는 본 발명의 일 실시예에 따른 자동 추출기를 통해 추출된 객체 모델도이고,
도 3은 본 발명의 일 실시예에 따른 클래스들간의 의존성을 설명하기 위한 예시도이고,
도 4는 본 발명의 일 실시예에 따른 객체 지향 시스템에서 재사용 가능한 컴포넌트를 추출하기 위한 시스템 분할 순서도이고,
도 5는 상기 도 4의 절차에 따라 시스템을 분할한 결과를 보인 예시도이다.
본 발명은 시스템 분할 방법에 관한 것으로, 보다 상세히는, 객체 지향 시스템에서 재사용 가능한 컴포넌트(component)를 자동으로 추출하고 시스템을 분할하는 방법에 관한 것이다.
일반적인 프로그램밍을 위한 고급언어에는 절차지향 언어(procedural language)와 객체지향 언어(OOP : Object-Oriented Programming)가 있다.
절차지향 언어는 1950년대 중반에 출현한 초기 고급언어로서, 프로그래머가 전통적인 프로그래밍 논리를 사용하여 프로그래밍 문제를 해결할 수 있도록 하였다. 즉, 절차지향 언어는 프로그래머가 명령을 순서에 맞게 코드화하면 순차적으로 명령이 실행되도록 하였다. 일예로, FORTRAN, COBOL, PASCAL, C, BASIC 등의 고급언어들이 절차지향 언어의 범주에 속한다.
객체지향 언어는 절차지향 언어와 비교하면 가장 큰 차이점이 객체(object), 클래스(class), 상속이라는 개념을 기본으로 한다는 것으로, 객체 또는 클래스를 상속에 따라 조합하여 프로그래밍할 수 있다.
보다 상세히는, 클래스란 객체들의 공통적인 성질을 정의한 것으로, 동일한(비슷한) 특징(모습)을 갖는 여러 객체를 정의할 수 있는 틀이라 할 수 있다. 그러므로, 클래스는 객체 집합의 모든 특징을 기술할 수 있어야 한다.
따라서, 클래스에는 객체 집합의 모든 특징을 기술하기 위해 매소드(method)와 어트리뷰트(attribute)라는 2가지 주요 부분으로 이루어져 있다. 매소드는 클래스의 행위를 알리고, 어트리뷰트는 객체를 구별시키는 특성 즉, 속성을 알린다. 이러한 매소드와 어트리뷰트는 하나의 클래스와 다른 클래스간의 관계를 알 수 있게 한다. 즉, 클래스들간의 관계는 각각의 매소드와 어트리뷰트간의 관계를 통해서 이루어지도록 되어 있다.
객체는 데이터와 데이터에 관련된 연산(operation)으로 구성된다. 즉, 객체 는 클래스에서 하나의 구체적인 표현이다.
상속이란 객체의 정보를 세분화 또는 일반화의 원칙에 따라 조직화하는 방법이다. 프로그램은 객체가 상하 계층에서 함께 링크 되도록 개발되었다. 한 레벨(level)에 있는 객체는 보다 높은 레벨의 객체 특성을 상속한다. 이것은 프로그래머가 객체간의 차이를 정의할 필요가 있기 때문에, 프로그래밍을 더 쉽게 해준다. 객체지향 언어의 예로는 Smalltalk와 C++, JAVA 등을 들 수 있다.
객체지향 언어로 구현된 시스템을 객체지향 시스템이라 하며, 객체 지향 시스템에는 독립적으로 사용될 수 있는 컴포넌트가 존재한다. 이 컴포넌트는 객체지향 소프트웨어의 일부이면서 독립적으로 실행가능하므로, 컴포넌트를 적절히 조합함에 따라 원하는 컴퓨팅 시스템을 용이하게 구축할 수 있도록 한다.
컴포넌트는 객체 지향적인 소프트웨어 모듈이므로 무궁무진한 재사용성을 자랑한다. 과거에는 개발에 소요되는 비용의 증가에 비해 고급화되어 가는 고객의 욕구를 만족시킬만한 마땅한 대응책이 없었다. 그러나 컴포넌트의 경우 객체 지향성을 바탕으로 한 막강한 재사용성으로 개발에 소요되는 비용을 상당히 줄일 수 있으며, 적은 개발비로 사용자의 욕구를 충족시켜줄 수 있다는 장점을 지니고 있다.
따라서, 종래에는 컴퓨팅 시스템에서 독립적으로 재사용할 만한 가치가 있는 클래스를 찾아내어 이를 컴포넌트로 변환하여 사용하므로서 컴포넌트 제작 비용을 줄이고 있다.
그러나, 종래의 컴포넌트 변환은 사람이 수작업으로 소스 코드(Source Code)를 이해하여 재사용 가능한 클래스를 찾는 방식을 사용하기 때문에 인적/시간적 낭비를 가져오는 문제점이 있다.
본 발명은 종래의 문제점을 해결하기 위한 것으로, 재사용 가능한 컴포넌트를 추출하기 위해서 사용자의 직관적인 판단에 의존하지 않고 자동적으로 컴포넌트를 변환될 수 있는 부분을 찾도록 하는 것을 목적으로 한다.
또한, 본 발명은 자동적으로 추출한 컴포넌트에 기초하여 객체지향 시스템을 분할하는 것을 목적으로 한다.
상기한 기술적 과제를 달성하기 위한 본 발명은,
객체지향 컴퓨팅 시스템을 구성하는 클래스들의 관계를 이용한다. 객체지향 컴퓨팅 시스템을 구성하는 각각의 클래스들을 분석해보면 다른 클래스들에 대해 의존성이 없으며 다른 클래스들의 호출이나 사용을 통해서 서비스를 제공하는 클래스들이 있다. 프로그램 속에 존재하는 이러한 클래스를 구별하여 추출하고 이를 재사용성이 높은 컴포넌트로 변환하게 되면, 해당 소프트웨어 모듈은 활용도가 높아진다.
상기 의존성이라는 것은 다른 클래스를 이용하지 않는 다는 것을 의미하며, 그 이용이라는 것은 다른 클래스의 매소드를 호출하는 경우, 다른 클래스의 어트리뷰트를 사용하는 경우, 다른 클래스의 인스턴스(instance)를 생성하는 경우 등이다.
따라서, 상기한 본 발명의 특징에 따른 컴포넌트 추출을 위한 시스템 분할 방법은, 객체 지향 언어로 작성된 시스템에서의 컴포넌트 추출을 위한 시스템 분할 방법에 있어서, 객체 지향 시스템 내에서 비의존 클래스를 추출하는 제 1 단계; 상기 비의존 클래스를 제 n(n=1) 레벨 클래스로 지정하는 제 2 단계; 상기 제 n 레벨 클래스에 의존하는 제 1 클래스 및 상기 제 1 클래스가 의존하는 제 2 클래스를 추출하는 제 3 단계; 상기 제 1 클래스 및 제 2 클래스를 묶어서 제 (n+1) 레벨 클래스로 지정하는 제 4 단계; 상기 제 4 단계 후 남은 클래스가 메인(main) 클래스 하나뿐인지를 판단하는 제 5 단계; 및 상기 제 5 단계에서의 판단 결과, 남은 클래스가 메인 클래스 하나뿐이면 시스템 분할 작업을 종료하고, 그렇지 않으면 레벨 클래스를 n = n+1로 하여 상기 제 3 단계로 복귀하는 제 6 단계를 포함하는 것을 특징으로 한다.
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
상기에서, 비의존 클래스는 다른 클래스와의 의존성이 없는 하나의 클래스이거나, 또는 서로 의존성을 갖는 환형 구조의 클래스들 그룹인 것이 바람직하다.
상기 비의존 클래스는 컴포넌트를 구성한다.
이하, 첨부한 도면을 참조로 본 발명의 실시예에 따른 컴포넌트 추출을 위한 시스템 분할 방법을 설명한다.
도1은 본 발명의 실시예에 따른 컴포넌트 추출을 위한 시스템 분할 장치의 구성도이다. 도1에 도시되어 있듯이, 본 발명의 실시예에 따른 컴포넌트 추출을 위한 시스템 분할 장치는 자동 추출기(100), 시스템 분할기(200), 및 컴포넌트 추출기(300)를 포함한다.
자동 추출기(100)는 객체지향 시스템의 소스코드(10)를 입력받는다. 자동 추출기(100)는 이 소스코드(10)로부터 각 클래스의 매소드와 어트리뷰트를 판단한다. 그런 다음, 각 클래스간의 의존 관계를 판단하고, 판단한 의존 관계에 대한 정보 즉, 객체 모델 정보(20)를 시스템 분할기(200)로 출력한다.
이때, 자동 추출기(100)에서 시스템 분할기(200)로 출력하는 객체 모델 정보(20)를 그래프로 나타내면 도2와 같이 나타낼 수 있다. 도2는 본 발명의 실시예에 따른 자동 추출기를 통해 추출된 객체 모델을 일예를 나타낸 도면이다.
도2의 각 블록들(A, A1, A2..., A10, A11, A12, A20)은 클래스를 의미하며, 클래스들을 연결하는 화살표는 클래스의 매소드내 구문정보와 어트리뷰트 정보를 이용하여 밝혀낸 클래스간의 의존관계이다.
의존성은 소스코드 상에 다음과 같은 형식의 문장이 나타날 경우에 의존성이 있다고 정의된다.
1. 다른 클래스의 매소드를 호출하는 경우,
2. 다른 클래스의 어트리뷰트를 사용하는 경우,
3. 다른 클래스의 인스턴스를 생성하는 경우.
클래스간의 의존성을 보다 상세히 설명하면, 도 3과 같다. 도 3은 본 발명의 일 실시예에 따른 클래스들간의 의존성을 설명하기 위한 예시도이다. 클래스 B의 소스코드 상에서 클래스 A에 의존적인 부분(①, ②, ③)이 나타날 경우에 클래스 B는 클래스 A에 대해서 의존성이 있다고 정의된다.
따라서, 화살표가 시작되는 클래스는 화살표가 도착하는 클래스에 의존성이 있음을 의미하므로 도2의 클래스 A는 다른 클래스(A10, A11, ...)에 대해 의존성이 없음을 알 수 있다.
본 발명은 클래스 A와 같이 의존성이 없는 클래스를 비의존 클래스라 한다. 여기서, 자동 추출기(100)는 비의존 클래스가 없는 경우에는 서로 의존성을 갖는 클래스들간의 환형 구조(cyclic)를 묶어서 이 그룹 클래스를 하나의 커다란 비의존 클래스로 정의한다.
시스템 분할기(200)는 객체 모델 정보를 통해 판단되는 각 클래스간의 의존 관계로서, 각 클래스들을 레벨별로 분류하여 시스템을 분류한다. 즉, 시스템 분할기(200)는 클래스의 레벨의 분류를 비의존 클래스를 기준으로 하여 상위 또는 하위 레벨로 분류한다.
따라서, 시스템 분할기(200)에 의해 분할된 시스템은 클래스간의 의존성에 따라 차등적으로 분류된다.
상기에서 비의존 클래스는 독립적으로 재사용할 만한 가치가 있는 부분이므로, 이를 컴포넌트로 사용하는 것이 바람직하다.
그리고, 컴포넌트 추출기(300)는 시스템 분할기(200)에서 출력하는 시스템 분할 정보(30)를 입력받아 독립적으로 재사용할 만한 가치가 있는 부분을 추출한다. 이때, 시스템은 시스템 분할기(200)에 의해 컴포넌트 추출이 용이한 상태로 분할되어 있으므로, 컴포넌트 추출기(300)는 쉽게 컴포넌트(40)를 추출할 수 있다.
이렇게 추출된 컴포넌트는 소스코드 변환과정을 거쳐 독립적으로 사용할 수 있게 된다.
이하, 도 4를 참조로 본 발명의 일 실시예에 따른 컴포넌트 추출을 위한 시스템 분할 방법을 설명한다.
삭제
도1 내지 도3을 참조로 한 설명에서와 같이 우선, 자동 추출기(100)를 통해 객체지향 시스템내에서 의존성이 없는 클래스를 찾는다.
그리고, 시스템 분할기(200)는 자동 추출기(100)에서 찾은 의존성이 없는 클래스를 비의존 클래스로 정의한다(S1).
만약, 의존성이 없는 클래스가 없는 경우에 서로 의존성을 갖는 클래스들간의 환형 구조의 클래스들의 그룹을 묶어서 비의존 클래스로 정의한다. 환형 구조는 일련의 클래스들의 의존 관계가 서로 향하고 있어서 원형 구조를 이루고 있는 것을 말한다. 환형 구조를 인식하기 위한 절차는 일반적으로 사용되는 기존의 알고리즘을 이용한다.
상기 단계(S1)에서 찾아낸 비의존 클래스를 도5와 같이 레벨 1 클래스로 정의한다(S2). 도5에서 C가 비의존 클래스이고, 도2에서는 A이다.
여기서, 레벨은 시스템을 분할하기 위한 단위로 사용한다. 시스템은 그 의존 정도에 따라 레벨 1로부터 레벨 n까지 나뉠 수 있다.
일단 레벨 1 클래스가 정의되면, 다음 단계는 다음 레벨 클래스를 찾기 위한 단계들이다.
즉, 시스템 분할기(200)는 레벨 1 클래스에 의존하는 클래스를 검색하여 찾는다. 레벨 1 클래스에 의존하는 클래스를 도2를 예를 들어 설명하면 A1, A2, A3이다(S3).
그런 다음, 시스템 분할기(200)는 레벨 1 클래스에 의존하는 클래스(A1, A2, A3)가 의존하는 클래스를 찾는다. A1또는, A2 또는, A3가 의존하는 클래스는 도2의 A4이다(S4).
시스템 분할기(200)는 상기에서 추출한 A1, A2, A3, A4를 레벨 2 클래스로 지정한다(S5).
그리고, 시스템 분할기(200)는 남은 클래스가 메인 클래스 하나뿐인지를 판단한다(S6).
상기 판단(S6)에서 남은 클래스가 메인 클래스 하나뿐이면 시스템 분할을 종료하고, 그렇지 않으면 레벨 2 클래스를 기준으로 단계(S3, S4)로 리턴하여 레벨 2 클래스에 의존하는 클래스와 그 클래스가 의존하는 클래스를 레벨 3 클래스로 지정한다.
이러한 리턴 동작은 남은 클래스가 메인 클래스 하나뿐이 될 때까지 이루어 지며, 리턴시마다 레벨의 급수는 1씩 증가하게 된다(S7).
도5는 도4의 절차에 따라 시스템을 분할한 결과를 보인 예시도로서, 레벨 1 클래스에 비의존 클래스(C)가 자리하고, 레벨 2 클래스에는 비의존 클래스(C)에 의존하는 클래스 및 그 클래스가 사용하는 클래스가 자리하며, 레벨 3 클래스에는 레벨 2 클래스에 의존하는 클래스 및 그 클래스가 사용하는 클래스가 자리한다. 그리고, 레벨 4...n 클래스 또한 레벨 2 및 레벨 3 클래스와 동일하다.
이상에서 본 발명에 대한 기술사상을 첨부도면과 함께 서술하였지만 이는 본 발명의 바람직한 실시예를 예시적으로 설명한 것이지 본 발명을 한정하는 것은 아니다. 또한, 이 기술분야의 통상의 지식을 가진 자라면 누구나 본 발명의 기술사상의 범주를 이탈하지 않는 범위 내에서 다양한 변형 및 모방이 가능함은 명백한 사실이다.
본 발명은 객체지향 언어로 작성된 대규모의 소스코드를 컴포넌트로 변환함에 있어서 시스템을 쉽게 분할할 수 있게 해 주는 효과가 있다.
또한, 각각의 분할된 레벨(부분)들은 약간의 변환과정을 거쳐 스스로 작동할 수 있는 개별적인 컴포넌트로 변경이 쉽도록 하는 효과가 있다.

Claims (7)

  1. 객체 지향 언어로 작성된 시스템에서의 컴포넌트 추출을 위한 시스템 분할 방법에 있어서,
    객체 지향 시스템 내에서 비의존 클래스를 추출하는 제 1 단계;
    상기 비의존 클래스를 제 n(n=1) 레벨 클래스로 지정하는 제 2 단계;
    상기 제 n 레벨 클래스에 의존하는 제 1 클래스 및 상기 제 1 클래스가 의존하는 제 2 클래스를 추출하는 제 3 단계;
    상기 제 1 클래스 및 제 2 클래스를 묶어서 제 (n+1) 레벨 클래스로 지정하는 제 4 단계;
    상기 제 4 단계 후 남은 클래스가 메인(main) 클래스 하나뿐인지를 판단하는 제 5 단계; 및
    상기 제 5 단계에서의 판단 결과, 남은 클래스가 메인 클래스 하나뿐이면 시스템 분할 작업을 종료하고, 그렇지 않으면 레벨 클래스를 n = n+1로 하여 상기 제 3 단계로 복귀하는 제 6 단계를 포함하는 것을 특징으로 하는 컴포넌트 추출을 위한 시스템 분할 방법.
  2. 제 1 항에 있어서,
    상기 비의존 클래스는 다른 클래스와의 의존성이 없는 하나의 클래스인 것을 특징으로 하는 컴포넌트 추출을 위한 시스템 분할 방법.
  3. 제 1 항에 있어서,
    상기 비의존 클래스는 상호간에 의존성을 가지는 환형 구조의 클래스들 그룹인 것을 특징으로 하는 컴포넌트 추출을 위한 시스템 분할 방법.
  4. 제 2 항 또는 제 3 항에 있어서,
    상기 비의존 클래스는 컴포넌트를 구성하는 것을 특징으로 하는 컴포넌트 추출을 위한 시스템 분할 방법.
  5. 삭제
  6. 삭제
  7. 삭제
KR1020010038631A 2001-06-30 2001-06-30 컴포넌트 추출을 위한 시스템 분할 방법 KR100607462B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020010038631A KR100607462B1 (ko) 2001-06-30 2001-06-30 컴포넌트 추출을 위한 시스템 분할 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020010038631A KR100607462B1 (ko) 2001-06-30 2001-06-30 컴포넌트 추출을 위한 시스템 분할 방법

Publications (2)

Publication Number Publication Date
KR20030003317A KR20030003317A (ko) 2003-01-10
KR100607462B1 true KR100607462B1 (ko) 2006-08-02

Family

ID=27712570

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020010038631A KR100607462B1 (ko) 2001-06-30 2001-06-30 컴포넌트 추출을 위한 시스템 분할 방법

Country Status (1)

Country Link
KR (1) KR100607462B1 (ko)

Also Published As

Publication number Publication date
KR20030003317A (ko) 2003-01-10

Similar Documents

Publication Publication Date Title
KR100501410B1 (ko) 서블릿 프로그램의 재사용 가능한 비즈니스 로직으로부터이제이비 컴포넌트를 생성하는 시스템 및 방법
CN106843840B (zh) 一种基于相似度分析的源代码版本演化注释复用方法
US6757887B1 (en) Method for generating a software module from multiple software modules based on extraction and composition
EP0583117A2 (en) A device and method for converting computer programming languages
US6346945B1 (en) Method and apparatus for pattern-based flowcharting of source code
CN106485328B (zh) 信息处理系统及方法
CN109992271B (zh) 一种基于代码词汇和结构依赖的分层架构识别方法
JP2006085740A (ja) アプリケ―ションソフトウェア構成方法
CN101901148A (zh) 基于autosar标准的ecu参数配置界面生成方法
CN110162297A (zh) 一种源代码段自然语言描述自动生成方法及系统
Wills Using attributed flow graph parsing to recognize clichés in programs
CN102789450A (zh) 基于规则的可定义式语义解析系统及方法
Jossic et al. Model integration with model weaving: a case study in system architecture
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
CN105630489A (zh) 数据处理方法和数据处理装置
CN108255478A (zh) 一种标签式模板开发方法
Sahraoui et al. A concept formation based approach to object identification in procedural code
KR100607462B1 (ko) 컴포넌트 추출을 위한 시스템 분할 방법
US7831964B2 (en) Program automatic converting method and program automatic converting device
KR100463833B1 (ko) 컴포넌트 자동 변환 시스템 및 방법
JP2022542488A (ja) 異種埋め込み型の表形式化動作プロセスの処理および実行方法および装置
CN113946568A (zh) 一种数据治理系统以及方法
Tairas et al. Representing clones in a localized manner
Gogolla UML for the Impatient
Gall et al. Reuse engineering: software construction from reusable components

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
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120710

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20130624

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee