KR102010508B1 - 소스 코드 파일을 업데이트하는 시스템 및 방법 - Google Patents

소스 코드 파일을 업데이트하는 시스템 및 방법 Download PDF

Info

Publication number
KR102010508B1
KR102010508B1 KR1020177014909A KR20177014909A KR102010508B1 KR 102010508 B1 KR102010508 B1 KR 102010508B1 KR 1020177014909 A KR1020177014909 A KR 1020177014909A KR 20177014909 A KR20177014909 A KR 20177014909A KR 102010508 B1 KR102010508 B1 KR 102010508B1
Authority
KR
South Korea
Prior art keywords
file
source code
files
patch
optimized
Prior art date
Application number
KR1020177014909A
Other languages
English (en)
Other versions
KR20170078802A (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 KR20170078802A publication Critical patent/KR20170078802A/ko
Application granted granted Critical
Publication of KR102010508B1 publication Critical patent/KR102010508B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Library & Information Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)

Abstract

효율적이고 효과적인 애플리케이션 유지 관리 및 패치 분배를 가능하게 하는 방법 및 시스템이 설명된다. 장치는, 핫 패치(hot patch) 파일을 생성하기 위한 명령 및 애플리케이션 소스 코드 파일을 저장하는 메모리 - 상기 애플리케이션 소스 코드 파일은 애플리케이션이 업데이트하기 전의 업데이트 소스 코드 파일과 초기 소스 코드 파일을 포함함 - ; 및 상기 핫 패치 파일을 생성하도록 작동 가능한 프로세서 - 상기 핫 패치 파일은, 상기 초기 소스 코드 파일의 제1 세트의 최적화 및 별개의 소스 코드 파일의 제2 세트의 최적화의 결과인 최적화된 한 쌍의 소스 코드 파일 세트 사이의 차이에 기초하여 생성되고, 상기 제2 세트는, 상기 소스 코드 파일이 서로 관련되어 있는 방식을 지시하는 그래프로부터의 결과에 기초하여 상기 제1 세트로부터 선택된 연관 파일과 상기 업데이트 소스 코드 파일을 포함함 - 를 포함한다.

Description

소스 코드 파일을 업데이트하는 시스템 및 방법
(관련출원의 상호 참조) 본 출원은, 2015년 1월 22일에 출원되고 발명의 명칭이 “Systems and methods to update source code files”인 미국 정규 출원 제14/603,136호에 대한 우선권을 주장하는 바이며, 상기 문헌의 내용은 원용에 의해 본 명세서에 포함된다.
본 개시는 일반적으로 컴퓨터 프로그래밍 언어에서 소스 코드 파일을 업데이트하는 기술에 관한 것이다.
디지털 컴퓨터, 계산기, 오디오 장치, 비디오 장치, 및 전화 시스템과 같은 수많은 전자 기술은 향상된 생산성을 가능하게 하며, 상업, 과학, 교육 및 엔터테이먼트의 대부분의 영역에서 데이터를 분석 및 통신하는 비용을 감소시킨다. 흔히, 이러한 활동은 컴퓨터 프로그래밍과 소스 코드 처리와 관련되어 있다. 이 소스 코드 파일을 유지 관리하고 업데이트하는 것은 복잡하며 지루할 수 있다.
소스 코드 파일은 일반적으로 동적이거나 정적이며, 각각은 다양한 이점과 결점을 가진다. 정적 유형의 소스 코드는 런타임 동안 상대적으로 빠르게 실행되지만, 상대적으로 유지 관리 및 업데이트가 힘들다. 동적 유형의 소스 코드는 유지 관리하고 업데이트하기 쉽지만, 상대적으로 느리게 작동한다. 현실적으로는, 동적 유형의 소스 코드가 더 빨리 작동하도록 돕기 위해 다양한 사전-컴파일 최적화(pre-compile optimizations)가 동적 유형의 소스 코드에 수행된다. 그러나, 사전-컴파일 최적화에 대한 종래의 접근 방식은, 기본적으로 유지 관리 및 업데이트와 관련된 동적 유형의 소스 코드의 다양한 이점을 제거하는 복잡도를 가지게 된다.
동적 스크립트 언어의 한가지 중요한 특징은, 코드가 인터프리터에 의해 곧바로 실행될 수 있어, 컴파일 프로세스가 불필요하다는 것이다. 이 특징은 핫 패치(hot patch) 프로세스의 간소화를 가능하게 한다. 그 효과로, 동적 소스 코드가 사전-컴파일 최적화되지 않고 애플리케이션의 수많은 파일 중 하나의 소스 코드 파일에 버그 또는 프로그래밍 결함이 있다면, 애플리케이션 관리자는 단지 버그에 대응하는 원(original) 소스 코드 파일을 패치 또는 수정된 소스 코드 파일로 교체할 수 있으며, 이것을 언어 인터프리터(language interpreter)에 리로드(reload)할 수 있다(다른 수많은 소스 코드 파일은 패치하는 동안 변경되지 않음). 그러나, 사전-컴파일 최적화가 느린 동적 코드를 해결하는 데 사용되는 경우, 사전-컴파일 최적화는 기존의 핫 패치 프로세스 시도에 문제점을 야기할 수 있다. 한 종래 예시에서, 제1 FILE 1은 상수 ABC = 100을 정의하고, 제2 파일 FILE 2는 ABC 상수를 작업 K = ABC + 25에 사용한다. 종래의 사전-컴파일 최적화(예컨대, 정수 전파 최적화)를 수행하는 것은 FILE 2의 ABC를 100으로 교체하고 최적화된 파일은 K = 125이다. 그러나, FILE1에 변경이 있으면(예컨대, ABC=200으로 정의함) 및 관리자가 종래의 핫 패치 프로세스 접근 방식을 따르면(FILE1만 교체하고 FILE2를 건드리지 않음), FILE2에 대한 충격의 대응하는 적절한 고려가 없기 때문에, 패치는 문제를 정정하지 않을 것이다.
동적 코드 애플리케이션에서 사전-컴파일 최적화에 의해 야기된 잠재적 문제와 복잡도를 해결하기 위해, 종래의 솔루션은 보통, 애플리케이션 내의 모든 소스 코드 파일을 교체하는 전체 애플리케이션 범위 사전-컴파일을 사용하고, 모든 소스 파일을 리로드한다(예컨대, 정적 코드 접근 방식과 유사함). 그러나 이러한 종래의 접근 방식은 주로 동적 유형의 소스 코드와 관련된 유지 및 업로드 이점을 감소 또는 제거하는 3가지 문제점을 야기한다. 첫 번째 문제점은 패치 작업량의 증가이다. 패치가 먼저 수정된 파일로 교체되고 리로드하도록 보내지지만, 종래의 접근 방식은 모든 파일을 전세계적으로 교체 및 리로드하는 것이 필요하다. 두 번째 문제점은 사전-컴파일 복잡도의 증가이다. 전세계적 범위의 사전-최적화는 기업 애플리케이션에 대해 주로 긴 시간(예컨대, 수 시간, 수 일 등)이 필요하다. 기존 핫 패치 모드에서, 이러한 단계는 필요하지 않다. 세 번째 문제점은 핫 패치 연속 실행 특징의 상실이다. 일부 파일이 특정 유형(예컨대, 기본 라이브러리, 부트 로더, 등)에 속하며 애플리케이션을 중지하기 않고는 교체될 수 없기 때문에, 모든 파일을 리로드하기 위해 애플리케이션 관리자가 애플리케이션을 중지할 가능성이 있다.
동적 스크립트 언어, 예컨대, 자바 스크립트, 파이썬, PHP, 루아 등은 큰 애플리케이션을 만드는 데 널리 사용된다. 일부 예시는, 웹 프런트 엔드 애플리케이션(예컨대, 지도, 지메일, 캘린더, 문서와 같은 툴에 기반한 구글 웹, 등), 웹 백 엔드 애플리케이션(예컨대, PHP로 된 페이스북 애플리케이션, 등), 게임 산업 애플리케이션(예컨대, 루아로 된 블리자드의 월드 워 크래프트, 등) 및 모바일 애플리케이션(예컨대, 오브젝트-씨로 된 애플의 iOS 애플리케이션, 등)을 포함한다. 큰 애플리케이션에서 동적 스크립트 언어의 일부 파일을 유지 관리하고 업데이트하는 종래의 접근 방식은 일반적으로 시간 및 자원 집중적이다.
효율적이고 효과적인 애플리케이션 프로그램 유지 관리 및 패치 분배를 가능하게 하는 방법 및 시스템이 설명된다. 일 실시예에서, 장치는, 애플리케이션 소스 코드 파일에 대한 업데이트를 가능하게 하는 핫 패치(hot patch) 파일을 생성하기 위한 명령 및 애플리케이션 소스 코드 파일을 저장하는 메모리 - 애플리케이션 소스 코드 파일은 업데이트 전의 업데이트 소스 코드 파일과 초기 소스 코드 파일을 포함함 - ; 및 핫 패치 파일을 생성하도록 작동 가능한 프로세서를 포함한다. 핫 패치 파일은, 초기 소스 코드 파일의 제1 세트의 최적화 및 별개의 소스 코드 파일의 제2 세트의 최적화의 결과인 최적화된 한 쌍의 소스 코드 파일 세트 사이의 차이에 기초하여 생성된다. 제2 세트는, 제1 세트로부터 지능적으로 선택된 연관 소스 코드 파일과 업데이트 소스 코드 파일을 포함하고, 제2 세트는 제1 세트보다 적은 소스 코드 파일을 가진다. 소스 코드 파일은 동적 스크립트 언어 파일이다. 소스 코드 파일의 제1 세트는 업데이트 전의 초기 소스 코드 파일을 포함한다.
하나의 대표적 구현에서, 프로세서는 제1 세트 내의 초기 소스 코드 파일 간의 연관성을 추적하는 충격 그래프(impact graph)를 생성하고, 충격 그래프는 제1 세트에서 지능적으로 선택된 연관 소스 코드 파일을 식별하는 데 사용된다. 연관 초기 소스 코드 파일에 관한 충격 그래프의 질의는 2개 카테고리의 결과를 리턴(return)하고, 상기 2개의 카테고리는, 업데이트 소스 코드 파일 내의 변경으로 인해 잠재적으로 변하는 초기 소스 코드 파일; 및 업데이트 소스 코드 파일에 대한 입력을 포함하는 초기 소스 코드 파일을 포함한다. 업데이트 소스 코드 파일에 포함된 스테이트먼트(statement)는 초기 소스 코드 파일 중 하나의 초기 소스 코드 파일 내의 스테이트먼트와 상이하고, 스테이트먼트에 관한 질의는 연관 소스 코드 파일에 관한 충격 그래프를 질의하는 데 사용된다. 소스 코드 파일 중 일부는 동적 모듈에 포함되고, 초기 패치 파일은 동적 모듈과 연관되어 있다. 초기 패치 파일은 초기 소스 코드 파일 중 하나의 초기 소스 코드 파일 내의 버그를 정정하는 데 사용되며, 핫 패치 파일은 제1 초기 소스 코드 파일에 대한 변경을 포함하고, 업데이트 소스 코드 파일은 다른 초기 소스 코드 파일에 대한 수정을 포함한다.
일 실시예에서, 애플리케이션 파일을 업데이트하는 방법이 구현된다. 제1 사전-컴파일 최적화(pre-compile optimization)는 복수의 원(original) 소스 코드 파일에 실행되어 복수의 사전-최적화된 원 소스 코드 파일을 생성한다. 초기 패치 파일은 복수의 원 소스 코드 파일 중 제1 원 소스 코드 파일에 대한 변경과 연관되어 있다. 상기 방법은 복수의 초기 소스 코드 파일 중 제2 파일이 초기 패치 파일과 연관되어 있는지 결정한다. 복수의 원 소스 코드 파일 중 제2 파일이 초기 패치 파일과 연관되어 있으면, 복수의 원 소스 코드 파일 중 제2 파일은 충격이 가해진(impacted) 소스 코드 파일의 세트에 포함된다. 제2 사전-컴파일 최적화는 초기 패치 파일과 충격이 가해진 소스 코드 파일에 수행되며, 그 결과는 복수의 사전-최적화된 패치 연관 소스 코드 파일이다. 새로운 핫 패치 파일은 1) 복수의 사전-최적화된 패치 연관 소스 코드 파일의 비교 및 2) 대응하는 복수의 사전-최적화된 원 소스 코드 파일에 기초하여 생성된다. 새로운 핫 패치 파일은, 복수의 사전-최적화된 원 소스 코드 파일 중 대응하는 파일과 상이한 상기 복수의 사전-최적화된 패치-연관된 소스 코드 파일 중 하나를 포함한다.
다른 실시예에서, 장치는, 핫 패치 파일에 의해 충격이 가해지는 애플리케이션 프로그램의 소스 코드 파일을 업데이트하도록 작동 가능하며, 핫 패치 파일이 부트로더(bootloader) 파일이 아니면 핫 패치 파일을 로딩하는 동안 핫 패치 파일에 의해 충격이 가해지지 않은 추가적인 소스 코드 파일을 재로딩하지 않고 상기 애플리케이션을 계속 실행하는 프로세서를 포함한다. 또한, 프로세서에 대한 정보 및 명령을 저장하는 메모리가 포함되며, 여기서 정보는 핫 패치 파일에 의해 충격이 가해지는 파일을 포함하는 애플리케이션과 연관된 복수의 파일을 포함한다. 복수의 애플리케이션 파일은 동적 스크립트 언어 파일이다. 핫 패치 파일과 초기 업데이트 파일은 상이하다.
프로세서는 복수의 애플리케이션 파일 중 하나를 핫 패치 파일로 교체하고, 핫 패치 파일의 컴파일을 회피하면서 이것을 언어 인터프리터에 리로드한다.
여러 상이한 결과를 야기하는 다양한 기술들이 사용될 수 있는 것(예컨대, 상수 전파(constant propagation), 불필요한 코드의 제거(dead code elimination), 루프 불변자 코드 모션(loop invariant code motion) 등)으로 이해된다. 최적화 접근(예컨대, 최적화 동안 사용되는 처리 자원, 최적화된 런타임 파일에서 도입된 복잡도, 등)에 대해 결정할 때 고려될 수 있는 다양한 요소들도 있다. 본 명세서에서 사용되는 용어 최적화는 특정 고려 사항 또는 기준(예컨대, 최적화에 의해 도입된 복잡도 대 런타임 속도의 증가)에 기초하여 원 소스 코드 파일보다 성능을 향상시키는 파일의 세트를 생성하는 프로세스이고, 용어 최적화는 프로그래밍 및 컴파일링, 등을 위해 컴퓨터 분야에서 사용되는 용어이며, 본 명세서에서는 그러한 목적을 위해 사용된다. 본 명세서에서 사용되는 용어 최적화는 애플리케이션 런타임 속도의 절대적 “최적화”일 필요는 없다(예컨대, 가장 빠름, 최적, 등).
본 명세서의 일부를 형성하며 통합되는 첨부된 도면은 본 발명의 원리의 대표적인 도해를 위해 포함되는 것이며, 본 발명을 그에 도시된 특정 구현으로 한정하려는 의도는 아니다. 도면은 구체적으로 다르게 지시되지 않는 한 비례되는 것은 아니다.
도 1은 본 발명의 하나의 실시예에 따른 대표적인 컴퓨터 프로그래밍 환경의 블록도이다.
도 2는 본 발명의 하나의 실시예에 따른 대표적인 충격 그래프(impact graph)이다.
도 3은 본 발명의 하나의 실시예에 따른 대표적인 애플리케이션 소스 코드 파일의 블록도이다.
도 4는 본 발명의 하나의 실시예에 따른 대표적인 시스템 아키텍처의 블록도이다.
도 5는 본 발명의 하나의 실시예에 따른 대표적인 업데이트 구현의 블록도이다.
도 6은 본 발명의 하나의 실시예에 따른 대표적인 런타임 소스 코드 파일의 블록도이다.
도 7은 본 발명의 하나의 실시예에 따른 대표적인 방법의 흐름도이다.
본 개시의 다양한 실시예에 대한 참조가 상세하게 다루어질 것이며, 그 예들은 첨부된 도면에 도시된다. 이러한 실시예와 함께 설명되지만, 이들은 본 개시를 이러한 실시예로 한정하려는 의도는 아니라는 것을 이해할 것이다. 반대로, 본 개시는, 첨부된 청구항에 의해 정의되는 것과 같은 본 개시의 사상 및 범위 내에 포함될 수 있는 대체, 변형, 및 등가를 포함하도록 의도된다. 뿐만 아니라, 본 개시의 아래의 상세한 설명에서, 다양한 구체적 세부 사항이 본 개시의 충분한 이해를 제공하기 위해 제시된다. 그러나, 본 개시는 이러한 구체적 세부 사항 없이도 실행될 수 있는 것으로 이해될 것이다. 다른 예시들에서, 널리 알려진 방법, 절차, 구성 요소 및 회로는 본 개시의 양태들을 불필요하게 모호하게 하지 않도록 상세하게 설명되지 않는다.
효율적이고 효과적인 애플리케이션 프로그램 관리 및 패치 분배를 가능하게 하는 컴퓨터 프로그램 개발을 위해 사용되는 방법 및 시스템이 설명된다. 일 실시예에서, 최적화된 동적 스크립트 파일은 작고 효율적인 핫 패치 파일(hot patch files)로 “패치(patched)”되거나 업데이트된다. 생성된 핫 패치 파일은 복수의 전세계적 사전-컴파일 최적화 프로세스를 회피하기 위해 업데이트 충격 파일을 활용한다. 런타임 환경에서, 핫 패치 파일은, 핫 패치 파일에 의해 충격이 가해지지 않은 소스 코드 파일을 리로드(reload)할 필요를 최소화하면서, 애플리케이션 작동 지속을 가능하게 한다. 업데이트 또는 패치는 다양한 애플리케이션 유지 관리 환경 및 업데이트 환경(예컨대, 분배, 로컬, 네트워크, 등)과 호환된다.
도 1은 본 발명의 하나의 실시예에 따른 대표적인 환경(100)의 블록도이다. 환경(100)은 시스템 101과 시스템 102를 포함한다. 시스템 101과 102는 서로 멀리 떨어져 있을 수 있다. 시스템 101은 시스템 102로 포워딩되는 핫 패치 파일(103)을 생성한다. 시스템 102는 애플리케이션을 실행하고, 핫 패치 파일(103)을 이용하여 애플리케이션에 포함된 파일을 업데이트한다.
시스템 101은 처리부(110)와 메모리(120)를 포함한다. 처리부(110)는 복수의 원(original) 애플리케이션 파일과 초기 패치 파일에 기초하여 핫 패치 파일을 생성한다. 초기 패치 파일은 업데이트되는 원 애플리케이션 파일 중 하나에 대응한다. 처리부(110)는 복수의 원 애플리케이션 파일에 제1 최적화를 실행하여 최적화된 파일의 제1 세트를 생성한다. 초기 패치 파일과 연관되어 있는 원 애플리케이션 파일이 식별되고, 초기 패치 파일에 포함된 변경을 반영하여 업데이트된다.
처리부(120)는 최적화 파일의 제2 세트를 생성하기 위해 결과적으로 업데이트된 파일에 제2 최적화를 실행한다. 최적화 파일의 제1 세트는 파일의 제2 세트에 비교된다. 제1 세트의 파일 내의 대응하는 파일과 상이한 제2 세트의 파일 내의 파일은 핫 패치 파일에 포함된다.
처리부(110)는 메모리(120)에 저장된 정보에 액세스하고 이를 활용한다. 정보는, 복수의 원 애플리케이션 파일(122), 초기 패치 파일(123), 및 핫 패치 파일(103)의 생성에서 프로세서를 지시하기 위한 명령을 포함하며, 상기 명령은 초기 패치 파일(123) 내의 업데이트에 의해 충격이 가해지는 원 애플리케이션 파일(122)의 식별 및 업데이트를 포함한다. 원 애플리케이션 파일(122)은 소스 코드 파일(131, 132, 133, 및 134)을 포함한다. 초기 패치 파일(123)은 소스 코드 파일(151)을 포함한다.
시스템(102)은 처리부(170)와 메모리(180)를 포함한다. 처리부(170)는 애플리케이션 실행 동안 핫 패치 파일(103)에 액세스한다. 적어도 하나의 애플리케이션 파일은 핫 패치 파일(102)에 의해 충격이 가해지며, 처리부(170)는 핫 패치 파일(103)에 의해 충격이 가해지는 파일(예컨대, 패치된 코드 파일(193) 등)을 업데이트한다. 핫 패치 파일(103)이 부트로더(bootloader) 파일이 아니면, 애플리케이션은 중지되지 않고, 핫 패치 파일(103)에 의해 충격이 가해지지 않는 파일(예컨대, 소스 코드 파일(191, 192, 194) 등)은 리로드되지 않는다. 따라서, 전세계적 사전-최적화 및 전세계적 재로딩 프로세스가 필요하지 않다. 프로세서(170)는 메모리(180) 내에 저장된 정보에 액세스하고 이를 활용한다. 정보는, 핫 패치 파일(103) 내에 포함된 업데이트에 의해 충격이 가해지는 파일(예컨대, 패치된 코드 파일(193) 등)을 포함하는 애플리케이션과 연관된 복수의 파일(예컨대, 소스 코드 파일 191, 192, 194 등)을 포함한다.
하나의 대표적인 구현에서, 시스템(101)은 애플리케이션 밴더에 위치될 수 있으며, 시스템(102)은 원격 고객 위치에 위치된다. 고객은 시스템(102) 상에 애플리케이션을 공급하는 밴더를 실행한다. 밴더는, 애플리케이션 파일을 업데이트하기 위해 고객에게 포워딩되는 핫 패치 파일(103)의 생성을 포함하여, 애플리케이션의 생성, 분배, 및 관리용으로 시스템(101)을 사용한다. 핫 패치 파일은 다양한 방식(예컨대, 컴팩트 디스크, 플래시 드라이브 등과 같은 휴대용 컴퓨터로 판독 가능한 매체에서, 네트워크를 통해)으로 시스템(102)과 통신될 수 있다.
여러 가지 상이한 결과를 생성하는 다양한 기술들(예컨대, 상수 전파(constant propagation), 불필요한 코드의 제거(dead code elimination), 루프 불변자 코드 모션(loop invariant code motion) 등)이 사용될 수 있다는 것으로 이해된다. 최적화 접근 방식(예컨대, 최적화 동안 사용되는 처리 자원, 최적화된 런타임 파일에서 도입된 복잡도, 등)을 결정할 때 고려될 수 있는 다양한 요소들도 있다. 본 명세서에서 사용되는 용어 최적화는 특정 고려 사항 또는 기준(예컨대, 최적화에 의해 도입된 복잡도 대 런타임 속도의 증가)에 기초하여 원 소스 코드 파일보다 성능을 향상시키는 파일의 세트를 생성하는 프로세스이고, 용어 최적화는 프로그래밍 및 컴파일링, 등을 위해 컴퓨터 분야에서 사용되는 용어이며, 본 명세서에서는 그러한 목적을 위해 사용된다. 본 명세서에서 사용되는 용어 최적화는 애플리케이션 런타임 속도의 절대적 “최적화”일 필요는 없다(예컨대, 가장 빠름, 최적, 등).
일 실시예에서, 충격 그래프는 초기 업데이트 또는 패치 파일과 연관된 원 애플리케이션 파일을 식별하는 데 사용된다. 충격 그래프는 원 또는 초기 소스 코드 파일의 최적화 동안 생성된다. 이 그래프는 노드가 소스 코드 파일을 나타내며 에지(edge)가 최적화의 충격을 나타내는 방향 그래프로서, 최적화의 데이터 소스에서 시작하여 최적화된 파일에서 종료한다. 일 예시에서, 제1 파일 FILE1은 상수 ABC=100을 정의하고, 제2 파일 FILE2는 작동에서 ABC 상수를 사용한다. 상수 전파 최적화는 FILE2 내의 ABC를 100으로 교체한다. 이 예시에서, 그래프 내에 FILE1에서 FILE2로의 에지가 있다.
일 예시 실시예에서, 컴퓨터로 구현되는 시스템(101)은, 프로세서에서 복수의 원 소스 코드 파일에 제1 사전-컴파일 최적화를 실행하여 복수의 사전-최적화된 원 소스 코드 파일을 생성하는 제1 사전-컴파일 최적화 모듈, 복수의 원 소스 코드 파일 중 하나에 대한 변경과 관련된 초기 패치 파일에 액세스하는 패치 파일 액세스 모듈, 복수의 원 소스 코드 파일 중 제2 파일이 초기 패치 파일과 연관되어 있는지를 결정하는 결정 모듈 - 상기 제2 파일이 초기 패치 파일과 연관되어 있으면 제2 파일은 충격이 가해진 소스 코드 파일의 세트에 포함됨 - , 초기 패치 파일과 충격이 가해진 소스 코드 파일의 세트에 제2 사전-컴파일 최적화를 실행하는 제2 사전-컴파일 최적화 모듈 - 그 결과는 복수의 사전-최적화된 패치-연관 소스 코드 파일임 - , 및 복수의 사전-최적화된 패치-연관 소스 파일과 대응하는 복수의 사전-최적화된 원 소스 코드 파일을 비교하고 새로운 핫 패치 파일을 식별하는 비교 모듈을 포함하고, 새로운 핫 패치 파일은, 복수의 사전-최적화된 원 소스 코드 파일 중 대응하는 파일과 상이한 복수의 사전-최적화된 패치-연관 소스 코드 파일 중 하나의 파일을 포함한다. 일부 실시예에서, 컴퓨터로 구현되는 시스템(101)은 실시예에서 설명되는 단계들 중 임의의 하나 또는 그 조합을 수행하기 위한 다른 또는 추가적인 모듈을 포함할 수 있다.
도 2는 본 발명의 하나의 실시예에 따른 대표적인 충격 그래프의 다이어그램이다. 충격 그래프는 복수의 원 소스 코드 파일에 대응하는 복수의 노드 A, B, C, D, E, F, 및 G를 포함하며, 그래프의 각 에지는 최적화 작동의 충격을 나타낸다(최적화의 데이터 소스에서 시작하여 최적화된 파일에서 종료함). 노드 A는 다양한 기능을 수행하는 노드 B와 C에 대한 상수를 정의한다. 노드 A의 출력은 노드 B와 C에 대한 입력이고, 노드 B와 C의 출력은 노드 D에 대한 입력이다. 노드 C의 출력은 또한 노드 E에 대한 입력이며, 노드 E의 출력은 노드 E와 F에 대한 입력이다. 핫 패치 상태 동안, 패치되거나 고정된 원 소스 코드 파일이 있으면, 그래프는 관련되거나 연관된 파일(예컨대 노드 B와 C는 노드 D와 연관되어 있음, 등)을 위치시키거나 선택하는 데 사용되며, 선택된 파일은 최적화에서 사용된다. 소스 코드 파일과 연관된 업데이트는 ‘소규모’ 사전-최적화(예컨대, 원래 수행되는 전세계적 최적화보다 작은 범위 또는 수의 소스 코드 파일)에서 사용된다. 선택은 여러 상이한 소스 코드 파일을 다룰 수 있다.
종래의 접근 방식은 연관된 파일을 식별하기 위해 충격 그래프를 생성하지 않으며 이를 사용하지 않는다. 하나의 대표적인 구현에서, 충격 그래프의 질의는, 2개 카테고리의 노드: 패치 파일과 연관된 노드를 통해 접근 가능한 그래프의 노드, 및 패치 파일과 연관된 노드에 접근할 수 있는 그래프의 노드를 포함하는 출력을 생성한다. 첫 번째 카테고리는 패치 파일의 수정으로 인해 변경될 수 있는 파일이고, 두 번째 카테고리는 패치 파일이 사전-컴파일 최적화를 하는 데 사용하는 파일이다.
일 실시예에서, 소스 코드 파일은 상이한 카테고리 또는 소스 코드 파일의 세트에 포함된다. 예를 들어, 패치 파일이 도입되기 전에 사용자 기록 프로그램 코드(예컨대, 기록 프로그램 명령, 선언, 스테이트먼트(statements), 기능 등)에 의해 생성된 소스 코드 파일을 포함하는 초기 애플리케이션 파일의 세트가 있다. 사용자 기록 변경에 의해 생성되는 소스 코드 파일 또는 초기 애플리케이션 세트의 소스 코드 파일에 대한 업데이트를 포함하는 업데이트 일차 파일(update primary files)의 세트가 있다. 원 소스 코드 파일에 대한 컴파일 최적화의 결과(“사전-최적화된” 파일로도 지칭됨), 등인 소스 코드 파일의 세트가 있다.
도 3은 본 발명의 일 실시예에 따른 대표적인 애플리케이션 소스 코드 파일의 블록도이다. 소스 코드 파일은 다양한 카테고리 또는 세트에 배열되어 있다. 초기 파일 세트(210)는 소스 코드 파일 211, 212, 213, 214, 215, 216, 217, 218 및 219를 포함한다. 업데이트 일차 파일 세트(220)는 소스 코드 파일(221)을 포함하고 업데이트 일차 파일 세트(230)은 소스 코드 파일(231)를 포함한다. 업데이트 이차 파일 세트(240)는 소스 코드 파일(241과 242)을 포함한다. 업데이트 이차 파일 세트(250)은 소스 코드 파일(251과 252)을 포함한다. 상이한 카테고리 또는 세트 내의 소스 코드 파일은 서로에 대한 다양한 작동 관계를 가질 수 있으며, 이는 서로 직접적으로 대응하는 것, 서로 간접적으로 연관되어 있는 것 및 서로 어떠한 작동 관계를 가지지 않는 것을 포함한다. 소스 코드 파일의 서로에 대한 관계를 결정하고 추적하는 것은 적절한 소스 코드 파일이 패치의 결과로서 업데이트되는 것을 보장하기 위해 중요하다.
일 실시예에서, 초기 파일 세트 내의 제1 소스 코드 파일은, 초기 패치 파일의 특징 내의 변경 또는 업데이트에 직접적으로 대응하는, 사용자에 의한 특징 변경(예컨대, 명령을 재기록하는 것, 상수의 정의, 등)을 포함한다. 예를 들어, 소스 코드 파일(213) 명령 CAR=GID-50은 소스 코드(221) 명령 변경의 명령 변경에 직접적으로 대응하며, 소스 코드 파일(215) 상수 정의 FT=175는 소스 코드(231) 상수 정의 FT=148 내의 변경에 직접적으로 대응한다. 초기 애플리케이션 파일 세트 내의 제2 소스 코드 파일은 초기 패치 파일 내의 변경과 간접적으로 연관되어 있는 특징을 포함한다. 예를 들어, 소스 코드 파일(211)은, 초기 패치 파일(221)에 의해 직접적으로 변경되지 않으나, 초기 패치 파일(221)에서 변경된 명령 CAR=CID+10과 간접적으로 연관되어 있는 상수 정의 GID=200을 포함한다. 유사하게, 소스 코드 파일(214)은, 초기 패치 파일(221)에 의해 직접적으로 변경되지 않으나, 초기 패치 파일(221)에서 변경된 명령 CAR=CID+10과 간접적으로 연관되어 있는 명령 Print(CAR)를 포함한다(초기 패치 파일(221)은 PRINT 명령을 “직접적으로” 포함하지 않으나, 패치 파일(221) 내의 변경이 파일(214)에 의해 변수 CAR의 최종 프린트 출력을 변경한다는 점에서).
하나의 대표적 구현에서, 초기 애플리케이션 세트 내에 포함된 일부 소스 코드 파일(예컨대, 초기 패치 파일과 간접적으로 연관되어 있는 소스 코드 파일)은 업데이트 이차 파일 세트에도 포함된다. 업데이트 이차 세트(240)에 포함된 소스 코드 파일(241과 242)은 초기 파일 세트(210) 내의 소스 코드 파일(211과 214)과 동일하고, 업데이트 이차 세트(250)에 포함된 소스 코드 파일(251과 252)은 초기 파일 세트(210) 내의 소스 코드 파일(218과 219)과 동일하다. 업데이트 이차 파일 세트는 다양한 구성을 가질 수 있는 것으로 이해된다. 초기 세트로부터의 소스 코드 파일이 업데이트 이차 파일 세트에 의해 직접적으로 사용될 수 있거나 또는 업데이트 이차 파일 세트의 복사본이 업데이트 이차 파일 세트에 의해 사용될 수 있다.
하나의 대표적 구현에서, 변하는 사전-최적화된 업데이트된 파일만 핫 패치에 포함되어 업로드된다. 입력 패치 파일보다 충격이 가해진 파일이 더 많을 수 있으나, 그 범위는 일반적으로 애플리케이션 내의 모든 소스 코드 파일을 포함하는 것보다 훨씬 작다. 충격이 가해진 파일의 소형 범위로 인해, 사전-최적화는 종래의 전체 범위 사전-최적화보다 빠르다. 업데이트된 파일이 부트로더(bootloader)에 속하지 않으면, 충격이 가해진 파일은 부트로더에 속하지 않을 것이므로, 애플리케이션 관리자는 애플리케이션을 중단하지 않고도 패치를 적용할 수 있다.
도 4는 본 발명의 일 실시예에 따른 대표적인 아키텍처의 블록도이다. 초기 파일 세트(310)(예컨대, 소스 코드 파일(311, 312, 313, 및 314)를 포함함)는 사전-컴파일 최적화기(381)에 의해 최적화되어 초기 사전-최적화된 파일 세트(320)(예컨대, 소스 코드 파일(321, 322, 323 및 324)을 포함함)를 생성하며, 런타임 애플리케이션(395)에 포워딩된다. 사전-컴파일 최적화기는, 소스 코드 파일(311, 312, 313 및 314) 간의 연관성을 유용하게 추적(예컨대, 어떤 파일이 다른 파일에 의해 사용된 값을 포함하는지, 어떤 파일이 다른 파일의 작동 또는 명령에 충격을 주는 명령을 포함하는지 추적)하는 충격 그래프(370)를 생성하는 데도 사용된다.
업데이트 일차 파일 세트(330)는 애플리케이션에 대한 변경 또는 업데이트를 포함하는 소스 코드 파일(331)를 포함한다. 하나의 대표적 구현에서, 초기 패치 파일(331) 내의 변경은 소스 코드 파일(312)에 직접적으로 대응하고, 소스 코드 파일(312)은 소스 코드(312)에 대한 “대체”이다. 소스 코드 파일(331)이 업데이트 일차 파일(330)에 포함되고 원 소스 코드 파일(312)에 직접적으로 대응함에도, 소스 코드 파일(331)은 핫 패치 파일(390)에 포함된 “대체” 소스 코드 파일(391)에 직접적으로 대응할 필요는 없다는 것을 유의하며, 상세한 설명의 이후의 부분에서 추가로 설명될 것이다. 다른 대표적 구현에서, 업데이트 일차 파일은 2개 이상의 초기 패치 파일(331)을 포함하는 것으로 이해된다.
원 소스 코드 파일 내의 어느 파일이 초기 패치 파일(331)과 간접적으로 연관되어 있는지를 묻는 질의는 충격 그래프(370)에 포워딩된다. 앞서 설명된 바와 같이, 충격 그래프(370)는 원 애플리케이션 파일 간의 연관성을 추적한다. 이것은 다른 소스 코드 파일(311, 313, 및 314)에 대한 소스 코드 파일(312)의 간접적 연관성을 추적하는 것을 포함한다.
하나의 대표적 구현에서, 충격 그래프(370)는 소스 코드 파일(312)을 소스 코드 파일(314)와 연관되어 있는 것으로 식별하고, 소스 코드 파일(312)이 초기 패치 파일(331)에 직접적으로 대응하기 때문에, 충격 그래프(370)는 소스 코드 파일(314)이 초기 패치 파일(331)과 연관되어 있는 것을 지시한다. 소스 코드(331)가 액세스되고 업데이트 이차 세트(340)에 소스 코드 파일(341)로 포함된다. 초기 파일 세트(310)에 포함된 다른 소스 코드 파일은 다른 초기 패치 파일(도시되지 않음)과 연관될 수 있는 것으로 이해된다. 업데이트 일차 파일 세트(330)로부터의 초기 패치 파일(331)과 업데이트 이차 파일 세트(340)로부터의 소스 코드 파일(341)은 사전-컴파일러 최적화기(322)에 의해 최적화되며, 이는 업데이트된 사전-최적화된 파일 세트(350)(예컨대, 소스 코드 파일(351과 352)을 포함함)를 출력한다.
초기 사전-최적화된 파일 세트(320)(예컨대, 소스 코드 파일(321, 322, 323 및 324)을 포함함)와 업데이트된 사전-최적화된 파일 세트(350)(예컨대, 소스 코드 파일(351 및 352)을 포함함)은, 업데이트된 사전-최적화된 파일 세트(380)에 포함되는 어느 소스 코드 파일이 초기 사전-최적화된 파일 세트(320)의 소스 코드 파일과 상이한지를 경정하는 비교기(383)에 포워딩된다. 결과적인 상이한 소스 코드 파일(391)은 핫 패치 파일 세트(390)에 포함된다. 핫 패치 파일 세트(390)는 애플리케이션(340)에 포워딩된다. 하나의 대표적인 구현에서, 초기 사전-최적화된 파일(320)은 애플리케이션을 실행하는 데 사용되며, 나중에, 핫 패치 파일 세트(390)는 애플리케이션(393)에 포워딩되어 애플리케이션을 중단하지 않고 애플리케이션을 업데이트하는 데 사용된다.
일 실시예에서, 도 4의 상위 절반 부분에서 수행되는 사전-컴파일 최적화(381)는 초기 파일 세트(310)에 포함된 파일의 전세계적 최적화이다(예컨대, 종래의 전세계적 접근과 유사함). 도 4의 하위 절반 부분에서 수행되는 사전-컴파일 최적화(382)는 일차 업데이트 파일 세트와 업데이트 이차 파일 세트 내의 소스 코드 파일의 결합된 최적화이며, 이는 초기 파일 세트(310) 내의 다른 소스 코드 파일의 재-최적화를 방지한다. 초기 파일 세트(310)에 포함되는 소스 파일은 애플리케이션 파일에 기초한 동적 스크립트 언어일 수 있다.
도 5는 본 발명의 일 실시예에 따른 대표적인 업데이트 구현의 블록도이다.
초기 파일 세트(410)는 사전-최적화기(481)에 대한 입력인 4개의 소스 코드 파일(411, 412, 413 및 414)를 포함하며, 이는 곧 초기 사전-최적화된 파일 세트(420)를 출력한다. 소스 코드 파일(413)에 포함된 CAR=GID-50 명령과 소스 코드 파일(411) 내의 FID와 GID 변수 정의는 초기 사전-최적화된 파일 세트(420)에서 더 이상 사용되지 않으며, 그 결과, 이러한 스테이트먼트는 소스 코드 파일(421과 423)에서 제거된다. 사전-최적화기(481)는 충격 그래프(470)도 생성한다. 초기 패치 파일(221)은, 소스 코드 파일(411과 414)이 소스 코드 파일(413)에 간접적으로 연관되어 있다는 것을 지시하는 충격 그래프(470)를 질의하는 데 사용된다. 소스 코드 파일(331, 411, 및 414)은 최적화되어 업데이트된 사전-최적화된 세트(450)(소스 코드 파일(451, 452, 및 453)을 포함함)가 된다. 초기 사전-최전화된 파일 세트(420)와 업데이트된 사전-최적화된 파일 세트(450) 내의 소스 코드 파일은 비교기(483)에 의해 비교되고, 상이한 것으로 식별된 소스 코드 파일은 핫 패치 파일(490)에 포함된다(예컨대, 소스 코드 파일(491)). 비교 후에는 소스 코드 파일(424)(“FILE4”)만 변경되고, 최종 핫 패치 파일은 새로운 소스 코드 파일(453)(새로운 “FILE4”)이다. 마지막으로 핫 패치 파일 세트는 런타임 애플리케이션에 적용된다.
도 6은 본 발명의 일 실시예에 따른 런타임 소스 코드 파일의 대표적인 구현의 블록도이다. 애플리케이션 런타임 파일(510)은 업데이트 전에 소스 코드 파일(421, 422, 423, 및 424)을 포함한다. 애플리케이션 런타임 파일(520)은 업데이트 후에 소스 코드 파일(421, 422, 423, 및 453)을 포함한다. 명령 PRINT(150)를 가지는 소스 코드 파일(424)은 소스 코드 파일(452) PRINT(150)를 포함하는 핫 패치 파일로 교체된다. 생성된 핫 패치 파일은 초기 패치 파일과 다를 수 있다. 런타임 애플리케이션에 초기 패치 파일(431)을 단순히 적용하는 것은 정확하고 신뢰성 있는 결과를 생산하지 않는다. 초기 패치 파일(431)이 업데이트된 애플리케이션 런타임 파일(520)에 단순히 적용되면, 패치 파일은 GID 정의를 찾을 수 없고(소스 코드 파일(421)에 포함되지 않기 때문), 부정확한 원 값(150)이 업데이트된 값(210) 대신 출력될 수 있다.
도 7은 본 발명의 일 실시예에 따른 대표적인 방법(700)의 흐름도이다. 방법(700)의 작동은 컴퓨터 시스템의 프로세서에 의해 수행될 수 있다(예컨대, 처리부(110) 등과 유사하게).
블록 710에서, 제1 사전-컴파일 최적화 프로세스는 복수의 원 소스 코드 파일에 실행되어 복수의 사전-최적화된 원 소스 코드 파일을 생성한다.
블록 720에서, 복수의 원 소스 코드 파일 중 제1 소스 코드 파일에 대한 변경과 관련된 초기 패치 파일이 액세스된다.
블록 730에서, 복수의 원 소스 코드 파일 중 제2 소스 코드 파일이 초기 패치 파일과 연관되어 있으면 결정이 행해진다. 복수의 원 소스 코드 파일 중 제2 소스 코드 파일이 초기 패치 파일과 연관되어 있으면, 복수의 원 소스 코드 파일 중 제2 소스 코드 파일은 충격이 가해진 소스 코드 파일의 세트에 포함된다. 일 실시예에서, 복수의 원 소스 코드 파일 중 다른 하나가 초기 패치 파일과 연관되어 있는지 결정하는 프로세스는, 1) 복수의 원 소스 코드 파일의 서로에 대한 연관성을 포함하는 충격 그래프를 생성하는 것, 및 2) 복수의 원 소스 코드 파일 중 어느 것이 패치 소스 코드 파일과 연관되어 있는지를 식별하기 위해 충격 그래프를 질의하는 것을 포함한다.
블록 740에서, 제2 사전-컴파일 최적화는 초기 패치 파일과 충격이 가해진 소스 코드 파일의 세트에 실행되고, 그 결과는 사전-최적화된 복수의 패치-연관 소스 코드 파일이다.
블록 750에서, 복수의 사전-최적화된 패치-연관 소스 코드 파일은 대응하는 복수의 사전-최적화된 원 소스 코드 파일에 비교된다. 비교의 결과는 새로운 핫 패치 파일 내의 포함될 소스 코드 파일을 식별하는 데 사용된다. 새로운 핫 패치 파일은 복수의 사전-최적화된 원 소스 코드 파일 중 대응하는 하나와 상이한 복수의 사전-최적화된 패치 소스 코드 파일 중 하나를 포함한다. 핫 패치 파일과 초기 패치 파일은 상이하다. 사전-최적화된 원 소스 코드 파일보다 적게 사전-최적화된 패치-연관 소스 코드 파일이 있다.
일 실시예에서, 복수의 원 소스 파일 중 일부분은 동적 모듈에 포함되고, 패치 파일은 동적 모듈과 연관되어 있다. 새로운 유지 관리 및 업데이트 접근 방법은 소스 파일에서 사전-컴파일된 여러 동적 모듈을 사용하는 시스템에서 패칭 작업을 감소시키는 데 사용된다. 모듈은 동적 또는 정적 언어로 기록되며, 모듈은 동적 교체를 지원한다. 소스 파일 내에 버그 픽스(bug fix)가 있으면, 필요한 동적 모듈이 식별되고 동적 모듈 레벨에서 교체된다. 동적 모듈은 동적 교체를 지원하고 동적 모듈은 핫 패치 작동에서 교체된다.
일 실시예에서, 추가적인 최적화가 구현된다. 충격 그래프의 에지 소스는 파일이며, 입도(granularity)는 스테이트먼트 레벨로(또는 컴파일러 추상 문구 트리 레벨(compiler abstract syntax tree node level)로) 감소된다. 패칭 프로세스에서, 패치 파일 내의 변경된 스테이트먼트가 식별되어 충격 그래프를 질의하는 데 사용된다. 이 최적화는 질의 결과의 범위를 더 감소시킬 수 있으며, 사전-최적화와 패칭 시간을 감소시킬 수 있다.
애플리케이션에 기초한 종래의 정적 언어의 업데이트 또는 패치에 대하여, 본 명세서에서 설명되는 새로운 실시예는 시스템 구조 및 패칭 프로세스 모두 상이하다. 패칭 시스템 구조 측면에서, 새로운 프로세스는 종래의 정적 언어와 다르게 충격 그래프를 도입한다. 이 프로세스 측면에서, 충격 그래프 질의와 사전-컴파일 결과 비교에 관한 추가적인 단계가 있다. 이러한 2개의 단계는 패칭 프로세스에서 사전-컴파일 작업을 줄이는 것을 가능하게 하며, 패치 작업량의 축소 또한 가능하게 한다.
본 명세서에서 설명되는 실시예는, 하나 이상의 컴퓨터 또는 다른 장치에 의해 실행되는 컴퓨터로 판독 가능한 저장 매체의 여러 형식으로 존재하는, 프로그램 모듈과 같은 컴퓨터로 실행 가능한 명령의 일반적인 콘텍스트로 논의될 수 있다. 제한이 아닌 예시로서, 컴퓨터로 판독 가능한 저장 매체는 비일시적 컴퓨터로 판독 가능한 저장 매체를 포함할 수 있다. 비일시적 컴퓨터로 판독 가능한 저장 매체는 일시적, 전파 신호를 제외한 모든 컴퓨터로 판독 가능한 매체를 포함한다. 컴퓨터로 판독 가능한 저장 매체는, 컴퓨터로 판독 가능한 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위해 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 삭제 가능 및 삭제 불가능한 매체를 포함한다. 일반적으로, 프로그램 모듈은 루틴, 프로그램, 객체, 요소, 데이터, 구조 등을 포함하며, 이는 특정 태스크을 수행하거나 또는 특정 추상 데이터형(abstract data types)을 구현한다. 프로그램 모듈의 기능성은 다양한 실시예에서 요구되는 대로 조합되거나 분배될 수 있다.
특정 바람직한 실시예 및 방법이 본 명세서에서 개시되었지만, 이러한 실시예들과 방법들의 변형 및 수정이 본 발명의 사상 및 범위를 벗어나지 않으며 만들어질 수 있음은 전술한 개시로부터 통상의 기술자에게 명백할 것이다. 본 발명은 첨부된 청구항 및 적용 가능한 법칙 및 원리에 의해 요구되는 범위 내에서만 제한될 것으로 의도된다.

Claims (20)

  1. 애플리케이션 소스 코드 파일에 대한 업데이트를 나타내는 새로운 핫 패치(new hot patch) 파일을 생성하기 위한 명령 및 애플리케이션 소스 코드 파일을 저장하는 메모리(120) - 상기 애플리케이션 소스 코드 파일은 초기 패치 파일 및 원 소스 코드 파일을 포함하고, 상기 초기 패치 파일은 상기 원 소스 코드 파일 중 제1 원 소스 코드 파일에 대한 변경과 연관되어 있음 - ; 및
    상기 원 소스 코드 파일에 제1 사전-컴파일 최적화를 실행하여 사전-최적화된 원 소스 코드 파일을 생성하고, 상기 원 소스 코드 파일의 제2 파일이 상기 초기 패치 파일과 연관되어 있는지 결정 - 상기 제2 파일이 상기 초기 패치 파일과 연관되어 있으면, 상기 제2 파일은 충격이 가해진(impacted) 소스 코드 파일의 세트에 포함됨 - 하도록 작동 가능하고, 충격 그래프(impact graph)를 생성 - 상기 충격 그래프는 상기 원 소스 코드 파일의 서로에 대한 연관성을 포함하고, 상기 원 소스 코드 파일에 대응하는 노드를 포함하고, 상기 그래프의 에지(edge)는 최적화의 데이터 소스에서 시작하여 최적화된 파일에서 종료되는 최적화 충격을 나타냄 - 하도록 작동 가능하고, 상기 원 소스 코드 파일 중 어느 것이 상기 초기 패치 파일과 연관되어 있는지를 식별하기 위해 상기 충격 그래프에 질의하도록 작동 가능한 프로세서(110)
    를 포함하고,
    상기 프로세서는, 상기 초기 패치 파일과 상기 충격이 가해진 소스 코드 파일의 세트에 제2 사전-컴파일 최적화를 실행 - 그 결과는 사전-최적화된 패치-연관 소스 코드 파일임 - 하도록 더 작동 가능하고,
    상기 프로세서는, 상기 사전-최적화된 패치-연관 소스 코드 파일과, 대응하는 사전-최적화된 원 소스 코드 파일을 비교하고, 상기 새로운 핫 패치 파일을 생성 - 상기 새로운 핫 패치 파일은, 상기 사전-최적화된 원 소스 코드 파일 중 대응하는 파일과 상이한, 상기 사전-최적화된 패치-연관 소스 코드 파일 중의 파일을 포함함 - 하도록 더 작동 가능한, 장치.
  2. 제1항에 있어서,
    상기 소스 코드 파일은 동적 스크립트 언어 파일인, 장치.
  3. 프로세서에서, 복수의 원(original) 소스 코드 파일에 제1 사전-컴파일 최적화(pre-compile optimization)를 실행하여 복수의 사전-최적화된 원 소스 코드 파일을 생성하는 단계;
    상기 복수의 원 소스 코드 파일 중 제1 원 소스 코드 파일에 대한 변경과 연관되어 있는 초기 패치 파일에 액세스하는 단계;
    상기 복수의 원 소스 코드 파일 중 제2 파일이 상기 초기 패치 파일과 연관되어 있는지 결정하는 단계 - 상기 제2 파일이 상기 초기 패치 파일과 연관되어 있으면, 상기 제2 파일은 충격이 가해진(impacted) 소스 코드 파일의 세트에 포함됨 - ;
    상기 초기 패치 파일과 상기 충격이 가해진 소스 코드 파일의 세트에 제2 사전-컴파일 최적화를 실행하는 단계 - 그 결과는 복수의 사전-최적화된 패치-연관 소스 코드 파일임 - ; 및
    상기 복수의 사전-최적화된 패치-연관 소스 코드 파일과, 대응하는 복수의 사전-최적화된 원 소스 코드 파일을 비교하고, 새로운 핫 패치 파일을 식별하는 단계 - 상기 새로운 핫 패치 파일은, 상기 복수의 사전-최적화된 원 소스 코드 파일 중 대응하는 파일과 상이한, 상기 복수의 사전-최적화된 패치-연관 소스 코드 파일 중의 파일을 포함함 -
    를 포함하고,
    상기 결정하는 단계는,
    상기 복수의 원 소스 코드 파일의 서로에 대한 연관성을 포함하는 충격 그래프(impact graph)를 생성하는 단계 - 상기 충격 그래프는 상기 복수의 원 소스 코드 파일에 대응하는 복수의 노드를 포함하고, 상기 그래프의 에지(edge)는 최적화의 데이터 소스에서 시작하여 최적화된 파일에서 종료되는 최적화 충격을 나타냄 -; 및
    상기 복수의 원 소스 코드 파일 중 어느 원 소스 코드 파일이 상기 초기 패치 파일과 연관되어 있는지를 식별하기 위해 상기 충격 그래프에 질의하는 단계
    를 포함하는, 방법.
  4. 제3항에 있어서,
    사전-최적화된 원 소스 코드 파일보다 사전-최적화된 패치-연관 소스 코드 파일이 적은, 방법.
  5. 제3항 또는 제4항에 있어서,
    상기 핫 패치 파일과 상기 초기 패치 파일은 상이한, 방법.
  6. 제3항 또는 제4항에 있어서,
    상기 복수의 원 소스 파일 중 일부는 동적 모듈에 포함되며, 상기 초기 패치 파일은 상기 동적 모듈과 연관되어 있는, 방법.
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020177014909A 2015-01-22 2016-01-20 소스 코드 파일을 업데이트하는 시스템 및 방법 KR102010508B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/603,136 US9569199B2 (en) 2015-01-22 2015-01-22 Systems and methods to update source code files
US14/603,136 2015-01-22
PCT/CN2016/071485 WO2016116051A1 (en) 2015-01-22 2016-01-20 Systems and methods to update source code files

Publications (2)

Publication Number Publication Date
KR20170078802A KR20170078802A (ko) 2017-07-07
KR102010508B1 true KR102010508B1 (ko) 2019-08-13

Family

ID=56416450

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177014909A KR102010508B1 (ko) 2015-01-22 2016-01-20 소스 코드 파일을 업데이트하는 시스템 및 방법

Country Status (5)

Country Link
US (1) US9569199B2 (ko)
EP (1) EP3204849B1 (ko)
KR (1) KR102010508B1 (ko)
CN (1) CN106796522B (ko)
WO (1) WO2016116051A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9639343B2 (en) * 2014-08-29 2017-05-02 Nxp Usa, Inc. Method for altering execution of a program, debugger, and computer-readable medium
US20170300317A1 (en) * 2016-03-24 2017-10-19 Knight Point Systems, Inc. System and method for patching software in a target computer system device
WO2018196963A1 (en) * 2017-04-26 2018-11-01 Everynet Bv Differential optimising code transformation
CN107908402A (zh) * 2017-08-15 2018-04-13 口碑(上海)信息技术有限公司 Java服务端热修复方法和系统
CN108182083B (zh) * 2017-12-06 2021-12-24 中国航空工业集团公司西安航空计算技术研究所 一种支持断点调试的取指译码电路
CN108037947B (zh) * 2017-12-11 2021-09-07 北京奇虎科技有限公司 补丁包加载方法及其装置、终端
CN108415719B (zh) * 2018-03-29 2019-03-19 网易(杭州)网络有限公司 代码热更新方法和装置、存储介质、处理器及终端
CN109491698B (zh) * 2018-12-29 2022-07-08 武汉思普崚技术有限公司 基于热补丁的系统更新方法及装置
CN109739487B (zh) * 2019-01-04 2022-03-29 广州市玄武无线科技股份有限公司 一种业务逻辑处理方法、设备及计算机可读存储介质
CN109828772B (zh) * 2019-02-19 2022-03-11 百度在线网络技术(北京)有限公司 热更新方法、操作系统、终端设备和存储介质
US20200371778A1 (en) * 2019-05-21 2020-11-26 X Development Llc Automated identification of code changes
US10997056B1 (en) * 2019-10-09 2021-05-04 Fujitsu Limited Generation of explanatory and executable repair examples
CN110865837B (zh) * 2019-11-14 2023-08-18 青岛海信移动通信技术有限公司 一种进行系统升级的方法和终端
CN113805928A (zh) * 2020-06-12 2021-12-17 中兴通讯股份有限公司 热补丁文件生成、一致性检测方法、装置、设备和介质
CN111913730A (zh) * 2020-07-15 2020-11-10 上海莉莉丝科技股份有限公司 用户无感的应用程序内更新方法及用户端、程序服务器
US11392364B2 (en) 2020-09-28 2022-07-19 Red Hat, Inc. Adaptive hot reload for class changes
CN112612502A (zh) * 2020-12-23 2021-04-06 苏州三六零智能安全科技有限公司 补丁生成方法、装置、设备及存储介质
US11237952B1 (en) * 2021-04-07 2022-02-01 State Farm Mutual Automobile Insurance Company Runtime class recompilation during mutation testing
US11163675B1 (en) 2021-04-07 2021-11-02 State Farm Mutual Automobile Insurance Company Mutation testing in parallel threads
US11573787B1 (en) * 2021-09-10 2023-02-07 Microsoft Technology Licensing, Llc Hot reloading a running application with an unsaved source code change
US11847433B2 (en) * 2021-09-10 2023-12-19 Microsoft Technology Licensing, Llc Source code editing combining edit and continue with hot reload
CN115309403A (zh) * 2022-08-09 2022-11-08 鼎捷软件股份有限公司 自动编译系统及其方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6594822B1 (en) * 1999-02-19 2003-07-15 Nortel Networks Limited Method and apparatus for creating a software patch by comparing object files
US7251812B1 (en) * 2001-10-31 2007-07-31 Microsoft Corporation Dynamic software update
TWI278750B (en) * 2002-09-05 2007-04-11 Mediatek Inc System and method which updates firmware in a non-volatile memory without using a processor
US7784044B2 (en) * 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US20050257205A1 (en) * 2004-05-13 2005-11-17 Microsoft Corporation Method and system for dynamic software updates
US8606950B2 (en) * 2005-06-08 2013-12-10 Logitech Europe S.A. System and method for transparently processing multimedia data
US7853934B2 (en) * 2005-06-23 2010-12-14 Hewlett-Packard Development Company, L.P. Hot-swapping a dynamic code generator
US8203563B2 (en) * 2006-06-16 2012-06-19 Nvidia Corporation System, method, and computer program product for adjusting a programmable graphics/audio processor based on input and output parameters
US8266597B2 (en) * 2008-06-16 2012-09-11 International Business Machines Corporation Dynamically patching computer code using breakpoints
US20100083324A1 (en) * 2008-09-30 2010-04-01 Microsoft Corporation Synchronized Video Playback Among Multiple Users Across A Network
US8261247B2 (en) 2008-10-01 2012-09-04 Oracle International Corporation Method of modifying code of a running computer program based on symbol values discovered from comparison of running code to corresponding object code
US8607208B1 (en) * 2008-10-01 2013-12-10 Oracle International Corporation System and methods for object code hot updates
US8468516B1 (en) * 2008-12-19 2013-06-18 Juniper Networks, Inc. Creating hot patches for embedded systems
CN101799763B (zh) * 2009-02-10 2013-01-30 华为技术有限公司 内核在线补丁的方法、装置和系统
US9292343B2 (en) * 2010-06-30 2016-03-22 Oracle International Corporation Method and system for performing deployment management
CN103309683B (zh) 2012-03-07 2016-08-03 京信通信系统(中国)有限公司 硬件设备的软件补丁嵌入方法及装置
US9256419B2 (en) 2012-04-23 2016-02-09 Hewlett Packard Enterprise Development Lp Dynamic software updates
US9489286B2 (en) * 2013-01-30 2016-11-08 Nec Corporation Method and system for computer assisted hot-tracing mechanism
US9158914B2 (en) * 2013-04-19 2015-10-13 Crowdstrike, Inc. Executable component injection utilizing hotpatch mechanisms
CN103559449B (zh) 2013-11-15 2016-09-21 华为技术有限公司 一种代码改动的检测方法及装置
CN103870310B (zh) * 2014-02-18 2017-07-14 小米科技有限责任公司 程序编译方法及相关装置
CN103984582B (zh) 2014-06-04 2017-05-31 网易(杭州)网络有限公司 一种热更新方法和装置

Also Published As

Publication number Publication date
US20160216962A1 (en) 2016-07-28
CN106796522B (zh) 2019-11-26
KR20170078802A (ko) 2017-07-07
CN106796522A (zh) 2017-05-31
EP3204849A1 (en) 2017-08-16
US9569199B2 (en) 2017-02-14
EP3204849A4 (en) 2017-12-06
EP3204849B1 (en) 2022-04-06
WO2016116051A1 (en) 2016-07-28

Similar Documents

Publication Publication Date Title
KR102010508B1 (ko) 소스 코드 파일을 업데이트하는 시스템 및 방법
US9430224B2 (en) Hot-update method and apparatus
JP7090657B2 (ja) アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体
JP5007046B2 (ja) コンポーネントベースのソフトウェア・プロダクトの保守
EP3035191B1 (en) Identifying source code used to build executable files
US10942734B2 (en) Software dependency shading
US9841953B2 (en) Pluggable components for runtime-image generation
CN107168749B (zh) 一种编译方法、装置、设备和计算机可读存储介质
US10133560B2 (en) Link time program optimization in presence of a linker script
US9378013B2 (en) Incremental source code analysis
US9459986B2 (en) Automatic generation of analysis-equivalent application constructs
US10338910B2 (en) Multi-tenant upgrading
US10241759B2 (en) Detecting open source components built into mobile applications
CN112214221B (zh) 一种用于Linux系统构建的方法与设备
CN108694049B (zh) 一种更新软件的方法和设备
CN111385661B (zh) 语音控制全屏播放的方法、装置、终端及存储介质
US9335990B2 (en) Method, a system, and a non-transitory computer-readable medium for supporting application development
US8949802B1 (en) Sharding program compilation for large-scale static analysis
US10732946B2 (en) Simulation-based code duplication
JP2022542007A (ja) テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証
US9910645B2 (en) Incremental build generation
US11748117B2 (en) Operating system partitioning of different users for single-user applications

Legal Events

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