KR102589804B1 - 코드 변경들의 자동화된 식별 - Google Patents

코드 변경들의 자동화된 식별 Download PDF

Info

Publication number
KR102589804B1
KR102589804B1 KR1020217036761A KR20217036761A KR102589804B1 KR 102589804 B1 KR102589804 B1 KR 102589804B1 KR 1020217036761 A KR1020217036761 A KR 1020217036761A KR 20217036761 A KR20217036761 A KR 20217036761A KR 102589804 B1 KR102589804 B1 KR 102589804B1
Authority
KR
South Korea
Prior art keywords
source code
code snippet
change
version
latent space
Prior art date
Application number
KR1020217036761A
Other languages
English (en)
Other versions
KR20210148346A (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 KR20210148346A publication Critical patent/KR20210148346A/ko
Application granted granted Critical
Publication of KR102589804B1 publication Critical patent/KR102589804B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

다른 유사한 레거시 코드 베이스들에 대해 이루어진 이전 업데이트들로부터 획득된 지식을 활용함으로써 레거시 소스 코드 베이스에 대한 변경들을 자동으로 식별, 권장 및/또는 시행하기 위한 구현들이 본 명세서에서 설명된다. 일부 구현들에서는, 제1 버전 소스 코드 스니펫과 연관된 데이터가 잠재 공간에 새로운 소스 코드 임베딩을 생성하기 위해 머신 러닝 모델 전반에 걸친 입력으로서 적용될 수 있다. 레퍼런스 임베딩(들)은 잠재 공간의 새로운 소스 코드 임베딩으로부터의 그들의 거리(들)에 기초하여 잠재 공간에서 식별될 수 있다. 레퍼런스 임베딩(들)은 이전 코드 베이스 업데이트(들) 동안 이루어진 개별 변경들과 연관될 수 있다. 식별된 하나 이상의 레퍼런스 임베딩에 기초하여, 제2 버전 소스 코드 스니펫을 생성하기 위해 제1 버전 소스 코드 스니펫에 대해 이루어질 변경(들)이 식별, 권장 및/또는 시행될 수 있다.

Description

코드 변경들의 자동화된 식별
소프트웨어 시스템은 통상적으로 프로그래밍 언어들(예를 들어, Java, Python, C++), 프레임워크들, 공유 라이브러리들, 런-타임 환경들 등과 같은 많은 독립 소프트웨어 기술들에 의존하고/하거나 이들을 통합하는 소스 코드 "베이스"로 구축된다. 각각의 소프트웨어 기술은 고유한 속도로 진화할 수 있으며, 고유한 브랜치들 및/또는 버전들을 포함할 수 있다. 각각의 소프트웨어 기술은 또한 다양한 다른 기술들에 의존할 수 있다. 따라서, 대규모 소프트웨어 시스템의 소스 코드 베이스가 복잡한 종속성 그래프로 표현될 수 있다.
소프트웨어 기술들을 최신 상태로 유지하는 이점들이 있다. 더 새로운 버전들은 새로운 피처(feature)들을 포함할 뿐만 아니라, 보안 허점들 및/또는 버그들을 수정하는 중요한 개선 사항들을 포함할 수 있다. 불행히도, 특히, 특정 소프트웨어 시스템의 코드 베이스의 일부로서 이러한 소프트웨어 기술들을 최신 상태로 유지하는 데 때때로 필요한 리소스들의 양은 매우 클 수 있다. 결과적으로, 많은 소프트웨어 시스템들은 가능한 한 자주 업데이트되지 않는다. 구식 소프트웨어 기술들은 버그들, 보안 취약성들, 지속적인 지원 부족 등 등과 같은 수많은 문제들로 이어질 수 있다.
다른 유사한 레거시 코드 베이스들에 대해 이전에 이루어진 업데이트들에 기초하여 레거시 소스 코드 베이스에 대한 변경들을 자동으로 식별, 권장하고/하거나 자동으로 시행하기 위한 기술들이 본 명세서에서 설명된다. 직관적으로, 이루어진 변경들을 식별하기 위해 복잡한 소프트웨어 시스템 코드 베이스들의 다수의 이전 "마이그레이션(migration)들" 또는 대량 업데이트들이 분석될 수 있다. 일부 구현들에서, 이러한 변경들에 대한 지식은 머신 러닝(machine learning) 및 잠재 공간 임베딩(latent space embedding)들을 사용하여 보존될 수 있다. 이전에 업데이트된 코드 베이스들 중 하나 이상과 유사한 새로운 소프트웨어 시스템 코드 베이스가 업데이트될 때, 이러한 이전에 구현된 변경들은 머신 러닝 및 이전에 언급된 잠재 공간 임베딩들을 사용하여 식별될 수 있다. 이러한 변경들이 식별되면, 자동으로 식별, 권장 및/또는 시행될 수 있다. 이러한 변경들을 자동으로 식별, 권장 및/또는 시행함으로써, 종속성 그래프 전반에 걸쳐 관련 소프트웨어 기술들에 대한 변경들을 적절하게 반영하기 위해 수많은 소스 코드 스니펫(source code snippet)들을 수동으로 변경하는 시간 및 비용이 감소될 수도 있고 또는 심지어 제거될 수도 있다.
일부 구현들에서, 그래프 신경망(graph neural network)("GNN") 또는 시퀀스-투-시퀀스 모델(sequence-to-sequence model)(예를 들어, 인코더-디코더 네트워크 등)과 같은 하나 이상의 머신 러닝 모델이 소스 코드 스니펫들에 기초하여 임베딩들을 생성하기 위해 트레이닝될 수 있다. 이러한 임베딩들은 소스 코드 스니펫들의 의미론적(semantic) 및/또는 구문론적(syntactic) 속성들뿐만 아니라, 해당 스니펫들이 전개되는 컨텍스트를 캡처할 수 있다. 일부 구현들에서, 이러한 임베딩들은 소스 코드 베이스들의 이전 마이그레이션들 동안 소스 코드 스니펫들에 대해 이루어진 이전 변경들을 표현하는 "레퍼런스(reference)" 임베딩들의 형태를 취할 수 있다. 달리 말하면, 이러한 레퍼런스 임베딩들은 이전 코드 베이스 변경들을 잠재 공간에 매핑하거나 투영한다. 그런 다음, 이러한 레퍼런스 임베딩들은 새로운 소스 코드 베이스의 새로운 마이그레이션에 대한 변경 후보들을 식별하는 데 사용될 수 있다.
본 개시내용의 선택된 양태들로 구성되는 머신 러닝 모델이 트레이닝될 수 있는 방법에 대한 비제한적인 예로서, 일부 구현들에서, 제1 버전 소스 코드 스니펫(예를 들어, 버전 1.1.1)이 추상 구문 트리(abstract syntax tree)("AST")와 같은 데이터 구조를 생성하는 데 사용될 수 있다. AST는 변수들, 객체들, 함수들 등과 같이 제1 버전 소스 코드 스니펫에서 발생하는 구성들뿐만 아니라, 이러한 컴포넌트들 간의 구문론적 관계들을 표현할 수 있다. 제1 버전 소스 코드 스니펫의 다음 버전 또는 "반복(iteration)"일 수 있는 제2 버전 소스 코드 스니펫(예를 들어, 1.1.2)에 대해 다른 AST가 생성될 수 있다. 2개의 AST는 소스 코드 스니펫을 제1 버전으로부터 제2 버전으로 업데이트하기 위해 이루어진 하나 이상의 변경을 표현하는 하나 이상의 변경 그래프와 같은 하나 이상의 데이터 구조를 생성하는 데 사용될 수 있다. 일부 구현들에서, 소스 코드 스니펫에 대한 각각의 변경에 대해 제1 버전으로부터 제2 버전으로의 진화 동안 하나의 변경 그래프가 생성될 수 있다.
변경 그래프(들)가 생성되면, 이들은 머신 러닝 모델을 트레이닝하기 위한 트레이닝 예들로서 사용될 수 있다. 일부 구현들에서, 변경 그래프(들)는 대응하는 레퍼런스 임베딩들을 생성하기 위해 머신 러닝(예를 들어, GNN 또는 시퀀스-투-시퀀스) 모델을 사용하여 프로세싱될 수 있다. 일부 구현들에서, 변경 그래프(들)는 잠재 공간의 개개의 영역들에 변경들을 매핑하는 데 사용되는 변경 타입들과 같은 정보로 레이블링될 수 있다. 예를 들어, "변수 이름 변경(change variable name)"이라는 레이블이 하나의 변경에 적용될 수 있고, "API 서명 변경(change API signature)"이라는 다른 레이블이 다른 변경에 적용될 수 있고, 기타 등등 마찬가지이다.
머신 러닝 모델 전반에 걸쳐 더 많은 변경 그래프들이 입력됨에 따라, 이러한 레이블들은 비교 가능한 변경들이 잠재 공간에서 적절하게 함께 클러스터링되고 있는지 여부를 결정하는 손실 함수(loss function)의 일부로서 사용될 수 있다. 특정 변경 타입(예를 들어, "변수 이름 변경")의 변경으로부터 생성된 임베딩이 동일한 변경 타입의 다른 임베딩들과 충분히 근접하지 않은 경우(예를 들어, 다른 변경 타입들의 임베딩들과 더 가까운 경우), 머신 러닝 모델은, 예를 들어, 경사 하강법(gradient descent) 및 역전파(back propagation)와 같은 기술들을 사용하여 트레이닝될 수 있다. 이 트레이닝 프로세스는 머신 러닝 모델이 변경 그래프들, 더 일반적으로는, 소스 코드 스니펫들을 표현하는 데이터 구조들을 구문적으로/의미적으로 유사한 다른 데이터 구조들 근처의 잠재 공간에 있는 영역들에 정확하게 매핑할 수 있을 때까지 수많은 트레이닝 예들에 걸쳐 반복될 수 있다.
머신 러닝 모델이 트레이닝되면, 이것은 업데이트될 소프트웨어 시스템 코드 베이스의 업데이트 동안 코드 베이스에서 소스 코드의 다양한 스니펫들에 대한 변경들을 식별하고, 일부 경우들에서는, 이들을 자동으로 시행하는 데 사용될 수 있다. 일부 구현들에서, 업데이트될 코드 베이스의 제1 버전 코드 스니펫과 연관된 데이터는 임베딩을 생성하기 위해 트레이닝된 머신 러닝 모델 전반에 걸친 입력으로서 적용될 수 있다. 트레이닝 동안, 제1 버전 소스 코드 스니펫과 연관된 데이터는 AST와 같은 데이터 구조일 수 있다. 그러나, 트레이닝 동안과 달리, 제1 버전 소스 코드 스니펫은 아직 다음 버전으로 업데이트되지 않았다. 따라서, 제2 버전 소스 코드 스니펫과 변경 그래프가 없다.
그럼에도 불구하고, 제1 버전 소스 코드 스니펫으로부터 생성된 AST 또는 다른 데이터 구조가 머신 러닝(예를 들어, GNN 또는 시퀀스-투-시퀀스) 모델을 사용하여 프로세싱될 때, 결과적인 소스 코드 임베딩은 이전 코드 베이스 마이그레이션들 동안 유사한(또는 심지어 동일한) 소스 코드 스니펫들에 대해 이루어진 변경(들)을 표현하는 잠재 공간의 레퍼런스 임베딩(들)에 근접할 수 있다. 즉, 제1 버전 소스 코드 스니펫은 과거에 유사한 환경들에서 유사한 소스 코드에 대해 이루어진 변경들을 식별하기 위해 잠재 공간에 매핑된다. 그런 다음, 이러한 변경(들)은 제1 버전 소스 코드 스니펫을 제2 버전 소스 코드 스니펫으로 업데이트하기 위해 권장되고/되거나 자동으로 시행될 수 있다.
일부 구현들에서, 소스 코드 임베딩과 과거 소스 코드 변경(들)을 표현하는 레퍼런스 임베딩(들) 간의 잠재 공간의 거리들은 진행 방법, 예를 들어, 변경을 권장할지 여부, 자동으로 변경을 시행할지 여부, 또는 심지어 변경을 권장하지 않을지 여부를 결정하는 데 사용될 수 있다. 잠재 공간의 이러한 공간 관계들(유사성들에 대응할 수 있음)은 내적(dot product), 코사인 유사도(cosine similarity) 등을 사용하는 것과 같은 다양한 방식들로 결정될 수 있다. 예를 들어, 레퍼런스 임베딩이 소스 코드 임베딩의 잠재 공간의 제1 반경 내에 있는 경우, 임베딩에 의해 표현되는 변경은, 예를 들어, 사용자 컨펌 없이 자동으로 시행될 수 있다. 레퍼런스 임베딩이 소스 코드 임베딩의 제1 반경 밖에 있지만 제2 반경 내에 있는 경우, 임베딩에 의해 표현되는 변경은 사용자에게 권장될 수 있지만, 사용자 컨펌을 필요로 할 수 있다. 기타 등등 마찬가지이다. 일부 구현들에서, 소스 코드 임베딩으로부터의 거리에 기초하여 후보 변경에 스코어가 할당될 수 있고, 해당 스코어는 사용자에게, 예를 들어, 백분율 매치 또는 신뢰도 스코어로서 제시될 수 있으며, 이는 사용자가 변경들이 시행되어야 하는지 여부를 결정하는 데 도움이 된다.
소스 코드 임베딩이 다수의 레퍼런스 임베딩들에 유사하게 근접한 일부 구현들에서, 다수의 임베딩들에 의해 표현되는 변경들은 사용자(예를 들어, 소프트웨어 엔지니어)에 대한 후보 변경들로서 제시될 수 있다. 다수의 변경들이 서로 충돌하지 않는 일부 경우들에서, 다수의 변경들은 간단히 자동으로 구현될 수 있다.
변경 타입이 트레이닝 데이터에 대한 잠재적인 레이블로서 이전에 언급되었지만, 이것은 제한을 의미하지 않는다. 다른 어트리뷰트(attribute)들을 나타내는 레이블들이 변경 타입들에 추가하여 또는 변경 타입들 대신에 트레이닝 예들에 할당될 수 있다. 예를 들어, 일부 구현들에서, 변경 타입에 추가하여 또는 그 대신에, 변경 그래프들(또는 소스 코드의 버전들 간의 변경들을 표현하는 다른 데이터 구조들)은 "좋은(good)" 변경들, "나쁜(bad)" 변경들, "불필요한(unnecessary)" 변경들, "중복(duplicative)" 변경들, 선호하는 코딩 스타일과 매치됨 또는 매치되지 않음 등으로서 레이블링될 수 있다. 이러한 레이블들은 잠재 공간을 추가로 매핑하기 위해 변경 타입 또는 다른 타입들의 레이블들에 추가하여 또는 그 대신에 사용될 수 있다. 나중에, 새로운 소스 코드 임베딩이 생성되고 "나쁜"으로 레이블링된 레퍼런스 임베딩에 근접한 것으로 밝혀질 때, 레퍼런스 임베딩에 의해 표현되는 변경은 구현되거나 권장되지 않을 수 있다.
일부 구현들에서, 하나 이상의 프로세서에 의해 구현되는 방법으로서, 잠재 공간(latent space)에 새로운 소스 코드 임베딩을 생성하기 위해 하나 이상의 머신 러닝 모델(machine learning model) 전반에 걸친 입력으로서 제1 버전 소스 코드 스니펫(source code snippet)과 연관된 데이터를 적용하는 단계; 잠재 공간의 하나 이상의 레퍼런스 임베딩(reference embedding)을 잠재 공간의 새로운 소스 코드 임베딩과 하나 이상의 레퍼런스 임베딩 간의 하나 이상의 거리에 기초하여 식별하는 단계 - 하나 이상의 레퍼런스 임베딩 각각은 머신 러닝 모델들 중 하나 이상의 것 전반에 걸친 입력으로서, 레퍼런스 제2 버전 소스 코드 스니펫을 산출하기 위해 레퍼런스 제1 버전 소스 코드 스니펫에 대해 이루어진 변경을 나타내는 데이터를 적용함으로써 생성됨 -; 및 식별된 하나 이상의 레퍼런스 임베딩에 기초하여, 제2 버전 소스 코드 스니펫을 생성하기 위해 제1 버전 소스 코드 스니펫에 대해 이루어질 하나 이상의 변경을 식별하는 단계를 포함하는 방법이 제공된다.
다양한 구현들에서, 제1 버전 소스 코드 스니펫과 연관된 데이터는 제1 버전 소스 코드 스니펫으로부터 생성된 추상 구문 트리(abstract syntax tree)("AST")를 포함한다. 다양한 구현들에서, 머신 러닝 모델들 중 하나 이상은 그래프 신경망(graph neural network)("GNN")을 포함한다. 다양한 구현들에서, 하나 이상의 변경은 하나 이상의 레퍼런스 임베딩과 연관된 하나 이상의 룩업 테이블에 기초하여 식별된다.
다양한 구현들에서, 방법은 하나 이상의 컴퓨팅 디바이스 상에서 렌더링될 출력을 생성하는 단계를 추가로 포함하고, 출력은, 렌더링될 때, 하나 이상의 변경이 제1 버전 소스 코드 스니펫에 대해 고려될 것을 권장한다. 다양한 구현들에서, 방법은 제1 버전 소스 코드 스니펫에서 하나 이상의 변경을 자동으로 시행하는 단계를 추가로 포함한다. 다양한 구현들에서, 제1 버전 소스 코드 스니펫은 소스 코드 파일을 포함한다.
다른 양태에서, 하나 이상의 프로세서를 사용하여 구현되는 방법은 제1 버전 소스 코드 스니펫과 제2 버전 소스 코드 스니펫 간의 변경을 나타내는 데이터를 획득하는 단계; 변경 타입으로 변경을 나타내는 데이터를 레이블링하는 단계; 잠재 공간에 새로운 임베딩을 생성하기 위해 머신 러닝 모델 전반에 걸친 입력으로서 변경을 나타내는 데이터를 적용하는 단계; 동일한 변경 타입과 연관된 잠재 공간의 이전 임베딩과 새로운 임베딩 간의 잠재 공간의 거리를 결정하는 단계; 및 거리에 적어도 부분적으로 기초하여 머신 러닝 모델을 트레이닝하는 단계를 포함할 수 있다.
또한, 일부 구현들은 하나 이상의 컴퓨팅 디바이스의 하나 이상의 프로세서를 포함하며, 하나 이상의 프로세서는 연관된 메모리에 저장되는 명령어들을 실행하도록 동작 가능하고, 명령어들은 전술된 방법들 중 임의의 것의 성능을 야기하도록 구성된다. 일부 구현들은 또한 전술된 방법들 중 임의의 것을 수행하기 위해 하나 이상의 프로세서에 의해 실행 가능한 컴퓨터 명령어들을 저장하는 하나 이상의 비일시적 컴퓨터 판독 가능 저장 매체를 포함한다.
전술된 개념들의 모든 조합들 및 본 명세서에서 더 상세하게 설명되는 추가 개념들은 본 명세서에서 개시되는 대상의 일부인 것으로 고려된다는 것이 이해되어야 한다. 예를 들어, 본 개시내용의 끝에 나타나는 청구된 대상의 모든 조합들은 본 명세서에서 개시되는 대상의 일부인 것으로 고려된다.
도 1은 다양한 구현들에 따라 본 개시내용의 선택된 양태들이 구현될 수 있는 예시적인 환경을 개략적으로 도시한다.
도 2는 예시적인 프로세스 흐름의 블록도이다.
도 3은 추론 페이즈 동안 본 명세서에서 설명되는 머신 러닝 모델들을 사용하여 잠재 공간 임베딩들이 생성될 수 있는 방법의 일례를 개략적으로 보여다.
도 4는 트레이닝 페이즈 동안 본 명세서에서 설명되는 머신 러닝 모델들을 사용하여 잠재 공간 임베딩들이 생성될 수 있는 방법의 일례를 개략적으로 보여준다.
도 5는 본 명세서에서 개시되는 구현들에 따른 예시적인 방법을 예시하는 흐름도를 도시한다.
도 6은 본 명세서에서 개시되는 구현들에 따른 다른 예시적인 방법을 예시하는 흐름도를 도시한다.
도 7은 컴퓨팅 디바이스의 예시적인 아키텍처를 예시한다.
도 1은 다양한 구현들에 따라 본 개시내용의 선택된 양태들이 구현될 수 있는 예시적인 환경을 개략적으로 도시한다. 도 1 또는 도면들의 다른 곳에 도시된 임의의 컴퓨팅 디바이스들은 메모리에 저장되는 컴퓨터 판독 가능 명령어들을 실행하는 하나 이상의 마이크로프로세서(예를 들어, 중앙 프로세싱 유닛(central processing unit)들 또는 "CPU들", 그래픽 프로세싱 유닛(graphical processing unit)들 또는 "GPU들")와 같은 로직, 또는 애플리케이션 특정 집적 회로(application-specific integrated circuit)들("ASIC"), 필드 프로그래밍 가능 게이트 어레이(field-programmable gate array)들("FPGA") 등과 같은 다른 타입들의 로직을 포함할 수 있다. 코드 지식 시스템(102)과 같은 도 1에 도시된 시스템들 중 일부는 때때로 "클라우드 인프라스트럭처"로 지칭되는 것을 형성하는 하나 이상의 서버 컴퓨팅 디바이스를 사용하여 구현될 수 있지만, 이것이 필수는 아니다.
코드 지식 시스템(102)은 하나 이상의 클라이언트(1101-P)가 하나 이상의 대응하는 레거시 코드 베이스(1121-P)를 업데이트하는 것을 돕기 위해 본 개시내용의 선택된 양태들을 수행하도록 구성될 수 있다. 각각의 클라이언트(110)는, 예를 들어, 기업(예를 들어, 금융 기관, 은행 등), 비영리 단체, 클럽, 대학, 정부 기관 또는 하나 이상의 소프트웨어 시스템을 운영하는 임의의 다른 조직과 같은 엔티티 또는 조직일 수 있다. 예를 들어, 은행은 예금들 및 인출들의 추적, 대출들의 추적, 투자들의 추적 등을 포함하여 그것의 통제 하에서 돈을 관리하는 하나 이상의 소프트웨어 시스템을 운영할 수 있다. 항공사는 항공편 예약들의 예약/취소/재예약, 항공편의 지연들 또는 취소 관리, 승객들, 항공 승무원들 및 지상 승무원들과 같은 항공편들과 연관된 인력의 관리, 공항 게이트들의 관리 등을 위해 하나 이상의 소프트웨어 시스템을 운영할 수 있다.
이들 엔티티들의 소프트웨어 시스템들 중 다수는 미션 크리티컬(mission critical)할 수 있다. 최소한의 양의 다운타임이나 오작동이라도 엔티티와, 일부 경우들에서는, 그것의 고객들의 안전 둘 다에 큰 지장을 주거나 심지어 치명적일 수 있다. 또한, 주어진 레거시 코드 베이스(112)가 복잡한 종속성 그래프와 함께 비교적 클 수 있다. 결과적으로, 레거시 코드 베이스(112)를 업데이트하기 위해 소프트웨어 시스템을 실행하는 엔티티(110) 측에서 종종 주저하게 된다.
코드 지식 시스템(102)은 엔티티의 소프트웨어 시스템의 기초가 되는 레거시 코드 베이스를 업데이트하는 프로세스를 간소화하기 위해 과거 코드 베이스 업데이트들 또는 "마이그레이션들"에 대한 지식을 활용하도록 구성될 수 있다. 예를 들어, 코드 지식 시스템(102)은 마이그레이션의 일부로서 소스 코드의 다양한 부분들에 대한 특정 변경들을 권장하도록 구성될 수 있다. 일부 구현들에서, 코드 지식 시스템(102)은, 예를 들어, 제안된 소스 코드 변경에 충분한 확신이 있는 경우, 소스 코드 변경들을 심지어 자동으로 구현할 수도 있다.
다양한 구현들에서, 코드 지식 시스템(102)은 하나 이상의 트레이닝된 머신 러닝 모델(1061-N)을 나타내는 데이터를 포함하는 머신 러닝(도 1의 "ML") 데이터베이스(104)를 포함할 수 있다. 이러한 트레이닝된 머신 러닝 모델들(1061-N)은 그래프 신경망("GNN"), 순환 신경망(recurrent neural network)(예를 들어, 장단기 메모리(long short-term memory) 또는 "LSTM", 게이트 순환 유닛(gate recurrent unit)들 또는 "GRU" 등)의 다양한 플레이버(flavor)들 또는 인코더-디코더와 같은 시퀀스-투-시퀀스 모델, 및 본 개시내용의 선택된 양태들을 용이하게 하기 위해 적용될 수 있는 임의의 다른 타입의 머신 러닝 모델을 포함하되, 이에 제한되지 않으며 아래에서 더 상세하게 설명될 다양한 형태들을 취할 수 있다.
일부 구현들에서, 코드 지식 시스템(102)은 또한 하나 이상의 최신 코드 베이스(up-to-date code base)(1081-M)에 대한 액세스를 가질 수 있다. 일부 구현들에서, 이러한 최신 코드 베이스들(1081-M)은, 예를 들어, 머신 러닝 모델들(1061-N) 중 하나 이상을 트레이닝하는 데 사용될 수 있다. 일부 이러한 구현들에서는, 아래에서 더 상세히 설명되는 바와 같이, 최신 코드 베이스들(1081-M)은 최신 코드 베이스들(1081-M)을 산출하기 위해 업데이트된 비-최신 코드 베이스(non-up-to-date code base)들(도시 생략)과 같은 머신 러닝 모델들(1061-N)을 트레이닝하기 위해 다른 데이터와 결합하여 사용될 수 있다. 본 명세서에서 사용된 "최신(up-to-date)"은 코드 베이스의 모든 소스 코드가 절대 최신 버전이어야 할 것을 요구하는 것으로 의미되지는 않는다. 오히려, "최신"은 코드 베이스의 원하는 상태, 원하는 상태가 가장 최근 버전 코드 베이스인지, "안정적인" 것으로 간주되는 코드 베이스의 가장 최근 버전인지, 일부 다른 기준을 충족(예를 들어, 특정 라이브러리에 따라, 일부 보안 프로토콜 또는 표준을 충족)하는 코드 베이스의 가장 최근 버전인지 등을 지칭할 수 있다.
다양한 구현들에서, 자신의 레거시 코드 베이스(112)를 업데이트하고자 하는 클라이언트(110)는 코드 지식 시스템(102)을 호스팅하는 엔티티(도 1에서는, 도시 생략)와의 관계를 확립할 수 있다. 그 후, 일부 구현들에서, 호스트 지식 시스템(102)은, 예를 들어, 인터넷과 같은 하나 이상의 네트워크(114)를 통해 클라이언트의 레거시 소스 코드 베이스(112)의 전부 또는 일부들을 획득하고, 권장된 변경들 또는 심지어 업데이트된 소스 코드를 나타내는 데이터를 클라이언트(110)에 리턴할 수 있다. 다른 구현들에서, 예를 들어, 업데이트되는 클라이언트의 레거시 코드 베이스(112)가 방대한 경우, 코드 지식 시스템(102)을 호스팅하는 엔티티의 하나 이상의 대표자는 업데이트들을 수행하고/하거나 권장들을 하기 위해 클라이언트의 사이트(들)로 이동할 수 있다.
도 2는, 머신 러닝 모델들(1061-N)의 트레이닝 동안, 및/또는 해당 모델들("추론")을 사용하여 레거시 코드 베이스(112)에 어떤 변경들이 이루어져야 하는지/이루어질 수 있는지를 예측하는 동안, 코드 지식 시스템(102)에 의해 전체적으로 또는 부분적으로 구현될 수 있는 예시적인 프로세스 흐름(들)의 블록도이다. 트레이닝이 먼저 논의되고, 추론이 뒤따를 것이다. 달리 표시되지 않는 한, 도 2의 다양한 컴포넌트들은 하드웨어 및 컴퓨터 판독 가능 명령어들의 임의의 조합을 사용하여 구현될 수 있다.
좌측 상단에서 시작하면, 코드 베이스(216)는 하나 이상의 타입의 하나 이상의 소스 코드 스니펫(2181-Q)을 포함할 수 있다. 예를 들어, 일부 경우들에서, 제1 소스 코드 스니펫(2181)은 Python으로 작성될 수 있고, 다른 소스 코드 스니펫(2182)은 Java로 작성될 수 있고, 다른 소스 코드 스니펫(2183)은 C/C++로 작성될 수 있고, 기타 등등 마찬가지이다. 추가적으로 또는 대안적으로, 엘리먼트들(2181-Q) 각각은 특정 라이브러리, 엔티티, 및/또는 애플리케이션 프로그래밍 인터페이스(application programming interface)("API")로부터의 하나 이상의 소스 코드 스니펫을 표현할 수 있다. 각각의 소스 코드 스니펫(218)은 상황들에 따라 소스 코드 파일의 서브세트 또는 전체 소스 코드 파일을 포함할 수 있다. 예를 들어, 특히 대규모 소스 코드 파일은 더 작은 스니펫들(예를 들어, 함수들, 객체들 등으로 기술됨)로 분할될 수 있는 반면, 비교적 짧은 소스 코드 파일은 프로세싱 내내 그대로 유지될 수 있다.
코드 베이스(112)의 소스 코드 스니펫들(2181-Q) 중 적어도 일부는 추가 프로세싱을 받기 위해 그래프 또는 트리 형태와 같은 대안적인 형태로 변환될 수 있다. 예를 들어, 도 2에서, 소스 코드 스니펫들(2181-Q)은 추상 구문 트리들("AST")(2221- R)을 생성하도록 프로세싱된다. Q 및 R은 둘 다, 서로 동일할 수도 있고 동일하지 않을 수도 있는 양의 정수들일 수 있다. 이전에 언급된 바와 같이, AST는 변수들, 객체들, 함수들 등과 같이 주어진 소스 코드 스니펫에서 발생하는 구성들뿐만 아니라, 이러한 컴포넌트들 간의 구문론적 관계를 표현할 수 있다. 일부 구현들에서, 트레이닝 동안, AST들(220)은 소스 코드 스니펫의 제1 버전(예를 들어, "업데이트될" 버전)에 대한 제1 AST, 소스 코드 스니펫의 제2 버전(예를 들어, "타겟 버전")에 대한 다른 AST, 및 제1 소스 코드 스니펫과 제2 소스 코드 스니펫 간의 차이점(들)을 전달하는 제3 AST를 포함할 수 있다.
하드웨어 및 머신 판독 가능 명령어들의 임의의 조합을 사용하여 구현될 수 있는 데이터세트 빌더(dataset builder)(224)가 AST들(2221-R)을 입력으로서 수신하고, 다운스트림 프로세싱에서 다양한 목적들로 사용될 수 있는 다양한 상이한 타입들의 데이터를 출력으로서 생성할 수 있다. 예를 들어, 도 2에서, 데이터세트 빌더(224)는 "델타 데이터"(226)로서 변경 그래프들(228), AST-AST 데이터(230) 및 변경 레이블들(232)을 생성한다. 변경 그래프들(228) - 이는 위에서 언급된 바와 같이 자체적으로 AST들의 형태를 취할 수 있음 - 은 업데이트될/타겟 소스 코드 스니펫들의 개개의 쌍들로부터 생성된 하나 이상의 쌍의 AST들로부터 생성된 하나 이상의 변경 그래프를 포함할 수 있다. 달리 말하면, 각각의 소스 코드 스니펫(218)은 AST(222)에 매핑될 수 있다. 하나는 소스 코드 스니펫의 제1 버전을 표현하고 다른 하나는 소스 코드 스니펫의 제2 버전을 표현하는 AST들의 쌍들은 변경 그래프(228)에 매핑될 수 있다. 따라서, 각각의 변경 그래프(228)는 소스 코드 스니펫을 제1(업데이트될) 버전으로부터 제2(타겟) 버전으로 업데이트하기 위해 이루어진 하나 이상의 변경을 표현한다. 일부 구현들에서, 소스 코드 스니펫에 대한 각각의 변경에 대해 제1 버전으로부터 제2 버전으로의 진화 동안 별개의 변경 그래프가 생성될 수 있다.
변경 타입 레이블들(232)은 트레이닝 목적들을 위해 변경 그래프들(228)에 할당되는 레이블들을 포함할 수 있다. 각각의 레이블은 고려 중인 변경 그래프의 기초가 되는 소스 코드 스니펫에 대해 이루어진 변경의 타입을 기술할 수 있다. 예를 들어, 변경 그래프들(228) 각각은 변경 타입 레이블들(232)의 개개의 변경 타입으로 레이블링될 수 있다. 개개의 변경 타입들은 변경 그래프들(228)에 의해 전달된 변경들을 잠재 공간의 개개의 영역에 매핑하는 데 사용될 수 있다. 예를 들어, "변수 이름 변경"이라는 레이블이 소스 코드 스니펫의 하나의 변경에 적용될 수 있고, "함수 이름 변경(change function name)"이라는 다른 레이블이 다른 소스 코드 스니펫의 다른 변경에 적용될 수 있고, 기타 등등 마찬가지이다.
AST2VEC 컴포넌트(234)가 델타 데이터(226)로부터 하나 이상의 피처 벡터(feature vector), 즉, "잠재 공간" 임베딩들(244)을 생성하도록 구성될 수 있다. 예를 들어, AST2VEC 컴포넌트(234)는 개개의 잠재 공간 임베딩들(244)을 생성하기 위해 하나 이상의 머신 러닝 모델 전반에 걸친 입력으로서 변경 그래프들(228)을 적용할 수 있다. 머신 러닝 모델들은 GNN(252), 시퀀스-투-시퀀스 모델(254)(예를 들어, 인코더-디코더) 등과 같이 이전에 설명된 다양한 형태들을 취할 수 있다.
트레이닝 동안, 트레이닝 모듈(250)은 소스 코드 스니펫들(2181-Q)에 직접적으로 또는 간접적으로 기초하여 임베딩들(244)을 생성하기 위해 GNN(252) 또는 시퀀스-투-시퀀스 모델(254)과 같은 머신 러닝 모델을 트레이닝할 수 있다. 이러한 임베딩들(244)은 소스 코드 스니펫들(2181-Q)의 의미론적 및/또는 구문론적 속성들뿐만 아니라, 이러한 스니펫들이 전개되는 컨텍스트를 캡처할 수 있다. 일부 구현들에서, 다수의 변경 그래프들(228)이 머신 러닝 모델(특히, GNN(252)) 전반에 걸쳐 입력될 때, 그들에 할당된 변경 타입 레이블들(232)은 비교 가능한 변경들이 잠재 공간에서 적절하게 함께 클러스터링되고 있는지 여부를 결정하는 손실 함수의 일부로서 사용될 수 있다. 특정 변경 타입(예를 들어, "변수 이름 변경")의 변경으로부터 생성된 임베딩이 동일한 변경 타입의 다른 임베딩들과 충분히 근접하지 않은 경우(예를 들어, 다른 변경 타입들의 임베딩들과 더 가까운 경우), GNN(252)은, 예를 들어, 경사 하강법 및 역전파와 같은 기술들을 사용하여 트레이닝될 수 있다. 이 트레이닝 프로세스는 GNN(252)이 변경 그래프들, 더 일반적으로는, 소스 코드 스니펫들을 표현하는 데이터 구조들을 구문적으로/의미적으로 유사한 다른 데이터 구조들 근처의 잠재 공간에 있는 영역들에 정확하게 매핑할 수 있을 때까지 수많은 트레이닝 예들에 걸쳐 반복될 수 있다.
특히, GNN(252)의 경우, 리콜(recall)이 소스 코드 스니펫들로부터 생성되고 AST들의 형태로 변경 그래프들을 포함할 수 있는 델타 데이터(226)의 구성 요소 AST들은 다음과 같이 동작될 수 있다. 피처들(트레이닝 동안 수동으로 선택되거나 학습될 수 있음)이 각각의 노드에 대한 피처 벡터를 생성하기 위해 AST의 각각의 노드에 대해 추출될 수 있다. AST의 노드들은 변수, 객체 또는 다른 프로그래밍 구성을 표현할 수 있음을 기억하도록 한다. 따라서, 노드들에 대해 생성된 피처 벡터들의 피처들은 변수 타입(예를 들어, int, float, string, 포인터 등), 이름, 오퍼랜드들로서의 변수에 작용하는 오퍼레이터(들) 등과 같은 피처들을 포함할 수 있다. 임의의 주어진 시점에서 노드에 대한 피처 벡터는 해당 노드의 "상태"로 간주될 수 있다.
한편, AST의 각각의 에지에는 머신 러닝 모델, 예를 들어, 특정 타입의 머신 러닝 모델 또는 특정 데이터에 대해 트레이닝되는 특정 머신 러닝 모델이 할당될 수 있다. 예를 들어, "if" 문들을 표현하는 에지들에는 각각 제1 신경망이 할당될 수 있다. "else" 문들을 표현하는 에지들에도 각각 제1 신경망이 할당될 수 있다. 조건들을 표현하는 에지들에는 각각 제2 신경망이 할당될 수 있다. 기타 등등 마찬가지이다.
그 후, 일련의 시간 단계들의 각각의 시간 단계에 대해, 각각의 노드의 피처 벡터들 또는 상태들은, 예를 들어, 잠재 공간으로의 투영들로서 에지들/머신 러닝 모델들을 따라 그들의 이웃 노드들에 전파될 수 있다. 일부 구현들에서, 각각의 시간 단계에서 주어진 노드로 들어오는 노드 상태들은, 예를 들어, 서로 및 주어진 노드의 현재 상태와 합산될 수 있다(이는 순서-불변이다). 더 많은 시간 단계들이 경과될수록, AST의 주어진 노드에 영향을 미치는 이웃 노드들의 반경이 증가된다.
직관적으로, 이웃 노드들에 대한 지식은 각각의 노드의 상태에 증가적으로 "베이크(baked into)"되며, 머신 러닝 모델이 점점 더 반복됨에 따라 주어진 노드의 상태에 점점 더 멀리 있는 이웃들에 대한 더 많은 지식이 축적된다. 일부 구현들에서, AST의 모든 노드들에 대한 "최종" 상태들은 일부 원하는 수의 반복들이 수행된 후에 도달될 수 있다. 이 반복 횟수는 GNN(252)의 하이퍼파라미터(hyper-parameter)일 수 있다. 일부 이러한 구현들에서, 이러한 최종 상태들은 AST의 전체 상태 또는 임베딩(예를 들어, 244)을 산출하기 위해 합산될 수 있다.
일부 구현들에서, 변경 그래프들(228)의 경우, 변경의 일부를 형성하는 에지들 및/또는 노드들은 기본 소스 코드 스니펫의 버전들 전반에 걸쳐 일정하게 유지되는 다른 에지들/노드들보다 GNN(252)을 사용하여 프로세싱하는 동안 더 많이 가중될 수 있다. 결과적으로, 기본 소스 코드 스니펫의 버전들 간의 변경(들)은 변경 그래프(228) 전체를 표현하는 결과 상태 또는 임베딩에 더 큰 영향을 미칠 수 있다. 이것은, 이러한 임베딩들을 둘러싼 컨텍스트들의 일부가 다소 상이할지라도, 잠재 공간의 유사한 변경들로부터 생성된 임베딩들의 클러스터링을 용이하게 할 수 있다.
시퀀스-투-시퀀스 모델(254)의 경우, 기본 소스 코드에 대한 변경들의 시퀀스로 매니페스트(manifest)되는 암시적 레이블들을 사용하여 트레이닝이 구현될 수 있다. 소스 및 타겟 AST들에 대해 트레이닝하는 대신, 소스 코드 스니펫의 제1 버전으로부터 소스 코드 스니펫의 제2 버전으로의 전체 변경 경로를 사용하여 트레이닝할 수 있다. 예를 들어, 시퀀스-투-시퀀스 모델(254)은, 소스 코드 엘리먼트들(예를 들어, 토큰들, 오퍼레이터들 등)의 시퀀스에 기초하여, 업데이트된 소스 코드 스니펫을 표현하는 소스 코드 엘리먼트들의 "업데이트된" 시퀀스를 예측하도록 트레이닝될 수 있다. 일부 구현들에서는, GNN(252) 및 시퀀스-대-시퀀스 모델(254) 둘 다 개별적으로 및/또는 동시에 채택될 수 있다.
머신 러닝 모델들(예를 들어, 252-254)이 적절하게 트레이닝되면, 이들은 새로운 클라이언트들이 그들의 아직 업데이트되지 않은 코드 베이스들을 마이그레이션하는 것을 돕기 위해 추론 페이즈 동안 사용될 수 있다. 다시 좌측 상단에서 시작하면, 코드 베이스(216)는 이제 클라이언트(110)의 레거시 코드 베이스(112)를 표현할 수 있다. 트레이닝 동안과 달리, 추론 동안, 코드 베이스(216)는 업데이트될 레거시 소스 코드만을 포함할 수 있다. 그러나, 도 2의 다른 많은 동작들은 트레이닝에서와 유사하게 동작한다.
업데이트될 소스 코드 스니펫들(2181-Q)은 AST들(2221-R)을 생성하기 위해 다시 한번 사용된다. 그러나, AST들(2221-R)이 데이터세트 빌더(224)에 의해 프로세싱되는 대신, 이들은 잠재 공간에 새로운 소스 코드 임베딩들(244)을 생성하기 위해 트레이닝된 머신 러닝 모델들(예를 들어, 252, 254) 중 하나 이상 전반에 걸친 입력으로서, 예를 들어, AST2VEC 컴포넌트(234)에 의해 간단히 적용될 수 있다. 그 후, 잠재 공간의 하나 이상의 레퍼런스 임베딩이 잠재 공간의 새로운 소스 코드 임베딩과 하나 이상의 레퍼런스 임베딩 간의 개개의 거리들에 기초하여, 예를 들어, 변경 리스트(changelist)("CL") 생성기(246)에 의해 식별될 수 있다. 위에서 언급된 바와 같이, 하나 이상의 레퍼런스 임베딩 각각은 머신 러닝 모델들(예를 들어, 252-254) 중 하나 이상 전반에 걸친 입력으로서, 레퍼런스 제2 버전 소스 코드 스니펫을 산출하기 위해 레퍼런스 제1 버전 소스 코드 스니펫에 대해 이루어진 변경을 나타내는 데이터를 적용함으로써, 예를 들어, 트레이닝 모듈(250)에 의해 이전에 생성되었을 수 있다.
식별된 하나 이상의 레퍼런스 임베딩에 기초하여, CL 생성기(246)는 업데이트된 소스 코드 스니펫(들)을 생성하기 위해 업데이트될 소스 코드 스니펫(들)에 대해 이루어질 하나 이상의 변경을 식별할 수 있다. 이러한 권장된 코드 변경들(예를 들어, 변경될 코드로부터 생성된 변경된 코드)은 블록(248)에서 출력될 수 있다. 추가적으로 또는 대안적으로, 일부 구현들에서, 코드 변경 권장이 충분한 신뢰도의 척도로 결정되면, 코드 변경 권장은 사용자로부터의 입력 없이 시행될 수 있다. 또 다른 구현들에서, 코드 변경 권장은 하나 이상의 자동 코드 유닛 테스트들 통과와 같은 다른 이벤트들에 응답하여 자동으로 구현될 수 있다.
도 3은 소스 코드 스니펫(350)이 잠재 공간(352)에 임베딩될 수 있는 방법의 일례를 보여준다. 소스 코드 스니펫, source.cc(350)가 그것의 AST가 AST2VEC 컴포넌트(234)에 도달할 때까지 도 2의 다양한 도시되지 않은 컴포넌트들을 사용하여 프로세싱된다. 이전에 설명된 바와 같이, AST2VEC 컴포넌트(234)는 잠재 공간(352)에 임베딩(도 3에 어두운 원으로 표현됨)을 생성하기 위해 GNN(252)과 같은 하나 이상의 머신 러닝 모델 전반에 걸쳐 source.cc(350)로부터 생성된 AST를 적용한다.
도 3의 예에서, 이전에 설명된 트레이닝 프로세스가 변경 타입들에 대응하는 잠재 공간(352)의 영역들(3541-T)에 대한 매핑들을 학습하는 데 사용되었다. T는 트레이닝 동안 도 2의 변경 그래프들(228)에 적용된 구별되는 변경 타입 레이블들(232)의 수와 동일한 양의 정수일 수 있다. 예를 들어, 제1 영역(3541)은 제1 변경 타입, 예를 들어, "변수 이름 변경"에 대응할 수 있다. 소스 코드 스니펫들의 변수 이름들에 대한 변경들을 표현하는 변경 그래프들로부터 생성된 레퍼런스 임베딩들(도 3의 작은 원들)의 클러스터가 제1 영역(3541)에 있을 수 있다. 제2 영역(3542)은 제2 변경 타입, 예를 들어, "함수 이름 변경"에 대응할 수 있다. 소스 코드 스니펫들의 함수 이름들에 대한 변경들을 표현하는 변경 그래프들로부터 생성된 레퍼런스 임베딩들의 다른 클러스터가 제2 영역(3542)에 있을 수 있다. 기타 등등 마찬가지이다. 이러한 영역들(354)(및 도 4의 454)은 특정 변경 타입에 대한 모든 기존의/알려진 임베딩들의 가장 큰 둘러싸는 원 또는 "볼록 껍질(convex hull)"을 통해 사용하는 것과 같이 다양한 방식들로 정의될 수 있다.
도 3의 예에서, source.cc(350)는, 예를 들어, 특정 클라이언트(110)에 대한 업데이트될 소스 코드 스니펫이다. source.cc(350)로부터 생성된 임베딩(도 3의 어두운 점)이 잠재 공간(352)에서 다수의 상이한 변경 타입들에 대해 근접할 것이라는 점이 전적으로 가능하다. 이는 동일하거나 유사한 소스 코드 스니펫이, 이전에 업데이트되었을 때, 다수의 타입들의 변경들을 포함했기 때문일 수 있다. 따라서, 도 3의 예에서, source.cc(350)로부터 생성된 임베딩은 영역들(3511-3)의 교차점 내의 어두운 점의 위치에 의해 보여지는 바와 같이, 제1 영역(3541), 제2 영역(3542) 및 제3 영역(3543)에 동시에 매핑될 수 있다.
어떤 변경들을 수행 및/또는 권장할지 결정하기 위해, 다양한 구현들에서, 잠재 공간(352)의 하나 이상의 레퍼런스 임베딩(도 3의 작은 원들)이 잠재 공간(352)의 새로운 소스 코드 임베딩(어두운 작은 원)과 하나 이상의 레퍼런스 임베딩 간의 하나 이상의 거리에 기초하여 식별될 수 있다. 이러한 거리들 또는 "유사도들"은 코사인 유사도, 내적들 등과 같은 다양한 방식들로 계산될 수 있다. 일부 구현들에서, 새로운 소스 코드 임베딩에 가장 가까운 레퍼런스 임베딩(들)이 식별되고, 대응하는 소스 코드 편집을 결정하는 데 사용될 수 있다.
예를 들어, 일부 구현들에서, 각각의 레퍼런스 임베딩은, 예를 들어, 룩업 테이블 및/또는 데이터베이스에서, 해당 레퍼런스 임베딩을 산출한 하나 이상의 소스 코드 변경과 연관될 수 있다. 변수 이름 변경 영역(3541)의 가장 가까운 레퍼런스 임베딩이 변수 이름 "var1"을 "varA"로 대체한 소스 코드 변경과 연관된다고 가정하도록 한다. 일부 구현들에서는, 업데이트될 소스 코드 베이스에 대해 동일한 변경을 채택할 것을 권장하는 권장이 생성되고, 예를 들어, 오디오 또는 시각적 출력으로서 제시될 수 있다. 일부 구현들에서, 이 출력은 코드에 대해 이루어질 실제 변경, 및/또는 코드 변경과 관련된 코멘트들을 전달할 수 있다.
일부 구현들에서, 이러한 변경에서의 신뢰도의 척도는, 예를 들어, 더 큰 신뢰도에 대응하는 가장 가까운 레퍼런스 임베딩과 새로운 소스 코드 임베딩 간의 더 짧은 거리로 결정될 수 있다. 일부 이러한 구현들에서, 신뢰도의 척도가 상당히 큰 경우, 예를 들어, 하나 이상의 임계치를 충족하는 경우, 먼저 사용자에게 프롬프트하지 않고, 변경이 자동으로 구현될 수 있다.
도 4는 소스 코드 스니펫(460)이 레퍼런스 임베딩을 생성하고/하거나 GNN(252)과 같은 머신 러닝 모델을 트레이닝하기 위해 사용될 수 있는 방법의 일례를 도시한다. 소스 코드 스니펫(460)의 업데이트될 제1 버전은 이 예에서 1.0.0이다. 소스 코드 스니펫(460')의 제2 또는 "타겟" 버전은 이 예에서 1.0.1이다. 도 4에 도시된 바와 같이, AST들(464, 464')은 소스 코드 스니펫(460, 460')의 제1 및 제2 버전들로부터 각각 생성될 수 있다. 이 예의 경우, 1.0.0과 1.0.1 간의 소스 코드 스니펫에 대한 유일한 변경은 AST(464')의 좌측 하단에서 새로운 노드의 추가로 반영된 바와 같이 변수 이름의 변경뿐이라고 가정하도록 한다.
AST들(464, 464')은 이 변경을 반영하는 변경 그래프(228)를 생성하기 위해, 예를 들어, 데이터세트 빌더(224)에 의해 비교될 수 있다. 그 후, 변경 그래프(228)는 화살표로 나타낸 바와 같이 잠재 공간 임베딩을 생성하기 위해 GNN(252) 및/또는 시퀀스-투-시퀀스 모델(254)과 같은 머신 러닝 모델을 사용하여, 예를 들어, AST2VEC(234)에 의해 프로세싱될 수 있다. 이 예에서, 잠재 공간 임베딩은 잠재 공간(452)의 영역(4541)과 일치하며, 여기서 변수 이름 변경들을 포함하는 다른 레퍼런스 임베딩들(도 4에서 다시 작은 원들로 표현됨) 또한 발견된다.
머신 러닝 모델 트레이닝의 일부로서, 일부 구현들에서, 제1 버전 소스 코드 스니펫과 제2 버전 소스 코드 스니펫 간의 변경을 나타내는 데이터, 예를 들어, 변경 그래프(228)가 변경 타입으로 (232로) 레이블링될 수 있다. 그 후, 변경 그래프(228)는 잠재 공간(452)에 새로운 임베딩을 생성하기 위해 머신 러닝 모델(예를 들어, 252) 전반에 걸친 입력으로서, 예를 들어, AST2VEC 컴포넌트(234)에 의해 적용될 수 있다. 다음으로, 동일한 변경 타입과 연관된 잠재 공간의 이전(예를 들어, 레퍼런스) 임베딩과 새로운 임베딩 간의 잠재 공간의 거리가 결정되고, 머신 러닝 모델을 트레이닝하는 데 사용될 수 있다. 예를 들어, 거리가 너무 큰 경우, 예를 들어, 상이한 변경 타입의 레퍼런스 임베딩과 새로운 임베딩 간의 거리보다 큰 경우, 역전파 및 경사 하강법과 같은 기술들이 적용되어 머신 러닝 모델의 가중치(들) 및/또는 파라미터들을 변경할 수 있다. 결국 충분한 트레이닝 후에, 동일한 변경 타입들의 레퍼런스 임베딩들이 잠재 공간(452)(이는 도 3의 잠재 공간(352)에 대응할 수 있음)에서 함께 클러스터링될 것이다.
도 5는, 본 명세서에서 개시되는 구현들에 따라, 레퍼런스 임베딩들을 포함하는 잠재 공간에 업데이트될 소스 코드 스니펫들을 매핑하기 위해 트레이닝된 머신 러닝 모델을 활용하는 예시적인 방법(500)을 예시하는 흐름도이다. 편의상, 흐름도의 동작들은 동작들을 수행하는 시스템을 참조하여 설명된다. 이 시스템은 코드 지식 시스템(102)의 하나 이상의 컴포넌트와 같은 다양한 컴퓨터 시스템들의 다양한 컴포넌트들을 포함할 수 있다. 또한, 방법(500)의 동작들이 특정 순서로 도시되어 있지만, 이것은 제한을 의미하지 않는다. 하나 이상의 동작이 재정렬되거나, 생략되거나, 또는 추가될 수 있다.
블록(502)에서, 시스템은 잠재 공간(예를 들어, 352)에 새로운 소스 코드 임베딩을 생성하기 위해 하나 이상의 머신 러닝 모델(예를 들어, 252) 전반에 걸친 입력으로서 제1 버전 소스 코드 스니펫(예를 들어, 도 5의 350)과 연관된 데이터를 적용할 수 있다. 제1 버전 소스 코드 스니펫과 연관된 이 데이터는 소스 코드 스니펫 자체를 포함할 수 있고/있거나, AST(예를 들어, 222)와 같은 소스 코드 스니펫의 다른 표현을 포함할 수 있다. 일부 구현들에서, 소스 코드 스니펫은 소스 코드 파일의 일부 또는 심지어 전체 소스 코드 파일일 수 있다.
블록(504)에서, 시스템은 잠재 공간의 하나 이상의 레퍼런스 임베딩을 잠재 공간의 새로운 소스 코드 임베딩과 하나 이상의 레퍼런스 임베딩 간의 하나 이상의 거리에 기초하여 식별할 수 있다. 이전에 설명된 바와 같이, 하나 이상의 레퍼런스 임베딩 각각은 머신 러닝 모델들 중 하나 이상 전반에 걸친 입력으로서, 레퍼런스 제2 버전 소스 코드 스니펫(도 4의 460')을 산출하기 위해 레퍼런스 제1 버전 소스 코드 스니펫(도 4의 460)에 대해 이루어진 변경을 나타내는 데이터(예를 들어, 228)를 적용함으로써 (예를 들어, 도 4에 도시된 바와 같이) 생성되었을 수 있다. 그리고, 다양한 구현들에서, 각각의 레퍼런스 임베딩은, 예를 들어, 룩업 테이블 및/또는 데이터베이스에서, 레퍼런스 임베딩의 기초가 되는 소스 코드에 대해 이루어진 하나 이상의 변경과 연관될 수 있다.
블록(506)에서, 시스템은, 식별된 하나 이상의 레퍼런스 임베딩에 기초하여, 제2 버전 소스 코드 스니펫을 생성하기 위해 제1 버전 소스 코드 스니펫에 대해 이루어질 하나 이상의 변경을 식별할 수 있다. 예를 들어, 시스템은 룩업 테이블 또는 데이터베이스에서 가장 가까운 레퍼런스 임베딩과 연관된 하나 이상의 변경을 찾을 수 있다.
블록(508)에서, 블록(506)의 식별과 연관된 신뢰도 척도가 하나 이상의 임계치와 비교될 수 있다. 이 신뢰도 척도는, 예를 들어, 잠재 공간의 가장 가까운 레퍼런스 임베딩과 새로운 소스 코드 임베딩 간의 거리에 기초하여 결정될 수 있다. 예를 들어, 일부 구현들에서, 신뢰도 척도 - 또는 더 일반적으로, 신뢰도 척도에 의해 표시되는 신뢰도 - 는 이 거리와 반비례로 관련될 수 있다.
블록(508)에서, 신뢰도 척도가 임계치(들)를 충족하는 경우, 방법은 블록(510)으로 진행될 수 있으며, 여기서 블록(506)에서 식별된 하나 이상의 변경이 자동으로 구현될 수 있다. 그러나, 블록(508)에서, 신뢰도 척도가 임계치(들)를 충족하는 데 실패하는 경우, 블록(512)에서, 시스템은, 예를 들어, 클라이언트(110)에 의해 운영되는 하나 이상의 컴퓨팅 디바이스로 하여금 코드 변경을 권장하게 하는 데이터를 생성할 수 있다. 일부 이러한 구현들에서, 클라이언트는, 예를 들어, 그래픽 사용자 인터페이스 상의 버튼을 누름으로써 또는 컨펌을 말함으로써 변경을 "수락(accept)"하는 것이 가능할 수 있다. 일부 구현들에서, 권장된 코드 변경의 수락은 본 명세서에서 설명되는 하나 이상의 머신 러닝 모델, 예를 들어, GNN(252) 또는 시퀀스-투-시퀀스 모델(254)을 추가로 트레이닝하는 데 사용될 수 있다.
도 6은, 본 명세서에서 개시되는 구현들에 따라, 레퍼런스 임베딩들을 포함하는 잠재 공간에 업데이트될 소스 코드 스니펫들을 매핑하기 위해 GNN(252)과 같은 머신 러닝 모델을 트레이닝하는 예시적인 방법(600)을 예시하는 흐름도이다. 편의상, 흐름도의 동작들은 동작들을 수행하는 시스템을 참조하여 설명된다. 이 시스템은 코드 지식 시스템(102)의 하나 이상의 컴포넌트와 같이 다양한 컴퓨터 시스템들의 다양한 컴포넌트들을 포함할 수 있다. 또한, 방법(600)의 동작들이 특정 순서로 도시되어 있지만, 이것은 제한을 의미하지 않는다. 하나 이상의 동작이 재정렬되거나, 생략되거나, 또는 추가될 수 있다.
블록(602)에서, 시스템은 제1 버전 소스 코드 스니펫과 제2 버전 소스 코드 스니펫 간의 변경을 나타내는 데이터를 획득할 수 있다. 예를 들어, 변경 그래프(228)가, 제1 버전 소스 코드 스니펫(460)과 제2(또는 "타겟") 버전 소스 코드 스니펫(460')에 기초하여, 예를 들어, 데이터세트 빌더(224)에 의해 생성될 수 있다. 블록(604)에서, 시스템은, 예를 들어, 데이터세트 빌더(224)를 통해, 변경 타입 레이블(예를 들어, 도 2의 232)로 변경을 나타내는 데이터를 레이블링할 수 있다.
블록(606)에서, 시스템은 잠재 공간(예를 들어, 452)에 새로운 임베딩을 생성하기 위해 머신 러닝 모델, 예를 들어, GNN(252) 전반에 걸친 입력으로서 변경을 나타내는 데이터(예를 들어, 변경 그래프(228))를 적용할 수 있다. 블록(608)에서, 시스템은 동일한 및/또는 상이한 변경 타입들과 연관된 잠재 공간의 이전 임베딩(들)과 새로운 임베딩 간의 잠재 공간의 거리(들)를 결정할 수 있다. 이러한 거리들은 코사인 유사도, 내적 등과 같은 기술들을 사용하여 계산될 수 있다.
블록(610)에서, 시스템은 블록(608)에서 결정된 거리(들) 및 손실 함수를 사용하여 오차를 계산할 수 있다. 예를 들어, "변수 이름 변경"의 변경 타입을 갖는 새로운 임베딩이 "변수 이름 변경"의 타입의 이전 임베딩들보다 "함수 이름 변경"의 타입의 이전 임베딩(들)에 더 가까운 경우, 이것은 새로운 임베딩을 생성한 머신 러닝 모델이 업데이트되거나 트레이닝될 필요가 있음을 의미할 수 있다. 따라서, 블록(612)에서, 시스템은 블록(610)에서 계산된 오차에 적어도 부분적으로 기초하여 머신 러닝 모델을 트레이닝할 수 있다. 블록(612)의 트레이닝은 경사 하강법 및/또는 역전파와 같은 기술들을 포함할 수 있다. 추가적으로 또는 대안적으로, 다양한 구현들에서, 약한 지도(weak supervision) 또는 삼중항 손실(triplet loss)과 같은 다른 타입들의 레이블들 및/또는 트레이닝 기술들이 머신 러닝 모델을 트레이닝하는 데 사용될 수 있으며, 이는 유사/비유사(similar/dissimilar) 또는 가까움/가깝지 않음(close/not close)과 같은 레이블들의 사용을 포함할 수 있다.
도 7은 본 명세서에서 설명되는 기술들 중 하나 이상의 양태를 수행하기 위해 임의적으로 활용될 수 있는 예시적인 컴퓨팅 디바이스(710)의 블록도이다. 컴퓨팅 디바이스(710)는 통상적으로 버스 서브시스템(712)을 통해 다수의 주변 디바이스들과 통신하는 적어도 하나의 프로세서(714)를 포함한다. 이러한 주변 디바이스들은, 예를 들어, 메모리 서브시스템(725) 및 파일 스토리지 서브시스템(726)을 포함하는 스토리지 서브시스템(724), 사용자 인터페이스 출력 디바이스들(720), 사용자 인터페이스 입력 디바이스들(722), 및 네트워크 인터페이스 서브시스템(716)을 포함할 수 있다. 입력 및 출력 디바이스들은 컴퓨팅 디바이스(710)와의 사용자 상호작용을 허용한다. 네트워크 인터페이스 서브시스템(716)은 외부 네트워크들에 대한 인터페이스를 제공하고, 다른 컴퓨팅 디바이스들의 대응하는 인터페이스 디바이스들에 커플링된다.
사용자 인터페이스 입력 디바이스들(722)은 키보드, 마우스, 트랙볼, 터치패드 또는 그래픽 태블릿과 같은 포인팅 디바이스들, 스캐너, 디스플레이에 통합된 터치스크린, 음성 인식 시스템들, 마이크로폰들 및/또는 다른 타입들의 입력 디바이스들과 같은 오디오 입력 디바이스들을 포함할 수 있다. 일반적으로, "입력 디바이스"라는 용어의 사용은 컴퓨팅 디바이스(710) 또는 통신 네트워크에 정보를 입력하기 위한 모든 가능한 타입들의 디바이스들 및 방식들을 포함하도록 의도된다.
사용자 인터페이스 출력 디바이스들(720)은 디스플레이 서브시스템, 프린터, 팩스 머신, 또는 오디오 출력 디바이스들과 같은 비-시각적 디스플레이들을 포함할 수 있다. 디스플레이 서브시스템은 음극선관(cathode ray tube)(CRT), 액정 디스플레이(liquid crystal display)(LCD)와 같은 평판 디바이스, 프로젝션 디바이스, 또는 가시 이미지를 생성하기 위한 일부 다른 메커니즘을 포함할 수 있다. 디스플레이 서브시스템은 또한, 오디오 출력 디바이스들을 통해서와 같은 비-시각적 디스플레이를 제공할 수도 있다. 일반적으로, "출력 디바이스"라는 용어의 사용은 컴퓨팅 디바이스(710)로부터 사용자로 또는 다른 머신 또는 컴퓨팅 디바이스로 정보를 출력하기 위한 모든 가능한 타입들의 디바이스들 및 방식들을 포함하도록 의도된다.
스토리지 서브시스템(724)은 본 명세서에서 설명되는 모듈들의 일부 또는 전부의 기능을 제공하는 프로그래밍 및 데이터 구성들을 저장한다. 예를 들어, 스토리지 서브시스템(724)은 도 5 및 도 6의 방법의 선택된 양태들을 수행할 뿐만 아니라, 도 1 및 도 2에 도시된 다양한 컴포넌트들을 구현하기 위한 로직을 포함할 수 있다.
이들 소프트웨어 모듈들은 일반적으로 프로세서(714) 단독으로 또는 다른 프로세서들과 조합하여 실행된다. 스토리지 서브시스템(724)에서 사용되는 메모리(725)는 프로그램 실행 동안 명령어들 및 데이터의 스토리지를 위한 메인 랜덤 액세스 메모리(random access memory)(RAM)(730) 및 고정 명령어들이 저장되는 판독 전용 메모리(read only memory)(ROM)(732)를 포함하는 다수의 메모리들을 포함할 수 있다. 파일 스토리지 서브시스템(726)은 프로그램 및 데이터 파일들을 위한 영구 스토리지를 제공할 수 있고, 하드 디스크 드라이브, 연관된 이동식 매체와 함께 플로피 디스크 드라이브, CD-ROM 드라이브, 광학 드라이브 또는 이동식 매체 카트리지들을 포함할 수 있다. 특정 구현들의 기능을 구현하는 모듈들은 파일 스토리지 서브시스템(726)에 의해 스토리지 서브시스템(724)에 또는 프로세서(들)(714)에 의해 액세스 가능한 다른 머신들에 저장될 수 있다.
버스 서브시스템(712)은 컴퓨팅 디바이스(710)의 다양한 컴포넌트들 및 서브시스템들이 의도된 대로 서로 통신하게 하기 위한 메커니즘을 제공하다. 버스 서브시스템(712)이 단일 버스로서 개략적으로 도시되어 있지만, 버스 서브시스템의 대안적인 구현들은 다수의 버스들을 사용할 수 있다.
컴퓨팅 디바이스(710)는 워크스테이션, 서버, 컴퓨팅 클러스터, 블레이드 서버, 서버 팜, 또는 임의의 다른 데이터 프로세싱 시스템 또는 컴퓨팅 디바이스를 포함하는 다양한 타입들일 수 있다. 컴퓨터들 및 네트워크들의 끊임없이 변화하는 특성들로 인해, 도 7에 도시된 컴퓨팅 디바이스(710)에 대한 설명은 일부 구현들을 설명할 목적의 특정 예로서만 의도된다. 컴퓨팅 디바이스(710)의 많은 다른 구성들이 도 7에 도시된 컴퓨팅 디바이스보다 더 많거나 더 적은 컴포넌트들을 갖는 것이 가능하다.
여러 구현들이 본 명세서에서 설명되고 예시되었지만, 기능을 수행하고/하거나 본 명세서에서 설명되는 이점들 중 하나 이상 및/또는 결과들을 획득하기 위한 다양한 다른 수단들 및/또는 구조들이 활용될 수 있고, 이러한 변형들 및/또는 수정들 각각은 본 명세서에서 설명되는 구현들의 범위 내에 있는 것으로 간주된다. 더 일반적으로, 본 명세서에서 설명되는 모든 파라미터들, 치수들, 재료들 및 구성들은 예시를 의미하며, 실제 파라미터들, 치수들, 재료들 및/또는 구성들은 교시들이 사용되는 특정 애플리케이션 또는 애플리케이션들에 의존할 것이다. 본 기술분야의 통상의 기술자는 일상적인 실험만을 사용하여 본 명세서에서 설명되는 특정 구현들에 대한 많은 균등물들을 인식하거나 확인할 수 있을 것이다. 따라서, 전술된 구현들은 단지 예로서 제시되고, 첨부된 청구범위 및 그에 대한 균등물들의 범위 내에서, 구현들이 구체적으로 설명되고 청구된 것과 달리 실행될 수 있음을 이해해야 한다. 본 개시내용의 구현들은 본 명세서에서 설명되는 각각의 개별 피처, 시스템, 물품, 재료, 키트 및/또는 방법에 관한 것이다. 또한, 2개 이상의 이러한 피처, 시스템, 물품, 재료, 키트 및/또는 방법의 임의의 조합은, 이러한 피처들, 시스템들, 물품들, 재료들, 키트들 및/또는 방법들이 상호 일관성이 없는 경우에도, 본 개시내용의 범위 내에 포함된다.

Claims (20)

  1. 하나 이상의 프로세서를 사용하여 구현되는 방법으로서,
    잠재 공간(latent space)에 새로운 소스 코드 임베딩을 생성하기 위해 하나 이상의 머신 러닝 모델(machine learning model) 전반에 걸친 입력으로서 제1 버전 소스 코드 스니펫(version source code snippet)과 연관된 데이터를 적용하는 단계;
    상기 잠재 공간의 하나 이상의 레퍼런스 임베딩(reference embedding)을 상기 잠재 공간의 새로운 소스 코드 임베딩과 상기 하나 이상의 레퍼런스 임베딩 간의 하나 이상의 거리에 기초하여 식별하는 단계 - 상기 하나 이상의 레퍼런스 임베딩 각각은 상기 머신 러닝 모델들 중 하나 이상의 것 전반에 걸친 입력으로서, 레퍼런스 제2 버전 소스 코드 스니펫을 산출하기 위해 레퍼런스 제1 버전 소스 코드 스니펫에 대해 이루어진 변경을 나타내는 데이터를 적용함으로써 생성됨 -; 및
    상기 식별된 하나 이상의 레퍼런스 임베딩에 기초하여, 제2 버전 소스 코드 스니펫을 생성하기 위해 상기 제1 버전 소스 코드 스니펫에 대해 이루어질 하나 이상의 변경을 식별하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서, 상기 제1 버전 소스 코드 스니펫과 연관된 데이터는 상기 제1 버전 소스 코드 스니펫으로부터 생성된 추상 구문 트리(abstract syntax tree)("AST")를 포함하는, 방법.
  3. 제1항 또는 제2항에 있어서, 상기 머신 러닝 모델들 중 하나 이상은 그래프 신경망(graph neural network)("GNN")을 포함하는, 방법.
  4. 제1항 또는 제2항에 있어서, 상기 하나 이상의 변경은 상기 하나 이상의 레퍼런스 임베딩과 연관된 하나 이상의 룩업 테이블에 기초하여 식별되는, 방법.
  5. 제1항 또는 제2항에 있어서, 하나 이상의 컴퓨팅 디바이스 상에서 렌더링될 출력을 생성하는 단계를 추가로 포함하고, 상기 출력은, 렌더링될 때, 상기 하나 이상의 변경이 상기 제1 버전 소스 코드 스니펫에 대해 고려될 것을 권장하는, 방법.
  6. 제1항 또는 제2항에 있어서, 상기 제1 버전 소스 코드 스니펫에서 상기 하나 이상의 변경을 자동으로 시행하는 단계를 추가로 포함하는, 방법.
  7. 제1항 또는 제2항에 있어서, 상기 제1 버전 소스 코드 스니펫은 소스 코드 파일을 포함하는, 방법.
  8. 하나 이상의 프로세서를 사용하여 구현되는 방법으로서,
    제1 버전 소스 코드 스니펫과 제2 버전 소스 코드 스니펫 간의 변경을 나타내는 데이터를 획득하는 단계;
    변경 타입으로 상기 변경을 나타내는 데이터를 레이블링하는 단계;
    잠재 공간에 새로운 임베딩을 생성하기 위해 머신 러닝 모델 전반에 걸친 입력으로서 상기 변경을 나타내는 데이터를 적용하는 단계;
    동일한 변경 타입과 연관된 잠재 공간의 이전 임베딩과 상기 새로운 임베딩 간의 잠재 공간의 거리를 결정하는 단계; 및
    상기 거리에 적어도 부분적으로 기초하여 상기 머신 러닝 모델을 트레이닝하는 단계
    를 포함하는, 방법.
  9. 제8항에 있어서, 상기 머신 러닝 모델은 그래프 신경망("GNN")을 포함하는, 방법.
  10. 제8항에 있어서, 상기 변경을 나타내는 데이터는 변경 그래프를 포함하는, 방법.
  11. 제10항에 있어서, 상기 변경 그래프는 상기 제1 버전 소스 코드 스니펫으로부터 생성된 제1 추상 구문 트리("AST") 및 상기 제2 버전 소스 코드 스니펫으로부터 생성된 제2 AST로부터 생성되는, 방법.
  12. 제8항 내지 제11항 중 어느 한 항에 있어서, 상기 거리는 제1 거리를 포함하고, 상기 방법은,
    상이한 변경 타입과 연관된 잠재 공간의 다른 이전 임베딩과 상기 새로운 임베딩 간의 잠재 공간의 제2 거리를 결정하는 단계; 및
    손실 함수(loss function)를 사용하여, 상기 제1 거리 및 상기 제2 거리에 기초하여 오차를 계산하는 단계
    를 추가로 포함하고,
    상기 트레이닝하는 단계는 상기 오차에 기초하는, 방법.
  13. 제8항 내지 제11항 중 어느 한 항에 있어서, 상기 변경을 나타내는 데이터는 제1 변경을 나타내는 제1 데이터를 포함하고, 상기 새로운 임베딩은 제1 새로운 임베딩을 포함하고, 상기 방법은,
    상기 제1 버전 소스 코드 스니펫과 상기 제2 버전 소스 코드 스니펫 간의 제2 변경을 나타내는 제2 데이터를 획득하는 단계;
    제2 변경 타입으로 상기 제2 변경을 나타내는 제2 데이터를 레이블링하는 단계;
    상기 잠재 공간에 제2 새로운 임베딩을 생성하기 위해 상기 머신 러닝 모델 전반에 걸친 입력으로서 상기 제2 변경을 나타내는 제2 데이터를 적용하는 단계;
    상기 제2 변경 타입과 연관된 잠재 공간의 이전 임베딩과 상기 제2 새로운 임베딩 간의 잠재 공간의 추가 거리를 결정하는 단계; 및
    상기 추가 거리에 적어도 부분적으로 기초하여 상기 머신 러닝 모델을 트레이닝하는 단계
    를 추가로 포함하는, 방법.
  14. 하나 이상의 프로세서 및 명령어들을 저장하는 메모리를 포함하는 시스템으로서,
    상기 명령어들은, 상기 하나 이상의 프로세서에 의한 상기 명령어들의 실행에 응답하여, 상기 하나 이상의 프로세서로 하여금,
    잠재 공간에 새로운 소스 코드 임베딩을 생성하기 위해 하나 이상의 머신 러닝 모델 전반에 걸친 입력으로서 제1 버전 소스 코드 스니펫과 연관된 데이터를 적용하게 하고,
    상기 잠재 공간의 하나 이상의 레퍼런스 임베딩을 상기 잠재 공간의 새로운 소스 코드 임베딩과 상기 하나 이상의 레퍼런스 임베딩 간의 하나 이상의 거리에 기초하여 식별하게 하고 - 상기 하나 이상의 레퍼런스 임베딩 각각은 상기 머신 러닝 모델들 중 하나 이상의 것 전반에 걸친 입력으로서, 레퍼런스 제2 버전 소스 코드 스니펫을 산출하기 위해 레퍼런스 제1 버전 소스 코드 스니펫에 대해 이루어진 변경을 나타내는 데이터를 적용함으로써 생성됨 -;
    상기 식별된 하나 이상의 레퍼런스 임베딩에 기초하여, 제2 버전 소스 코드 스니펫을 생성하기 위해 상기 제1 버전 소스 코드 스니펫에 대해 이루어질 하나 이상의 변경을 식별하게 하는, 시스템.
  15. 제14항에 있어서, 상기 제1 버전 소스 코드 스니펫과 연관된 데이터는 상기 제1 버전 소스 코드 스니펫으로부터 생성된 추상 구문 트리("AST")를 포함하는, 시스템.
  16. 제14항 또는 제15항에 있어서, 상기 머신 러닝 모델들 중 하나 이상은 그래프 신경망("GNN")을 포함하는, 시스템.
  17. 제14항 또는 제15항에 있어서, 상기 하나 이상의 변경은 상기 하나 이상의 레퍼런스 임베딩과 연관된 하나 이상의 룩업 테이블에 기초하여 식별되는, 시스템.
  18. 제14항 또는 제15항에 있어서, 하나 이상의 컴퓨팅 디바이스 상에서 렌더링될 출력을 생성하기 위한 명령어들을 추가로 포함하고, 상기 출력은, 렌더링될 때, 상기 하나 이상의 변경이 상기 제1 버전 소스 코드 스니펫에 대해 고려될 것을 권장하는, 시스템.
  19. 제14항 또는 제15항에 있어서, 상기 제1 버전 소스 코드 스니펫에서 상기 하나 이상의 변경을 자동으로 시행하기 위한 명령어들을 추가로 포함하는, 시스템.
  20. 제14항 또는 제15항에 있어서, 상기 제1 버전 소스 코드 스니펫은 소스 코드 파일을 포함하는, 시스템.
KR1020217036761A 2019-05-21 2020-05-18 코드 변경들의 자동화된 식별 KR102589804B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/418,767 US20200371778A1 (en) 2019-05-21 2019-05-21 Automated identification of code changes
US16/418,767 2019-05-21
PCT/US2020/033448 WO2020236744A1 (en) 2019-05-21 2020-05-18 Automated identification of code changes

Publications (2)

Publication Number Publication Date
KR20210148346A KR20210148346A (ko) 2021-12-07
KR102589804B1 true KR102589804B1 (ko) 2023-10-13

Family

ID=70978664

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217036761A KR102589804B1 (ko) 2019-05-21 2020-05-18 코드 변경들의 자동화된 식별

Country Status (7)

Country Link
US (1) US20200371778A1 (ko)
EP (1) EP3948524A1 (ko)
JP (1) JP7324865B2 (ko)
KR (1) KR102589804B1 (ko)
CN (1) CN113853587A (ko)
CA (1) CA3141560A1 (ko)
WO (1) WO2020236744A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11531536B2 (en) * 2019-11-20 2022-12-20 Red Hat, Inc. Analyzing performance impacts of source code changes
TW202137078A (zh) * 2020-03-24 2021-10-01 廣達電腦股份有限公司 資料處理系統及資料處理方法
US11573775B2 (en) * 2020-06-17 2023-02-07 Bank Of America Corporation Software code converter for resolving redundancy during code development
US11782685B2 (en) * 2020-06-17 2023-10-10 Bank Of America Corporation Software code vectorization converter
US11210073B1 (en) * 2020-07-29 2021-12-28 SparkCognition, Inc. Translating text encodings of machine learning models to executable code
US11662998B2 (en) * 2020-11-05 2023-05-30 Outsystems—Software Em Rede, S.A. Detecting duplicated code patterns in visual programming language code instances
US11307881B1 (en) * 2020-11-11 2022-04-19 Adobe Inc. Systems for generating suggestions with knowledge graph embedding vectors
US11782681B1 (en) 2020-11-24 2023-10-10 Outsystems—Software Em Rede, S.A. Providing resolution suggestions in a program development tool
US11604628B2 (en) 2020-12-16 2023-03-14 Google Llc Generation and/or recommendation of tools for automating aspects of computer programming
US11481210B2 (en) * 2020-12-29 2022-10-25 X Development Llc Conditioning autoregressive language model to improve code migration
KR102609946B1 (ko) * 2021-06-21 2023-12-04 고려대학교 산학협력단 프로그램 코드 처리 장치 및 방법
US20230130019A1 (en) 2021-10-27 2023-04-27 Bank Of America Corporation Abstraction Layer for Efficient Transliteration of Machine Interpretable Languages
US11775267B2 (en) * 2021-12-07 2023-10-03 Google Llc Identification and application of related source code edits
CN115221061B (zh) * 2022-07-22 2024-03-22 中国电信股份有限公司 测试代码生成方法、装置、存储介质及电子设备
KR20240021493A (ko) * 2022-08-10 2024-02-19 쿠팡 주식회사 전자 장치 및 그의 정보 제공 방법
JP7450681B1 (ja) 2022-09-27 2024-03-15 楽天グループ株式会社 情報処理装置、情報処理方法およびプログラム

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190108001A1 (en) 2017-10-05 2019-04-11 Sap Se Correction of code errors using machine learning

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8370799B2 (en) * 2010-09-28 2013-02-05 International Business Machines Corporation Provision of code base modification using automatic learning of code changes
US20120159434A1 (en) * 2010-12-20 2012-06-21 Microsoft Corporation Code clone notification and architectural change visualization
US8509525B1 (en) * 2011-04-06 2013-08-13 Google Inc. Clustering of forms from large-scale scanned-document collection
US9569199B2 (en) * 2015-01-22 2017-02-14 Futurewei Technologies, Inc. Systems and methods to update source code files
US9996473B2 (en) * 2015-11-13 2018-06-12 Samsung Electronics., Ltd Selective underlying exposure storage mapping
US20190026106A1 (en) * 2017-07-20 2019-01-24 Ca, Inc. Associating software issue reports with changes to code
US10521224B2 (en) * 2018-02-28 2019-12-31 Fujitsu Limited Automatic identification of relevant software projects for cross project learning
US11615208B2 (en) * 2018-07-06 2023-03-28 Capital One Services, Llc Systems and methods for synthetic data generation
US11150875B2 (en) * 2018-09-27 2021-10-19 Microsoft Technology Licensing, Llc Automated content editor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190108001A1 (en) 2017-10-05 2019-04-11 Sap Se Correction of code errors using machine learning

Also Published As

Publication number Publication date
KR20210148346A (ko) 2021-12-07
WO2020236744A1 (en) 2020-11-26
US20200371778A1 (en) 2020-11-26
JP7324865B2 (ja) 2023-08-10
CN113853587A (zh) 2021-12-28
JP2022534181A (ja) 2022-07-28
EP3948524A1 (en) 2022-02-09
CA3141560A1 (en) 2020-11-26

Similar Documents

Publication Publication Date Title
KR102589804B1 (ko) 코드 변경들의 자동화된 식별
US20210192321A1 (en) Generation and utilization of code change intents
US11048482B2 (en) Automated identification of code changes
US11169786B2 (en) Generating and using joint representations of source code
US11455152B2 (en) Matching graphs generated from source code
US12001821B2 (en) Generation and/or recommendation of tools for automating aspects of computer programming
CN114207576A (zh) 使用机器学习在编程语言之间进行翻译
US11340873B2 (en) Code change graph node matching with machine learning
US11748065B2 (en) Learning and using programming styles
US11656867B2 (en) Conditioning autoregressive language model to improve code migration
US20230237277A1 (en) Aspect prompting framework for language modeling
US11481202B2 (en) Transformation templates to automate aspects of computer programming
US11775271B1 (en) Annotations for developers
US11775267B2 (en) Identification and application of related source code edits
US12014160B2 (en) Translating between programming languages independently of sequence-to-sequence decoders
US20230251856A1 (en) Refactoring and/or rearchitecting source code using machine learning
US20240176604A1 (en) Predicting and/or applying symbolic transformation templates
US20230350657A1 (en) Translating large source code using sparse self-attention

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant