KR20210147354A - 소스 코드 자동 머지 방법 및 그 장치 - Google Patents

소스 코드 자동 머지 방법 및 그 장치 Download PDF

Info

Publication number
KR20210147354A
KR20210147354A KR1020200064450A KR20200064450A KR20210147354A KR 20210147354 A KR20210147354 A KR 20210147354A KR 1020200064450 A KR1020200064450 A KR 1020200064450A KR 20200064450 A KR20200064450 A KR 20200064450A KR 20210147354 A KR20210147354 A KR 20210147354A
Authority
KR
South Korea
Prior art keywords
source code
merge
tree
partial
partial tree
Prior art date
Application number
KR1020200064450A
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 KR1020200064450A priority Critical patent/KR20210147354A/ko
Publication of KR20210147354A publication Critical patent/KR20210147354A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring

Landscapes

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

Abstract

개발자의 의도에 부합하는 소스 코드 머지 결과를 제공하는 소스 코드 자동 머지 방법 및 그 방법이 제공된다. 본 발명의 일 실시예에 따른 소스 코드 자동 머지 방법은, 제1 소스 코드에 대한 정적 분석을 통하여 얻어진 제1 추상 구문 트리에서 제1 메소드의 제1 부분 트리를 얻는 단계와, 상기 제1 소스 코드에 대응되는 제2 소스 코드에 대한 정적 분석을 통하여 얻어진 제2 추상 구문 트리에서 상기 제1 메소드에 대응되는 제2 메소드의 제2 부분 트리를 선정하는 단계와, 상기 제1 부분 트리 및 상기 제2 부분 트리의 머지(merge) 결과로서, 상기 제1 메소드와 상기 제2 메소드의 머지 결과인 머지 메소드를 표현하는 머지 트리를 생성하는 단계와, 상기 머지 트리를 이용하여 상기 제1 소스 코드와 상기 제2 소스 코드의 머지 결과인 머지 소스 코드를 생성하는 단계를 포함할 수 있다.

Description

소스 코드 자동 머지 방법 및 그 장치{METHOD AND APPARATUS FOR AUTOMATIC MERGING BETWEEN SOURCE CODES}
본 발명은 소스 코드를 자동으로 머지(merge)하는 방법 및 그 방법이 적용된 장치에 관한 것이다. 보다 자세하게는, 소스 코드의 계층 구조 등을 고려하여, 개발자의 의도에 부합하는 자동 머지 결과를 제공하는 방법 및 그 방법이 제공된 장치에 관한 것이다.
복수의 개발자들이 투입되는 개발 프로젝트에서, 각 개발자에 의하여 작업된 소스 코드가 자동으로 머지되는 기능을 이용함으로써 생산성이 향상될 수 있다. 이러한 소스 코드 자동 머지 기능은 소스 코드를 단순 비교함으로써 머지 대상 소스 코드 간의 내용 충돌(conflict)이 발생된 구문을 최신의 구문으로 대체하는 방식을 취하고 있다.
그런데, 단순 텍스트 비교 기반의 자동 머지 기능은, 적은 차이에도 충돌이 발생된 것으로 보아 최신 구문으로 대체되는 등 개발자의 의도가 자동 머지 결과에 정확하게 반영되기 어렵고, 개발 내용의 손실이 발생되는 등의 문제점을 가지고 있다. 이러한 문제점으로 인하여 자동 머지 기능의 신뢰도는 높지 않다.
미국등록특허 제 9940219 호 (2018.04.10 등록)
본 발명의 몇몇 실시예들을 통하여 달성하고자 하는 기술적 과제는, 개발자의 의도에 부합하는 소스 코드 머지 결과를 제공하는 소스 코드 자동 머지 방법 및 그 방법이 적용된 컴퓨팅 장치를 제공하는 것이다.
본 발명의 다른 몇몇 실시예들을 통하여 달성하고자 하는 다른 기술적 과제는, 소스 코드 머지에 소요되는 시간이 절감되는 소스 코드 자동 머지 방법 및 그 방법이 적용된 컴퓨팅 장치를 제공하는 것이다.
본 발명의 또 다른 몇몇 실시예들을 통하여 달성하고자 하는 또 다른 기술적 과제는, 머지 된 소스 코드를 대상으로 동적 분석 기반의 머지 결과 검증을 수행함으로써 머지 결과의 신뢰도가 담보될 수 있는 소스 코드 자동 머지 방법 및 그 방법이 적용된 컴퓨팅 장치를 제공하는 것이다.
본 발명의 또 다른 몇몇 실시예들을 통하여 달성하고자 하는 또 다른 기술적 과제는, 머지 된 소스 코드에 대한 검증을 위한 테스트 케이스를 머지 결과를 반영하여 자동으로 생성해줌으로써, 머지 된 소스 코드에 대한 수동 검증에 소요되는 시간을 절감시켜주는 소스 코드 자동 머지 방법 및 그 방법이 적용된 컴퓨팅 장치를 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명의 기술분야에서의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 소스 코드 자동 머지 방법은, 제1 소스 코드에 대한 정적 분석을 통하여 얻어진 제1 추상 구문 트리에서 제1 메소드의 제1 부분 트리를 얻는 단계와, 상기 제1 소스 코드에 대응되는 제2 소스 코드에 대한 정적 분석을 통하여 얻어진 제2 추상 구문 트리에서 상기 제1 메소드에 대응되는 제2 메소드의 제2 부분 트리를 선정하는 단계와, 상기 제1 부분 트리 및 상기 제2 부분 트리의 머지(merge) 결과로서, 상기 제1 메소드와 상기 제2 메소드의 머지 결과인 머지 메소드를 표현하는 머지 트리를 생성하는 단계와, 상기 머지 트리를 이용하여 상기 제1 소스 코드와 상기 제2 소스 코드의 머지 결과인 머지 소스 코드를 생성하는 단계를 포함할 수 있다. 이 때, 상기 머지 트리를 생성하는 단계는, 상기 머지 트리를 상기 제1 부분 트리로 초기화 하는 단계와, 상기 제2 부분 트리의 노드 중 상기 제1 부분 트리의 대응 노드보다 구문 수정 시점이 늦은 최상위 노드인 충돌 노드를 식별하는 단계와, 상기 머지 트리의 제3 부분 트리를, 상기 제2 부분 트리의 제4 부분 트리로 대체하는 단계를 포함할 수 있다. 이 때, 상기 제3 부분 트리는 상기 충돌 노드의 대응 노드 및 상기 대응 노드의 하위 노드를 포함하는 부분 트리이고, 상기 제4 부분 트리는 상기 충돌 노드 및 상기 충돌 노드의 하위 노드를 포함하는 부분 트리일 수 있다.
몇몇 실시예들에서, 상기 제2 메소드의 제2 부분 트리를 선정하는 단계는, 상기 제2 추상 구문 트리의 최상위 노드들을 식별하는 단계와, 상기 각각의 최상위 노드를 루프 노드로 하는 부분 트리들 중, 상기 제1 부분 트리와의 유사도를 기준으로 상기 제2 부분 트리를 선정하는 단계를 포함할 수 있다. 이 때, 상기 제1 부분 트리와의 유사도를 기준으로 상기 제2 부분 트리를 선정하는 단계는, 상기 각각의 최상위 노드를 루프 노드로 하는 부분 트리들 중, 상기 제1 부분 트리와 기준 개수 이상의 노드로 구성된 공통 부분 트리를 공유하는 부분 트리를 상기 제2 부분 트리로 선정하는 단계를 포함할 수 있다.
몇몇 실시예들에서, 상기 머지 트리를 생성하는 단계는 상기 머지 메소드의 테스트 케이스를 세팅하는 단계를 포함하고, 상기 소스 코드 자동 머지 방법은, 상기 머지 메소드의 테스트 케이스를 이용하여 상기 머지 소스 코드 중 상기 머지 메소드의 오류 발생 여부를 검증하기 위한 동적 분석을 수행하는 단계를 더 포함할 수 있다. 이 때, 상기 머지 메소드의 테스트 케이스를 세팅하는 단계는, 상기 머지 트리를 이용하여 머지 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 단계와, 상기 제1 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 단계와, 상기 제2 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 단계와, 상기 제1 메소드의 입력 파라미터 명세 및 출력값 자료형 및 상기 제2 메소드의 입력 파라미터 명세 및 출력값 자료형과, 상기 머지 메소드의 입력 파라미터 명세 및 출력값 자료형을 비교하는 단계와, 상기 비교의 결과를 이용하여, 상기 제1 메소드의 테스트 케이스를 상기 머지 메소드의 테스트 케이스로 세팅하는 것과, 상기 제2 메소드의 테스트 케이스를 상기 머지 메소드의 테스트 케이스로 세팅하는 것과, 상기 머지 메소드의 신규 테스트 케이스를 생성하는 것 중 어느 하나를 수행하는 단계를 포함할 수 있다. 이 때, 상기 머지 메소드의 신규 테스트 케이스는, 상기 머지 메소드의 입력 파라미터 명세에 부합하는 테스트 입력을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문으로 구성되는 것일 수 있다. 상기 테스트 입력은, 각각의 자료형에 대하여 기 지정된 기본 테스트 입력 값일 수 있다. 또한, 상기 머지 메소드가 분기문을 포함하는 것일 때, 상기 머지 메소드의 신규 테스트 케이스는, 상기 분기문을 통하여 제1 제어 흐름(control flow)이 형성되도록 하는 제1 테스트 입력값을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문과, 상기 분기문을 통하여 상기 제1 제어 흐름과 적어도 일부가 다른 제2 제어 흐름이 형성되도록 하는 제2 테스트 입력값을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문을 포함할 수 있다.
상기 기술적 과제를 해결하기 위한, 본 발명의 다른 실시예에 따른 소스 코드 자동 머지 장치는, 제1 사용자 단말로부터 제1 소스 코드를 수신하고, 제2 사용자 단말로부터 상기 제1 소스 코드에 대응되는 제2 소스 코드를 수신하는 네트워크 인터페이스와, 정적 분석 프로그램 및 소스 코드 자동 머지 프로그램을 로드 하는 메모리와, 상기 정적 분석 프로그램 및 상기 소스 코드 자동 머지 프로그램을 실행하는 프로세서를 포함할 수 있다. 이 때, 상기 정적 분석 프로그램은, 상기 제1 소스 코드에 대한 정적 분석을 수행하여 제1 추상 구문 트리를 생성하고, 상기 제2 소스 코드에 대한 정적 분석을 수행하여 제2 추상 구문 트리를 생성하는 인스트럭션(instruction)을 포함할 수 있다. 또한, 상기 소스 코드 자동 머지 프로그램은, 상기 제1 추상 구문 트리에서 제1 메소드의 제1 부분 트리를 얻는 인스트럭션과, 상기 제1 소스 코드에 대응되는 제2 소스 코드에 대한 정적 분석을 통하여 얻어진 제2 추상 구문 트리에서 상기 제1 메소드에 대응되는 제2 메소드의 제2 부분 트리를 선정하는 인스트럭션과, 상기 제1 부분 트리 및 상기 제2 부분 트리의 머지(merge) 결과로서, 상기 제1 메소드와 상기 제2 메소드의 머지 결과인 머지 메소드를 표현하는 머지 트리를 생성하는 인스트럭션과, 상기 머지 트리를 이용하여 상기 제1 소스 코드와 상기 제2 소스 코드의 머지 결과인 머지 소스 코드를 생성하는 인스트럭션을 포함할 수 있다. 또한, 상기 머지 트리를 생성하는 인스트럭션은, 상기 머지 트리를 상기 제1 부분 트리로 초기화 하는 인스트럭션과, 상기 제2 부분 트리의 노드 중 상기 제1 부분 트리의 대응 노드보다 구문 수정 시점이 늦은 최상위 노드인 충돌 노드를 식별하는 인스트럭션과, 상기 머지 트리의 제3 부분 트리를, 상기 제2 부분 트리의 제4 부분 트리로 대체하는 인스트럭션을 포함할 수 있다. 이 때, 상기 제3 부분 트리는 상기 충돌 노드의 대응 노드 및 상기 대응 노드의 하위 노드를 포함하는 부분 트리이고, 상기 제4 부분 트리는 상기 충돌 노드 및 상기 충돌 노드의 하위 노드를 포함하는 부분 트리일 수 있다.
몇몇 실시예들에서, 상기 메모리는 동적 분석 프로그램을 더 로드 하고, 상기 프로세서는 상기 동적 분석 프로그램을 더 실행하며, 상기 머지 트리를 생성하는 인스트럭션은 상기 머지 메소드의 테스트 케이스를 세팅하는 인스트럭션을 포함하고, 상기 동적 분석 프로그램은 상기 머지 메소드의 테스트 케이스를 이용하여 상기 머지 소스 코드 중 상기 머지 메소드의 오류 발생 여부를 검증하기 위한 동적 분석을 수행하는 인스트럭션을 포함할 수 있다.
도 1은 본 발명의 일 실시예에 따른 소스 코드 자동 머지 시스템의 구성도이다.
도 2는 본 발명의 다른 실시예에 따른 소스 코드 자동 머지 방법의 순서도이다.
도 3 내지 도 4는, 도 2를 참조하여 설명된 방법에서, 각각의 머지 대상 소스 코드에서 서로 대응되는 메소드가 매치(match)되는 과정을 설명하기 위한 도면들이다.
도 5 내지 도 7은, 도 2를 참조하여 설명된 방법에서, 추상 구문 트리를 통하여 파악되는 각 소스코드의 오브젝트 구조를 이용하여, 메소드 단위의 소스 코드 자동 머지가 수행되는 과정을 설명하기 위한 도면들이다.
도 8은, 도 2를 참조하여 설명된 방법에서, 테스트 케이스 자동 생성 과정을 상세히 설명하기 위한 상세 순서도이다.
도 9는, 도 8을 참조하여 설명된 테스트 케이스 자동 생성 과정과 관련하여 분기문이 포함된 메소드에 대하여 복수의 테스트 케이스가 자동 생성되는 것을 설명하기 위한 도면이다.
도 10은, 본 발명의 몇몇 실시예들의 수행 결과 자동으로 생성될 수 있는 예시적인 테스트 케이스 실시 메소드를 도시한 도면이다.
도 11은 본 발명의 몇몇 실시예들에 따른 예시적인 컴퓨팅 장치의 하드웨어 구성을 설명하기 위한 도면이다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 상세히 설명한다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명의 기술적 사상은 이하의 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 이하의 실시예들은 본 발명의 기술적 사상을 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 본 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명의 기술적 사상은 청구항의 범주에 의해 정의될 뿐이다.
각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다. 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다.
또한, 본 발명의 구성 요소를 설명하는 데 있어서, 제1, 제2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 어떤 구성 요소가 다른 구성요소에 "연결", "결합" 또는 "접속"된다고 기재된 경우, 그 구성 요소는 그 다른 구성요소에 직접적으로 연결되거나 또는 접속될 수 있지만, 각 구성 요소 사이에 또 다른 구성 요소가 "연결", "결합" 또는 "접속"될 수도 있다고 이해되어야 할 것이다. 이하, 본 발명의 몇몇 실시예들에 대하여 첨부된 도면에 따라 상세하게 설명한다.
이하, 도 1을 참조하여, 본 발명의 일 실시예에 따른 소스 코드 자동 머지 시스템의 구성 및 동작을 설명한다. 도 1에 도시된 바와 같이 본 실시예에 따른 소스 코드 자동 머지 시스템은 소스 코드 자동 머지 장치(100) 및 소스 코드 분석 장치(10)를 포함할 수 있다.
소스 코드 분석 장치(10)는 소스 코드의 정적 분석(static analysis)을 수행하는 모듈 및 소스 코드의 동적 분석(dynamic analysis)을 수행하는 모듈을 포함할 수 있다. 소스 코드 분석 장치(10)는 소스 코드 자동 머지 장치(100)의 요청에 따라 정적 분석 또는 동적 분석을 수행하며, 그 결과를 소스 코드 자동 머지 장치(100)에 제공할 것이다. 도 1에는 소스 코드 분석 장치(10)와 소스 코드 자동 머지 장치(100)가 별개의 물리 컴퓨팅 장치인 것으로 도시되어 있으나, 소스 코드 분석 장치(10)와 소스 코드 자동 머지 장치(100)는 하나의 물리적인 컴퓨팅 장치 또는 하나의 가상 머신의 기능 단위로서 구현될 수도 있음은 물론이다.
소스 코드 관리 장치(30)는 개발자 단말(41, 42)에 의하여 작성된 프로그램 소스 코드를 관리한다. 예를 들어, 소스 코드 관리 장치(30)는 소스 코드의 버전 관리, 소스 코드의 동시 편집 기능 제공, 소스 코드의 컴파일러 연동 등의 기능을 제공할 수 있다. 개발자 단말(40)은 소스 코드 관리 장치(30)에 접속하여 소스 코드의 편집을 위하여 최신 버전을 다운로드 하거나, 작성된 소스 코드를 소스 코드 관리 장치(30)에 업로드 할 수 있다.
소스 코드 관리 장치(30)는, 제1 개발자 단말(41)로부터 업로드 된 제1 소스 코드와, 제2 개발자 단말(42)로부터 업로드 된 제2 소스 코드에 대하여, 주기적으로 또는 비주기적으로, 소스 코드 자동 머지를 수행하는 것으로 결정할 수 있다. 도 1에 도시된 바와 같이, 상기 제1 소스 코드와 상기 제2 소스 코드는 동일한 소스 코드(test.java)일 수 있다.
몇몇 실시예들에서, 소스 코드 관리 장치(30)는 상기 제1 소스 코드와 상기 제2 소스 코드의 동일성을 파일명의 동일성을 이용하여 판단할 수도 있고, 소스 코드에 주석의 형태로 포함된 식별자의 동일성을 이용하여 판단할 수도 있을 것이다.
몇몇 실시예들에서, 소스 코드 관리 장치(30)는 소스 코드의 버전 관리 기능을 제공하는 서비스 서버일 수 있다.
몇몇 실시예들에서, 소스 코드 관리 장치(30)는 적어도 개발 진행 시간이 겹치는 2개 이상 버전의 동일 소스 코드가 업로드 된 것으로 판단된 경우, 소스 코드 자동 머지를 수행하는 것으로 결정할 수도 있을 것이다. 예를 들어, 제1 개발자 단말(41)이 소스 코드 관리 장치(30)에서 test.java를 다운로드 받아 편집을 진행 중인 도중, 제2 개발자 단말(42)이 소스 코드 관리 장치(30)에서 test.java를 다운로드 받아 편집을 진행한 경우, 제1 개발자 단말(41)로부터 업로드 된 test.java와 제2 개발자 단말(42)로부터 업로드 된 test.java를 자동 머지 하는 것으로 결정할 수 있는 것이다.
소스 코드 자동 머지를 수행하는 것으로 결정한 소스 코드 관리 장치(30)는, 소스 코드 자동 머지 장치(100)에 머지 대상인 2개 이상의 소스 코드를 포함한 자동 머지 요청을 송신할 수 있다.
도 1에는 소스 코드 관리 장치(30)와 소스 코드 자동 머지 장치(100)가 별개의 물리 컴퓨팅 장치인 것으로 도시되어 있으나, 소스 코드 관리 장치(30)와 소스 코드 자동 머지 장치(100)는 하나의 물리적인 컴퓨팅 장치 또는 하나의 가상 머신의 기능 단위로서 구현될 수도 있음은 물론이다. 또한, 몇몇 실시예들에서, 소스 코드 분석 장치(10), 소스 코드 관리 장치(30) 및 소스 코드 자동 머지 장치(100)가 모두 하나의 물리적인 컴퓨팅 장치 또는 하나의 가상 머신의 기능 단위로서 구현될 수도 있음은 물론이다.
소스 코드 자동 머지 장치(100)는 소스 코드 관리 장치(30)로부터 제1 소스 코드 및 상기 제1 소스 코드에 대응되는 제2 소스 코드가 포함된 소스 코드 머지 요청을 수신한다.
소스 코드 자동 머지 장치(100)는 머지 대상인 제1 소스 코드와 제2 소스 코드 각각에 대하여 소스 코드 분석 장치(10)에 정적 분석을 요청한다. 상기 정적 분석의 요청 시, 소스 코드가 소스 코드 분석 장치(10)에 제공될 수도 있고, 소스 코드가 컴파일된 결과 생성되는 목적 파일(object file)이 소스 코드 분석 장치(10)에 제공될 수도 있음은 물론이다.
소스 코드 자동 머지 장치(100)는 상기 제1 소스 코드와 상기 제2 소스 코드를 그대로 이용하는 것이 아니라, 정적 분석을 통하여 오브젝트화 한 후 자동 머지함으로써, 소스 코드의 구조적 특성 및 객체 측면의 특성을 반영한 머지를 수행하는 것으로 이해될 수 있을 것이다. 이 경우, 소스 코드 자동 머지 장치(100)는 개발자의 의도에 부합하는 소스 코드 머지 결과를 제공할 수 있는 것이다.
또한, 소스 코드 자동 머지 장치(100)는 상기 제1 소스 코드와 상기 제2 소스 코드를 대응되는 메소드(method)끼리 자동으로 머지함으로써, 소스 코드 머지에 소요되는 시간이 절감되는 효과를 제공한다. 즉, 제1 소스 코드 전체와 제2 소스 코드 전체를 서로 대비하면서 수정된 부분을 식별하는 것에 비해, 서로 대응되는 메소드 내부에서만 수정된 부분을 식별함으로써, 소스 코드 머지에 소요되는 시간이 절감될 수 있는 것이다.
상기 '대응되는 메소드'는 실질적으로 동일한 메소드를 의미한다. 실질적으로 동일한 메소드는, 메소드 명칭, 입력 파라미터의 타입, 순서 및 개수(이하, '입력 파라미터 명세'라 함) 및 출력 자료형이 완전히 동일한 메소드뿐만 아니라, 메소드 명칭, 입력 파라미터 명세 및 출력 자료형 중 하나 이상이 다른 메소드를 포함하는 개념으로 이해될 수 있을 것이다.
소스 코드 자동 머지 장치(100)는 상기 제1 소스 코드의 제1 메소드에 대응되는 상기 제2 소스 코드의 제2 메소드를 식별하기 위하여, 상기 정적 분석 결과로 얻어질 수 있는 각 소스 코드의 추상 구문 트리(Abstract Syntax Tree)를 이용할 수 있다. 예를 들어, 메소드의 정의 구문은 상기 추상 구문 트리의 최상위 노드로 현출될 수 있다. 이 때, 상기 제2 소스 코드의 추상 구문 트리의 최상위 노드 각각을 루프 노드로 하는 각각의 부분 트리들 중, 상기 제1 메소드를 가리키는 제1 부분 트리와의 유사도를 기준으로 상기 제1 메소드에 대응되는 제2 메소드의 부분 트리가 식별될 수 있을 것이다. 상기 대응되는 메소드가 결정되는 자세한 과정에 대하여는 자세히 후술하기로 한다.
소스 코드 자동 머지 장치(100)는, 대응되는 메소드 단위로 자동 머지를 진행하기 위하여 상기 추상 구문 트리를 참조할 수 있다. 예를 들어, 제1 소스 코드의 제1 추상 구문 트리에 제1 메소드를 표현하는 제1 부분 트리가 포함되고, 제2 소스 코드의 제2 추상 구문 트리에 제2 메소드를 표현하는 제2 부분 트리가 포함되는 사항을 가정하여 설명한다. 상기 제1 메소드와 상기 제2 메소드는 서로 대응되는 메소드이다. 소스 코드 자동 머지 장치(100)는 상기 제1 메소드 및 상기 제2 메소드에 대한 자동 머지를 수행하기 위하여, 상기 제1 부분 트리와 상기 제2 부분 트리가 머지된 머지 트리를 생성한 후, 상기 머지 트리를 다시 상기 제1 메소드(또는 상기 제2 메소드)의 머지된 소스 코드로 변환할 수 있다.
소스 코드 자동 머지 장치(100)는 머지가 필요한 각각의 메소드에 대하여 상기 설명된 방식으로 머지된 소스 코드를 얻음으로써, 최종적으로 상기 제1 소스 코드와 상기 제2 소스 코드가 자동으로 머지된 소스 코드를 출력할 수 있다.
또한, 소스 코드 자동 머지 장치(100)는, 상기 정적 분석 결과를 이용한 소스 코드의 자동 머지의 과정에서, 각각의 메소드 별로 테스트 케이스를 생성할 수 있다. 상기 소스 코드의 자동 머지가 마무리된 후, 상기 테스트 케이스를 이용한 동적 분석 기반의 머지 결과 검증을 수행할 수 있다.
상기 테스트 케이스는 머지된 메소드의 프로토타입에 기반하여 자동으로 생성된 것일 수 있다. 상기 메소드의 프로토타입은, 메소드의 메소드 명칭, 입력 파라미터 명세 및 출력 자료형을 가리킨다. 예를 들어, 상기 테스트 케이스는, 테스트 대상 메소드의 프로토타입에 부합하는 가상의 입력값이 상기 테스트 대상 메소드에 입력되었을 때, 상기 테스트 대상 메소드가 오류 없이 실행되는지를 검증하기 위한 데이터로 이해될 수 있을 것이다.
소스 코드 자동 머지 장치(100)는, 머지 된 소스 코드에 대한 검증을 위한 테스트 케이스를 머지 결과를 반영하여 자동으로 생성해줌으로써, 머지 된 소스 코드에 대한 수동 검증에 소요되는 시간을 절감시켜줄 수 있다. 소스 코드 자동 머지 장치(100)의 동작과 관련된 사항은, 후술되는 실시예들을 이용하여 보다 자세히 이해될 수 있을 것이다.
또한, 본 발명의 몇몇 실시예들에서, 도 1을 참조하여 설명된 소스 코드 자동 머지 시스템 전체가 아닌, 소스 코드 자동 머지 장치(100) 만이 독립적으로 제공될 수 있음을 유의한다.
이하, 도 2를 참조하여, 본 발명의 다른 실시예에 따른 소스 코드 위배 사항 소스 코드 자동 머지 방법을 설명한다. 본 실시예에 따른 소스 코드 위배 사항 소스 코드 자동 머지 방법(이하, '소스 코드 자동 머지 방법'으로 약칭함)은 컴퓨팅 장치에 의하여 수행될 수 있다. 본 실시예에 따른 소스 코드 자동 머지 방법은 제1 컴퓨팅 장치와 제2 컴퓨팅 장치에 의하여 나뉘어 수행될 수 있다. 이하, 본 실시예에 따른 소스 코드 자동 머지 방법을 설명함에 있어서, 각각의 동작의 주체에 대한 기재가 생략될 수 있으며, 이 경우 상기 동작의 주체는 컴퓨팅 장치인 것으로 이해될 수 있을 것이다. 또한, 도 1을 참조하여 설명된 실시예를 통하여 이해될 수 있는 기술적 사상은, 특별한 언급이 없더라도 본 실시예에 따른 소스 코드 자동 머지 방법에 당연히 적용될 수 있다.
단계 S101에서, 머지 대상인 복수의 소스 코드를 얻는다. 상기 복수의 소스 코드는 동일성이 인정되는 서로 다른 버전의 소스 코드인 것으로 이해될 수 있을 것이다. 동일성이 인정된다는 것은, 반드시 소스 코드의 명칭 또는 파일명이 동일한 것만을 의미하는 것은 아니다. 소스 코드의 명칭 또는 파일명이 서로 다르더라도, 동일한 소스 코드로서 식별될 수 있는 복수의 소스 코드는 서로 머지의 대상이 되는 것으로 이해될 수 있을 것이다. 몇몇 실시예들에서, 소스 코드의 동일성을 식별하기 위한 식별자가 주석 또는 기타의 지정된 형식으로 소스 코드에 포함될 수 있을 것이다.
상기 복수의 소스 코드는 외부 장치로부터 네트워크를 통해 수신된 것일 수도 있고, 내장 스토리지 장치에 저장된 것일 수도 있다. 몇몇 실시예들에서, 상기 복수의 소스 코드는 머지 대상인 소스 코드는 3개 이상일 수도 있을 것이다. 다만, 이해의 편의를 위해, 제1 소스 코드 및 제2 소스 코드가 머지의 대상인 경우를 이용하여 본 실시예를 설명하기로 한다.
단계 S103에서, 제1 소스 코드 및 제2 소스 코드 각각에 대한 정적 분석이 수행된다. 상기 정적 분석의 결과, 상기 제1 소스 코드 및 상기 제2 소스 코드가 오브젝트화 된다. 예를 들어, 상기 정적 분석의 결과, 상기 제1 소스 코드의 제1 추상 구문 트리 및 상기 제2 소스 코드의 제2 추상 구문 트리가 얻어질 수 있다.
단계 S105에서, 서로 대응되는 메소드를 매칭시키기 위하여, 상기 제1 추상 구문 트리 및 상기 제2 추상 구문 트리가 분석된다. 즉, 제1 추상 구문 트리의 부분 트리 중, 제1 메소드를 표현하는 제1 부분 트리와 대응되는 제2 추상 구문 트리의 제2 부분 트리가 식별된다. 이 때, 상기 제2 부분 트리가 표현하는 것이 상기 제2 메소드가 될 것이다.
프로그래밍 언어의 표현 규칙이 정하는 바에 의하여, 메소드의 정의 구문은 추상 구문 트리상 최상위 노드로서 표현될 것이다. 예를 들어, 제1 소스 코드에 3개의 메소드 정의 구문 만이 포함되어 있다면, 상기 제1 소스 코드의 추상 구문 트리 상에 3개의 최상위 노드가 포함될 것이다. 이 경우, 제1 메소드를 표현하는 제1 부분 트리는 상기 제1 소스 코드의 추상 구문 트리에 포함된 3개의 최상위 노드 중 어느 하나와 그 자식 노드들을 포함하여 구성되는 것이다.
따라서, 제1 추상 구문 트리의 최상위 노드 각각에 표현된 메소드 프로토타입과 제2 추상 구문 트리의 최상위 노드 각각에 표현된 메소드 프로토타입의 실질적 동일성을 판단하는 것에 의하여, 대응되는 메소드 식별이 가능할 것이다. 도 3을 참조하여, 제1 소스 코드에 포함된 메소드들과 제2 소스 코드에 포함된 메소드들 중 서로 대응되는 메소드들을 식별하는 방법을 보다 상세히 설명한다.
제1 소스 코드(210)에는 총 6개의 메소드 프로토타입이 정의되어 있고, 제2 소스 코드(220)에는 총 7개의 메소드 프로토타입이 정의되어 있다. 이중, 3개의 메소드 쌍은 그 프로토타입이 완전히 동일(200, 201, 203)한 바, 대응되는 메소드로 식별된다. 또한, 제2 소스 코드(220)에 신규로 정의된 메소드(funcNEW)는 제1 소스 코드(210)에 대응되는 메소드가 존재하지 않고, 신규의 메소드(205)로 식별된다.
나머지 3개의 메소드 쌍은 그 프로토타입이 동일하지 않은 것이다. 도 3에 도시된 것과 같은 몇몇 실시예들에서, 제1 소스 코드(210)의 제1 메소드와 제2 소스 코드(220)의 제2 메소드가 프로토타입이 동일하지 않더라도 상기 제1 메소드와 상기 제2 메소드의 내부 구문이 서로 유사하면 서로 대응되는 메소드로 식별될 수 있다.
상기 제1 메소드와 상기 제2 메소드의 내부 구문이 서로 유사하다는 것은, 상기 제1 메소드를 표현하는 제1 부분 트리와 상기 제2 메소드를 표현하는 제2 부분 트리가 서로 유사함을 의미한다. 몇몇 실시예들에서 상기 제1 부분 트리와 상기 제2 부분 트리의 유사도는 서로 공통되는 부분 트리의 개수 및 서로 공통되는 부분 트리의 최대 노드 개수 중 적어도 하나를 이용하여 결정될 수 있다.
또한, 다른 몇몇 실시예들에서 기 지정된 개수 이상의 노드로 구성되는 공통 부분 트리가 제1 부분 트리 및 제2 부분 트리에 공통적으로 포함된 경우, 상기 제1 부분 트리가 표현하는 제1 메소드와 상기 제2 부분 트리가 표현하는 제2 메소드는 서로 대응되는 것으로 평가될 수 있다. 예를 들어, 도 5의 메소드 func3을 표현하는 부분 트리(210a-1, 210a-1b, 215a, 210a-1a)와, 도 6의 메소드 func3을 표현하는 부분 트리(220a-1, 215a, 220a-1a)는, 모두 공통된 부분 트리(215a)를 포함한다. 이로 인하여, 제1 소스 코드의 func3과 제2 소스 코드의 func3은 서로 프로토타입이 다르지만 대응되는 메소드로 식별될 수 있는 것이다.
도 5 내지 도 7의 추상 구문 트리들에는 각각의 메소드를 표현하기 위한 부분 트리들(210a-2, 210a-3, 210a-4)이 더 포함될 수 있는 점이 도시된다.
서로 대응되는 것으로 식별되었으나, 그 프로토타입이 완전히 일치하지는 않는 경우, 머지된 소스 코드에 반영될 메소드 프로토타입은 최근에 수정된 소스 코드의 프로토타입을 따르게 된다. 도 4에는, 최근의 프로토타입을 이용하여, 각 메소드의 프로토타입이 정의된, 머지 된(merged) 소스 코드(230)가 도시되어 있다.
다시, 도 2로 돌아와서 설명한다. 단계 S105의 수행 결과에도 불구하고 대응 메소드가 하나도 식별되지 않는 경우(S107), 자동 머지를 수행할 수 없다는 메시지가 출력되거나 에러 로그가 생성될 것이다.
다음으로, 단계 S109 및 단계 S111에서, 식별된 대응 메소드의 부분 트리들 사이의 머지가 수행된다. 즉, 제1 소스 코드의 제1 메소드를 표현하는 제1 부분 트리와, 제2 소스 코드의 제2 메소드(제1 메소드에 대응되는 것)를 표현하는 제2 부분 트리가 머지 되어, 상기 제1 메소드(또는 제2 메소드)를 표현하는 머지 트리가 생성되는 것이다.
상기 머지 트리를 생성하는 과정은, 상기 머지 트리를 상기 제1 부분 트리로 초기화 하는 것, 상기 제2 부분 트리의 노드 중 상기 제1 부분 트리의 대응 노드보다 구문 수정 시점이 늦은 최상위 노드인 충돌 노드를 식별하는 것, 상기 머지 트리의 제3 부분 트리를, 상기 제2 부분 트리의 제4 부분 트리로 대체하는 것을 포함한다. 상기 제3 부분 트리는 상기 충돌 노드의 대응 노드 및 상기 대응 노드의 하위 노드를 포함하는 부분 트리이고, 상기 제4 부분 트리는 상기 충돌 노드 및 상기 충돌 노드의 하위 노드를 포함하는 부분 트리이다.
도 5 내지 도 7에는 참조하여, 상기 머지 트리의 생성 과정이 예시적으로 도시된다. 제1 소스 코드의 추상 구문 트리(210a)에 표현된 일부 구문의 부분 트리(210a-1b)는 제2 소스 코드(220a)에는 포함되지 않은 것이므로, 머지된 소스 코드의 추상 구문 트리(230a)에 그대로 반영된다. 또한, 공통 부분 트리(215a) 역시 머지된 소스 코드의 추상 구문 트리(230a)에 그대로 반영될 것이다.
그런데, 제1 소스 코드의 추상 구문 트리(210a)에 표현된 다른 일부 구문의 부분 트리(210a-1a)는 제2 소스 코드의 추상 구문 트리(220a)의 부분 트리(220a-1a)와 서로 대응되는데, 그 표현이 서로 다르다. 이러한 경우에는, 최근에 수정된 부분 트리(220a-1a)가 머지된 소스 코드의 추상 구문 트리(230a)에 반영될 것이다.
상술한 바와 같이, 소스 코드의 수정 시점에 대한 정보가 자동 머지의 과정에 참조되므로, 소스 코드의 각 라인에 대한 수정 시점에 대한 정보가 상기 소스 코드의 메타 데이터로서 관리될 수 있으며, 상기 메타 데이터의 정보가 상기 추상 구문 트리의 각 부분 트리에 매칭될 수 있을 것이다.
도 8은, 소스 코드 형태로 머지 결과를 설명하기 위한 도면이다. 제1 소스 코드(210b)의 제1 구문(210b-1)과 제2 소스 코드(220b)의 제1 구문(220b-1)이 서로 대응되고, 제1 소스 코드(210b)의 제2 구문(210b-2)과 제2 소스 코드(220b)의 제2 구문(220b-2)이 서로 대응되며, 서로 그 표현이 상충되는 것을 알 수 있다. 그리고, 그 머지 된 소스 코드(230b)에는, 나중에 수정된 구문들(220b-1, 210b-2)이 포함되는 점을 알 수 있다.
다음으로, 단계 S113에서, 머지 메소드를 위한 테스트 케이스가 세팅된다.
상기 머지 메소드의 테스트 케이스를 세팅하는 것은, 상기 제1 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 것(S1130), 상기 제2 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 것(S1131), 상기 머지 트리를 이용하여 머지 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 것(S1132), 상기 제1 메소드의 입력 파라미터 명세 및 출력값 자료형 및 상기 제2 메소드의 입력 파라미터 명세 및 출력값 자료형과, 상기 머지 메소드의 입력 파라미터 명세 및 출력값 자료형을 비교하는 것(S1133), 상기 비교의 결과를 이용하여, 상기 제1 메소드의 테스트 케이스를 상기 머지 메소드의 테스트 케이스로 세팅하는 것과(S1135), 상기 제2 메소드의 테스트 케이스를 상기 머지 메소드의 테스트 케이스로 세팅하는 것과(S1137), 상기 머지 메소드의 신규 테스트 케이스를 생성(S1138)하는 것 중 어느 하나를 수행하는 것을 포함할 수 있을 것이다. 각각의 메소드에 대한 메타 데이터로서, 상기 메소드의 테스트 케이스가 저장되고 업데이트 될 수 있을 것이다.
상기 머지 메소드의 신규 테스트 케이스는, 머지 메소드의 입력 파라미터 명세에 부합하는 테스트 입력을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문으로 구성될 수 있을 것이다.
몇몇 실시예에서, 상기 테스트 입력은, 각각의 자료형에 대하여 기 지정된 기본 테스트 입력 값일 수 있다. 예를 들어, int 타입의 자료형에 대하여는 '0'이 기본 테스트 입력 값으로 세팅될 수 있을 것이며, string 타입의 자료형에 대하여는 'hello test' 등의 예시적인 문구가 기본 테스트 입력 값으로 세팅될 수 있을 것이다. 즉, 상기 테스트 케이스는 상기 테스트 입력이 머지 메소드에 입력되었을 때, 상기 머지 메소드가 오류 없이 실행되는지 여부를 테스트하기 위한 것으로 이해될 수 있을 것이다. 도 11에는, 메소드(240)에 대한, 예시적인 동적 테스트 구문(250)이 도시된다.
다른 몇몇 실시예에서, 상기 테스트 입력은 2개 이상의 테스트 입력 값을 포함할 수도 있다. 도 10을 참조하여 설명한다. 상기 신규의 테스트 케이스는, 상기 머지 메소드에 포함된 분기문을 통하여 제1 제어 흐름(control flow)(230c)이 형성되도록 하는 제1 테스트 입력값을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문과, 상기 분기문을 통하여 상기 제1 제어 흐름과 적어도 일부가 다른 제2 제어 흐름(230d)이 형성되도록 하는 제2 테스트 입력값을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문을 포함할 수 있는 것이다. 본 실시예에 따르면, 머지 메소드에 서로 다른 복수의 제어 흐름이 형성되더라도, 각각의 제어 흐름에 따른 실행을 빠짐없이 검증할 수 있는 효과를 얻을 수 있다.
다시 도 2로 돌아와서 설명한다. 단계 S109, 단계 S111 및 단계 S113은 식별된 모든 대응 메소드 쌍에 대하여 반복하여 수행된다(S115, S116). 다음으로, 단계 S117에서, 각각의 머지 트리들이 소스 코드로 변환된다. 이 결과 머지된 메소드의 소스 코드가 얻어질 것이다. 또한, 각각의 머지 메소드 소스 코드들이 병합됨으로써 머지 소스 코드가 얻어진다. 단계 S119에서, 대응 메소드 이외의 기타 구문들이 상기 머지 소스 코드에 추가된다. 상기 기타 구문들은, 예를 들어 변수 정의 구문 등을 포함할 수 있을 것이다.
다음으로, 단계 S121에서, 상기 세팅된 테스트 케이스를 이용한 동적 분석이 수행된다. 즉, 상기 머지 메소드의 테스트 케이스를 이용하여 상기 머지 소스 코드 중 상기 머지 메소드의 오류 발생 여부를 검증하기 위한 동적 분석이 수행되고, 상기 머지 메소드의 오류 발생이 감지된 경우, 자동 머지의 결과 로그로서 상기 오류의 발생이 기록될 수 있을 것이다. 다음으로, 단계 S123에서, 자동 머지의 결과로서 머지 소스 코드 및 그 테스트 케이스 검증 결과가 출력된다.
지금까지 도 1 내지 도 11을 참조하여 설명된 본 발명의 기술적 사상은 컴퓨터가 읽을 수 있는 매체 상에 컴퓨터가 읽을 수 있는 코드로 구현될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록 매체는, 예를 들어 이동형 기록 매체(CD, DVD, 블루레이 디스크, USB 저장 장치, 이동식 하드 디스크)이거나, 고정식 기록 매체(ROM, RAM, 컴퓨터 구비 형 하드 디스크)일 수 있다. 상기 컴퓨터로 읽을 수 있는 기록 매체에 기록된 상기 컴퓨터 프로그램은 인터넷 등의 네트워크를 통하여 다른 컴퓨팅 장치에 전송되어 상기 다른 컴퓨팅 장치에 설치될 수 있고, 이로써 상기 다른 컴퓨팅 장치에서 사용될 수 있다.
이하, 본 발명의 몇몇 실시예들에 따른 예시적인 컴퓨팅 장치의 하드웨어 구성을 도 12를 참조하여 설명하기로 한다.
도 12는 본 발명의 다양한 실시예에서 컴퓨팅 장치를 구현할 수 있는 예시적인 하드웨어 구성도이다. 본 실시예에 따른 컴퓨팅 장치(1000)는 하나 이상의 프로세서(1100), 시스템 버스(1600), 통신 인터페이스(1200), 프로세서(1100)에 의하여 수행되는 컴퓨터 프로그램(1500)을 로드(load)하는 메모리(1400)와, 컴퓨터 프로그램(1500)를 저장하는 스토리지(1300)를 포함할 수 있다. 도 12에는 본 발명의 실시예와 관련 있는 구성요소들만이 도시되어 있다. 따라서, 본 발명이 속한 기술분야의 통상의 기술자라면 도 16에 도시된 구성요소들 외에 다른 범용적인 구성 요소들이 더 포함될 수 있음을 알 수 있다.
프로세서(1100)는 컴퓨팅 장치(1000)의 각 구성의 전반적인 동작을 제어한다. 프로세서(1100)는 CPU(Central Processing Unit), MPU(Micro Processor Unit), MCU(Micro Controller Unit), GPU(Graphic Processing Unit) 또는 본 발명의 기술 분야에 잘 알려진 임의의 형태의 프로세서 중 적어도 하나를 포함하여 구성될 수 있다. 또한, 프로세서(1100)는 본 발명의 다양한 실시예들에 따른 방법/동작을 실행하기 위한 적어도 하나의 애플리케이션 또는 프로그램에 대한 연산을 수행할 수 있다. 컴퓨팅 장치(1000)는 둘 이상의 프로세서를 구비할 수 있다. 메모리(1400)는 각종 데이터, 명령 및/또는 정보를 저장한다. 메모리(1400)는 본 발명의 다양한 실시예들에 따른 방법/동작들을 실행하기 위하여 스토리지(1300)로부터 하나 이상의 프로그램(190)을 로드(load) 할 수 있다. 메모리(1400)의 예시는 RAM이 될 수 있으나, 이에 한정되는 것은 아니다. 시스템 버스(1600)는 컴퓨팅 장치(1000)의 구성 요소 간 통신 기능을 제공한다. 상기 버스는 주소 버스(Address Bus), 데이터 버스(Data Bus) 및 제어 버스(Control Bus) 등 다양한 형태의 버스로 구현될 수 있다. 통신 인터페이스(1200)는 컴퓨팅 장치(1000)의 유무선 인터넷 통신을 지원한다. 통신 인터페이스(1200)는 인터넷 통신 외의 다양한 통신 방식을 지원할 수도 있다. 이를 위해, 통신 인터페이스(1200)는 본 발명의 기술 분야에 잘 알려진 통신 모듈을 포함하여 구성될 수 있다. 통신 인터페이스(1200)는 하나 이상의 블록체인 노드(200) 및 하나 이상의 스토리지 노드(400)를 연결할 수 있다. 스토리지(1300)는 하나 이상의 컴퓨터 프로그램(1500)을 비임시적으로 저장할 수 있다. 스토리지(1300)는 플래시 메모리 등과 같은 비휘발성 메모리, 하드 디스크, 착탈형 디스크, 또는 본 발명이 속하는 기술 분야에서 잘 알려진 임의의 형태의 컴퓨터로 읽을 수 있는 기록 매체를 포함하여 구성될 수 있다.
컴퓨터 프로그램(1500)은 본 발명의 다양한 실시예들에 따른 방법/동작들이 구현된 하나 이상의 인스트럭션들을 포함할 수 있다. 컴퓨터 프로그램(1500)이 메모리(1400)에 로드 되면, 프로세서(1100)는 상기 하나 이상의 인스트럭션들을 실행시킴으로써 본 발명의 다양한 실시예들에 따른 방법/동작들을 수행할 수 있다.
컴퓨터 프로그램(1500)은 정적 분석 프로그램, 동적 분석 프로그램 및 상기 소스 코드 자동 머지 프로그램 중 적어도 하나를 포함할 수 있다.
상기 정적 분석 프로그램은, 상기 제1 소스 코드에 대한 정적 분석을 수행하여 제1 추상 구문 트리를 생성하고, 상기 제2 소스 코드에 대한 정적 분석을 수행하여 제2 추상 구문 트리를 생성하는 인스트럭션(instruction)을 포함할 수 있다.
상기 소스 코드 자동 머지 프로그램은, 상기 제1 추상 구문 트리에서 제1 메소드의 제1 부분 트리를 얻는 인스트럭션과, 상기 제1 소스 코드에 대응되는 제2 소스 코드에 대한 정적 분석을 통하여 얻어진 제2 추상 구문 트리에서 상기 제1 메소드에 대응되는 제2 메소드의 제2 부분 트리를 선정하는 인스트럭션과, 상기 제1 부분 트리 및 상기 제2 부분 트리의 머지(merge) 결과로서, 상기 제1 메소드와 상기 제2 메소드의 머지 결과인 머지 메소드를 표현하는 머지 트리를 생성하는 인스트럭션과, 상기 머지 트리를 이용하여 상기 제1 소스 코드와 상기 제2 소스 코드의 머지 결과인 머지 소스 코드를 생성하는 인스트럭션을 포함할 수 있다. 또한, 상기 머지 트리를 생성하는 인스트럭션은, 상기 머지 트리를 상기 제1 부분 트리로 초기화 하는 인스트럭션과, 상기 제2 부분 트리의 노드 중 상기 제1 부분 트리의 대응 노드보다 구문 수정 시점이 늦은 최상위 노드인 충돌 노드를 식별하는 인스트럭션과, 상기 머지 트리의 제3 부분 트리를, 상기 제2 부분 트리의 제4 부분 트리로 대체하되, 상기 제3 부분 트리는 상기 충돌 노드의 대응 노드 및 상기 대응 노드의 하위 노드를 포함하는 부분 트리이고, 상기 제4 부분 트리는 상기 충돌 노드 및 상기 충돌 노드의 하위 노드를 포함하는 부분 트리인, 인스트럭션을 포함할 수 있다.
몇몇 실시예들에서, 컴퓨터 프로그램(1500)은 정적 분석의 결과를 이용한 소스 코드 자동 머지의 과정에서, 자동으로 머지된 메소드의 정상적인 동작을 검증하기 위한 테스트 케이스를 자동으로 생성할 수 있다. 이 때, 상기 머지 트리를 생성하는 인스트럭션은, 상기 머지 메소드의 테스트 케이스를 세팅하는 인스트럭션을 포함할 수 있다. 또한, 상기 동적 분석 프로그램은, 상기 머지 메소드의 테스트 케이스를 이용하여 상기 머지 소스 코드 중 상기 머지 메소드의 오류 발생 여부를 검증하기 위한 동적 분석을 수행하는 인스트럭션을 포함할 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 본 발명이 다른 구체적인 형태로도 실시될 수 있다는 것을 이해할 수 있다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로 이해해야만 한다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명에 의해 정의되는 기술적 사상의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (10)

  1. 컴퓨팅 장치에 의하여 수행되는 방법에 있어서,
    제1 소스 코드에 대한 정적 분석을 통하여 얻어진 제1 추상 구문 트리에서 제1 메소드의 제1 부분 트리를 얻는 단계;
    상기 제1 소스 코드에 대응되는 제2 소스 코드에 대한 정적 분석을 통하여 얻어진 제2 추상 구문 트리에서 상기 제1 메소드에 대응되는 제2 메소드의 제2 부분 트리를 선정하는 단계;
    상기 제1 부분 트리 및 상기 제2 부분 트리의 머지(merge) 결과로서, 상기 제1 메소드와 상기 제2 메소드의 머지 결과인 머지 메소드를 표현하는 머지 트리를 생성하는 단계; 및
    상기 머지 트리를 이용하여 상기 제1 소스 코드와 상기 제2 소스 코드의 머지 결과인 머지 소스 코드를 생성하는 단계를 포함하되,
    상기 머지 트리를 생성하는 단계는,
    상기 머지 트리를 상기 제1 부분 트리로 초기화 하는 단계;
    상기 제2 부분 트리의 노드 중 상기 제1 부분 트리의 대응 노드보다 구문 수정 시점이 늦은 최상위 노드인 충돌 노드를 식별하는 단계; 및
    상기 머지 트리의 제3 부분 트리를, 상기 제2 부분 트리의 제4 부분 트리로 대체하되, 상기 제3 부분 트리는 상기 충돌 노드의 대응 노드 및 상기 대응 노드의 하위 노드를 포함하는 부분 트리이고, 상기 제4 부분 트리는 상기 충돌 노드 및 상기 충돌 노드의 하위 노드를 포함하는 부분 트리인, 단계를 포함하는,
    소스 코드 자동 머지 방법.
  2. 제1 항에 있어서,
    상기 제2 메소드의 제2 부분 트리를 선정하는 단계는,
    상기 제2 추상 구문 트리의 최상위 노드들을 식별하는 단계; 및
    상기 각각의 최상위 노드를 루프 노드로 하는 부분 트리들 중, 상기 제1 부분 트리와의 유사도를 기준으로 상기 제2 부분 트리를 선정하는 단계를 포함하는,
    소스 코드 자동 머지 방법.
  3. 제2 항에 있어서,
    상기 제1 부분 트리와의 유사도를 기준으로 상기 제2 부분 트리를 선정하는 단계는,
    상기 각각의 최상위 노드를 루프 노드로 하는 부분 트리들 중, 상기 제1 부분 트리와 기준 개수 이상의 노드로 구성된 공통 부분 트리를 공유하는 부분 트리를 상기 제2 부분 트리로 선정하는 단계를 포함하는,
    소스 코드 자동 머지 방법.
  4. 제1 항에 있어서,
    상기 머지 트리를 생성하는 단계는,
    상기 머지 메소드의 테스트 케이스를 세팅하는 단계를 포함하고,
    상기 머지 메소드의 테스트 케이스를 이용하여 상기 머지 소스 코드 중 상기 머지 메소드의 오류 발생 여부를 검증하기 위한 동적 분석을 수행하는 단계를 더 포함하는,
    소스 코드 자동 머지 방법.
  5. 제4 항에 있어서,
    상기 머지 메소드의 테스트 케이스를 세팅하는 단계는,
    상기 머지 트리를 이용하여 머지 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 단계;
    상기 제1 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 단계;
    상기 제2 메소드의 입력 파라미터 명세 및 출력값 자료형을 결정하는 단계;
    상기 제1 메소드의 입력 파라미터 명세 및 출력값 자료형 및 상기 제2 메소드의 입력 파라미터 명세 및 출력값 자료형과, 상기 머지 메소드의 입력 파라미터 명세 및 출력값 자료형을 비교하는 단계; 및
    상기 비교의 결과를 이용하여, 상기 제1 메소드의 테스트 케이스를 상기 머지 메소드의 테스트 케이스로 세팅하는 것과, 상기 제2 메소드의 테스트 케이스를 상기 머지 메소드의 테스트 케이스로 세팅하는 것과, 상기 머지 메소드의 신규 테스트 케이스를 생성하는 것 중 어느 하나를 수행하는 단계를 포함하는,
    소스 코드 자동 머지 방법.
  6. 제5 항에 있어서,
    상기 머지 메소드의 신규 테스트 케이스는,
    상기 머지 메소드의 입력 파라미터 명세에 부합하는 테스트 입력을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문으로 구성되는 것인,
    소스 코드 자동 머지 방법.
  7. 제6 항에 있어서,
    상기 테스트 입력은,
    각각의 자료형에 대하여 기 지정된 기본 테스트 입력 값인,
    소스 코드 자동 머지 방법.
  8. 제6 항에 있어서,
    상기 머지 메소드는 분기문을 포함하는 것이고,
    상기 머지 메소드의 신규 테스트 케이스는,
    상기 분기문을 통하여 제1 제어 흐름(control flow)이 형성되도록 하는 제1 테스트 입력값을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문과,
    상기 분기문을 통하여 상기 제1 제어 흐름과 적어도 일부가 다른 제2 제어 흐름이 형성되도록 하는 제2 테스트 입력값을 상기 머지 메소드에 입력하고, 상기 머지 메소드로부터의 출력의 자료형이 상기 머지 메소드의 출력값 자료형에 부합하는지 체크하기 위한 구문을 포함하는,
    소스 코드 자동 머지 방법.
  9. 제1 사용자 단말로부터 제1 소스 코드를 수신하고, 제2 사용자 단말로부터 상기 제1 소스 코드에 대응되는 제2 소스 코드를 수신하는 네트워크 인터페이스;
    정적 분석 프로그램 및 소스 코드 자동 머지 프로그램을 로드 하는 메모리; 및
    상기 정적 분석 프로그램 및 상기 소스 코드 자동 머지 프로그램을 실행하는 프로세서를 포함하되,
    상기 정적 분석 프로그램은,
    상기 제1 소스 코드에 대한 정적 분석을 수행하여 제1 추상 구문 트리를 생성하고, 상기 제2 소스 코드에 대한 정적 분석을 수행하여 제2 추상 구문 트리를 생성하는 인스트럭션(instruction)을 포함하고,
    상기 소스 코드 자동 머지 프로그램은,
    상기 제1 추상 구문 트리에서 제1 메소드의 제1 부분 트리를 얻는 인스트럭션;
    상기 제1 소스 코드에 대응되는 제2 소스 코드에 대한 정적 분석을 통하여 얻어진 제2 추상 구문 트리에서 상기 제1 메소드에 대응되는 제2 메소드의 제2 부분 트리를 선정하는 인스트럭션;
    상기 제1 부분 트리 및 상기 제2 부분 트리의 머지(merge) 결과로서, 상기 제1 메소드와 상기 제2 메소드의 머지 결과인 머지 메소드를 표현하는 머지 트리를 생성하는 인스트럭션;
    상기 머지 트리를 이용하여 상기 제1 소스 코드와 상기 제2 소스 코드의 머지 결과인 머지 소스 코드를 생성하는 인스트럭션을 포함하며,
    상기 머지 트리를 생성하는 인스트럭션은,
    상기 머지 트리를 상기 제1 부분 트리로 초기화 하는 인스트럭션;
    상기 제2 부분 트리의 노드 중 상기 제1 부분 트리의 대응 노드보다 구문 수정 시점이 늦은 최상위 노드인 충돌 노드를 식별하는 인스트럭션; 및
    상기 머지 트리의 제3 부분 트리를, 상기 제2 부분 트리의 제4 부분 트리로 대체하되, 상기 제3 부분 트리는 상기 충돌 노드의 대응 노드 및 상기 대응 노드의 하위 노드를 포함하는 부분 트리이고, 상기 제4 부분 트리는 상기 충돌 노드 및 상기 충돌 노드의 하위 노드를 포함하는 부분 트리인, 인스트럭션을 포함하는,
    소스 코드 자동 머지 장치.
  10. 제9 항에 있어서,
    상기 메모리는 동적 분석 프로그램을 더 로드 하고,
    상기 프로세서는 상기 동적 분석 프로그램을 더 실행하며,
    상기 머지 트리를 생성하는 인스트럭션은,
    상기 머지 메소드의 테스트 케이스를 세팅하는 인스트럭션을 포함하고,
    상기 동적 분석 프로그램은,
    상기 머지 메소드의 테스트 케이스를 이용하여 상기 머지 소스 코드 중 상기 머지 메소드의 오류 발생 여부를 검증하기 위한 동적 분석을 수행하는 인스트럭션을 포함하는,
    소스 코드 자동 머지 장치.
KR1020200064450A 2020-05-28 2020-05-28 소스 코드 자동 머지 방법 및 그 장치 KR20210147354A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200064450A KR20210147354A (ko) 2020-05-28 2020-05-28 소스 코드 자동 머지 방법 및 그 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200064450A KR20210147354A (ko) 2020-05-28 2020-05-28 소스 코드 자동 머지 방법 및 그 장치

Publications (1)

Publication Number Publication Date
KR20210147354A true KR20210147354A (ko) 2021-12-07

Family

ID=78868636

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200064450A KR20210147354A (ko) 2020-05-28 2020-05-28 소스 코드 자동 머지 방법 및 그 장치

Country Status (1)

Country Link
KR (1) KR20210147354A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023249156A1 (ko) * 2022-06-24 2023-12-28 쿠팡 주식회사 코드 정보 제공을 위한 전자 장치 및 그 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990040219A (ko) 1997-11-17 1999-06-05 김영환 이동통신 시스템에서 엠에스에이치피의 이중화 관리방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990040219A (ko) 1997-11-17 1999-06-05 김영환 이동통신 시스템에서 엠에스에이치피의 이중화 관리방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023249156A1 (ko) * 2022-06-24 2023-12-28 쿠팡 주식회사 코드 정보 제공을 위한 전자 장치 및 그 방법

Similar Documents

Publication Publication Date Title
CN110908640B (zh) 实现业务功能的方法和脚本引擎
US9201646B2 (en) Automatic code review and code reviewer recommendation
US9063672B2 (en) Systems and methods for verifying model equivalence
US7987460B2 (en) Automation tool for application installations
US10303467B2 (en) Target typing-dependent combinatorial code analysis
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US10917456B2 (en) Application management in an application deployment pipeline
US20080276221A1 (en) Method and apparatus for relations planning and validation
US9864588B2 (en) Canonicalized versions of reuse candidates in graphical state diagrams
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
US10514898B2 (en) Method and system to develop, deploy, test, and manage platform-independent software
US10915302B2 (en) Identification and visualization of associations among code generated from a model and sources that affect code generation
CN117034821B (zh) 用于芯片设计前端仿真验证的回归验证方法及介质
CN114518884A (zh) 修复弱内存序问题的方法及装置
CN110347588B (zh) 软件验证方法、装置、计算机设备和存储介质
KR20210147354A (ko) 소스 코드 자동 머지 방법 및 그 장치
US20180217922A1 (en) Application testing
CN113448851A (zh) 一种rust编程语言编译器的自动化测试方法及系统
CN112632333A (zh) 查询语句生成方法、装置、设备及计算机可读存储介质
CN111309301A (zh) 程序语言转换方法、装置和转换设备
CN113051262B (zh) 一种数据质检方法、装置、设备及存储介质
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
CN113901025A (zh) 数据库管理方法、装置、设备和存储介质
CN114647568A (zh) 自动化测试方法、装置、电子设备及可读存储介质
US8645908B2 (en) Method for generating specifications of static test