KR101732764B1 - 코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템 - Google Patents

코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템 Download PDF

Info

Publication number
KR101732764B1
KR101732764B1 KR1020137015514A KR20137015514A KR101732764B1 KR 101732764 B1 KR101732764 B1 KR 101732764B1 KR 1020137015514 A KR1020137015514 A KR 1020137015514A KR 20137015514 A KR20137015514 A KR 20137015514A KR 101732764 B1 KR101732764 B1 KR 101732764B1
Authority
KR
South Korea
Prior art keywords
code
importance
level
change
source code
Prior art date
Application number
KR1020137015514A
Other languages
English (en)
Other versions
KR20140001951A (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 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20140001951A publication Critical patent/KR20140001951A/ko
Application granted granted Critical
Publication of KR101732764B1 publication Critical patent/KR101732764B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/62Uninstallation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration 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)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 코드 클론 검출 기술을 이용하는 지능형 코드 디퍼런싱용 시스템 및 방법에 관한 것이다. 대형의 복잡한 소스 코드 변경(예를 들어, 소스 파일을 가로지르는 이동 및 개명 함수)은 다수의 소스 파일 내의 편집을 수반할 수 있다. 이와 같이, 개발자 및/또는 코드 리뷰어는 대형의 복잡한 변경을 식별하고 현존하는 코드 디퍼런싱 툴을 사용하여 어느 변경이 가장 상당한지를 결정하는데 어려운 시간을 가질 수 있다. 코드 클론 검출 기술을 사용하여, 소스 파일을 가로지르는 또는 특정 소스 파일 내부의 상이한 유형의 변경이 결정될 수 있다. 변경은 신규한, 복제된 및 삭제된 코드 조각 또는 함수 및 이동된, 개명된 또는 수정된 함수로서 분류될 수 있다. 복제된 또는 수정된 것으로서 분류된 변경을 위해, 변경의 중요도의 레벨에 의한 추가의 분류가 행해질 수 있다. 예를 들어, 변경은 사소하고, 소수이거나 중요할 수 있다. 변경의 시각화는 변경의 직관적인 이해를 또한 제공한다.

Description

코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템{INTELLIGENT CODE DIFFERENCING USING CODE CLONE DETECTION}
본 발명은 일반적으로 의미론적 정보(semantic information)를 지능적으로 생성하여 출력하는 코드 디퍼런싱(code differencing) 또는 "디핑(diffing)" 시스템에 관한 것이다.
통상의 코드 리뷰의 작업은 소스 코드의 이전 버전과 소스 코드의 현재 버전 사이의 변경을 확인하고 인식하는 것이 가능해야 한다. 통상의 코드 디퍼런싱 또는 도핑(doffing) 시스템은 단지 소스 코드의 변경 또는 소스 코드의 버전 변경만을 식별한다. 이들 시스템은 통상적으로 예를 들어 하나의 소스 파일 내에 추가된 및/또는 검출된 라인이 존재하는 경우에 기본 정보를 제공한다. 따라서, 통상의 디핑 시스템의 결과를 리뷰하는 코드 리뷰어는 예를 들어 의미론적 또는 어휘적 변경이 발생하였는지 여부와 같이 파일에 대한 변경의 성질에 초점을 맞추는 직관적인 또는 다른 설명적인 정보가 없다.
소프트웨어 개발은 통상적으로 소스 코드를 동시에 그리고 협동적으로 개발하거나 수정하는 다수의 소프트웨어 개발자를 이용한다. 이러한 개발을 용이하게 하기 위해, 동일한 소스 코드, 또는 소스 코드 베이스, 예를 들어 소스 코드를 포함하는 파일의 그룹이 종종 상이한 개발자들에 의해 수정된다. 부가적으로, 몇몇 경우에, 한 개발자는 소스 코드 내의 버그를 픽스할 수 있고, 반면에 다른 개발자는 상이한 파일 내에서 또는 가로질러 소스 코드의 라인을 이동시킴으로써 동일한 소스 코드를 동시에 수정할 수 있다. 더욱이, 동일한 코드 소스의 상이한 버전이 상이한 개발자들에 의해 2개 이상의 상이한 브랜치에서의 동시 프로세싱에 기인하여 생성될 수도 있다. 상기 접근법은 각각 동일한 코드의 상이한 버전을 생성한다. 코드의 버전은 따라서 매우 유사할 수 있고, 따라서 소스 코드의 버전들 사이의 변경을 이해하는 작업은 곤란할 수 있다.
전술된 디핑 시스템은 개발자에게 제한된 양의 지원을 제공하지만, 설명된 바와 같이 이들 지원은 특별히 유익하지는 않다. 현재의 코드 디핑 시스템의 전술된 결점은 단지 통상의 시스템의 문제점의 일부의 개요만을 제공하도록 의도된 것이고, 모든 문제점을 제공하도록 의도된 것은 아니다. 통상의 시스템의 다른 문제점 및 본 명세서에 설명된 다양한 비한정적인 실시예의 대응 이득은 이하의 상세한 설명의 리뷰시에 더 명백해질 수 있다.
더 상세한 설명 및 첨부 도면에 이어지는 예시적인 비한정적인 실시예의 다양한 양태의 기본적인 또는 일반적인 이해를 가능하게 하는 것을 돕기 위해 간단화된 요약이 제공된다. 그러나, 이 요약은 광범위하거나 포괄적인 개요로서 의도된 것은 아니다. 대신에, 이 요약의 유일한 목적은 이어지는 다양한 실시예의 더 상세한 설명에 대한 서론으로서 간단화된 형태의 몇몇 예시적인 비한정적인 실시예에 관련된 몇몇 개념을 제시하는 것이다.
본 명세서에 제공된 다양한 실시예는 코드 클론 검출 기술이 이용될 수 있는 통합형 개발 환경(IDE)을 목표로 한다. 다양한 실시예는 또한 코드 클론 검출 방법을 이용하는 시스템 및 기술을 목표로 한다. 코드 클론 검출 기술은 코드 리뷰어에 출력되는 의미론적 정보를 생성하는데 있어서 예비 단계로서 이용될 수 있다. 본 명세서에 설명된 디퍼런싱 기술로부터 이득을 얻을 수 있는 다른 환경 및 콘텍스트가 또한 고려된다.
다양한 실시예는 코드의 버전들 사이의 변경에 대한 의미론적 정보를 생성하기 위해 코드 클론 검출 기술을 이용한다. 의미론적 정보는 버전들 사이의 변경의 특징화(characterization)일 수 있다. 특징화는 코드 리뷰어에 출력될 수 있고, 이에 의해 일반적으로 소프트웨어 개발 및 특히 코드 리뷰 프로세스를 보조한다. 몇몇 실시예에서, 정보는 개발자 자신에 의해 행해진 변경을 리뷰하기 위해 개발자에 출력될 수 있고, 따라서 본 명세서에 설명된 실시예는 개발자에 의해 미리 입력된 변경의 자체 리뷰 및/또는 제 3 자에 의해 입력되고 단지 개발자에 의해 리뷰된 변경의 리뷰를 보조할 수 있다.
몇몇 실시예에서, 버전들 사이의 변경에 대한 정보를 표시하기 위해 아키텍처 다이어그램 또는 컬러 코딩된 정보와 같은 시각화 정보가 생성될 수 있다. 시각화 정보는 변경의 이해를 시각적으로 보조하기 위해 코드 리뷰어에 출력된다.
또한, 본 명세서에 설명된 다른 시스템 및 방법은 몇몇 실시예에서 클론 검출 코어 및 중요도 엔진을 포함한다. 클론 검출 구성 요소 또는 코어는 소스 코드의 적어도 2개의 버전 사이의 콘텐트 변경의 유형의 결정을 나타내는 정보를 생성하도록 구성된다. 중요도 엔진은 콘텐트 변경의 유형과 연관된 중요도의 레벨을 결정하고, 중요도의 레벨을 나타내는 정보를 출력하도록 구성된다. 중요도의 레벨은 몇몇 실시예에서 변경의 특징화에 관련된다. 다른 실시예에서, 중요도의 레벨은 예를 들어, 포맷, 어휘적 또는 논리적 변경과 같은 변경의 유형에 관련된다. 중요도의 레벨은 예를 들어 정수, 분수, 백분율 등과 같은 값으로서 또는 예를 들어 컬러 코딩과 같은 시각화로서 표현될 수 있다.
이들 및 다른 실시예가 이하에 더 상세히 설명된다.
도 1은 하나 이상의 실시예에 따른 지능형 코드 디핑 시스템의 예시적인 비한정적인 구현예를 도시하는 블록도.
도 2는 하나 이상의 실시예에 따른 지능형 코드 디핑 시스템의 예시적인 비한정적인 구현예를 도시하는 다른 블록도.
도 3은 하나 이상의 실시예에 따른 지능형 코드 디핑 시스템의 예시적인 비한정적인 구현예를 도시하는 다른 블록도.
도 4는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 프로세스를 도시하는 흐름도.
도 5는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 프로세스를 도시하는 다른 흐름도.
도 6은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 프로세스를 도시하는 다른 흐름도.
도 7은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 프로세스를 도시하는 다른 흐름도.
도 8은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 블록도.
도 9는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도.
도 10은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도.
도 11은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도.
도 12는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도.
도 13은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 구현하기 위한 시스템 아키텍처의 예시적인 비한정적인 구현예를 도시하는 블록도.
도 14는 본 명세서에 설명된 다양한 실시예가 구현될 수 있는 예시적인 비한정적인 네트워킹된 환경을 표현하는 블록도.
도 15는 본 명세서에 설명된 다양한 실시예의 하나 이상의 양태가 구현될 수 있는 예시적인 비한정적인 컴퓨팅 시스템 또는 동작 환경을 표현하는 블록도.
다양한 비한정적인 실시예가 첨부 도면을 참조하여 더 설명된다.
개요
서론으로서, 프로그래밍의 효율을 위해, 소프트웨어 개발자들은 종종 프로그래밍 프로젝트 내의 수많은 위치에 소스 코드의 섹션을 복제한다. 소정 정도의 수정 또는 적응을 갖거나 갖지 않는 소스 코드의 부분을 재사용하는 것은 "코드 클로닝"이라 칭하고, 다양한 정도의 정확성을 갖고 서로 정합하거나 대응하는 코드의 최종 부분은 "코드 클론" 또는 더 간단하게는 "클론"이라 칭한다. 부가적으로, 몇몇 실시예에서, 특정 기능성, 구성 요소 또는 애플리케이션을 구성하는데 사용된 소스 코드의 하나 이상의 파일의 그룹은 파일들 내에 또는 사이에 소정 정도의 수정을 갖거나 갖지 않고 재사용된다. 하나 이상의 파일의 그룹은 "코드 베이스"라 칭한다. 용어 "코드"는 일관성을 위해 본 명세서에 사용되지만, 이 용어는 적용 가능한 경우 "코드 베이스"에 적용될 수 있다는 것이 이해되어야 한다.
클론 검출 기술은 소스 코드 내의 또는 소스 코드의 파일을 가로질러 코드 클론을 식별하고 분석하는 문제점을 처리한다. 통상의 코드 클론 검출 시스템은 소스 코드를 수신하고, 소스 코드의 텍스트를 사전 프로세싱하여 라인을 토큰으로 분할하고 비본질적 차이를 제공하고, 유사성에 대해 나머지 코드를 분석한다.
코드 디핑 시스템은 통상적으로 2개의 소스 코드 파일 사이의 차이에 대한 정보를 생성한다. 예를 들어, 2개의 소스 코드 파일 사이의 차이는 출력일 수 있다. 그러나, 이들 시스템은 통상적으로 추가되거나 삭제되어 있는 정보 설명 라인과 같은 기본 정보만을 출력한다.
본 명세서에 제공된 바와 같은 다양한 실시예는 코드 클론 검출 기술이 이용될 수 있는 통합형 개발 환경(IDE)을 목표로 하고 있다. 다양한 실시예는 또한 코드 클론 검출 방법을 이용하는 시스템 및 기술을 목표로 한다. 코드 클론 검출 기술은 코드 리뷰어에 출력되는 의미론적 정보를 생성하는데 있어서 예비 단계로서 이용될 수 있다.
일 실시예에서, 코드 클론 검출 기술을 이용하는 지능형 소스 코드 프로세싱을 수행하는 방법은 소스 코드의 적어도 2개의 버전을 수신하는 단계와, 코드 클론 검출 기술을 사용하여 소스 코드의 버전들을 프로세싱하는 단계를 포함한다. 코드 클론 검출 기술에 기초하여, 서로 대응하는 버전의 상이한 부분에 대한 판정이 행해질 수 있다.
본 명세서에 설명된 시스템 및 방법은 코드의 버전들 사이의 변경에 대한 의미론적 정보를 생성하기 위해 코드 클론 검출 기술을 이용한다. 의미론적 정보는 버전들 사이의 변경의 특징화이다. 특징화는 코드 리뷰어에 출력되고 이에 의해 일반적으로 소프트웨어 개발, 특히 코드 리뷰 프로세스를 상당히 보조한다.
일 실시예에서, 코드 클론 검출 기술을 이용하는 지능형 소스 코드 프로세싱을 수행하는 방법은 소스 코드의 적어도 2개의 버전 사이의 대응관계를 나타내는 정보를 수신하는 단계를 포함한다. 버전들 사이의 대응관계의 특징화가 결정된다. 특징화는 버전들 사이의 의미론적 차이를 지시하고, 대응관계에 기초한다. 특징화를 나타내는 정보가 출력된다. 몇몇 실시예에서, 정보는 코드 리뷰어에 의해 액세스될 수 있는 소프트웨어 개발 스테이션에 출력된다.
몇몇 실시예에서, 시스템 및 방법은 또한 버전들 사이의 변경에 대한 정보를 표시하기 위해 아키텍처 다이어그램 또는 컬러 코딩된 정보와 같은 시각화 정보를 생성한다. 시각화 정보는 변경의 이해를 시각적으로 보조하기 위해 코드 리뷰어에 출력된다.
또한, 본 명세서에 설명된 다른 시스템 및 방법은 코드의 버전들 사이의 하나 이상의 변경에 대한 중요도의 레벨을 나타내는 정보를 생성한다. 중요도의 레벨은 몇몇 실시예에서 변경의 특징화에 관련된다. 다른 실시예에서, 중요도의 레벨은 변경의 유형(예를 들어, 예를 들어, 포맷, 어휘적 또는 논리적 변경인지)에 관련된다. 중요도의 레벨은 값(예를 들어, 정수, 분수, 백분율)으로서 또는 시각화(예를 들어, 컬러 코딩)로서 표현될 수 있다.
일 실시예에서, 코드 클론 검출 기술을 이용하는 지능형 소스 코드 프로세싱을 수행하는 방법은 소스 코드의 적어도 2개의 버전 사이의 콘텐트 변경의 유형의 결정을 나타내는 정보를 생성하는 단계를 포함한다. 콘텐트 변경의 유형과 연관된 중요도의 레벨이 결정된다. 중요도의 레벨을 나타내는 정보가 출력된다. 몇몇 실시예에서, 변경의 중요도의 레벨의 시각화가 출력된다. 출력은 코드 리뷰어에 의해 액세스 가능한 소프트웨어 개발 스테이션에 제공될 수 있다.
여기서, 지능형 코드 디핑을 성취하기 위한 실시예의 몇몇의 개요가 상기에 제시되어 있다. 다음에 이어지는 것에 대한 로드맵으로서, 지능형 코드 디핑을 위한 다양한 예시적인 비한정적인 실시예 및 특징이 더 상세히 설명된다. 다음에, 몇몇 비한정적인 구현예 및 예가 부가의 예시를 위해 제공되고, 이어서 이러한 실시예 및/또는 특징이 구현될 수 있는 표현적인 네트워크 및 컴퓨팅 환경이 제공된다.
코드 클론 검출을 사용하는 지능형 코드 디핑
그러나, 본 명세서에 제공된 실시예는 임의의 특정 데이터베이스 또는 시스템 구현예에 한정되도록 의도되지는 않는다는 것이 이해될 수 있다. 또한, 달리 언급되지 않으면, 다양한 실시예는 임의의 특정 코드 디핑 또는 코드 클로닝 구현예(들)에 한정되도록 의도되지는 않는다.
소스 코드의 상이한 버전들 사이의 변경에 대한 의미론적 정보를 생성하는데 이용될 수 있는 지능형 코드 디핑 디자인의 하나 이상의 비한정적인 양태와 관련하는 추가의 설명으로서, 구현될 수 있는 예시적인 방안과 연관된 다양한 비한정적인 특성이 이제 설명된다. 예를 들어, 도 1은 지능형 코드 디퍼런싱 시스템(102)의 예시적인 비한정적인 구현예를 도시하는 블록도이다. 도 1에 도시된 바와 같이, 코드 디퍼런싱 시스템(102)은 하나 이상의 코드 베이스 저장소(104, 106)와 연관된다. 실시예에서, 코드 베이스 저장소(104, 106)는 하나 이상의 코드 베이스를 저장한다.
일 실시예에서, 코드 베이스 저장소(104)는 소스 코드의 제 1 버전을 저장하고, 반면에 코드 베이스 저장소(106)는 소스 코드의 제 2 버전을 저장한다. 이와 같이, 소스 코드의 제 1 버전(110) 및 소스 코드의 제 2 버전(120)은 코드 베이스 저장소(104, 106)로부터 코드 디퍼런싱 시스템(102)에 의해 수신될 수 있다. 그러나, 코드 베이스는 이와 같이 저장될 필요는 없는데, 예를 들어 코드 베이스의 모든 버전은 동일한 코드 베이스 저장소(104 또는 106)에 저장되고 그로부터 수신될 수 있다.
부가적으로, 소스 코드의 버전의 수는 몇몇 실시예에서 2개로서 지시되어 있지만, 소스 코드의 버전의 상이한 수가 몇몇 비한정적인 실시예에서 동시에 또는 공동으로 프로세싱될 수 있다. 예를 들어, 소스 코드의 3개 이상의 버전은 본 명세서에 설명된 시스템 및 방법을 사용하여 동시에 또는 순차적으로 프로세싱될 수 있다.
또한, 소스 코드의 버전은 상이한 유형의 프로세스의 결과로서 생성될 수 있다. 예를 들어, 소스 코드의 2개의 버전은 상이한 개발자에 의해 2개의 상이한 브랜치에서 프로세싱되어 있는 동일한 소스 코드일 수 있다. 다른 예로서, 다른 실시예에서, 소스 코드의 2개의 버전은 시간 t에 생성된 소스 코드의 제 1 버전 및 시간 t+x에 소스 코드의 제 1 버전을 수정함으로써 생성된 소스 코드의 제 1 버전일 수 있다. 예를 들어, 소스 코드의 제 1 버전이 생성될 수 있고 소스 코드의 제 2 버전은 소스 코드 내의 버그를 처리하거나 다른 향상을 제공하기 위해 제 1 버전을 수정하는 것에 기초하여 이후에 생성될 수 있다.
코드 디퍼런싱 시스템(102)은 코드 클론 검출을 위한 소스 코드를 준비하기 위해 소스 코드의 제 1 및 제 2 버전(110, 120)을 사전 프로세싱하도록 구성된 프리-프로세서(130)를 포함한다. 예를 들어, 소스 코드의 제 1 및 제 2 버전(110, 120)은 코드 디퍼런싱 시스템(102)에 의해 수신될 수 있고, 프리-프로세서(130)는 라인을 토큰으로 파괴하고 소스 코드의 버전(110, 120) 사이의 비본질적 차이를 제거할 수 있다.
코드 디퍼런싱 시스템(102)은 코드 클론 검출 코어(140)를 포함한다. 코드 클론 검출 코어(140)는 코드 클론 검출 및 프로세싱의 기능을 수행할 수 있다.
일 비한정적인 실시예에서, 수행되는 코드 클론 검출은 본 명세서에 그대로 참조로서 포함되어 있는 2010년 4월 1일 출원된 발명의 명칭이 "코드 클론 검출 및 분석(CODE-CLONE DETECTION AND ANALYSIS)"인 미국 특허 출원 제 12/752,942호에 설명된 바와 같지만, 의심의 여지를 피하기 위해, 본 명세서에 설명된 다양한 실시예는 임의의 특정 코드 클론 검출 기술에 한정되는 것은 아니다. 특정 코드 클론 검출 기술에 대한 유일한 요구는 정확한 코드 클론 및 니어-미스(near-miss) 코드 클론의 모두를 검출하는 것이 가능한 것이다. 니어-미스 코드 클론은 추가, 삭제 및/또는 편집과 같은 추가의 수정이 복제 후에 소스 코드 상에 수행되는 것들이다.
다른 실시예에서, 코드 클론 검출은 서로 유사한 소스 코드의 2개의 버전 내의 하나 이상의 부분을 식별하는 것을 포함한다. 이와 같이, 코드 클론 검출은 서로 동일하지 않고 단지 서로 유사한 부분을 검출할 수 있다. 추가의 분류로서, 코드 클론 검출 코어(140)가 다양한 유사성의 정도를 갖는 코드를 식별하도록 구성된다. 이와 같이, 코드 클론 검출 코어(140)는 상이하지만 유사한 코드의 버전 내의 코드의 부분, 예를 들어 조각(snippet)을 검출하는 것이 가능하다.
몇몇 실시예에서, 예를 들어 서로 유사한 부분은 삭제된 코드 조각 또는 함수, 신규한 코드 조각 또는 함수, 복제된 코드 조각 또는 함수, 이동된 함수, 개명된 함수, 이동된 및 개명된 함수의 조합, 수정된 함수 등을 갖는 서로에 대해 수정된 부분이다.
일 실시예에서, 코드의 유사한 단편(piece)을 식별하는 것은 코드의 각각의 버전으로부터 하나의 코드 조각인, 2개의 코드 조각을 출력하는 것을 포함한다. 그러나, 본 명세서의 실시예는 이와 같이 한정되는 것은 아니고 코드의 유사한 단편을 식별하는 것은 코드의 2개의 단편 내의 2개의 코드 조각의 위치 또는 설명을 나타내는 정보를 출력하는 것을 포함할 수 있다. 도 1에 도시된 바와 같이, 코드의 유사한 단편(또는 코드의 유산 단편을 식별하는 위치 또는 다른 정보)은 코드 디퍼런싱 시스템(102)으로부터 출력된다. 일 실시예에서, 코드의 유사한 단편 또는 코드의 유사한 단편을 식별하는 위치 또는 다른 정보가 소프트웨어 개발 스테이션(150)에 출력된다.
일 실시예에서, 소프트웨어 개발 스테이션(150)은 코드 디퍼런싱 시스템(102)에 근접하여 위치된다. 다른 실시예에서, 소프트웨어 개발 스테이션(150)은 코드 디퍼런싱 시스템(102)으로부터 이격하여 위치된다. 예를 들어, 몇몇 경우에, 코드 디퍼런싱 시스템(102)은 서버와 연관되고, 소프트웨어 개발 스테이션(150)은 네트워크를 통해 코드 디퍼런싱 시스템(102)에 액세스하는 클라이언트 머신과 연관된다.
검출된 코드 조각은 코드 리뷰어가 변경되어 있는 코드의 버전의 부분에 초점을 맞추는 것을 가능하게 하기 위해 소프트웨어 개발 스테이션(150)에 액세스하는 코드 리뷰어에 의해 분석될 수 있다. 대형 코드 베이스 또는 대형 코드의 파일에서, 선택된 부분에 초점을 맞추는 능력은 시간 및 리소스의 비용을 상당히 저감할 수 있다.
몇몇 실시예에서, 코드 클론 검출 코어(140)는 또한 소스 코드의 2개의 버전(110, 120) 사이의 유사성의 정도에 대응하는 값을 생성하도록 구성된다. 값은 정수, 분수 또는 백분율 값일 수 있다.
도 2는 지능형 코드 디퍼런싱 시스템(202)의 예시적인 비한정적인 구현예를 도시하는 다른 블록도이다. 도 1을 참조하여 설명된 바와 같이, 코드 디퍼런싱 시스템(202)은 프리-프로세서(130) 및 코드 클론 검출 코어(140)를 포함한다. 코드 디퍼런싱 시스템(202)은 소스 코드의 제 1 및 제 2 버전(110, 120)을 수신한다. 일 비한정적인 실시예에서, 도 2에 도시된 바와 같이, 소스 코드의 제 1 및 제 2 버전(110, 120)은 코드 베이스 저장소(104, 106)로부터 수신된다.
도 2에 도시된 바와 같이, 코드 디퍼런싱 시스템(202)은 소스 코드의 2개의 버전(110, 120) 사이의 대응관계를 결정하는 특징화 엔진(210)을 또한 포함한다. 대응관계는 소스 코드의 2개의 버전(110, 120) 사이의 변경을 지시하고, 특징화와 연관된다. 특징화는 소스 코드의 2개의 버전(110, 120) 사이의 변경에 대한 의미론적 정보를 포함한다.
이와 같이, 코드 클론 검출 코어(140)는 소스 코드의 유사한 부분을 식별하고 이러한 정보를 특징화 엔진(210)에 출력한다. 특징화 엔진(210)은 2개의 코드 사이의 변경을 설명하는 의미론적 의미를 추출하기 위해 이 정보를 추상화한다. 의미론적 의미는 특징화 엔진(210)으로부터 출력되는 특징화에 의해 설명된다.
다양한 실시예에서 가능한 다수의 상이한 유형의 특징화가 존재한다. 예를 들어, 일 경우에, 소스 코드의 제 1 및 제 2 버전(110, 120) 사이의 변경의 대략 6개의 상이한 특징화가 존재한다. 일 실시예에서, 상이한 특징화는 신규한 코드 조각 또는 함수(예를 들어, 신규한 조각 또는 함수가 변경되는 코드의 다른 버전에 대해 코드의 일 버전에 추가됨), 복제된 코드 조각 또는 함수(예를 들어, 신규한 코드 조각 또는 함수는 복사-및-붙여넣기에 의해 복제됨), 검출된 코드 조각 또는 함수(예를 들어, 함수는 코드의 다른 버전에 대해 코드의 일 버전에서 삭제됨), 이동된 함수(예를 들어, 함수는 코드의 일 버전을 위한 소스 파일로부터 코드의 다른 버전을 위한 소스 파일로 이동됨), 개명된 함수(예를 들어, 서명이 코드 내에서 변경되지만 콘텐트는 변경되지 않음), 또는 수정된 함수(예를 들어, 서명은 동일하지만 콘텐트는 코드 내에서 변경됨)이다. 다양한 실시예에서, 특징화는 또한 조합된 이동된 및 개명된 코드 조각 또는 함수를 갖는 코드 조각 또는 함수를 지시할 수 있다. 본 명세서에 사용될 때, 용어 "코드 조각"은 함수 내의 연속적인 진술의 세그먼트를 의미한다.
상기 6개의 특징화는 코드 디퍼런싱 시스템(202)으로부터 소프트웨어 개발 스테이션(150)으로 출력된다. 따라서, 특징화 엔진(210)은 단지 코드 뷰어에 변경을 제공하는 것과 코드 리뷰어가 발생된 변경의 유형에 액세스하는 것을 요구하는 것에 대조하여, 어느 유형의 변경이 소스 코드의 제 1 및 제 2 버전(110, 120) 사이에 발생하였는지에 대한 의미론적 정보를 소프트웨어 개발 스테이션(150)[및 이러한 소프트웨어 개발 스테이션(150)에 액세스하는 코드 리뷰어]에 제공할 수 있다. 코드 리뷰 경험은 따라서 향상되고 더 효율적이 된다.
일 실시예에서, 도 2에 도시된 바와 같이, 코드 디퍼런싱 시스템(202)은 시각화 엔진(220)을 또한 포함한다. 시각화 엔진(220)은 특징화의 시각화를 생성한다. 시각화는 특징화를 설명하는 파일, 소스 코드의 버전(110, 120) 사이의 변화 또는 특징화를 그래픽적으로 표시하는 아키텍처 다이어그램 및/또는 코드 클론 검출 코어(140)에 의해 식별된 소스 코드의 제 1 및 제 2 버전(110, 120) 사이의 변경과 연관된 함수의 컬러-코딩된 리스팅이다.
특징화 및/또는 특징화의 시각화를 나타내는 정보는 특징화 엔진(210) 및/또는 시각화 엔진(220) 각각으로부터 소프트웨어 개발 스테이션(150)에 출력된다.
도 3은 지능형 코드 디퍼런싱 시스템(302)의 예시적인 비한정적인 구현예를 도시하는 다른 블록도이다. 도 1을 참조하여 설명된 바와 같이, 코드 디퍼런싱 시스템(302)은 프리-프로세서(130) 및 코드 클론 검출 코어(140)를 포함한다. 코드 디퍼런싱 시스템(302)은 소스 코드의 제 1 및 제 2 버전(110, 120)을 수신한다. 일 비한정적인 실시예에서, 도 3에 도시된 바와 같이, 소스 코드의 제 1 및 제 2 버전(110, 120)은 코드 베이스 저장소(104, 106)로부터 수신된다.
도 2에 도시된 바와 같이, 코드 디퍼런싱 시스템(302)은 특징화 엔진(210) 및 몇몇 실시예에서 시각화 엔진(220)을 포함한다. 도 3에 도시된 바와 같이, 코드 디퍼런싱 시스템(302)은 특징화 엔진(210)에 의해 생성된 특징화에 기초하여 그리고/또는 소스 코드의 2개의 버전(110, 120) 사이의 콘텐트 변경의 유형을 중요도의 레벨과 연관시키도록 구성된 중요도 엔진(310)을 또한 포함한다.
콘텐트 변경의 유형이 변경의 특징화인 몇몇 비한정적인 실시예에서, 중요도의 레벨은 연관된 특징화로부터 맵핑된다. 예를 들어, 이동된 함수는 이어서 사소한 중요도 변경의 레벨로 맵핑되는 특징화일 수 있다. 다른 예로서, 개명된 함수는 부 변경으로 맵핑될 수 있어, 이에 의해 적당한 중요도의 레벨이 할당된다. 다른 예로서, 수정된 함수는 주 변경으로 맵핑될 수 있어, 이에 의해 최고 중요도의 레벨이 할당된다. 전술된 특징화를 참조하면, 중요도 정보의 레벨은 복제된 코드 조각 또는 함수, 이동된 함수, 개명된 함수 또는 수정된 함수 특징화를 위해 제공될 수 있다.
몇몇 실시예에서, 특징화에 기초하여 정보의 레벨을 생성하는 대신에 또는 추가하여, 중요도의 레벨은 소스 코드의 제 1 버전(110)으로부터 제 2 버전(120)으로 콘텐트 변경의 유형에 기초하여 생성될 수 있다.
예를 들어, 일 실시예에서, 콘텐트 변경의 유형은 포맷 변경 또는 코멘트 변경이다. 포맷 및 코멘트 변경은 사소한 변경 레벨과 연관되고 따라서 최저 중요도의 레벨이 할당될 수 있다.
다른 실시예에서, 콘텐트 변경의 유형은 어휘적 변경(예를 들어, 가변 개명)이다. 어휘적 변경은 적당한 변경 레벨과 연관되고 따라서 적당한 중요도의 레벨이 할당될 수 있다.
다른 실시예에서, 콘텐트 변경의 유형은 논리적 변경이다. 논리적 변경은 주 변경 레벨과 연관되고 따라서 최고 중요도의 레벨이 할당될 수 있다.
몇몇 비한정적인 실시예에서, 중요도의 레벨은 수치(예를 들어, 백분율 등)값을 콘텐트 변경의 유형에 할당하는 것과 수치값에 따라 중요도의 레벨을 분류하는 것에 기초하여 결정된다. 예를 들어, 5% 변경의 값은 최저 중요도의 레벨이 할당될 수 있는 사소한 변경을 표현할 것이고, 반면에 50%(또는 그 이상) 변경의 값은 최고 중요도의 레벨이 할당될 수 있는 주 변경일 것이다. 부가적으로, 다양한 실시예에서, 값(예를 들어, 상기 5% 값)은 변경의 중요도를 통신하는 능력을 더 향상시키기 위해 다른 코드 메트릭과 함께 이용된다. 일 비한정적인 실시예에서, 예를 들어 5%의 코드가 의미론적으로 변경되지만 변경되어 있는 부분이 애플리케이션의 임계 경로이면(테스트 결과에 기초하여), 변경되어 있는 코드의 실제 부분의 상대 중요도는 변경되어 있는 코드의 부분의 중요도를 통신하기 위해, 코드의 부분과 연관된 코드 메트릭 상에 값을 배치함으로써 그리고/또는 특정 메트릭, 메트릭의 값, 메트릭의 중요도의 레벨 등을 선택함으로써 통신될 수 있다.
중요도의 레벨은 중요도 엔진(310)으로부터 소프트웨어 개발 스테이션(150)으로 출력된다. 일 실시예에서, 도 3에 도시되지 않았지만, 시각화 엔진(220)은 중요도 엔진(310)에 의해 생성된 중요도의 레벨에 대한 정보를 수신하고, 시각적 표현으로서 중요도의 레벨을 생성하여 출력한다.
도 4는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 수행하기 위한 예시적인 비한정적인 프로세스를 도시하는 흐름도이다. 400에서, 소스 코드의 적어도 2개의 버전은 지능형 코드 디핑 시스템에서 수신된다. 410에서, 소스 코드의 2개의 버전은 코드 클론 검출 기술을 사용하여 프로세싱되고, 소스 코드의 유사한 단편이 식별된다. 다른 분류를 경유하여, 코드 클론 검출 기술은 다양한 유사성의 정도를 갖는 소스 코드를 식별하도록 구성된다. 이와 같이, 코드 클론 검출 기술은 상이하지만 유사한 소스 코드의 조각을 검출하는 것이 가능하다.
일 실시예에서, 소스 코드의 유사한 단편을 식별하는 것은 소스 코드의 각각의 버전으로부터의 하나의 소스 코드 조각인, 2개의 소스 코드 조각을 출력하는 것을 포함한다. 그러나, 본 명세서의 실시예는 이와 같이 한정되는 것은 아니고, 소스 코드의 유사한 단편을 식별하는 것은 소스 코드의 2개의 단편 내의 2개의 소스 코드 조각의 위치 또는 설명을 나타내는 정보를 출력하는 것을 포함할 수 있다.
420에서, 소스 코드 조각(또는 소스 코드 조각의 위치 또는 설명을 나타내는 정보)은 코드 디핑 시스템에 의해 프로세싱된다. 소스 코드의 유사한 단편 상의 의미론적 분석은 소스 코드의 2개의 단편 사이의 차이의 특징화를 결정하도록 수행된다.
단계 420은 이하와 같이 일 비한정적인 실시예에서 더 상세히 설명된다. 일 구현예에서, 코드 클론 검출 툴은 클론 쌍 세트 {Pi}, i=1, 2,..., N을 출력하고, 여기서 Pi=[SAi, SBi]이고, SAi는 소스 파일의 일 버전으로부터의 일 코드 조각(또는 함수)이고, SBi는 소스 파일의 다른 버전의 일 코드 조각(또는 함수)이다. 420에서, 다음에 각각의 클론 쌍(Pi)이 더 분석된다.
구체적으로, 일 경우에, SAi 및 SBi가 정확하게 동일하고 동일한 위치 콘텍스트를 가지면(예를 들어, 동일한 소스 파일 내에 있고 동일한 이웃 함수를 가짐), 이 쌍은 무시된다.
다른 경우에, SAi 및 SBi가 정확하게 동일한 함수이지만 상이한 위치 콘텍스트를 가지면(예를 들어, 상이한 소스 파일 내에 있고 상이한 이웃 함수를 가짐), SAi 및 SBi는 이동된 함수로서 특징화된다.
다른 경우에, SAi 및 SBi가 정확하게 동일한 함수이지만 상이한 위치 콘텍스트를 가지면(예를 들어, 상이한 소스 파일 내에 있고 상이한 이웃 함수를 가짐), SAi 및 SBi는 이동된 함수로서 특징화된다.
다른 경우에, SAi 및 SBi가 니어-미스 클로닝된 함수이면, 이들은 이하와 같이 더 분류될 수 있는데, 이들의 서명이 상이하고 동일한 바디 콘텐트를 가지면, 이들은 개명된 함수로서 특징화된다. 이들의 바디 콘텐트가 상이하지만, 동일한 서명을 가지면, 이들은 수정된 함수로서 특징화된다. 또한, 이들이 상이한 위치 콘텍스트를 가지면, 이들은 이동된 함수로서 특징화된다. 이들이 다른 상이한 바디 콘텐트를 가지면, 이들은 이동된 수정된 함수로서 특징화된다.
게다가, 또한 420에서, 세트 {Pi}의 리스트 내에 있지 않은 코드 조각 및 함수는 더 분석되어 삭제된 및/또는 추가된 코드 조각 또는 함수를 얻는다. 삭제된 및/또는 추가된 코드 조각 또는 함수는 13213(예를 들어, 로컬 코드 베이스의 인덱스를 갖는) 또는 1334(예를 들어, 서버측의 코드 베이스의 세트의 인덱스를 갖는)에 대해 더 탐색되어 이들이 현재 코드 베이스 내의 다른 배치 또는 심지어 다른 코드 베이스로부터 복제되는지를 판정한다.
도 4를 재차 참조하면, 전술된 바와 같이, 특징화는 몇몇 실시예에서 소스 코드의 2개의 버전 사이의 변경의 복잡성의 레벨 및/또는 유형에 기초한다.
이와 같이, 도 4의 프로세스는 단지 코드 리뷰어에 변경을 제공하고 코드 리뷰어가 발생된 변경의 유형에 액세스하는 것을 요구하는 것에 대조적으로 발생된 변경의 유형에 대한 정보를 제공한다. 따라서, 코드 리뷰 경험이 향상된다.
도 4에는 도시되지 않았지만, 몇몇 실시예에서, 특징화는 소스 코드의 버전들 사이의 차이를 설명하는 파일로서 출력된다. 그러나, 파일은 일 비한정적인 예이다.
다른 비한정적인 실시예에서, 예를 들어, 특징화(또는 특징화가 나타내는 변경)가 시각적으로 출력된다. 예를 들어, 시각화는 특징화를 생성하는 소스 코드의 2개의 버전 상에 동작을 그래픽적으로 묘사하는 아키텍처 다이어그램의 것일 수 있다. 예를 들어, 이동 동작은 관심 함수를 지시하고 소스 코드의 제 1 버전 내의 함수로부터 소스 코드의 제 2 버전 내의 함수로 화살표를 예시함으로써 시각적으로 묘사될 수 있다. 다른 예로서, 시각화는 소스 코드의 2개의 버전으로부터 소스 코드의 상이한 컬러 코딩된 코드 조각 또는 함수 또는 단편을 예시하는 컬러 코딩된 다이어그램일 수 있다. 소스 코드의 코드 조각 또는 함수 또는 단편과 연관된 컬러는 상이한 특징화에 할당된다(예를 들어, 적색은 이동된 함수를 표현하고, 반면에 황색은 복제된 코드 조각 또는 함수를 표현함). 코드 리뷰어는 소스 코드의 2개의 버전 사이의 변경의 유형을 시각적으로 식별할 수 있다.
6개의 상이한 특징화가 설명되었지만, 이들 특징화는 비한정적이고 단지 예시적이다. 다른 특징화가 가능하고, 몇몇 경우에, 때때로 변경될 수 있는 코드 리뷰어의 요구 및 시스템 디자이너에 의해 결정된 바와 같이 더 적은 수의(또는 더 많은 수의) 특징화가 가능하다.
도 4의 프로세스는 상이한 프로세스로 분리될 수 있고, 이 프로세스 각각은 일반적으로 통상의 접근법 및 코드 클론 검출 기술, 특히 코드 디핑의 사용에 비해 신규한 특유의 장점을 갖는다.
예를 들어, 도 5는 지능형 코드 디핑을 용이하게 하기 위한 예시적인 비한정적인 프로세스를 도시하는 흐름도이다. 500에서, 소스 코드의 2개의 버전이 수신된다. 510에서, 소스 코드의 2개의 버전은 코드 클론 검출 기술을 사용하여 프로세싱된다. 520에서, 코드 클론 검출 기술을 사용하여, 서로 대응하는 소스 코드의 상이한 부분이 결정된다. 비한정적인 실시예에서, 서로 대응하는 소스 코드의 단편은 소스 코드의 동일한 단편 또는 소스 코드의 유사한 단편이다. 이와 같이, 도 5의 프로세스는 소스 코드의 거의 정합(및 소스 코드의 단지 정확한 정합이 아닌)을 검출하기 위해 코드 클론 검출 기술을 이용한다.
검출된 소스 코드는 지능형 코드 디핑 시스템으로부터 출력되고 코드 리뷰어에 의해 액세스될 수 있다.
다른 예로서, 도 6은 지능형 코드 디핑을 용이하게 하기 위한 예시적인 비한정적인 프로세스를 도시하는 흐름도이다. 600에서, 소스 코드의 2개의 버전 사이의 대응관계를 나타내는 정보가 수신된다. 610에서, 대응관계의 특징화가 결정된다. 일 비한정적인 실시예에서, 대응관계는 특징화를 결정하도록 추상화된 소스 코드의 2개의 버전 사이의 실제 차이를 나타내는 정보이다. 예를 들어, 일 비한정적인 실시예에서, 대응관계는 제 1 버전으로부터 삭제된 코드 조각 또는 함수 및 제 2 버전에 추가된 코드 조각 또는 함수를 나타내는 정보이다. 대조적으로, 특징화는 추가된 및 삭제된 코드 조각 또는 함수에 기초하는 의미론적 의미로의 추상화이다. 예를 들어, 추가된 및 삭제된 코드 조각 또는 함수는 동일한 코드 조각 또는 함수이고, 삭제 및 추가의 의미론적 의미는 일 버전으로부터 다른 버전으로 이동인 것으로 판정되고, 특징화는 이어서 도 4를 참조하여 전술된 이동인 것으로 판정된다(제 1 파일의 삭제 및 제 2 파일의 추가는 추가된 및 삭제된 콘텐트가 동일한지에 대한 추가의 정보 또는 그와 연관된 임의의 다른 의미론적 정보가 없이 2개의 버전을 가로질러 발생함).
620에서, 특징화의 시각화가 생성된다. 전술된 바와 같이, 시각화는 버전들 사이의 변경의 특징화를 설명하는 파일, 버전 사이의 변경을 그래픽적으로 표시하는 아키텍처 다이어그램 및/또는 소스 코드의 다른 버전에 대한 소스 코드의 일 버전의 변경을 표현하는 코드 조각 또는 함수의 컬러 코딩된 리스팅이다.
630에서, 특징화가 출력된다. 몇몇 실시예에서, 특징화의 식별을 구동하는 변경이 또한 출력된다.
다른 예로서, 도 7은 지능형 코드 디핑을 용이하게 하기 위한 예시적인 비한정적인 프로세스를 도시하는 흐름도이다. 700에서, 소스 코드의 버전들 사이의 콘텐트 변경의 유형을 나타내는 정보가 생성된다. 콘텐트 변경의 유형은 상이한 비한정적인 실시예에서 포맷 변경 또는 코멘트 변경, 어휘적 변경(예를 들어, 가변 개명) 또는 논리적 변경일 수 있다. 또한, 몇몇 비한정적인 실시예에서, 콘텐트 변경의 유형은 소스 코드의 버전들 사이의 차이의 특징화이다. 이와 같이, 콘텐트 변경의 유형은 예를 들어 도 4 내지 도 6을 참조하여 전술된 이동된 함수, 삭제된 코드 조각 또는 함수 또는 임의의 수의 다른 유형의 코드 조각 및/또는 함수이다.
710에서, 콘텐트 변경의 유형과 연관된 중요도의 레벨이 결정된다. 콘텐트 변경의 유형이 변경의 특징화인 몇몇 비한정적인 실시예에서, 중요도의 레벨은 연관 특징화로부터 맵핑된다. 예를 들어, 이동된 함수는 사소한 변경으로 맵핑된 특징화일 수 있어, 이에 의해 중요도의 최저 레벨이 할당된다. 다른 예로서, 개명된 함수는 부 변화로 맵핑될 수 있어, 이에 의해 적당한 중요도의 레벨이 할당된다. 다른 예로서, 수정된 함수는 주 변경으로 맵핑될 수 있어, 이에 의해 최고 중요도의 레벨이 할당된다. 전술된 특징화를 참조하면, 중요도의 레벨 정보는 복제된 코드 조각 또는 함수, 이동된 함수, 개명된 함수 또는 수정된 함수 특징화를 위해 제공될 수 있다.
몇몇 비한정적인 실시예에서, 중요도의 레벨은 수치(예를 들어, 백분율 등)값을 콘텐트 변경의 유형에 할당하는 것과 수치값에 따라 중요도의 레벨을 분류하는 것에 기초하여 결정될 수 있다. 예를 들어, 5% 변경의 값은 최저 중요도의 레벨이 할당될 수 있는 사소한 변경을 표현할 것이고, 반면에 50%(또는 그 이상) 변경의 값은 최고 중요도의 레벨이 할당될 수 있는 주 변경을 표현할 것이다.
720에서, 중요도의 레벨을 나타내는 정보가 출력된다. 도 4 및 도 6과 관련하여 설명된 바와 같이, 중요도의 레벨은 시각적으로 묘사된다.
도 8 내지 도 12를 참조하면, 지능형 코드 디핑을 위한 예시적인 스크린샷을 도시하는 블록도가 도시되어 있다. 도 8은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 블록도이다. 도 8에 도시된 바와 같이, 개발자는 소스 코드의 다수의 파일에 변경을 행한다. 파일은 이전의 버전에 비교되고, 변경을 나타내는 정보는 각각의 편집된 파일에 대해 스크린샷에 지시된다. 부가적으로, 이전의 버전에 대해 추가된 신규한 파일은 추가된 것으로서 지시된다.
도 9는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도이다. 본 명세서에 설명된 실시예를 갖는 코드 디핑 시스템은 도 9에 도시된 바와 같이 소스 코드의 버전에 대한 기능-레벨 직관적 변경을 나타내는 정보를 출력한다. 변경은 본 명세서에 전술된 6개의 특징화 중 하나로서 라벨링된다. 본 명세서에 설명된 바와 같이, 다양한 실시예에서, 변경의 양은 코드 디핑 시스템에 의해 또한 지시될 수 있다. 예로서, 버전들 사이의 변경의 백분율(또는 버전들 사이의 유사성의 백분율)은 몇몇 실시예에서 특징화와 함께 지시된다.
도 10은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도이다. 코드 디핑 시스템은 도 10에 도시된 바와 같이 NewFile.cs의 선택과 같은 파일을 선택하는 입력을 수신할 수 있다. 버전들 사이의 상세한 변경은 함수 직관적 레벨에서 설명된다. 예를 들어, 함수 NewFile::CopiedMethod1 in file newFile.cs와 같은 복제된 코드 조각 또는 함수에 대해, 코드 디핑 시스템은 서명(예를 들어, 함수 정의) 변경 및 콘텐트(예를 들어, 바디) 변경(91% 유사성)을 포함하는 복제 후의 상세한 변경을 표시한다.
아이콘(또는 관심 파일)을 클릭함으로써, 상세한 변경이 또한 도 11에 도시된 바와 같이 직관적인 의미론적 방식으로 출력될 수 있다. 이 실시예에서, 변경은 버그 픽스이다.
도 12는 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 위한 예시적인 비한정적인 스크린샷을 도시하는 다른 블록도이다. 도 12는 함수(도 10에 도시된 NewFile::CopiedMethod1 in file newFile.cs)와 그 복제된 버전 사이의 상세한 변경을 도시한다.
도 13은 코드 클론 검출 기술을 사용하는 지능형 코드 디핑을 구현하기 위한 시스템 아키텍처의 예시적인 비한정적인 구현예를 도시하는 블록도이다. 도 13에 도시된 바와 같이, 시스템은 코드 클론 분석 코어(1310), 통합형 개발 환경(IDE)(1320) 및 애플리케이션 서버(1350)를 포함한다.
코드 클론 분석 코어(1310)는 코드 클론 분석 코어(1310)에 의해 수신된 코드와 연관된 인덱싱 및 파싱(parsing)을 각각 수행하기 위한 인덱서(1312) 및 파서(1314)를 포함한다. 파서 인터페이스(1315)가 제공된다. 코드 클론 분석 코어(1310)는 코드의 유사한 단편을 검출하도록 구성된 코드 클론 검출기(1316)를 포함한다. 일 비한정적인 실시예에서, 설명된 바와 같이, 코드 클론 검출기(1316)는 2010년 4월 1일 출원된 발명의 명칭이 "코드 클론 검출 및 분석(CODE-CLONE DETECTION AND ANALYSIS)"인 미국 특허 출원 제 12/752,942호를 참조하여 설명된 코드 클론 검출 및 프로세싱을 행하도록 구성된다. 코드 클론 검출 능력에 추가하여, 코드 클론 검출기(1316)는 의미론적 레벨에서 코드의 상이한 버전들 사이의 변경을 특징화하고 그리고/또는 도 2의 특징화 엔진(210) 및/또는 도 3의 중요도 엔진(310)을 참조하여 본 명세서에 설명된 임의의 기능을 일반적으로 수행하도록 구성될 수 있다.
코드 클론 분석 코어(1310)는 도 2의 시각화 엔진(220)을 참조하여 전술된 바와 같은 중요도의 레벨 및/또는 특징화의 시각화를 위한 정보를 생성하도록 구성된 차이 시각화기(1318)를 또한 포함한다.
IDE(1320)는 증강된 코드 리뷰 사용자 인터페이스(UI)(1322), 분석 드라이버(1326)를 포함하는 코드 클론 공급자(1324) 및 코드 클론 분석 코어(1328)를 포함한다. 언어 서비스 구성 요소(1340) 및 다른 데이터 공급자로부터 정보를 수신하기 위한 기능성이 또한 1342에서 제공된다.
이제 애플리케이션 서버(1350)를 참조하면, 전술된 바와 같이, 몇몇 실시예에서, 시스템은 애플리케이션 서버(1350)의 부분으로서 코드 클론 분석 서비스(1330)를 또한 포함한다. 코드 클론 분석 서비스(1330)는 지능형 코드 디핑을 제공하기 위한 서버에서의 코드 클론 분석 코어(1332), 코드 클론 탐색 엔진(1334) 및 코드 클론 검출 엔진(1336)을 포함한다. 애플리케이션 서버(1350)는 현존하는 서비스(1352) 및 작업 관리자(1354)를 또한 포함할 수 있다.
애플리케이션 서버(1350)가 코드 클론 분석 서비스(1330)를 포함할 때, 대형 코드 베이스(예를 들어, 다수의 코드 베이스로부터 코드의 수천만 내지 수억개의 라인)의 인덱싱이 프로세싱될 수 있고 사용자는 더 큰 범주에서 코드 클론을 탐색할 수 있다. 이는 다른 해결책에서 소스 코드의 복제인 코드 조각 또는 함수를 결정하는 가능성을 가능하게 하지만, 이는 현재 해결책에서 신규할 수 있다. 이러한 것은 코드 변경의 콘텍스트를 더 양호하게 이해하는 개발자/코드 리뷰어의 능력을 또한 용이하게 한다. 코드 클론 분석 서비스(1330) 없이, 지능형 코드 디핑은 코드 클론 분석 코어(1310)를 이용하는 클라이언트에서 수행되고 비교적 소형 코드 베이스가 프로세싱될 수 있지만, 이러한 해결책은 특히 경량이고 편리하다.
예시적인 네트워킹 및 분산형 환경
당 기술 분야의 숙련자는 본 명세서에 설명된 지능형 코드 디핑 시스템 및 방법의 다양한 실시예가 컴퓨터 네트워크의 부분으로서 또는 분산형 컴퓨팅 환경에서 전개될 수 있고 임의의 종류의 데이터 저장부에 접속될 수 있는 임의의 컴퓨터 또는 다른 클라이언트 또는 서버 디바이스와 관련하여 구현될 수 있다. 이와 관련하여, 본 명세서에 설명된 다양한 실시예는 임의의 수의 메모리 또는 저장 유닛을 갖는 임의의 컴퓨터 시스템 또는 환경 및 임의의 수의 저장 유닛을 가로질러 발생하는 임의의 수의 애플리케이션 및 프로세스에서 구현될 수 있다. 이는 이에 한정되는 것은 아니지만, 원격 또는 로컬 저장 장치를 갖는 네트워크 환경 또는 분산형 컴퓨팅 환경에서 전개된 서버 컴퓨터 및 클라이언트 컴퓨터를 갖는 환경을 포함한다.
분산형 컴퓨팅은 컴퓨팅 디바이스 및 시스템 사이의 통신적 교환에 의해 컴퓨터 리소스 및 서비스의 공유를 제공한다. 이들 리소스 및 서비스는 정보의 교환, 캐시 저장 및 파일과 같은 객체를 위한 디스크 저장 장치를 포함한다. 이들 리소스 및 서비스는 로드 밸런싱을 위한 다수의 프로세싱 유닛을 가로지르는 프로세싱 전력의 공유, 리소스의 확장, 프로세싱의 특징화 등을 또한 포함한다. 분산형 컴퓨팅은 네트워크 접속성의 장점을 취하여, 클라이언트가 전체 엔터프라이즈에 이익을 얻기 위해 이들의 집합적인 전력을 지레 작용하게 한다. 이와 관련하여, 다양한 디바이스가 본 발명의 다양한 실시예에 대해 설명된 바와 같은 메커니즘에 참여할 수 있는 애플리케이션, 객체 또는 리소스를 가질 수 있다.
도 14는 예시적인 네트워킹 또는 분산형 컴퓨팅 환경의 개략도를 제공한다. 분산형 컴퓨팅 환경은 애플리케이션(1430, 1432, 1434, 1436, 1438)에 의해 표현되는 바와 같이 프로그램, 방법, 데이터 저장부, 프로그램 가능 로직 등을 포함할 수 있는 컴퓨팅 객체(1410, 1412) 등 및 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등을 포함한다. 컴퓨팅 객체(1410, 1412) 등 및 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등은 개인 휴대 정보 단말(PDA), 오디오/비디오 디바이스, 휴대폰, MP3 플레이어, 퍼스널 컴퓨터, 랩탑 등과 같은 상이한 디바이스를 포함할 수 있다.
각각의 컴퓨팅 객체(1410, 1412) 등 및 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등은 통신 네트워크(1440)를 경유하여 하나 이상의 다른 컴퓨팅 객체(1410, 1412) 등 및 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등과 직접적으로 또는 간접적으로 통신할 수 있다. 도 14에 단일 요소로서 도시되어 있지만, 통신 네트워크(1440)는 도 14의 시스템에 서비스를 제공하는 다른 컴퓨팅 객체 및 컴퓨팅 디바이스를 포함할 수 있고, 그리고/또는 도시되지 않는 다수의 상호 접속된 네트워크를 표현할 수 있다. 각각의 컴퓨팅 객체(1410, 1412) 등 또는 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등은 또한 본 발명의 다양한 실시예와 통신하거나 구현에 적합한 API 또는 다른 객체, 소프트웨어, 펌웨어 및/또는 하드웨어를 사용할 수도 있는 애플리케이션(1430, 1432, 1434, 1436, 1438)과 같은 애플리케이션을 또한 포함할 수 있다.
분산형 컴퓨팅 환경을 지원하는 다양한 시스템, 구성 요소 및 네트워크 구성이 존재한다. 예를 들어, 컴퓨팅 시스템은 유선 또는 무선 시스템에 의해, 로컬 네트워크에 의해 또는 광범위하게는 분산형 네트워크에 의해 함께 접속될 수 있다. 현재, 다수의 네트워크가 광범위하게 분산된 컴퓨팅을 위한 인프라구조를 제공하고 다수의 상이한 네트워크를 포함하는 인터넷에 결합되지만, 임의의 네트워크 인프라구조가 다양한 실시예에서 설명된 바와 같이 코드 디퍼런싱 시스템에 부수적이게 되는 예시적인 통신을 위해 사용될 수 있다.
따라서, 클라이언트/서버, 피어투피어 또는 하이브리드 아키텍처와 같은 네트워크 토폴로지 및 네트워크 인프라구조의 호스트가 이용될 수 있다. "클라이언트"는 이것이 관련되지 않는 다른 클래스 또는 그룹의 서비스를 사용하는 클래스 또는 그룹의 멤버이다. 클라이언트는 다른 프로그램 또는 프로세스에 의해 제공된 서비스를 요구하는 프로세스, 즉 대략 명령 또는 작업의 세트일 수 있다. 클라이언트는 다른 프로그램 또는 서비스 자체에 대한 임의의 작업 상세를 "인지"할 필요 없이 요구된 서비스를 이용한다.
클라이언트/서버 아키텍처, 특히 네트워킹된 시스템에서, 클라이언트는 일반적으로 예를 들어 서버와 같은 다른 컴퓨터에 의해 제공된 공유된 네트워크 리소스에 액세스하는 컴퓨터이다. 도 14의 도시에서, 비한정적인 예로서, 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등은 클라이언트로서 고려될 수 있고, 컴퓨팅 디바이스(1410, 1412) 등은 서버로서 작용하는 컴퓨팅 디바이스(1410, 1412) 등이 클라이언트 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등으로부터 데이터를 수신하고, 데이터를 저장하고, 데이터를 프로세싱하고, 데이터를 클라이언트 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등에 전송하는 것과 같은 데이터 서비스를 제공하는 서버로서 고려될 수 있지만, 임의의 컴퓨터는 상황에 따라 클라이언트, 서버 또는 양자 모두로서 고려될 수 있다. 이들 컴퓨팅 디바이스의 임의의 것은 데이터를 프로세싱하고, 또는 하나 이상의 실시예에 대해 본 명세서에 설명된 바와 같이 디퍼런싱 기술을 수반할 수 있는 트랜잭션 서비스 또는 작업을 요구할 수 있다.
서버는 통상적으로 인터넷 또는 무선 네트워크 인프라구조와 같은 원격 또는 로컬 네트워크를 통해 액세스 가능한 원격 컴퓨터 시스템이다. 클라이언트 프로세스는 제 1 컴퓨터 시스템에서 활성일 수 있고, 서버 프로세스는 제 2 컴퓨터 시스템에서 활성일 수 있어, 통신 매체를 통해 서로 통신하여, 따라서 분산형 기능을 제공하여 다수의 클라이언트가 서버의 정보 수집 능력의 장점을 취할 수 있게 한다. 본 명세서에 설명된 기술에 따라 이용된 임의의 소프트웨어 객체는 자립형으로 제공되거나 다수의 컴퓨팅 디바이스 또는 객체를 가로질러 분산될 수 있다.
예를 들어 통신 네트워크(1440) 또는 버스가 인터넷인 네트워크 환경에서, 컴퓨팅 객체(1410, 1412) 등은 다른 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등이 하이퍼텍스트 전송 프로토콜(HTTP)과 같은 임의의 다수의 공지의 프로토콜을 경유하여 통신하는 웹 서버일 수 있다. 서버로서 작용하는 컴퓨팅 객체(1410, 1412) 등은 분산형 컴퓨팅 환경의 특성일 수 있는 바와 같이, 예를 들어 컴퓨팅 객체 또는 디바이스(1420, 1422, 1424, 1426, 1428) 등과 같은 클라이언트로서 또한 기능할 수 있다.
예시적인 컴퓨팅 디바이스
설명된 바와 같이, 유리하게는, 본 명세서에 설명된 기술은 코드 디퍼런싱을 수행하는 것이 바람직한 경우에 임의의 디바이스에 적용될 수 있다. 따라서, 휴대형, 휴대용 및 다른 컴퓨팅 디바이스 및 모든 종류의 컴퓨팅 객체는 다양한 실시예와 관련하여 사용을 위해 고려된다는 것이 이해될 수 있다. 이에 따라, 도 15에서 이하에 설명되는 이하의 범용 원격 컴퓨터는 그러나 컴퓨팅 디바이스의 일예이다.
필수적인 것은 아니지만, 실시예는 디바이스 또는 객체를 위한 서비스의 개발자에 의해 사용을 위해 운영 체제를 경유하여 부분적으로 구현될 수 있고, 그리고/또는 본 명세서에 설명된 다양한 실시예의 하나 이상의 기능적 양태를 수행하도록 동작하는 응용 소프트웨어 내에 포함될 수 있다. 소프트웨어는 클라이언트 워크스테이션, 서버 또는 다른 디바이스와 같은 하나 이상의 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령의 일반적인 콘텍스트에서 설명될 수 있다. 당 기술 분야의 숙련자들은 컴퓨터 시스템이 데이터를 통신하는데 사용될 수 있는 다양한 구성 및 프로토콜을 갖고 따라서 어떠한 특정 구성 또는 프로토콜도 한정적인 것으로 고려되어서는 안된다는 것을 이해할 수 있을 것이다.
도 15는 따라서 본 명세서에 설명된 실시예의 하나 이상의 양태가 구현될 수 있는 적합한 컴퓨팅 시스템 환경(1500)의 예를 도시하지만, 상기에서 명백해진 바와 같이, 컴퓨팅 시스템 환경(1500)은 적합한 컴퓨팅 환경의 단지 일예이고, 사용 또는 기능성의 범주에 대한 임의의 한정을 제안하도록 의도된 것은 아니다. 또한, 컴퓨팅 시스템 환경(1500)은 예시적인 컴퓨팅 시스템 환경(1500)에 예시된 구성 요소의 임의의 하나 또는 조합에 관한 임의의 종속성 또는 요구를 갖는 것으로서 해석되어서도 안된다.
도 15를 참조하면, 하나 이상의 실시예를 구현하기 위한 예시적인 원격 디바이스가 컴퓨터(1510)의 형태의 범용 컴퓨팅 디바이스를 포함한다. 컴퓨터(1510)의 구성 요소는 이들에 한정되는 것은 아니지만, 프로세싱 유닛(1520), 시스템 메모리(1530) 및 시스템 메모리를 포함하는 다양한 시스템 구성 요소를 프로세싱 유닛(1520)에 결합하는 시스템 버스(1522)를 포함할 수 있다.
컴퓨터(1510)는 통상적으로 다양한 컴퓨터 판독 가능 매체를 포함하고, 컴퓨터(1510)에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있다. 시스템 메모리(1530)는 휘발성 및/또는 판독 전용 메모리(ROM) 및/또는 랜덤 액세스 메모리(RAM)와 같은 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함할 수 있다. 컴퓨터 판독 가능 매체는 이들에 한정되는 것은 아니지만, 자기 저장 디바이스(예를 들어, 하드 디스크, 플로피 디스크, 자기 스트립), 광학 디스크[예를 들어, 콤팩트 디스크(CD), 디지털 다기능 디스크(DVD)], 스마트 카드 및/또는 플래시 메모리 디바이스(예를 들어, 카드, 스틱, 키 드라이브)를 또한 포함한다. 예로서, 비한정적으로, 시스템 메모리(1530)는 운영 체제, 응용 프로그램, 다른 프로그램 모듈 및 프로그램 데이터를 또한 포함할 수 있다.
사용자는 입력 디바이스(1540)를 통해 컴퓨터(1510) 내에 명령 및 정보를 입력한다. 모니터 또는 다른 유형의 디스플레이 디바이스가 또한 출력 인터페이스(1550)와 같은 인터페이스를 경유하여 시스템 버스(1522)에 접속된다. 모니터에 추가하여, 컴퓨터는 출력 인터페이스(1550)를 통해 접속될 수 있는 스피커 및 프린터와 같은 다른 주변 출력 디바이스를 또한 포함할 수 있다.
컴퓨터(1510)는 원격 컴퓨터(15790)와 같은 하나 이상의 다른 원격 컴퓨터로의 논리적 접속을 사용하여 네트워킹된 또는 분산형 환경에서 동작할 수 있다. 원격 컴퓨터(1570)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 디바이스 또는 다른 공통 네트워크 노드 또는 임의의 다른 원격 매체 소비 또는 전송 디바이스일 수 있고, 컴퓨터(1510)에 대한 전술된 임의의 요소 또는 모든 요소를 포함할 수 있다. 도 15에 도시된 논리적 접속은 근거리 통신망(LAN) 또는 원거리 통신망(WAN)과 같은 네트워크(1572)를 포함하지만, 다른 네트워크/버스를 또한 포함할 수 있다. 이러한 네트워킹 환경은 가정, 사무실, 기업 단위 컴퓨터 네트워크, 인트라넷 및 인터넷에서 통상적이다.
전술된 바와 같이, 예시적인 실시예가 다양한 컴퓨팅 디바이스 및 네트워크 아키텍처와 관련하여 설명되어 있지만, 기초 개념은 임의의 네트워크 시스템 및 임의의 컴퓨팅 디바이스 또는 시스템에 적용될 수 있다.
또한, 예를 들어 애플리케이션 및 서비스가 본 명세서에 제공된 기술의 장점을 취하는 것을 가능하게 하는 적절한 응용 프로그래밍 인터페이스(API), 툴 키트, 드라이버 소스 코드, 운영 체제, 제어부, 자립형 또는 다운로드 가능 소프트웨어 객체 등과 같은 동일한 또는 유사한 기능성을 구현하기 위한 다수의 방식이 존재한다. 따라서, 본 명세서의 실시예는 API(또는 다른 소프트웨어 객체)의 관점으로부터, 뿐만 아니라 본 명세서에 설명된 디핑 기술의 하나 이상의 양태를 구현하는 소프트웨어 또는 하드웨어 객체로부터 고려된다. 따라서, 본 명세서에 설명된 다양한 실시예는 전체적으로 하드웨어에, 부분적으로 하드웨어에 그리고 부분적으로 소프트웨어에, 뿐만 아니라 소프트웨어에 있는 양태를 가질 수 있다.
용어 "예시적인"은 본 명세서에서 예, 사례 또는 예시로서 기능하는 것을 의미하는데 사용된다. 의심의 여지를 피하기 위해, 본 명세서에 개시된 요지는 이러한 예에 의해 한정되지 않는다. 게다가, "예시적인" 것으로서 본 명세서에 설명된 임의의 양태 또는 디자인은 반드시 다른 양태 또는 디자인에 비해 바람직하거나 유리한 것으로서 해석되어서는 안되고, 또한 당 기술 분야의 숙련자들에게 공지된 등가의 예시적인 구조 및 기술을 배제하는 것을 의미하는 것도 아니다. 더욱이, 용어 "구비한다", "갖는다", "함유한다" 및 다른 유사한 용어가 사용되는 정도로, 의심의 여지를 피하기 위해, 이러한 용어는 임의의 부가적인 또는 다른 요소를 배제하지 않고 개방 전이 용어로서 용어 "포함하는"과 유사한 방식으로 포함적인 것으로 의도된다.
설명된 바와 같이, 본 명세서에 설명된 다양한 기술은 하드웨어 또는 소프트웨어, 또는 적절한 경우에 양자의 조합과 관련하여 구현될 수 있다. 본 명세서에 사용될 때, 용어 "구성 요소", "시스템" 등은 마찬가지로 실행시에 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어 또는 소프트웨어인 컴퓨터 관련 엔티티를 칭하도록 의도된다. 예를 들어, 구성 요소는 이들에 한정되는 것은 아니지만, 프로세서 상에서 실행하는 프로세스, 프로세서, 객체, 실행 가능부, 실행의 스레드, 프로그램 및/또는 컴퓨터일 수 있다. 예시로서, 컴퓨터 상에서 실행하는 애플리케이션 및 컴퓨터의 모두는 구성 요소일 수 있다. 하나 이상의 구성 요소가 프로세스 및/또는 실행의 스레드 내에 상주할 수 있고, 구성 요소는 하나의 컴퓨터 상에 국부화되고 그리고/또는 2개 이상의 컴퓨터 사이에 분산될 수 있다.
전술된 시스템은 다수의 구성 요소 사이의 상호 작용과 관련하여 설명되어 있다. 이러한 시스템 및 구성 요소는 이들 구성 요소 또는 지정된 서브-구성 요소, 지정된 구성 요소 또는 서브-구성 요소의 일부, 및/또는 및 다양한 치환 및 상기의 조합에 따른 부가의 구성 요소를 포함할 수 있다는 것이 이해될 수 있다. 서브-구성 요소는 또한 부모 구성 요소(이력적) 내에 포함되기보다는 다른 구성 요소에 통신적으로 결합된 구성 요소로서 구현될 수 있다. 부가적으로, 하나 이상의 구성 요소는 집합 기능성을 제공하는 단일 구성 요소로 조합되거나 다수의 개별 서브-구성 요소로 분할될 수 있고, 자기층과 같은 임의의 하나 이상의 중간층이 통합 기능성을 제공하기 위해 이러한 서브-구성 요소에 통신적으로 결합되도록 제공될 수 있다는 것이 주지된다. 본 명세서에 설명된 임의의 구성 요소는 또한 본 명세서에 구체적으로 설명되지 않았지만 당 기술 분야에 일반적으로 공지되어 있는 하나 이상의 다른 구성 요소와 상호 작용할 수 있다.
전술된 예시적인 시스템의 견지에서, 설명된 요지에 따라 구현될 수 있는 방법론은 또한 다양한 도면의 흐름도를 참조하여 이해될 수 있다. 설명의 간단화를 위해, 방법론이 일련의 블록으로서 도시되고 설명되어 있지만, 몇몇 블록이 상이한 순서 및/또는 본 명세서에 도시되고 설명된 것으로부터 다른 블록과 동시에 발생할 수 있기 때문에, 블록의 순서에 의해 한정되는 것은 아니라는 것이 이해되고 인식되어야 한다. 비순차적 또는 분기된 흐름이 흐름도를 경유하여 도시되는 경우에, 동일한 또는 유사한 결과를 성취하는 다양한 다른 분기, 흐름 경로 및 블록의 순서가 구현될 수 있다는 것이 이해될 수 있다. 더욱이, 도시된 블록의 모두가 이하에 설명되는 방법론을 구현하기 위해 요구되는 것은 아니다.
본 명세서에 설명된 다양한 실시예에 추가하여, 다른 유사한 실시예가 사용될 수 있거나 또는 수정 및 추가가 그로부터 벗어나지 않고 대응 실시예(들)의 동일한 또는 등가의 기능을 수행하기 위해 설명된 실시예(들)에 행해질 수 있다는 것이 이해되어야 한다. 또한, 다수의 프로세싱 칩 또는 다수의 디바이스가 본 명세서에 설명된 하나 이상의 기능의 성능을 공유할 수 있고, 유사하게 저장이 복수의 디바이스를 가로질러 실행될 수 있다. 이에 따라, 본 발명은 임의의 단일 실시예에 한정되는게 아니라, 오히려 첨부된 청구범위의 범위, 사상 및 범주에서 구성되어야 한다.

Claims (20)

  1. 코드 클론 검출(code clone detection)을 이용하여 지능형 코드 디퍼런싱(intelligent code differencing)을 수행하는 방법으로서,
    소스 코드의 적어도 2개의 버전을 수신하는 단계와,
    상기 코드 클론 검출을 이용하여 상기 소스 코드의 상기 적어도 2개의 버전 사이의 콘텐트 변경의 유형을 나타내는 정보를 생성하는 단계와,
    상기 콘텐트 변경의 유형에 중요도의 레벨을 연관시키고 상기 중요도의 레벨을 나타내는 정보를 출력하는 단계
    를 포함하되,
    상기 중요도의 레벨은 상기 소스 코드의 상기 적어도 2개의 버전 사이의 상기 콘텐트 변경의 유형이 포맷의 변경, 어휘적 변경 또는 논리적 변경인지 여부에 적어도 기초하는
    방법.
  2. 제 1 항에 있어서,
    코드의 적어도 2개의 부분을 출력하는 단계를 더 포함하되,
    상기 코드의 적어도 2개의 부분은 서로 대응하는 소스 코드의 상기 적어도 2개의 버전의 부분들에 각각 대응하는
    방법.
  3. 제 1 항에 있어서,
    상기 소스 코드의 적어도 2개의 버전은 상기 소스 코드의 제 1 버전 및 상기 소스 코드의 제 2 버전을 포함하고,
    상기 방법은
    상기 코드 클론 검출을 이용하여 제 1 브랜치에서 상기 제 1 버전을 프로세싱하는 단계와,
    상기 코드 클론 검출을 이용하여 제 2 브랜치에서 상기 제 2 버전을 프로세싱하는 단계를 더 포함하는
    방법.
  4. 삭제
  5. 제 1 항에 있어서,
    클라이언트 디바이스로부터 네트워크를 통해 서버 내에 제공된 상기 코드 클론 검출에 액세스하는 단계를 더 포함하는
    방법.
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 코드 클론 검출 기법을 이용하는 지능형 코드 디퍼런싱 시스템으로서,
    소스 코드의 적어도 2개의 버전 사이의 콘텐트 변경의 유형의 결정을 나타내는 정보를 생성하도록 구성된 클론 검출 구성 요소와,
    상기 소스 코드의 상기 적어도 2개의 버전 사이의 상기 콘텐트 변경의 유형과 연관된 중요도의 레벨을 결정하고 상기 중요도의 레벨을 나타내는 정보를 출력하도록 구성된 중요도 엔진
    을 포함하되,
    상기 중요도의 레벨은 상기 소스 코드의 상기 적어도 2개의 버전 사이의 상기 콘텐트 변경의 유형이 포맷의 변경, 어휘적 변경 또는 논리적 변경인지 여부에 적어도 기초하는
    시스템.
  13. 삭제
  14. 제 12 항에 있어서,
    상기 포맷의 변경은 제 1 중요도의 레벨에 대응하고, 상기 어휘적 변경은 제 2 중요도의 레벨에 대응하며, 상기 논리적 변경은 제 3 중요도의 레벨에 대응하고, 상기 제 3 중요도의 레벨은 상기 제 2 중요도의 레벨보다 높고, 상기 제 2 중요도의 레벨은 상기 제 1 중요도의 레벨보다 높은
    시스템.
  15. 제 12 항에 있어서,
    상기 소스 코드의 상기 적어도 2개의 버전 사이의 상기 콘텐트 변경의 유형의 특징화를 결정하도록 구성된 특징화 엔진을 더 포함하고, 상기 특징화는 의미론적 정보를 포함하는
    시스템.
  16. 제 15 항에 있어서,
    상기 중요도 엔진은 적어도 상기 특징화에 기초하여 상기 중요도의 레벨을 결정하도록 더 구성되는
    시스템.
  17. 제 16 항에 있어서,
    상기 중요도 엔진은 상기 특징화에 값을 할당하도록 더 구성되는
    시스템.
  18. 제 17 항에 있어서,
    상기 값은 백분율인
    시스템.
  19. 제 16 항에 있어서,
    상기 특징화는 새로운 코드 조각 또는 함수, 복제된 코드 조각 또는 함수, 이동된 함수, 개명된 함수, 수정된 함수, 삭제된 코드 조각 또는 함수 또는 이동된 함수와 개명된 함수의 조합 중 적어도 하나인
    시스템.
  20. 제 12 항에 있어서,
    상기 중요도의 레벨을 나타내는 상기 정보의 시각화를 생성하여 출력하도록 구성된 시각화 엔진을 더 포함하는
    시스템.
KR1020137015514A 2010-12-15 2010-12-15 코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템 KR101732764B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2010/079801 WO2012079230A1 (en) 2010-12-15 2010-12-15 Intelligent code differencing using code clone detection

Publications (2)

Publication Number Publication Date
KR20140001951A KR20140001951A (ko) 2014-01-07
KR101732764B1 true KR101732764B1 (ko) 2017-05-04

Family

ID=46243972

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137015514A KR101732764B1 (ko) 2010-12-15 2010-12-15 코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템

Country Status (6)

Country Link
EP (1) EP2652621A4 (ko)
JP (1) JP5775599B2 (ko)
KR (1) KR101732764B1 (ko)
CN (1) CN103262047B (ko)
CA (2) CA2820758A1 (ko)
WO (1) WO2012079230A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210084873A (ko) * 2019-12-30 2021-07-08 한양대학교 에리카산학협력단 어셈블리 코드에서 패치된 소스 코드 구성 방법 및 그 장치

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105446723B (zh) * 2014-09-02 2018-11-23 国际商业机器公司 用于标识源代码版本之间的语义区别的方法和装置
CN104407872B (zh) * 2014-12-04 2018-01-16 北京邮电大学 代码克隆的检测方法
KR101568224B1 (ko) 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
CN104572471B (zh) * 2015-01-28 2017-10-03 杭州电子科技大学 一种基于索引的Java软件代码克隆检测方法
WO2016130542A1 (en) 2015-02-10 2016-08-18 The Trustees Of Columbia University In The City Of New York Code relatives detection
JP2017156937A (ja) * 2016-03-01 2017-09-07 ヤンマー株式会社 端末装置およびソフトウェア書き換えプログラム
KR101780233B1 (ko) 2016-04-26 2017-09-21 고려대학교 산학협력단 소프트웨어의 코드 클론 탐지 장치 및 방법
US10191737B2 (en) 2016-06-29 2019-01-29 Accenture Global Solutions Limited Program code comparison and reporting
US10621195B2 (en) 2016-09-20 2020-04-14 Microsoft Technology Licensing, Llc Facilitating data transformations
US10706066B2 (en) 2016-10-17 2020-07-07 Microsoft Technology Licensing, Llc Extensible data transformations
US10776380B2 (en) 2016-10-21 2020-09-15 Microsoft Technology Licensing, Llc Efficient transformation program generation
US11170020B2 (en) 2016-11-04 2021-11-09 Microsoft Technology Licensing, Llc Collecting and annotating transformation tools for use in generating transformation programs
US11163788B2 (en) 2016-11-04 2021-11-02 Microsoft Technology Licensing, Llc Generating and ranking transformation programs
CN106919403B (zh) * 2017-03-16 2019-12-13 杭州鹿径科技有限公司 云环境下基于Java字节码的多粒度代码克隆检测方法
CN106951743A (zh) * 2017-03-22 2017-07-14 上海英慕软件科技有限公司 一种软件代码侵权检测方法
US10402311B2 (en) 2017-06-29 2019-09-03 Microsoft Technology Licensing, Llc Code review rebase diffing
SE1751167A1 (en) * 2017-09-20 2019-03-21 Empear Ab Identifying parts of a software code that are associated via alteration
CN109558314B (zh) * 2018-11-09 2021-07-27 国网四川省电力公司电力科学研究院 一种面向Java源代码克隆检测的方法
CN109828785B (zh) * 2019-01-23 2022-04-12 复旦大学 一种采用gpu加速的近似代码克隆检测方法
CN110737469B (zh) * 2019-09-29 2021-09-03 南京大学 一种功能粒度上基于语义信息的源代码相似度评估方法
US11048487B1 (en) * 2019-12-27 2021-06-29 The Mathworks, Inc. Syntactical change-resistant code generation
CN111240740B (zh) * 2020-01-23 2021-09-17 复旦大学 基于演化历史分析的代码克隆危害性评估方法
KR102318714B1 (ko) 2020-01-31 2021-10-28 고려대학교 산학협력단 바이너리 코드 클론 기반 소프트웨어 취약점 탐지를 위한 컴퓨터 프로그램
JP2022023523A (ja) 2020-07-27 2022-02-08 富士通株式会社 警告マッチングプログラム、警告マッチング方法及び警告マッチング装置
CN112148359B (zh) * 2020-10-10 2022-07-05 中国人民解放军国防科技大学 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质
CN112215013B (zh) * 2020-11-02 2022-04-19 天津大学 一种基于深度学习的克隆代码语义检测方法
CN116302089B (zh) * 2023-05-23 2023-08-18 华中科技大学 基于图片相似度的代码克隆检测方法、系统及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2006277127A (ja) * 2005-03-28 2006-10-12 Canon Inc 修正プログラムの比較方法
JP2008129661A (ja) * 2006-11-16 2008-06-05 Internatl Business Mach Corp <Ibm> 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム
JP2009199172A (ja) * 2008-02-19 2009-09-03 Hitachi Ltd 情報処理システム、プログラム中の類似箇所特定方法、及びプログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221265A (ja) * 1995-02-10 1996-08-30 Toshiba Corp ソフトウエア開発支援装置
DE102004010179A1 (de) * 2004-03-02 2005-10-06 Siemens Ag Verfahren und Datenverarbeitungsgerät zur Aktualisierung von Rechnerprogrammen per Datenübertragung
JP2008197982A (ja) * 2007-02-14 2008-08-28 Toshiba Corp ソースコード保護装置
JP2009176064A (ja) * 2008-01-24 2009-08-06 Fuji Electric Holdings Co Ltd ソフトウェアリファクタリング支援装置および方法
JP5208635B2 (ja) * 2008-09-12 2013-06-12 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2006277127A (ja) * 2005-03-28 2006-10-12 Canon Inc 修正プログラムの比較方法
JP2008129661A (ja) * 2006-11-16 2008-06-05 Internatl Business Mach Corp <Ibm> 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム
JP2009199172A (ja) * 2008-02-19 2009-09-03 Hitachi Ltd 情報処理システム、プログラム中の類似箇所特定方法、及びプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210084873A (ko) * 2019-12-30 2021-07-08 한양대학교 에리카산학협력단 어셈블리 코드에서 패치된 소스 코드 구성 방법 및 그 장치
KR102282705B1 (ko) * 2019-12-30 2021-07-29 한양대학교 에리카산학협력단 어셈블리 코드에서 패치된 소스 코드 구성 방법 및 그 장치

Also Published As

Publication number Publication date
CA2967251A1 (en) 2012-06-21
KR20140001951A (ko) 2014-01-07
EP2652621A4 (en) 2014-08-20
CN103262047B (zh) 2016-11-16
CA2967251C (en) 2020-04-07
JP2013546090A (ja) 2013-12-26
EP2652621A1 (en) 2013-10-23
WO2012079230A1 (en) 2012-06-21
CN103262047A (zh) 2013-08-21
CA2820758A1 (en) 2012-06-21
JP5775599B2 (ja) 2015-09-09

Similar Documents

Publication Publication Date Title
KR101732764B1 (ko) 코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템
US11734315B2 (en) Method and system for implementing efficient classification and exploration of data
Kim et al. Identifying and summarizing systematic code changes via rule inference
US11675575B2 (en) Checking source code validity at time of code update
KR20180032669A (ko) 콜경로 파인더
JP2014503910A (ja) コードクローンの通知およびアーキテクチャの変更の視覚化
CN102236549A (zh) 跨动态边界的运行时分析的可视化
CN101739335A (zh) 建议的应用评估系统
EP3198478A1 (en) Method and system for implementing efficient classification and exploration of data
JP2013257738A (ja) コンピューティングシステム、コンピューティングシステムの実行制御方法及び実行制御プログラム
Bavota et al. The market for open source: An intelligent virtual open source marketplace
US10073938B2 (en) Integrated circuit design verification
Schröder et al. An empirical investigation of command-line customization
Bandi et al. Clone swarm: A cloud based code-clone analysis tool
US11836469B2 (en) Dynamic code snippet promotion
Conforti et al. Analysis of business process variants in apromore
US11922230B2 (en) Natural language processing of API specifications for automatic artifact generation
Silva et al. A mapping study on mutation testing for mobile applications
Abdelfattah et al. Detecting semantic clones in microservices using components
US11947966B2 (en) Identifying computer instructions enclosed by macros and conflicting macros at build time
Kumar et al. Code clone detection and analysis using software metrics and neural network-a literature review
Tukaram Design and development of software tool for code clone search, detection, and analysis
Imtiaz et al. Predicting vulnerability for requirements
Garg et al. Insight to model clone’s differentiation, classification, and visualization
Peleg et al. Symbolic automata for representing big code

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant