KR100791303B1 - 빌드 단위의 컴포넌트 생성 장치 및 방법 - Google Patents

빌드 단위의 컴포넌트 생성 장치 및 방법 Download PDF

Info

Publication number
KR100791303B1
KR100791303B1 KR1020060079482A KR20060079482A KR100791303B1 KR 100791303 B1 KR100791303 B1 KR 100791303B1 KR 1020060079482 A KR1020060079482 A KR 1020060079482A KR 20060079482 A KR20060079482 A KR 20060079482A KR 100791303 B1 KR100791303 B1 KR 100791303B1
Authority
KR
South Korea
Prior art keywords
component
dependency
unit
build
independent
Prior art date
Application number
KR1020060079482A
Other languages
English (en)
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 KR1020060079482A priority Critical patent/KR100791303B1/ko
Priority to US11/762,934 priority patent/US20080052666A1/en
Priority to EP07114559A priority patent/EP1898303A1/en
Application granted granted Critical
Publication of KR100791303B1 publication Critical patent/KR100791303B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units

Abstract

빌드 단위의 컴포넌트 생성 장치 및 방법을 제공한다. 빌드 단위의 컴포넌트 생성 장치는 컴포넌트간 의존 관계가 있을 경우 의존 관계를 해소시키는 제거부와 의존 관계가 해소된 컴포넌트를 독립적인 컴포넌트로 생성시키는 구현부 및 생성된 독립적인 컴포넌트의 특성을 나타내는 타입을 정의하는 타입 정의부를 포함한다.
컴포넌트, 레거시 소프트웨어, 스크립트

Description

빌드 단위의 컴포넌트 생성 장치 및 방법{Apparatus and method for making component of build block}
도 1은 종래 레거시 소프트웨어의 소스 코드를 재사용하기 위한 과정을 도시한다.
도 2는 본 발명의 일 실시예에 따른 빌드 단위의 컴포넌트 생성 장치의 블록도이다.
도 3은 상기 도 2를 이용하여 독립적인 컴포넌트를 생성하는 순서도이다.
도 4는 본 발명의 일 실시예에 따른 소스 트리에서 독립적인 컴포넌트를 생성하기 위한 디렉토리를 선택하는 개념도이다.
도 5 및 도 6은 본 발명의 일 실시예에 따른 소스 트리내의 스크립트 및 스크립트 실행시의 정보를 도시한다.
도 7은 본 발명의 일 실시예에 따른 빌드 인터페이스를 도시한다.
도 8은 본 발명의 일 실시예에 따른 설정 인터페이스를 도시한다.
도 9 및 도 10은 본 발명의 일 실시예에 따른 타입이 정의된 독립적인 컴포넌트 및 컴포넌트 선택 화면을 도시한다.
<도면의 주요 부분에 관한 부호의 설명>
210: 수집부 220: 제거부
230: 구성부 240: 생성부
250: 구현부 260: 타입 정의부
270: 검증부
본 발명은 빌드 단위의 컴포넌트 생성 장치 및 방법에 관한 것으로서, 더욱 상세하게는 빌드 단위로 컴포넌트를 생성하여 사용자가 원하는 컴포넌트를 선택할 수 있도록 하는 빌드 단위의 컴포넌트 생성 장치 및 방법에 관한 것이다.
하드웨어의 눈부신 발전은 제조사들이 고성능의 다양한 기능을 갖춘 기기를 더 짧은 시간 내에 제조할 수 있게 했으며, 이는 업체간의 기술격차를 작게 만들었다. 그리고, 이와 같은 기기를 운영하기 위해서 필요한 소프트웨어의 개발은 많은 시간과 비용을 필요로 하는 일이므로, 결국 소프트웨어의 차별화가 제품의 성공을 좌우하게 되었다. 그러나 고성능 하드웨어를 운영하는데 걸맞은 소프트웨어를 개발할 능력이 있는 회사라 하더라도 개발주기가 짧아지고, 다양해진 하드웨어들에 맞춘 소프트웨어를 매번 개발하는 일은 쉬운 일이 아니다. 그러므로 이미 많은 시간과 비용을 투입해 개발된 레거시 소프트웨어의 소스 코드를 재사용할 필요성이 대두되었다. 이미 개발된 레거시 소프트웨어의 재사용을 위해서는 각 레거시 소프트웨어의 모듈이 컴포넌트로 구성되어야 한다.
도 1은 종래 레거시 소프트웨어의 소스 코드를 재사용하기 위한 과정을 도시 한다.
개발자가 레거시 소프트웨어내의 기능을 재사용하기 위해 먼저 레거시 소프트웨어의 구조를 분석한다(S11).
그리고, 개발자는 레거시 소프트웨어내에 구현된 기능 중 다른 시스템이나 프로그램에서 다시 재사용할 기능을 선택한다(S21).
다음 단계에서, 개발자는 재사용할 기능을 호출하기 위해서 상기 기능을 포함하고 있는 레거시 소프트웨어의 인터페이스를 선택한다(S31).
또한, 개발자는 상기 인터페이스를 포함하고 있는 소스 파일을 선택한다(S41).
다음 단계에서, 개발자는 상기 소스 파일을 다른 시스템이나 프로그램으로 이동시키고, 이동된 소스들이 새로운 환경에서 오류 없이 동작하는 지 빌드(build) 및 실행 과정을 통해 검증한다(S51). 만약, 오류가 발생할 경우 빌드(build) 및 실행 과정에서 디버깅(debugging)을 수행하고 이와 같은 디버깅을 오류가 제거될 때까지 반복한다.
상기한 바와 같이, 종래에는 일반적으로 특정 기능을 재사용하기 위한 소스 파일들을 묶어서 기능 단위의 컴포넌트를 생성하였다. 그러나, 소스 파일들을 포함하고 있는 디렉토리를 독립적인 컴포넌트로 선택하여 컴포넌트의 활용도를 더욱 확장시킬 필요성이 제기된다. 또한 생성된 복수개의 빌드단위의 컴포넌트에 타입을 정의하여, 사용자가 필요에 따라 손쉽게 컴포넌트를 선택하여 시스템내에서 소정 기능을 수행하는 모듈로 활용할 필요성이 제기된다.
본 발명은 빌드 단위의 컴포넌트 생성 장치 및 방법을 제공하여 빌드 단위로 컴포넌트를 생성하는 데 그 목적이 있다.
본 발명의 목적들은 이상에서 언급한 목적들로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 당업자에게 명확하게 이해되어질 수 있을 것이다.
상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 빌드 단위의 컴포넌트 생성 장치는 컴포넌트간 의존 관계가 있을 경우 의존 관계를 해소시키는 제거부와 의존 관계가 해소된 컴포넌트를 독립적인 컴포넌트로 생성시키는 구현부 및 생성된 독립적인 컴포넌트의 특성을 나타내는 타입을 정의하는 타입 정의부를 포함한다.
본 발명의 실시예에 따른 빌드 단위의 컴포넌트 생성 방법은 컴포넌트간 의존 관계가 있을 경우 의존 관계를 해소시키는 (a)단계와 의존 관계가 해소된 컴포넌트를 독립적인 컴포넌트로 생성시키는 (b)단계 및 생성된 독립적인 컴포넌트의 특성을 나타내는 타입을 정의하는 (c)단계를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발 명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.
도 2는 본 발명의 일 실시예에 따른 빌드 단위의 컴포넌트 생성 장치의 블록도이다.
빌드 단위의 컴포넌트 생성 장치(200)는 수집부(210), 제거부(220), 구성부(230), 생성부(240), 구현부(250), 타입 정의부(260), 및 검증부(270)를 포함한다.
사용자가 소스 트리(tree)에서 빌드(build) 단위의 컴포넌트(이하 독립적인 컴포넌트라고도 함)를 생성하기 위해 소정의 디렉토리를 선택한다. 상기 빌드 단위는 컴포넌트간 의존 관계가 존재하지 않고 독립적(independent)인 컴포넌트로 생성될 수 있는 단위를 의미한다. 사용자는 독립적인 컴포넌트를 생성하기 위해 소스 트리에서 개별적인 디렉토리 또는 복수개의 디렉토리의 묶음을 선택할 수 있다.
수집부(210)는 상기 컴포넌트간 의존 관계에 관한 정보를 수집한다. 상기 선택된 디렉토리는 개별적인 독립적인 컴포넌트 생성을 위해 선택된 것이다. 따라서, 수집부(210)는 상기 선택된 디렉토리간 의존 관계가 있는 지 분석하고, 이를 통해 컴포넌트간 의존 관계에 관한 정보를 수집할 수 있다. 예를 들어, 디렉토리 A가 제1 컴포넌트 생성을 위해 선택되었고, 디렉토리 B는 제2 컴포넌트 생성을 위해 선택되었다. 이때, 디렉토리 A내의 소스 파일이 디렉토리 B내의 소스 파일을 참조 한다면, 디렉토리 A는 디렉토리 B에 대해서 의존 관계(dependency)에 있게 된다. 따라서 디렉토리 A가 속한 제1 컴포넌트와 디렉토리 B가 속한 제2 컴포넌트는 의존 관계가 존재한다.
이때, 상기 의존 관계에 관한 정보를 수집하는 방법에는 정적인 방법과 동적인 방법이 있다. 먼저 정적인 방법으로, 수집부(210)는 소스 트리내의 스크립트(예를 들어, GNU의 ‘makefile’)를 분석하여 필요한 의존 관계에 관한 정보를 수집할 수 있다. 즉, 수집부(210)는 스크립트에 기술된 문법과 쉘 명령을 분석하는 방법을 통해 인클루드(include)하는 인터페이스, 링크할 때 필요한 라이브러리, 컴파일할 때 필요한 소스 파일 등에 관한 정보를 알 수 있고, 이를 통해 상기 디렉토리간의 의존 관계에 관한 정보를 수집할 수 있다.
또한, 동적인 방법으로, 수집부(210)는 스크립트 실행시 컴파일러 또는 링커에 전송될 상기 쉘 명령의 파라미터 값을 분석해서 디렉토리간의 의존 관계에 관한 정보를 수집할 수 있다. 상기 쉘 명령의 파라미터 값은 컴파일 옵션, 컴파일될 소스 파일 이름, 링크 옵션 등을 포함하고 있다. 예를 들어, 수집부(210)는 스크립트에서 쉘 명령 중 gcc 컴파일러의 이름을 다른 이름(즉 gxx)으로 변경하여 복사해둔다. 그리고, 수집부(210)는 스크립트가 실행되어 gcc 컴파일러가 호출되면 미리 생성된 gcc라는 동일한 이름의 프로그램을 실행시키게 된다. 이때, 상기 동일한 이름 의 gcc 프로그램은 실제 gcc 컴파일러에게 전송될 정보들 즉, 쉘 명령의 파라미터 값을 미리 수신하여 분석한다. 마찬가지로, 수집부(210)는 링커에게 전송될 정보들도 상기한 과정으로 분석할 수 있다. 이를 통해 수집부(210)는 소스 파일간의 의존 관계에 관한 정보를 수집할 수 있게 된다.
제거부(220)는 상기 컴포넌트간 의존 관계가 있을 경우 상기 의존 관계를 해소시킨다. 예를 들어, 두 개의 소스 파일이 독립적인 컴포넌트(제1 컴포넌트와 제2 컴포넌트)를 생성하기 위한 개별적인 디렉토리에 각각 포함되어 있다. 이때, 두 개의 소스 파일이 서로 참조하는 의존 관계에 있는 경우에는 제1 컴포넌트와 제2 컴포넌트는 서로 간접적인 필요(circular need)로 인해서 독립적(independently)으로 사용될 수 없다. 따라서 상기 의존 관계를 해소시키기 위해, 제거부(220)는 의존 관계에 있는 컴포넌트를 하나로 통합(merge)할 수 있으며, 이로 인해 새로운 독립적인 컴포넌트가 생성되게 된다. 다른 방법으로, 제거부(220)는 제1 컴포넌트가 의존하고 있는 제2 컴포넌트를 제1 컴포넌트에 복사하여 포함시킴으로써 의존 관계를 해소시킬 수 있다. 이와 같은 과정을 통해 이후, 하나의 독립적인 독립적인 컴포넌트로 생성될 수 있게 된다.
구성부(230)는 상기 스크립트내의 정보를 바탕으로 독립적인 컴포넌트로 생성시키기 위한 빌드 방법 및 상기 독립적인 컴포넌트에 적용 가능한 속성 중 적어도 어느 하나를 설정할 수 있도록 인터페이스를 구성한다. 인터페이스는 빌드 인터페이스(build interface)와 설정 인터페이스(configuration interface)로 구분되어 화면에 GUI형태로 출력될 수 있다.
빌드 인터페이스는 빌드 방법들을 제공하며, 빌드 방법에는 ‘all, install, clean’ 등이 있다. 예를 들어 GNU 코딩 표준에서 ‘all’은 소스 파일 패키지의 모든 타겟(즉 소스 파일들)을 빌드시키고, ‘install’은 모든 타겟을 인스톨한다. 그리고 ‘clean’은 중간 결과물(intermediate results)과 모든 타겟을 제거하기 위한 빌드 방법이다. 또한, 빌드 인터페이스는 상기 빌드 방법들간의 의존 관계를 나타낼 수 있으며, 사용자가 빌드 방법을 선택할 수 있도록 설정 메뉴가 제공될 수 있다.
이외에도, 구성부(230)는 빌드 방법의 설정 메뉴에 컴포넌트간의 의존 관계를 제거할 수 있는 옵션을 추가시킬 수 있다. 따라서, 사용자가 해당 옵션을 선택하였을 경우, 상기 제거부(220)를 통해 컴포넌트간의 의존 관계를 해소시키게 되고, 상기 의존 관계가 해소된 컴포넌트를 빌드시키게 된다.
상기 설정 인터페이스는 독립적인 컴포넌트에 적용 가능한 속성을 제공한다. 예를 들어 사용자는 디버깅(debugging) 지원을 사용가능 또는 사용불가 하도록 설정할 수 있다. 또한 사용자는 빌드 단위로 생성될 컴포넌트가 오디오 기능과 관련된 컴포넌트인 경우, mp3 지원 유무를 설정하거나, 인코딩 또는 디코딩 방식을 설정할 수 있다. 이와 같이 사용자는 상기 빌드 인터페이스와 설정 인터페이스에서 소정의 값을 설정할 수 있으며, 사용자에 의한 설정이 없을 경우 디폴트(default)로 설정된 값이 선택될 수 있다.
생성부(240)는 상기 인터페이스에서 설정된 값을 이용하여 독립적인 컴포넌트로 생성시키기 위한 빌드 스크립트를 생성한다. 상기 소스 트리내의 스크립트(제 1 스크립트)는 여러 디렉토리에 흩어져 복수개로 존재할 수 있다. 이로 인해 제1 스크립트들은 중복된 정보들을 포함할 수 있으며 사용자가 제1 스크립트의 정보를 일관성있게 변경하기 어렵다. 따라서 생성부(240)는 하나의 스크립트로 일관성 있게 사용자의 변경 내용을 반영할 수 있도록 상기 설정된 값들을 이용하여 빌드 스크립트를 생성할 수 있다. 빌드 스크립트는 바람직하게는 하나의 독립적인 컴포넌트마다 하나씩 생성될 수 있다.
구현부(250)는 상기 의존 관계가 해소된 컴포넌트를 하나의 독립적인 컴포넌트로 생성시킨다. 이를 위해 구현부(250)는 상기 빌드 스크립트를 실행시킨다. 이때, 구현부(250)는 상기 빌드 방법의 설정 메뉴에서 컴포넌트간의 의존 관계를 제거할 수 있는 옵션이 선택된 경우, 상기 제거부(220)를 통해 컴포넌트간의 의존 관계를 해소시킨 독립적인 컴포넌트를 생성시키게 된다.
타입 정의부(260)는 상기 생성된 독립적인 컴포넌트에 대한 타입을 정의한다. 타입은 독립적인 컴포넌트의 특성 및 기능에 관한 정보를 나타낼 수 있다. 따라서 복수개의 독립적인 컴포넌트(즉 독립적인 컴포넌트)가 생성될 경우 사용자는 정의된 타입에 따라 구별할 수 있으며, 시스템내에서 소정 기능을 수행하는 모듈로써 사용될 독립적인 컴포넌트를 선택할 수 있다.
검증부(270)는 상기 독립적인 컴포넌트가 상기 의존 관계를 해소한 상태로 정상적으로 생성되었는 지 여부를 검증한다. 즉, 검증부(270)는 컴포넌트간 의존 관계가 해소되어 하나의 독립적인 컴포넌트로 정상적으로 동작하는 지 여부를 검증할 수 있다. 또한, 예를 들어 검증부(270)는 동일한 독립적인 컴포넌트에 속한 소 스 파일 A와 B에 있어서, 소스 파일 A가 소스 파일 B의 소정 함수를 임포트(import)하고 있는 경우, 소스 파일 B에 상기 함수가 정상적으로 정의되어 있는 지 여부를 검증할 수 있다.
도 2에서 도시된 각각의 구성요소는 일종의 '모듈'로 구성될 수 있다. 상기 '모듈'은 소프트웨어 또는 Field Programmable Gate Array(FPGA) 또는 주문형 반도체(Application Specific Integrated Circuit, ASIC)과 같은 하드웨어 구성요소를 의미하며, 모듈은 어떤 역할들을 수행한다. 그렇지만 모듈은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. 모듈은 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 실행시키도록 구성될 수도 있다. 따라서, 일 예로서 모듈은 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다. 구성요소들과 모듈들에서 제공되는 기능은 더 작은 수의 구성요소들 및 모듈들로 결합되거나 추가적인 구성요소들과 모듈들로 더 분리될 수 있다.
이하 도 3에서는, 독립적인 컴포넌트를 생성하는 과정을 각 단계별로 설명하기로 한다.
도 3은 상기 도 2를 이용하여 독립적인 컴포넌트를 생성하는 순서도이다.
사용자가 소스 트리(tree)에서 빌드(build) 단위의 컴포넌트를 생성하기 위 해 소정의 디렉토리를 선택한다(S301). 상기 빌드 단위는 컴포넌트간 의존 관계가 존재하지 않고 독립적(independent)인 컴포넌트로 생성될 수 있는 단위를 의미한다. 사용자는 독립적인 컴포넌트를 생성하기 위해 소스 트리에서 개별적인 디렉토리 또는 복수개의 디렉토리의 묶음을 선택할 수 있다.
수집부(210)는 컴포넌트간 의존 관계에 관한 정보를 수집한다(S311). 상기 선택된 디렉토리는 개별적인 독립적인 컴포넌트 생성을 위해 선택된 것이다. 따라서, 수집부(210)는 상기 선택된 디렉토리간 의존 관계가 있는 지 분석하고, 이를 통해 컴포넌트간 의존 관계에 관한 정보를 수집할 수 있다.
제거부(220)는 상기 컴포넌트간 의존 관계가 있을 경우 상기 의존 관계를 해소시킨다(S321). 상기 의존 관계를 해소시키기 위해, 제거부(220)는 의존 관계에 있는 컴포넌트를 하나로 통합(merge)할 수 있으며, 이로 인해 새로운 독립적인 컴포넌트가 생성되게 된다. 또한, 제거부(220)는 제1 컴포넌트가 의존하고 있는 제2 컴포넌트를 제1 컴포넌트에 복사하여 포함시킴으로써 의존 관계를 해소시킬 수 있다.
구성부(230)는 상기 스크립트내의 정보를 바탕으로 독립적인 컴포넌트로 생성시키기 위한 빌드 방법 및 상기 독립적인 컴포넌트에 적용 가능한 속성 중 적어도 어느 하나를 설정할 수 있도록 인터페이스를 구성한다(S331). 인터페이스는 빌드 인터페이스(build interface)와 설정 인터페이스(configuration interface)로 구분되어 화면에 GUI형태로 출력될 수 있다.
생성부(240)는 상기 인터페이스에서 설정된 값을 이용하여 독립적인 컴포넌 트로 생성시키기 위한 빌드 스크립트를 생성한다(S341).
구현부(250)는 상기 의존 관계가 해소된 컴포넌트를 하나의 독립적인 컴포넌트로 생성시킨다(S351). 이를 위해 구현부(250)는 상기 빌드 스크립트를 실행시킨다.
타입 정의부(260)는 상기 생성된 독립적인 컴포넌트에 대한 타입을 정의한다(S361). 타입은 독립적인 컴포넌트의 특성 및 기능에 관한 정보를 나타낼 수 있다.
검증부(270)는 상기 독립적인 컴포넌트가 상기 의존 관계를 해소한 상태로 정상적으로 생성되었는 지 여부를 검증한다(S371).
도 4는 본 발명의 일 실시예에 따른 소스 트리에서 독립적인 컴포넌트를 생성하기 위한 디렉토리를 선택하는 개념도이다.
사용자는 독립적인 컴포넌트를 생성하기 위해 소스 트리에서 개별적인 디렉토리들(402, 404, 406, 403, 405) 또는 복수개의 디렉토리의 묶음(410, 420)을 선택할 수 있다.
예를 들어, 디렉토리 a, b, c(402, 404, 406)와 디렉토리 d, e(403, 405)가 각각 독립적인 컴포넌트 생성을 위해 선택되었다고 하자. 이때, 디렉토리 c(406)내의 소스 파일이 디렉토리 d(403)내의 소스 파일을 참조(430) 한다면, 디렉토리 c(406)는 디렉토리 d(403)에 대해서 의존 관계(dependency)에 있게 된다. 따라서 디렉토리 c(406)가 속한 제1 컴포넌트와 디렉토리 d(403)가 속한 제2 컴포넌트는 의존 관계가 존재한다. 이와 같은 의존 관계를 해소시키기 위해서, 제거부(220)는 디렉토리 d(403)내의 소스 파일을 제1 컴포넌트로 복사하거나, 제1 컴포넌트와 제2 컴포넌트를 하나의 컴포넌트로 통합시킬 수 있다.
상기 의존 관계에 관한 정보는 수집부(210)가 소스 트리내의 스크립트(예를 들어, GNU의 ‘makefile’)를 분석하여 수집할 수 있다. 보다 구체적인 내용은 이하 도 5 및 도 6에서 소정의 스크립트를 예로 들어 설명하기로 한다.
도 5 및 도 6은 본 발명의 일 실시예에 따른 소스 트리내의 스크립트 및 스크립트 실행시의 정보를 도시한다.
수집부(210)는 컴포넌트간 의존 관계에 관한 정보를 수집하기 위해 스크립트에 기술된 문법과 쉘 명령을 분석한다.
도 5에 도시된 바와 같이, test1(502)이란 제1 컴포넌트 생성에 있어서 write.c 소스 파일(504)이 제2 컴포넌트에 포함되어 있고 나머지 파일들은 동일한 제1 컴포넌트에 포함되어 있을 경우 제1 컴포넌트는 제2 컴포넌트와 의존 관계에 있게 된다. 이와 같이 인클루드(include)하는 인터페이스(예를 들어 io.h 헤더 파일(506)), 링크할 때 필요한 라이브러리, 컴파일할 때 필요한 소스 파일 등에 관한 정보를 통해 컴포넌트간 의존 관계에 대한 정보를 수집할 수 있다.
또한, 수집부(210)는 스크립트가 실행되어 컴파일러 또는 링커에 전송될 쉘 명령의 파라미터 값을 분석해서 디렉토리간의 의존 관계에 관한 정보를 수집할 수 있다. 이를 위해 예를 들어, 수집부(210)는 스크립트에서 쉘 명령 중 gcc 컴파일러의 이름을 다른 이름(즉 gxx)으로 변경하여 복사해둔다. 그리고, 수집부(210)는 스크립트가 실행되어 gcc 컴파일러가 호출되면 미리 생성된 gcc라는 동일한 이름의 프로그램을 실행시키게 된다. 즉, 도 6에 도시된 바와 같이, 스크립트가 실행되어 쉘 명령 중 gcc 컴파일러가 호출되면, 미리 생성된 동일한 이름의 gcc 프로그램이 수행되어 실제 gcc 컴파일러에게 전송될 정보들 즉, 쉘 명령(즉 gcc)의 파라미터 값인 컴파일 옵션(602), 컴파일될 소스 파일 이름(604) 등을 미리 수신하여 분석한다. 이를 통해 수집부(210)는 소스 파일간의 의존 관계에 관한 정보를 수집할 수 있게 된다. 상기 도 5 및 도 6의 스크립트는 시스템에 따라서 다양하게 구성될 수 있으며, 이에 한정되지 않는다.
상기한 바와 같이 컴포넌트간의 의존 관계에 관한 정보를 바탕으로 제거부(220)는 의존 관계에 있는 컴포넌트들을 통합시키거나, 의존 관계에 있는 소스 파일을 복사하는 방법으로 의존 관계를 해소시킬 수 있다. 그리고, 상기 스크립트내의 정보를 바탕으로 상기 독립적인 컴포넌트로 생성시키기 위한 빌드 방법 및 상기 독립적인 컴포넌트에 적용 가능한 속성 중 적어도 어느 하나를 설정할 수 있도록 인터페이스를 구성할 수 있다. 이하 도 7에서 보다 자세히 설명하기로 한다.
도 7은 본 발명의 일 실시예에 따른 빌드 인터페이스를 도시한다.
구성부(230)는 상기 스크립트내의 정보를 바탕으로 상기 독립적인 컴포넌트를 생성시키기 위한 빌드 방법 및 상기 독립적인 컴포넌트에 적용 가능한 속성 중 적어도 어느 하나를 설정할 수 있도록 인터페이스를 구성한다.
도시된 바와 같이, 빌드 방법에는 ‘all, install, clean’ 등이 있다. GNU 코딩 표준에서 ‘all’(702)은 소스 파일 패키지(디렉토리)의 모든 타겟(즉 소스 파일들)을 빌드시키고, ‘install’은 모든 타겟을 인스톨한다. 그리고 ‘clean ’(704)은 중간 결과물(intermediate results)과 모든 타겟을 제거하기 위한 빌드 방법이다. 상기 스크립트의 빌드 방법은 GUI 형태의 빌드 인터페이스(710)로 사용자에게 제공될 수 있다. 그리고, 빌드 인터페이스(710)는 상기 빌드 방법들간의 의존 관계(711)를 나타낼 수 있으며, 사용자가 빌드 방법을 선택할 수 있도록 설정 메뉴(730)가 제공될 수 있다. 또한, 구성부(230)는 빌드 방법의 설정 메뉴(730)에 컴포넌트간의 의존 관계를 제거할 수 있는 옵션(732)을 추가시켜, 사용자가 해당 옵션(732)을 선택하였을 경우, 이후 제거부(220)를 통해 컴포넌트간의 의존 관계를 해소시키도록 할 수 있다.
또한, 사용자는 설정 인터페이스(720)를 통해 독립적인 컴포넌트에 적용할 속성을 설정할 수 있다. 이하 도 8에서 자세히 설명하기로 한다.
도 8은 본 발명의 일 실시예에 따른 설정 인터페이스를 도시한다.
설정 인터페이스(720)는 독립적인 컴포넌트에 적용 가능한 속성을 제공한다. 예를 들어 사용자는 독립적인 컴포넌트에 디버깅(debugging) 지원(802)을 사용가능 또는 사용불가 하도록 설정할 수 있다. 또한 사용자는 독립적인 컴포넌트가 오디오 기능과 관련된 컴포넌트인 경우, mp3 지원 유무(804)를 설정하거나, 인코딩 또는 디코딩 방식(806, 808)을 설정할 수 있다.
생성부(240)는 상기 인터페이스(710, 720)에서 설정된 값을 이용하여 독립적인 컴포넌트로 생성시키기 위한 빌드 스크립트를 생성한다. 그리고, 구현부(250)는 상기 빌드 스크립트를 실행시켜 의존 관계가 해소된 독립적인 컴포넌트로 생성시킨다. 특히, 구현부(250)는 상기 빌드 방법의 설정 메뉴(730)에 컴포넌트간의 의존 관계를 제거할 수 있는 옵션(732)이 선택된 경우, 빌드 스크립트 실행시 상기 제거부(220)를 통해 컴포넌트간의 의존 관계를 해소시킨 독립적인 컴포넌트를 생성하게 된다. 그리고, 타입 정의부(260)는 상기 빌드된 컴포넌트에 대한 타입을 정의하게 되는 데 이하 도 9에서 설명하기로 한다.
도 9 및 도 10은 본 발명의 일 실시예에 따른 타입이 정의된 독립적인 컴포넌트 및 컴포넌트 선택 화면을 도시한다.
타입 정의부(260)는 생성된 독립적인 컴포넌트(910, 920, 930)의 특성 및 기능에 관한 정보를 담고 있는 타입을 정의한다.
도 9에 도시된 바와 같이, 생성된 독립적인 컴포넌트들(910, 920, 930)이 오디오 기능과 관련된 컴포넌트인 경우, 사용자는 독립적인 컴포넌트들에 정의된 타입(912, 922, 932)으로 각 독립적인 컴포넌트를 구별하고, 원하는 독립적인 컴포넌트를 선택하여 시스템내에서 소정 기능을 수행하도록 할 수 있다.
이를 위해 도 10에 도시된 바와 같이, 사용자가 원하는 독립적인 컴포넌트를 선택할 수 있도록 GUI 화면(1000)이 제공될 수 있다. 상기 GUI 화면(1000)에는 상기 도 7 및 도 8에서 사용자가 설정한 빌드 인터페이스(710) 및 설정 인터페이스(720)에서 설정한 내용들을 함께 출력될 수 있다. 사용자는 독립적인 컴포넌트(910, 920, 930)에 정의된 타입(재생, 편집, 녹음)으로 독립적인 컴포넌트의 특성 및 기능을 구별할 수 있다. 따라서, 사용자는 시스템에 적용할 독립적인 컴포넌트를 선택하여 소정의 기능을 수행하도록 할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
상기한 바와 같은 본 발명의 빌드 단위의 컴포넌트 생성 장치 및 방법에 따르면 다음과 같은 효과가 하나 혹은 그 이상 있다.
첫째, 독립적인 컴포넌트 생성을 통해 컴포넌트의 활용도를 더욱 확장시키는 장점이 있다.
둘째, 독립적인 컴포넌트의 타입을 정의하여 사용자가 원하는 컴포넌트를 선택하여 시스템에 적용시킬 수 있는 장점도 있다.

Claims (20)

  1. 컴포넌트간 의존 관계가 있을 경우 상기 의존 관계를 해소시키는 제거부;
    상기 의존 관계가 해소된 컴포넌트를 독립적인 컴포넌트로 생성시키는 구현부; 및
    상기 생성된 독립적인 컴포넌트의 특성을 나타내는 타입을 정의하는 타입 정의부를 포함하는, 빌드 단위의 컴포넌트 생성 장치.
  2. 제 1항에 있어서,
    상기 의존 관계에 관한 정보를 수집하는 수집부를 더 포함하는, 빌드 단위의 컴포넌트 생성 장치.
  3. 제 2항에 있어서,
    상기 수집부는,
    소스 트리내의 스크립트를 분석하여 상기 의존 관계에 관한 정보를 수집하는, 빌드 단위의 컴포넌트 생성 장치.
  4. 제 2항에 있어서,
    상기 수집부는,
    상기 스크립트 실행시 컴파일러 또는 링커에 전송될 파라미터 값을 분석하여 상기 의존 관계에 관한 정보를 수집하는, 빌드 단위의 컴포넌트 생성 장치.
  5. 제 3항에 있어서,
    상기 스크립트내의 정보를 바탕으로 상기 독립적인 컴포넌트로 생성시키기 위한 빌드 방법 및 상기 독립적인 컴포넌트에 적용 가능한 속성 중 적어도 어느 하나를 설정할 수 있도록 인터페이스를 구성하는 구성부를 더 포함하는, 빌드 단위의 컴포넌트 생성 장치.
  6. 제 5항에 있어서,
    상기 인터페이스에서 설정된 값을 이용하여 상기 의존 관계가 해소된 독립적인 컴포넌트로 생성시키기 위한 빌드 스크립트를 생성하는 생성부를 더 포함하는, 빌드 단위의 컴포넌트 생성 장치.
  7. 제 1항에 있어서,
    상기 제거부는,
    제1 컴포넌트가 의존하고 있는 제2 컴포넌트를 상기 제1 컴포넌트에 복사하여 상기 의존 관계를 해소시키는, 빌드 단위의 컴포넌트 생성 장치.
  8. 제 1항에 있어서,
    상기 제거부는,
    상기 의존 관계에 있는 컴포넌트들을 통합(merge)시켜 상기 의존 관계를 해소시키는, 빌드 단위의 컴포넌트 생성 장치.
  9. 제 1항에 있어서,
    상기 생성된 독립적인 컴포넌트는,
    사용자가 소스 트리에서 선택한 디렉토리 또는 복수개의 디렉토리의 묶음으로 구성된, 빌드 단위의 컴포넌트 생성 장치.
  10. 제 1항에 있어서,
    상기 독립적인 컴포넌트가 상기 의존 관계를 해소한 상태로 정상적으로 생성되었는 지 여부를 검증하는 검증부를 더 포함하는, 빌드 단위의 컴포넌트 생성 장치.
  11. 컴포넌트간 의존 관계가 있을 경우 상기 의존 관계를 해소시키는 (a)단계;
    상기 의존 관계가 해소된 컴포넌트를 독립적인 컴포넌트로 생성시키는 (b)단계; 및
    상기 생성된 독립적인 컴포넌트의 특성을 나타내는 타입을 정의하는 (c)단계를 포함하는, 빌드 단위의 컴포넌트 생성 방법.
  12. 제 11항에 있어서,
    상기 의존 관계에 관한 정보를 수집하는 (d)단계를 더 포함하는, 빌드 단위의 컴포넌트 생성 방법.
  13. 제 12항에 있어서,
    상기 (d)단계는,
    소스 트리내의 스크립트를 분석하여 상기 의존 관계에 관한 정보를 수집하는, 빌드 단위의 컴포넌트 생성 방법.
  14. 제 12항에 있어서,
    상기 (d)단계는,
    상기 스크립트 실행시 컴파일러 또는 링커에 전송될 파라미터 값을 분석하여 상기 의존 관계에 관한 정보를 수집하는, 빌드 단위의 컴포넌트 생성 방법.
  15. 제 13항에 있어서,
    상기 스크립트내의 정보를 바탕으로 상기 독립적인 컴포넌트로 생성시키기 위한 빌드 방법 및 상기 독립적인 컴포넌트에 적용 가능한 속성 중 적어도 어느 하나를 설정할 수 있도록 인터페이스를 구성하는 단계를 더 포함하는, 빌드 단위의 컴포넌트 생성 방법.
  16. 제 15항에 있어서,
    상기 인터페이스에서 설정된 값을 이용하여 상기 의존 관계가 해소된 독립적인 컴포넌트로 생성시키기 위한 빌드 스크립트를 생성하는 단계를 더 포함하는, 빌드 단위의 컴포넌트 생성 방법.
  17. 제 11항에 있어서,
    상기 (a)단계;
    제1 컴포넌트가 의존하고 있는 제2 컴포넌트를 상기 제1 컴포넌트에 복사하여 상기 의존 관계를 해소시키는, 빌드 단위의 컴포넌트 생성 방법.
  18. 제 11항에 있어서,
    상기 (a)단계;
    상기 의존 관계에 있는 컴포넌트들을 통합(merge)시켜 상기 의존 관계를 해소시키는, 빌드 단위의 컴포넌트 생성 방법.
  19. 제 11항에 있어서,
    상기 생성된 독립적인 컴포넌트는,
    사용자가 소스 트리에서 선택한 디렉토리 또는 복수개의 디렉토리의 묶음으로 구성된, 빌드 단위의 컴포넌트 생성 방법.
  20. 제 11항에 있어서,
    상기 독립적인 컴포넌트가 상기 의존 관계를 해소한 상태로 정상적으로 생성되었는 지 여부를 검증하는 단계를 더 포함하는, 빌드 단위의 컴포넌트 생성 방법.
KR1020060079482A 2006-08-22 2006-08-22 빌드 단위의 컴포넌트 생성 장치 및 방법 KR100791303B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020060079482A KR100791303B1 (ko) 2006-08-22 2006-08-22 빌드 단위의 컴포넌트 생성 장치 및 방법
US11/762,934 US20080052666A1 (en) 2006-08-22 2007-06-14 Apparatus and method for making build-block component
EP07114559A EP1898303A1 (en) 2006-08-22 2007-08-17 Apparatus and method for making build-block component

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060079482A KR100791303B1 (ko) 2006-08-22 2006-08-22 빌드 단위의 컴포넌트 생성 장치 및 방법

Publications (1)

Publication Number Publication Date
KR100791303B1 true KR100791303B1 (ko) 2008-01-04

Family

ID=38698274

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060079482A KR100791303B1 (ko) 2006-08-22 2006-08-22 빌드 단위의 컴포넌트 생성 장치 및 방법

Country Status (3)

Country Link
US (1) US20080052666A1 (ko)
EP (1) EP1898303A1 (ko)
KR (1) KR100791303B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10671510B1 (en) * 2016-06-24 2020-06-02 Intuit, Inc. Techniques for evaluating collected build metrics during a software build process

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6230117B1 (en) * 1997-03-27 2001-05-08 International Business Machines Corporation System for automated interface generation for computer programs operating in different environments
US6253244B1 (en) * 1998-10-30 2001-06-26 Unisys Corp. System and computer-implemented method for providing access to host-based screen applications using business-centric software components
US6305003B1 (en) * 1999-05-26 2001-10-16 Hewlett-Packard Company System and method for propagating clock nodes in a netlist of circuit design
KR20020058537A (ko) * 2000-12-30 2002-07-12 오길록 개조 컴포넌트에 의한 바이너리 컴포넌트의 재정의 방법
KR20030050621A (ko) * 2001-12-19 2003-06-25 한국전자통신연구원 절차 지향 프로그램을 컴포넌트 기반의 시스템으로래핑하기 위한 방법 및 그 장치
KR20030059504A (ko) * 2001-12-29 2003-07-10 한국전자통신연구원 컴포넌트 자동 변환 시스템 및 방법
KR20040046463A (ko) * 2002-11-27 2004-06-05 한국전자통신연구원 서블릿 프로그램의 재사용 가능한 비즈니스 로직으로부터이제이비 컴포넌트를 생성하는 시스템 및 방법
KR20040049505A (ko) * 2002-12-06 2004-06-12 한국전자통신연구원 설계 패턴을 이용한 아키텍쳐 기반의 재공학 방법
KR20040097941A (ko) * 2003-05-12 2004-11-18 정안모 컴포넌트 기반 환경 하에서 확장된 메타데이터를 이용한 소프트웨어 개발 방법 및 시스템
KR20050024227A (ko) * 2003-09-02 2005-03-10 마이크로소프트 코포레이션 소프트웨어 컴포넌트화
KR20050062896A (ko) * 2003-12-19 2005-06-28 한국전자통신연구원 레거시 시스템으로부터 재사용 가능한 컴포넌트 추출 방법
KR20050063402A (ko) * 2003-12-22 2005-06-28 한국전자통신연구원 레거시 시스템의 재공학을 위한 컴포넌트화 방법
KR20050066281A (ko) * 2003-12-26 2005-06-30 한국전자통신연구원 에스시에이 기반 시스템의 디스크립터 파일 구조 및 그의파일 파싱 방법

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7640533B1 (en) * 2005-03-30 2009-12-29 Emc Corporation System and methods for defining a software build
US7836440B2 (en) * 2006-04-27 2010-11-16 Oracle America, Inc. Dependency-based grouping to establish class identity

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6230117B1 (en) * 1997-03-27 2001-05-08 International Business Machines Corporation System for automated interface generation for computer programs operating in different environments
US6253244B1 (en) * 1998-10-30 2001-06-26 Unisys Corp. System and computer-implemented method for providing access to host-based screen applications using business-centric software components
US6305003B1 (en) * 1999-05-26 2001-10-16 Hewlett-Packard Company System and method for propagating clock nodes in a netlist of circuit design
KR20020058537A (ko) * 2000-12-30 2002-07-12 오길록 개조 컴포넌트에 의한 바이너리 컴포넌트의 재정의 방법
KR20030050621A (ko) * 2001-12-19 2003-06-25 한국전자통신연구원 절차 지향 프로그램을 컴포넌트 기반의 시스템으로래핑하기 위한 방법 및 그 장치
KR20030059504A (ko) * 2001-12-29 2003-07-10 한국전자통신연구원 컴포넌트 자동 변환 시스템 및 방법
KR20040046463A (ko) * 2002-11-27 2004-06-05 한국전자통신연구원 서블릿 프로그램의 재사용 가능한 비즈니스 로직으로부터이제이비 컴포넌트를 생성하는 시스템 및 방법
KR20040049505A (ko) * 2002-12-06 2004-06-12 한국전자통신연구원 설계 패턴을 이용한 아키텍쳐 기반의 재공학 방법
KR20040097941A (ko) * 2003-05-12 2004-11-18 정안모 컴포넌트 기반 환경 하에서 확장된 메타데이터를 이용한 소프트웨어 개발 방법 및 시스템
KR20050024227A (ko) * 2003-09-02 2005-03-10 마이크로소프트 코포레이션 소프트웨어 컴포넌트화
KR20050062896A (ko) * 2003-12-19 2005-06-28 한국전자통신연구원 레거시 시스템으로부터 재사용 가능한 컴포넌트 추출 방법
KR20050063402A (ko) * 2003-12-22 2005-06-28 한국전자통신연구원 레거시 시스템의 재공학을 위한 컴포넌트화 방법
KR20050066281A (ko) * 2003-12-26 2005-06-30 한국전자통신연구원 에스시에이 기반 시스템의 디스크립터 파일 구조 및 그의파일 파싱 방법

Also Published As

Publication number Publication date
US20080052666A1 (en) 2008-02-28
EP1898303A1 (en) 2008-03-12

Similar Documents

Publication Publication Date Title
US7340726B1 (en) Systems and methods for performing static analysis on source code
Systä et al. Shimba—an environment for reverse engineering Java software systems
TWI514130B (zh) 一用於啟用並行測試之電腦裝置、方法、電腦程式產品及設備
US6898784B1 (en) Method and system for forming skeletons for generating verification systems
CN106775744B (zh) 一种生成静态库的方法和装置
US11481200B1 (en) Checking source code validity at time of code update
US8863100B2 (en) Application services source refactoring
Leemans et al. Recursion aware modeling and discovery for hierarchical software event log analysis
CN101866315B (zh) 软件开发工具的测试方法及系统
CN109542444B (zh) Java应用的监控方法、装置、服务器和存储介质
US7624381B1 (en) Portable detection of start and completion of object construction
KR100791303B1 (ko) 빌드 단위의 컴포넌트 생성 장치 및 방법
Derrick et al. Property-based testing-the protest project
CN101571801A (zh) 业务扩展系统及方法
CN115857999A (zh) 基于vue的系统架构改造获得微前端系统架构的方法及系统
CN115344268A (zh) 一种多平台嵌入式开发环境编译方法及装置
Alshanqiti et al. Visual contract extractor: a tool for reverse engineering visual contracts using dynamic analysis
WO2008015110A2 (en) Methods, apparatus and computer programs for modelling computer programs
JP2016042317A (ja) ソフトウェア設計支援装置、および方法
CN108304184A (zh) 编译方法及装置
KR100834759B1 (ko) 목적 파일을 이용한 컴포넌트 구현 장치 및 방법
Szvetits et al. Enhancing root cause analysis with runtime models and interactive visualizations
Dai et al. Automatic test data generation for TTCN-3 using CTE
Kejstová Model checking with system call traces
CN113821204B (zh) 一种组件生成方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121129

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20131128

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20141127

Year of fee payment: 8

LAPS Lapse due to unpaid annual fee