KR20180077397A - 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법 - Google Patents

소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법 Download PDF

Info

Publication number
KR20180077397A
KR20180077397A KR1020160181345A KR20160181345A KR20180077397A KR 20180077397 A KR20180077397 A KR 20180077397A KR 1020160181345 A KR1020160181345 A KR 1020160181345A KR 20160181345 A KR20160181345 A KR 20160181345A KR 20180077397 A KR20180077397 A KR 20180077397A
Authority
KR
South Korea
Prior art keywords
information
software
software project
project
code
Prior art date
Application number
KR1020160181345A
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 KR1020160181345A priority Critical patent/KR20180077397A/ko
Publication of KR20180077397A publication Critical patent/KR20180077397A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

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

본 발명은 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법에 관한 것으로, 유사성 척도에 따라서 소프트웨어 프로젝트간의 유사성 정보를 추출·보관하는 기술, 소프트웨어 프로젝트간의 상호 참조 정보를 추출·보관하는 기술, 추출된 메타데이터 및 특징점들을 바탕으로 비교, 검색 후보를 줄이는 기술, 사용자가 지정한 소프트웨어 프로젝트와 유사한, 또는 상호 참조 관계를 가지는 소프트웨어 프로젝트의 정보 및 그 메타데이터의 리스트를 제공하는 기술 등을 제공한다.

Description

소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법{System for constructing software project relationship and method thereof}
본 발명은 소프트웨어, 특히 오픈소스 소프트웨어 프로젝트의 관계도를 구성하는 시스템 및 그 방법과 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체에 관한 것이다.
소프트웨어 프로그램 코드를 상호 참조하는 개발 환경이 조성·권장되면서 현장에서 많은 프로그램 코드들이 참조·상호 참조되고 있다.
특히 오픈소스 프로젝트는 코드 참조·상호 참조가 간단한 이점으로 인해 1) 상호 참조하고 2) 필요성·의도에 따라서 다른 방향으로 프로젝트가 분기(fork)하기도 하는 등 다양한 형태의 개발 상황이 일어난다.
이렇게 코드가 상호 참조되어지고 있지만, 이러한 상호 참조 정보는 명시적으로 재공되지 않아서 어떤 소프트웨어의 어떤 코드가 다른 프로젝트에 전파되었는지 파악하는 것은 매우 난해한 문제이다.
프로그램 취약점의 측면에서 생각해보면, 널리 사용되는 특정 소프트웨어 프로젝트의 특정 버전에서 발생한 취약점은 그 소프트웨어 프로젝트를 참조한 다른 모든 프로젝트의 취약점으로 간주할 수 있다. 이러한 문제는 다층적으로 참조된 제품의 최종 사용자가 쉽게 파악할 수 있는 문제가 아니기에 심각하다고 할 수 있다.
오픈소스의 경우에는 취약점이 일반에 공개되지만, 개발자가 그 정보를 인지하지 못하고 사용된 오픈소스의 버전 정보등을 파악하지 못하는 경우에는 잘 알려져 있는 취약점이 노출되버린다.
사내 개발 소프트웨어·라이브러리의 경우에도 버그·취약점 정보가 공유·공지되더라도, 코드 재사용을 관리하는 시스템·사람이 없는 경우에는 역시 버그·취약점이 고쳐지지 않은 채 다른 소프트웨어에 계속 잠복하게 되는 상황이 발생할 수 있다.
잘 알려진 경우로, 오픈소스 프로젝트들은 라이선스가 지정한 조건을 따르지 않고서 코드를 참조하면 프로그램 배포 금지 등 상당한 불이익을 받게 된다. 이로 인하여 개발자·사용자는 이러한 라이선스 정보를 정확하게 인식·확인할 필요가 있다. 하지만, 이러한 라이선스 정보가 불분명한 경우, 사용된 코드를 분석함으로서 이 프로젝트가 가질 수 있는·가져야만 하는 라이선스를 추정함으로서 잠재적인 라이선스 위반을 회피할 수 있다.
이와같이 소프트웨어 프로젝트간의 상호 코드 참조 상황을 파악하는 문제는 필수적이라고 할 수 있다.
본 발명은 전술한 목적을 달성하기 위하여 안출된 것으로, 본 발명의 목적은 데이터베이스에 미리 저장·처리된 소프트웨어 프로젝트의 메타데이터 및 고유식별정보를 기반으로 다른 소프트웨어 프로젝트와의 유사성을 검색하고 이를 이용하여 소프트웨어 프로젝트간의 재사용 정보 및 분기 정보를 제공하는데 의의가 있다.
전술한 목적을 달성하기위하여 본 발명의 제1 측면은, (미리) 수집된 소프트웨어 프로젝트의 메타데이터 및 고유식별정보를 데이터베이스화 하는 시스템을 제공하는 것이다.
소프트웨어 프로젝트의 메타데이터는 프로젝트 정보 또는 소스코드 정보를 가공 없이 얻을 수 있는 정보로 구성된다. 이는 작성 프로그래밍 언어, directory structure, commiter name/e-mail address, timestamp 등의 정보 중 하나 이상의 정보로 구성될 수 있다.
시스템은 수집된 소프트웨어 프로젝트의 코드/repository 및 배포처의 메타데이터를 입력받아서 각 프로젝트/파일의 작성 프로그래밍 언어, directory structure, commiter name/e-mail address, timestamp 등의 메타데이터를 추출해낸다.
시스템은 추출해낸 메타데이터를 각 소프트웨어 프로젝트별로 데이터베이스에 기록한다.
결여, 또는 생략된 정보가 있는 경우, 이를 공란으로 남기어 데이터베이스에 기록한다.
소프트웨어 프로젝트의 고유 식별 정보는 프로젝트 정보 또는 소스코드 정보를 가공하여 얻을 수 있는 정보로 call graph, 예약어 빈도수 등의 정보 중 하나 이상의 정보로 구성될 수 있다.
시스템은 수집된 소프트웨어 프로젝트의 코드 및 그 프로그래밍 언어에 따라서 call graph, 예약어의 빈도수 등을 분석하여 그 정보를 각 소프트웨어별로 데이터베이스에 기록한다.
call graph는 식별된 프로그래밍 언어에 따라서 call graph generator를 이용하여 생성한다.
데이터베이스 생성·관리 시스템은 이 메타데이터 또는 고유식별정보를 추출 할 수 있는 프로그램과 그 정보를 유지관리/검색할 수 있는 프로그램등으로 구성된다.
본 발명의 제2 측면은 등록된 소프트웨어 프로젝트간의 메타데이터 및 고유식별정보를 활용하여 프로그램 코드를 비교, 지는 소프트웨어 프로젝트간의 일치·유사한 부분을 나타내는 관계도를 생성하는 시스템으로 구성된다.
등록된 소프트웨어 프로젝트 간의 코드를 비교분석하여, 각 소프트웨어 프로젝트가 어떠한 부분의 코드를 어떤 소프트웨어 프로젝트의 어떤 부분으로부터 참조하였는가에 대한 정보, 즉 프로젝트 간의 공통적인 코드 및 유사도를 찾아낸다.
이 때, 공통 코드 및 유사도는 각 프로젝트의 각 버전별로 정보를 관리한다.
이 때 사용되는 유사도 척도는 복수의 기준을 사용할 수 있다.
찾아낸 정보(공통 부분 코드 정보, 유사도 정보)는 참조 및 유사도 데이터베이스에 저장한다.
등록된 소프트웨어 프로젝트의 수가 많은 경우, 필요한 비교 횟수는 비교 대상의 수 n의 계승(n!)에 달한다. 이 문제를 해결하기 위하여 비교 후보 압축 및 비교 우선 순위를 결정한다.
본 발명의 제3 측면은 사용자가 입력한 소프트웨어 프로젝트와 공통된 코드를 가지고 있는 소프트웨어 프로젝트 또는 그 메타데이터를 제공하는 기능이다.
사용자가 어떤 소프트웨어 프로젝트를 지정하면, 참조 정보 데이터베이스로부터 입력된 소프트웨어에 해당하는 정보를 찾는다.
해당 소프트웨어의 정보가 존재하면, 그 소프트웨어 프로젝트와 공통된 코드를 가지고 있는 것으로 기록된 소프트웨어 프로젝트의 정보 및 그 메타데이터를 사용자에게 제공한다.
본 발명의 제4 측면은 사용자가 입력한 소프트웨어 프로젝트와 사용자가 지정한 유사도 척도에 따라서, 입력된 소프트웨어와 관계되어있는, 또는 유사한 소프트웨어 프로젝트, 또는 그 메타데이터를 제공하는 기능이다.
사용자가 어떤 소프트웨어 프로젝트 및 측정에 사용할 유사도 척도를 지정하면, 지정한 척도에 따라서 어떤 소프트웨어와 동일한·비슷한 코드를 가지고 있는 소프트웨어 프로젝트 및 그 메타 데이터 정보를 제공한다.
유사도 척도가 지정되면, 그 유사도 척도에 의해 생성된 데이터베이스로부터 사용자가 입력한 소프트웨어 프로젝트의 정보를 찾는다.
해당 소프트웨어 프로젝트의 정보가 존재하면 그 유사도 척도에 따라서 해당 소프트웨어 프로젝트와 유사한 소프트웨어 프로젝트의 정보 및 그 메타데이터를 사용자에게 제공한다.
본 발명의 효과는 데이터베이스에 미리 저장·처리된 소프트웨어 프로젝트의 메타데이터 및 고유식별정보를 기반으로 다른 소프트웨어 프로젝트와의 유사성을 검색하고 이를 이용하여 소프트웨어 프로젝트간의 재사용 정보 및 분기 정보를 제공하는데 의의가 있다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 프로젝트 관계도 구성 시스템의 블록도이다.
도 2는 본 발명의 일 실시예에 따른 소프트웨어 프로젝트 관계도 구성 방법의 흐름도이다.
이하에서는 도면을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다. 이하 설명 및 첨부된 도면들에서 실질적으로 동일한 구성요소들은 각각 동일한 부호들로 나타냄으로써 중복 설명을 생략하기로 한다. 또한 본 발명을 설명함에 있어 관련된 공지기능 혹은 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그에 대한 상세한 설명은 생략하기로 한다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 프로젝트 관계도 구성 시스템의 블록도이다.
도 2는 본 발명의 일 실시예에 따른 소프트웨어 프로젝트 관계도 구성 방법의 흐름도이다.
먼저 사전에 수집된 소프트웨어 프로젝트의 코드로부터 각 소프트웨어 프로젝트의 메타 데이터 및 식별 정보(call graph, 예약어 빈도수 등)를 추출, 데이터베이스화 한다. 이 과정은 자동, 또는 수동으로 이루어질 수 있다.(일반적으로 자동화 되어 있음)
다음에, 추출한 메타데이터 및 식별 정보를 이용하여 소프트웨어 프로젝트를 분류, 상호 검토 후보를 줄여나간다. 메타데이터 및 식별 정보를 통해 줄인 후보군을 대상으로 최종적으로 지정된 유사도 척도에 따른 유사도 측정 검사를 한다. 이를 마치면 상호간에 유사한 부분이 있는 소프트웨어 프로젝트간의 관계성 정보를 얻을 수 있고, 이를 각 유사도 척도에 따른 유사도 데이터베이스에 기록한다.
위 단계에서 얻어진 유사도 관계 정보를 이용하여, 상호간에 큰 유사도를 가지는 프로젝트를 대상으로 다시 어떤 코드가 상호간에 참조되었는지 소스코드의 상호 참조 관계를 비교검사 한다. 이때 얻어진 상호참조 정보(어떤 소프트웨어 프로젝트 코드의 어떤 부분이 다른 소프트웨어 프로젝트 코드의 어떤 부분을 참조하였는지)를 참조관계 데이터베이스에 기록한다.
이렇게 구축된 데이터베이스를 바탕으로, 사용자가 어떤 소프트웨어 프로젝트와 상호 참조된 코드를 가지고 있는 소프트웨어 프로젝트, 또는 유사한 코드를 가지고 있는 소프트웨어 프로젝트에 대하여 질의하면 그에 해당하는 소프트웨어 프로젝트의 정보 및 그 메타데이터를 제공한다.
기존 기술과의 차이점
문제 정의: 찾아야 하는 정보의 특성
소프트웨어 코드의 상호 참조 정보를 찾고자 하는 목적은 표절된 부분을 찾으려는 것이 아니다. 상호간에 동일한, 혹은 비슷한 코드를 가지고 있는 부분을 찾아서, 각 코드가 참조한 라이브러리를 찾고, 그 코드가 가지고 있는 취약점 등을 수정하는데 도움을 주려는 것이다.
또는 코드간의 유사성을 바탕으로 분기된·유사한 소프트웨어 프로젝트를 탐색하고자 하는데 그 목적이 있다.
태그·키워드 방식의 관계성 기술 문제
기존의 기술 중에는 소프트웨어 프로젝트 간의 관계성을 표현하기 위해, 그 소프트웨어 프로젝트를 분류 또는 설명하는 태그 및 키워드를 바탕으로 서로 관련있는 소프트웨어 프로젝트를 소개하고 있다. 이는 기본적으로 인력에 의하여, 또는 자동적으로 태그 및 키워드가 입력된 소프트웨어 프로젝트에 대해서 작동할 수 있다. 하지만, 일반적으로 태그 및 키워드 방식에 의한 관계도는 커다란 분류로서의 의미를 가지고 있지만, 소프트웨어적 유사성, 즉 상호 코드 참조·의존 관계나 코드의 변천 과정에 대해서는 아무런 도움이 되지 않는다. 또한, 태그나 키워드 방식은 너무 자세하게 분류하면 서로 연관이 있는 소프트웨어 프로젝트가 서로 다른 분류에 포함이 되어버리고, 너무 간단하게 분류하면 너무 많은 소프트웨어 프로젝트가 한개의 분류에 포함되어 버리는 등, 어떤 소프트웨어 프로젝트와 연관된 프로젝트를 살펴보는데 있어서 곤란한 점을 가지고 있다.
이러한 부분에 있어서 소스코드를 바탕으로 한 상호 참조 관계 및 유사성 관계를 찾는 기술은 대체재·유사기술 탐색, 취약점 검사 등의 목적에 있어서 더 적합하다고 할 수 있다.
소프트웨어 수집
미리 수집한 소프트웨어는 다음과 같은 정보를 추출·처리하여 데이터베이스화 할 수 있다. 다음 예시에 등록된 항목 이외의 정보들도 등록되어 사용할 수 있다.
프로젝트 단위 정보 소프트웨어의 소스 코드 파일 정보 프로젝트 단위의 메타데이터
●프로젝트 단위의 저작권자 정보
●프로젝트의 개발·공개 일시 프로젝트 단위의 식별 정보
○프로젝트 단위의 call graph
각 코드 파일 단위 정보 파일 단위의 메타데이터
●파일의 프로그래밍 언어
●파일 단위의 저작권자 정보
●파일의 작성 일시 파일 단위의 고유 정보
●프로젝트 단위의 call graph
유사도 데이터베이스 구축
후보 압축
검색 대상 소프트웨어 프로젝트의 수 n에 대하여 상호간의 참조 및 유사성 정보를 얻기 위해서 계산해야 할 회수는 n의 계승(n!)에 달한다. 한번 한번의 참조 정보 및 유사성 정보를 얻기 위한 계산은 작지 않기 때문에, 이 문제를 해결하기 위해서 검색 대상을 적절한 방법으로 추려내는 후보 압축 방식을 도입한다.
식별 정보
프로그래밍 언어에 따른 후보 압축
기본적으로 검색 대상은 사용된 프로그래밍 언어에 따라서 완전하게 분류·압축하는 것이 가능하다. 이는 간단한 처리로 얻을 수 있는 정보로 메타데이터 데이터베이스에 기록한다.
후보를 압축할 때에는 동일한 프로그래밍 언어로 작성된 소프트웨어 프로젝트/파일을 후보로 추가, 일치하지 않는 프로젝트/파일은 후보에서 제외한다.
Call Graph - Program dependency graph
프로그램 안에서 함수들이 어떻게 호출되고있는지 각 함수간의 상관관계를 그래프화 한 것. 일반적으로 유향 그래프(directed graph)로 표현됨.
원본을 일부 수정한 코드의 call graph는 일반적으로 원본코드의 call graph와 거의 비슷한 구조를 가지게 된다. 원본을 일부 추출한 코드의 call graph는 원본 코드의 call graph의 부분 그래프가 된다.
그렇기 때문에, 소스코드 간의 참조 관계를 검색하기 위해서 부분 그래프를 검사한다. 원본 코드 및 비교 대상 소프트웨어 프로젝트의 코드를 call graph로 변환후, 서로간의 부분그래프를 확인한다. 각 소프트웨어 프로젝트의 코드는 사전에 call graph로 변환되어있으므로 고유식별정보 데이터 베이스를 참조한다. 이때에 Call-graph의 각 노드는 일반적으로 코드의 일부분(함수 정의)과 일대일 대응하기 때문에, 일치하는 부분그래프의 노드 정보를 중간 정보로서 기록한다.
서로간의 부분 그래프가 일정 크기 이상인 경우, 검사 대상 코드가 비교 대상 소프트웨어 프로젝트를 참조하였다고 할 수 있다. 이 때에는 소프트웨어 프로젝트로부터 일치한 부분의 코드를 결과와 같이 제공한다.
부분그래프 동형문제( Sub-graph isomorphism)
부분그래프 동형 문제는 프로그램에서 변형이 일어나기 어려운 부분, 프로그램의 call graph를 기반으로 사용 여부를 검토하는 기능이다. 이는, 과탐할수는 있지만, 오탐할 여지는 매우 적다.
●그래프 축약을 통한 후보 압축
●Harmony search & Genetic algorithm (Meta-heuristic)등의 근사해법을 이용해서 방대한 양의 후보군에서 underestimate하지 않고 후보를 압축할 수 있다.
또한 이외에도 vf2와 같은 알고리즘 등도 사용·대체 가능하다.
예약어의 빈출도를 이용한 검색 우선순의 정의
각 언어별로 예약어의 빈출도에 따라서 후보를 압축하는 단계이다. 이는 간단한 사전 처리를 필요로 하며, 처리 방법에 따라서 다양한 종류의 결과를 얻을 수 있으므로 식별 정보 데이터베이스에 기록한다.
예약어는 사용된 프로그래밍 언어에 따라서 다르기 때문에, 메타데이터로부터 얻어진 작성 프로그래밍 언어 정보를 바탕으로 예약어를 검색한다.
소프트웨어 프로젝트간의 관계, 즉 코드의 변천·분기 등 상호 참조 코드를 확인하기 위해서는 함수별 예약어 빈출도를 얻어서 기록한다.
키워드 정보를 이용한 후보 압축 정의
소프트웨어 프로젝트의 메타데이터, 관계도 등으로 부터 얻어진 태그·키워드 정보를 이용하여 소프트웨어 프로젝트 간에 불필요한 검사 대상을 제외할 수 있다.
일반적으로 키워드 정보만을 가지고 긍정적인 관계성은 정의할 수 없지만, 부정적인 관계성은 정의할 수 있다. 이를 이용하여, 상호간의 코드 참조 관계를 검사할 필요가 없는 관계를 정의할 수 있다.
소프트웨어 프로젝트의 키워드가 서로 부정적인 관계성을 가지는 프로젝트는 비교 검사를 하지 않고 생략한다.
유사도 척도
소프트웨어 유사도를 나타내는 척도에는 여러가지가 존재한다. 일반적으로 keyword 방식 유사도 측정, token 방식 유사도 측정, call-graph 방식 유사도 측정 등 많은 종류의 유사도 측정이 존재한다. 또한, 각 방식의 유사도 또한 백분율이나, 이산 수치 등으로 유사도를 표현하는 방식이 서로 다르며, 이는 유사도를 이용하려는 목적에 따라서 그 필요성을 달리한다. 이로 인하여 각 유사도 척도에 따른 소프트웨어 프로젝트 간의 상호 유사도 정보를 유사도 척도에 따라서 별도로 관리한다.
상호 참조 데이터베이스 구축
코드 비교·분석 (원본 정보 검색)
소프트웨어 프로젝트의 후보가 최종적으로 압축된 경우, 이 후보들을 대상으로 코드를 비교 분석하여 어떠한 소프트웨어인지를 특정한다. 이에 관한 기술은 여러가지가 있으며, 제안 시스템은 어떠한 방식과도 조합·대체 가능하다. 기존에 알려져 있는 방법으로 단순 비교(diff), 표절 검사 시스템(MOSS, YAP 등)등 많은 방법이 사용·대체 가능하다.
여기에서는 후보 압축에서 사용된 call-graph 일치 정보를 활용하는 시스템을 설명한다.
Call-graph는 기본적으로 각 노드에 해당하는 code가 존재한다. 그렇기 때문에, call-graph 일치 정보가 존재하는 경우, 소프트웨어 프로젝트의 코드 전체와 사용자의 코드 전체를 비교 검사할 필요가 없다. 각 call-graph에서 일치한 노드에 해당하는 코드들만을 비교하여 해당 부분이 소프트웨어 후보군과 일치하는지 기존에 제안되 여러가지 방법을 통해 검사할 수 있다.
일반적으로 표절 검사 시스템(MOSS, YAP)등은 계산 부하가 매우 크기 때문에 대량의 소프트웨어 후보군에 대한 검사는 현실적이지 않다. 하지만, call-graph에 의해 검사 범위를 매우 작은 부분은로 한정하는 경우, 현실적인 이유로 기존에 사용할 수 없었던 기법들을 활용하여 코드를 비교 분석이 가능하고, 다른 방법들에 비하여 더 나은 정밀도를 확보할 수 있다.
상호 참조 정보 구축
상호간에 동일, 또는 유사한한 코드가 발견된 경우, 각 소프트웨어 프로젝트에서 동일한 코드가 존재하는 위치 정보등을 기록한다. 이는 프로젝트 간에 상호 참조 관계를 사용자에게 제시하기 위함이고, 또한 동일한 과정으로 코드 비교 검색을 하는 과정에서 동일한 부분을 반복해서 검색하지 않게 하기 위해서이다.
이를테면, 소프트웨어 프로젝트 A의 a위치에 존재하는 코드와 소프트웨어 프로젝트 B의 b위치에 존재하는 코드가 일치, 또는 유사한 경우, 임의의 소프트웨어 프로젝트 X의 x위치에 존재하는 코드가 소프트웨어 프로젝트 A의 a와 일치하지 않는 경우 소프트웨어 프로젝트 B의 b와도 일치, 또는 유사하지 않을 것임을 미리 알 수 있다. 반대로, 소프트웨어 프로젝트 A의 a위치에 존재하는 코드와 소프트웨어 프로젝트 B의 b위치에 존재하는 코드가 일치, 또는 유사하고, 소프트웨어 프로젝트 C의 c위치에 존재하는 코드와 소프트웨어 D의 d위치에 존재하는 코드가 일치, 또는 유사한 경우, (A,a)와 (C,c)만을 비교 검사한 결과를 인용함으로서 (A,a)와 (D,d), (B,b)와 (C,c), (B,b)와 (D,d)를 비교할 필요가 없음을 알 수 있다.
이와 같이 비교를 생략할 수 있는 부분은 일반적으로 함수 단위로 존재하기 때문에, 연속성을 가지지 않고 이산적으로 취급할 수 있다. 코드를 이산적으로 취급 가능하다는 점은 검사를 생략할 수 있는 부분을 쉽게 찾아낼 수 있다는 뜻이고, 성능 향상에 매우 큰 기여를 할 수 있다.
구체적인 구현 예시
먼저, 수집된 소프트웨어에 대하여 다음과 같은 과정을 거쳐서 유사도 및 상호 참조 정보 데이터베이스를 구축한다. 기본적으로 비용이 적은 filtering 방법을 우선적으로 적용하여 검색 대상 후보를 압축, 계산량을 최적화하는 전략을 선택한다.
후보 압축 과정
1.프로그래밍 언어에 의한 후보 압축 <- 메타데이터 database
2.키워드 <- 고유 식별 정보 database 후보 우선순위 지정 과정
3.예약어 빈출도 <- 고유 식별 정보 database
유사도 추출 과정
1.부분 그래프 동형 문제에 의한 후보 압축 <- 고유 식별 정보
2.지정된 유사도 척도에 따라서 유사도 정보 추출
3.추출된 유사도 정보를 각 척도에 따른 유사도 데이터베이스에 기록
상호 참조 코드 검색 과정
1.유사도가 높은 코드간에 상호참조 코드 비교검사
2.얻어진 상호 참조 정도를 참조 정보 데이터베이스에 기록
이 데이터베이스가 구축된 후, 사용자가 상호 참조 정보, 또는 유사성 정보를 얻고자 하는 소프트웨어 프로젝트를 질의하면, 시스템은 유사도 데이터베이스 및 상호 참조 정보 데이터베이스로부터 입력된 소프트웨어 프로젝트를 검색한다. 해당 소프트웨어 프로젝트가 데이터베이스 안에 존재하는 경우, 그 소프트웨어 프로젝트와 상호 참조 관계를 가지는, 또는 유사한 소프트웨어 프로젝트의 정보 및 그 메타데이터를 사용자에게 제공한다.
한편, 상술한 본 발명의 실시예들은 컴퓨터에서 실행될 수 있는 프로그램으로 작성가능하고, 컴퓨터로 읽을 수 있는 기록매체를 이용하여 상기 프로그램을 동작시키는 범용 디지털 컴퓨터에서 구현될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드 디스크 등), 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)와 같은 저장매체를 포함한다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (4)

  1. 수집된 소프트웨어 프로젝트의 메타데이터 및 고유식별정보를 데이터베이스화 하는 시스템으로서,
    소프트웨어 프로젝트의 메타데이터는 프로젝트 정보 또는 소스코드 정보를 가공 없이 얻을 수 있는 정보로 구성된다. 이는 작성 프로그래밍 언어, directory structure, commiter name/e-mail address, timestamp 등의 정보 중 하나 이상의 정보로 구성되고,
    상기 시스템은 수집된 소프트웨어 프로젝트의 코드/repository 및 배포처의 메타데이터를 입력받아서 각 프로젝트/파일의 작성 프로그래밍 언어, directory structure, commiter name/e-mail address, timestamp 등의 메타데이터를 추출해내고,
    상기 시스템은 추출해낸 메타데이터를 각 소프트웨어 프로젝트별로 데이터베이스에 기록하고,
    소프트웨어 프로젝트의 고유 식별 정보는 프로젝트 정보 또는 소스코드 정보를 가공하여 얻을 수 있는 정보로 call graph, 예약어 빈도수 등의 정보 중 하나 이상의 정보로 구성되고,
    상기 시스템은 수집된 소프트웨어 프로젝트의 코드 및 그 프로그래밍 언어에 따라서 call graph, 예약어의 빈도수 등을 분석하여 그 정보를 각 소프트웨어별로 데이터베이스에 기록하고,
    데이터베이스 생성·관리 시스템은 이 메타데이터 또는 고유식별정보를 추출 할 수 있는 프로그램과 그 정보를 유지관리/검색할 수 있는 프로그램등으로 구성되는 것을 특징으로 하는 시스템.
  2. 등록된 소프트웨어 프로젝트간의 메타데이터 및 고유식별정보를 활용하여 프로그램 코드를 비교, 지는 소프트웨어 프로젝트간의 일치·유사한 부분을 나타내는 관계도를 생성하는 시스템으로서,
    등록된 소프트웨어 프로젝트 간의 코드를 비교분석하여, 각 소프트웨어 프로젝트가 어떠한 부분의 코드를 어떤 소프트웨어 프로젝트의 어떤 부분으로부터 참조하였는가에 대한 정보, 즉 프로젝트 간의 공통적인 코드 및 유사도를 찾아내고,
    찾아낸 정보(공통 부분 코드 정보, 유사도 정보)는 참조 및 유사도 데이터베이스에 저장하고,
    등록된 소프트웨어 프로젝트의 수가 많은 경우, 필요한 비교 횟수는 비교 대상의 수 n의 계승(n!)에 달하고 이 문제를 해결하기 위하여 비교 후보 압축 및 비교 우선 순위를 결정하는 것을 특징으로 하는 시스템.
  3. 사용자가 입력한 소프트웨어 프로젝트와 공통된 코드를 가지고 있는 소프트웨어 프로젝트 또는 그 메타데이터를 제공하는 기능을 가지는 시스템으로서,
    사용자가 어떤 소프트웨어 프로젝트를 지정하면, 참조 정보 데이터베이스로부터 입력된 소프트웨어에 해당하는 정보를 찾고,
    해당 소프트웨어의 정보가 존재하면, 그 소프트웨어 프로젝트와 공통된 코드를 가지고 있는 것으로 기록된 소프트웨어 프로젝트의 정보 및 그 메타데이터를 사용자에게 제공하는 것을 특징으로 하는 시스템.
  4. 사용자가 입력한 소프트웨어 프로젝트와 사용자가 지정한 유사도 척도에 따라서, 입력된 소프트웨어와 관계되어있는, 또는 유사한 소프트웨어 프로젝트, 또는 그 메타데이터를 제공하는 기능을 가지는 시스템으로서,
    사용자가 어떤 소프트웨어 프로젝트 및 측정에 사용할 유사도 척도를 지정하면, 지정한 척도에 따라서 어떤 소프트웨어와 동일한·비슷한 코드를 가지고 있는 소프트웨어 프로젝트 및 그 메타 데이터 정보를 제공하고,
    유사도 척도가 지정되면, 그 유사도 척도에 의해 생성된 데이터베이스로부터 사용자가 입력한 소프트웨어 프로젝트의 정보를 찾고,
    해당 소프트웨어 프로젝트의 정보가 존재하면 그 유사도 척도에 따라서 해당 소프트웨어 프로젝트와 유사한 소프트웨어 프로젝트의 정보 및 그 메타데이터를 사용자에게 제공하는 것을 특징으로 하는 시스템.
KR1020160181345A 2016-12-28 2016-12-28 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법 KR20180077397A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020160181345A KR20180077397A (ko) 2016-12-28 2016-12-28 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160181345A KR20180077397A (ko) 2016-12-28 2016-12-28 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법

Publications (1)

Publication Number Publication Date
KR20180077397A true KR20180077397A (ko) 2018-07-09

Family

ID=62919478

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160181345A KR20180077397A (ko) 2016-12-28 2016-12-28 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법

Country Status (1)

Country Link
KR (1) KR20180077397A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457561A (zh) * 2019-08-08 2019-11-15 北京航空航天大学 一种开源社区项目关系网络的构建方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110457561A (zh) * 2019-08-08 2019-11-15 北京航空航天大学 一种开源社区项目关系网络的构建方法及系统

Similar Documents

Publication Publication Date Title
JP7131199B2 (ja) クロスプロジェクト学習のための関連ソフトウェアプロジェクトの自動識別
CN111400724B (zh) 基于代码相似性分析的操作系统脆弱性检测方法、系统及介质
Lazar et al. Generating duplicate bug datasets
Alhindawi et al. Improving feature location by enhancing source code with stereotypes
US10929125B2 (en) Determining provenance of files in source code projects
US20110029476A1 (en) Indicating relationships among text documents including a patent based on characteristics of the text documents
CN108763091B (zh) 用于回归测试的方法、装置及系统
US20180330157A1 (en) System and method for global identification in a collection of documents
CN110109678B (zh) 一种代码审计规则库生成方法、装置、设备及介质
CN111382184A (zh) 一种对药品文档进行校验的方法和药品文档校验系统
US20150007202A1 (en) Programming Framework for Applications
CN114780485A (zh) 一种电子档案管理方法、系统、可读存储介质及设备
US9558462B2 (en) Identifying and amalgamating conditional actions in business processes
CN110795397B (zh) 一种地质资料包目录与文件类型自动识别方法
CN115658080A (zh) 一种软件开源代码成分的识别方法及系统
CN112434009A (zh) 端到端的数据探查方法、装置、计算机设备和存储介质
KR20180077397A (ko) 소프트웨어 프로젝트 관계도 구성 시스템 및 그 방법
US11250127B2 (en) Binary software composition analysis
CN111159230A (zh) 数据资源地图的构建方法及装置、存储介质、终端
CN114936269A (zh) 文档搜索平台、搜索方法、装置、电子设备及存储介质
CN115270136A (zh) 一种基于二元组的漏洞克隆检测系统及方法
Ledel et al. Broccoli: Bug localization with the help of text search engines
Tukaram Design and development of software tool for code clone search, detection, and analysis
CN108132971B (zh) 数据库碎片文件的分析方法和装置
CN113268425B (zh) 一种基于规则的微服务源文件预处理方法