KR20160073402A - 콜경로 파인더 - Google Patents

콜경로 파인더 Download PDF

Info

Publication number
KR20160073402A
KR20160073402A KR1020167012999A KR20167012999A KR20160073402A KR 20160073402 A KR20160073402 A KR 20160073402A KR 1020167012999 A KR1020167012999 A KR 1020167012999A KR 20167012999 A KR20167012999 A KR 20167012999A KR 20160073402 A KR20160073402 A KR 20160073402A
Authority
KR
South Korea
Prior art keywords
function
node
call
graph
child
Prior art date
Application number
KR1020167012999A
Other languages
English (en)
Other versions
KR101841751B1 (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 KR20160073402A publication Critical patent/KR20160073402A/ko
Application granted granted Critical
Publication of KR101841751B1 publication Critical patent/KR101841751B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • 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

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 Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Telephonic Communication Services (AREA)

Abstract

코드베이스에 대한 함수 콜 그래프를 생성하기 위한 기술들 및 시스템들이 개시된다. 그래프 생성은, 함수 시그니처에 의해 코드베이스 내의 함수들을 식별하는 것(1001); 함수를 콜 그래프 내의 제 1 노드로서 표현하는 것(1070); 그 함수에 대해, 그 함수의 함수 시그니처로부터 콜-투(call-to) 함수들, 콜-프롬(call-from) 함수들, 및 상속 페어런츠(inheritance parents) 및 칠드런, 및 베이스 클래스를 식별하는 것(1200); 식별된 콜-투 및 콜-프롬 함수들에 기초하여 차일드 노드들을 제 1 노드에 추가하는 것(1020); 함수에서 베이스 클래스 메소드에 대한 인터페이스 콜(1010)에 대해, 상기 베이스 클래스 메소드의 오버라이드(override)의 구현들에 기초하여 차일드 노드들을 제 1 노드에 추가하는 것(1090); 추가된 차일드 노드에 대해, 만약 오버라이드의 구현을 포함하는 소스 파일 및 함수를 포함하는 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하지 않는다면, 그 차일드 노드를 제 1 노드로부터 제거하는 것(1100-1150)을 포함한다.

Description

콜경로 파인더{CALLPATH FINDER}
[001] 점차적으로, 복잡한 대규모 소프트웨어 물건 또는 소프트웨어 개발 환경은 개발 또는 유지관리를 행하는 프로그래머들이 익숙하지 않은 코드를 판독하는 것을 요구할 수 있다. 그러한 상황들에서는, 하나의 함수로부터 다른 함수로의 제어 흐름을 추적하는 것이 어려우면서 시간-소모적일 수 있다.
[002] 본원에 논의된 솔루션들의 일부 실시예들은 코드베이스에 대한 함수 콜 그래프를 생성하는 방법에 관한 것이고, 그 방법은, 코드베이스 내의 함수들을 함수 시그니처에 의해 식별하는 단계; 특정 식별된 함수를 함수 콜 그래프 내의 제 1 노드로서 표현하는 단계; 특정 함수에 대해, 그 특정 함수의 함수 시그니처에 기초하여 콜-투 함수들, 콜-프롬 함수들, 상속 페어런츠 및 상속 칠드런, 및 그 특정 함수와 연관된 베이스 클래스를 식별하는 단계; 식별된 콜-투 및 콜-프롬 함수들에 기초하여 제 1 차일드 노드들을 제 1 노드에 추가하는 단계; 특정 함수에서 베이스 클래스 메소드에 대한 인터페이스 콜에 대해, 베이스 클래스 메소드의 오버라이드의 구현들에 기초하여 제 2 차일드 노드들을 제 1 노드에 추가하는 단계; 적어도 하나의 추가된 제 2 차일드 노드에 대해, 오버라이드의 특정 추가된 구현을 포함하는 제 1 소스 코드 파일 및 특정 함수를 포함하는 제 2 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하는지 여부를 결정하는 단계; 및 제 1 및 제 2 소스 코드 파일들이 공통 바이너리 파일을 공유하지 않는다는 결정에 대한 응답으로서, 추가된 제 2 차일드 노드를 제 1 노드로부터 제거하는 단계를 포함한다.
[003] 일부 실시예들에서, 그 방법은 후속적인 랭킹을 위해서 제 1 노드와 추가된 제 2 차일드 노드들 간의 그래프 에지들을 식별하는 단계를 포함한다. 일부 실시예들에서, 그 방법은 함수 콜 그래프의 메모리 풋프린트를 감소시키는 단계를 포함한다.
[004] 일부 실시예들에서, 메모리 풋프린트를 감소시키는 단계는 각각의 함수 시그니처에 해시 함수를 적용하는 단계, 및 해시 함수의 결과를 함수 시그니처의 표현으로서 저장하는 단계를 포함한다.
[005] 일부 실시예들에서, 오버라이드의 특정 추가된 구현을 포함하는 제 1 소스 코드 파일 및 특정 함수를 포함하는 제 2 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하는지 여부를 결정하는 단계는, 특정 함수와 연관된 종속성들을 식별하는 단계; 식별된 종속성들에 대한 바이너리 파일들을 테스트하기 위해 제 1 블룸 필터를 생성하는 단계 ― 블룸 필터를 생성하는 것은 식별된 종속성들의 수에 기초하여 제 1 생성된 블룸 필터의 사이즈를 변경하는 것을 포함함 ―; 및 특정 바이너리 파일이 특정 함수를 포함하는지 여부를 결정하기 위해서 제 1 생성된 블룸 필터를 특정 바이너리 파일에 적용하는 단계를 포함한다.
[006] 일부 실시예들에서, 오버라이드의 특정 추가된 구현을 포함하는 제 1 소스 코드 파일 및 특정 함수를 포함하는 제 2 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하는지 여부를 결정하는 단계는, 특정 바이너리 파일이 특정 추가된 구현을 포함하는지 여부를 결정하기 위해서 제 2 생성된 블룸 필터를 특정 바이너리 파일에 적용하는 단계; 및 특정 바이너리 파일이 제 1 및 제 2 생성된 블룸 필터들 둘 모두를 통과하는 것에 대한 응답으로, 제 1 및 제 2 소스 코드 파일들이 특정 바이너리 파일을 공통 바이너리 파일로서 공유한다고 결정하는 단계를 더 포함한다.
[007] 일부 실시예들에서, 그 방법은 제 2 소스 코드 파일을 사용하여 컴파일되거나 생성되는 코드베이스의 바이너리 파일들에 기초하여 블룸 필터를 생성하는 단계; 및 생성된 블룸 필터를 제 1 노드에 추가하는 단계를 더 포함한다.
[008] 일부 실시예들에서, 오버라이드의 특정 추가된 구현을 포함하는 제 1 소스 코드 파일 및 특정 함수를 포함하는 제 2 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하는지 여부를 결정하는 단계는 제 1 노드의 블룸 필터를 제 1 소스 코드 파일에 적용하는 단계를 포함한다.
[009] 일부 실시예들에서, 블룸 필터의 사이즈는 코드베이스의 얼마나 많은 바이너리 파일들이 제 2 소스 코드 파일을 사용하여 컴파일되거나 생성되는지에 의해 결정되고, 그로 인해서 자주 사용되는 소스 코드 파일은 더 큰 사이즈의 블룸 필터와 연관된다.
[010] 본원에 논의된 솔루션들의 일부 실시예들은 코드베이스 내의 두 개의 함수들 간의 가능한 콜 경로를 결정하는 방법에 관한 것이고, 그 방법은, 소스 함수 및 목적지 함수를 입력들로서 수신하는 단계; 함수 콜 그래프에서, 소스 함수와 연관된 시작 노드 및 목적지 함수와 연관된 종료 노드를 식별하는 단계; 시작 노드와 목적지 노드 간에 함수 콜 그래프 내의 가능한 경로들을 탐색하는 단계 ― 탐색하는 단계는, 탐색 경로를 따른 각각의 노드에 대해, 시작 노드 및 종료 노드에 의해 공유되는 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계, 공통 종속성들의 리스트에 포함된 종속성을 갖는 평가된 노드에 대해, 평가된 노드를 가능한 경로에 포함시키고, 평가된 노드의 임의의 차일드 노드들과 시작 노드 또는 종료 노드 간의 함수 콜 그래프 내의 모든 가능한 경로들을 탐색하는 단계, 및 공통 종속성들의 리스트에 포함된 종속성을 갖지 않는 평가된 노드에 대해, 평가된 노드를 임의의 가능한 경로로부터 배제시키는 단계를 포함함 ―; 탐색 및 평가 단계들의 결과로서 생성되는 시작 노드와 종료 노드 간의 모든 가능한 경로들을 분류하는 단계; 및 분류된 가능한 경로들 중 적어도 하나를 가능한 콜 경로로서 리턴하는 단계를 포함한다.
[011] 일부 실시예들에서, 모든 가능한 경로들을 분류하는 단계는, 모든 가능한 경로들을 가장 짧은 것부터 가장 긴 것까지 정렬하는 단계; 정렬된 경로들 중에서, 완전히 단일 코드베이스 내에 있는 그러한 경로들을 식별하는 단계; 모든 가능한 경로들이 경로 길이 및 가중 팩터에 기초하여 가장 가능한 것부터 가장 덜 가능한 것까지 정렬되도록 가중 팩터들을 정렬된 경로들에 적용하는 단계 ― 가중 팩터는 완전히 단일 코드베이스 내에 있는 더욱 가능한 그러한 경로들로서 표시하는 것을 포함함 ―; 및 가중 팩터들을 적용하는 단계 이후에 적어도 가장 가능한 경로를 가능한 콜 경로로서 리턴하는 단계를 포함한다.
[012] 일부 실시예들에서, 가중 팩터들을 적용하는 단계는 이전 함수 실행들로부터 생성되는 이력 추적 데이터에 의해 표시되는 함수 콜 경로들이 그러한 경로들을 더욱 가능한 것으로서 표시하는 가중 팩터들과 연관되도록 그 이력 추적 데이터에 기초하여 가중 팩터들을 생성하는 단계를 포함한다.
[013] 일부 실시예들에서, 가중 팩터들을 적용하는 단계는 공통적으로 사용되는 오브젝트 클래스들을 포함하는 콜 경로들이 더욱 가능한 것으로서 표시되도록 클래스-기반 가중 팩터들을 적용하는 단계를 포함한다.
[014] 일부 실시예들에서, 가능한 경로들을 탐색하는 단계는 모든 가능한 경로들을 탐색하는 단계를 포함한다. 일부 실시예들에서, 가능한 경로들을 탐색하는 단계는 시작 및 종료 노드들 둘 모두로부터 시작하는 양방향 탐색을 수행하는 단계를 포함한다.
[015] 본원에 논의된 솔루션들의 일부 실시예들은 코드베이스에 대한 함수 콜 그래프를 나타내는 데이터 구조에 관한 것이고, 그 그래프는 복수의 그래프 노드들을 포함하고, 각각의 그래프 노드는 코드베이스 내의 콜가능 함수를 나타내고, 복수의 그래프 노드들 중 제 1 그래프 노드는, 코드베이스 내의 콜가능 함수를 고유하게 식별하는 함수 시그니처; 파일 시스템 내에서 콜가능 함수를 포함하는 데이터 파일의 절대 위치를 식별하는 제 1 그래프 노드 절대 경로; 및 제 1 그래프 노드의 차일드 노드를 식별하는 정보 ― 그 차일드 노드를 식별하는 정보는 차일드 노드와 연관된 차일드 함수 및 차일드 노드와 연관된 차일드 노드 종류를 식별하는 차일드 함수 시그니처의 표현을 포함함 ―를 포함하고, 그 차일드 노드와 연관된 차일드 함수 시그니처는 제 1 그래프 노드 및 차일드 노드를 연결하는 그래프 에지를 나타내고, 차일드 노드 종류는 다이렉트 콜 종류 및 인스턴스 콜 종류 중 하나를 포함하고, 그 인스턴스 콜 종류는 콜가능 함수에서 인보크되는 베이스 클래스 메소드의 오버라이드의 구현을 나타낸다.
[016] 일부 실시예들에서, 차일드 노드를 식별하는 정보는 그 차일드 노드와 연관된 차일드 함수가 원격 프로시저 콜 함수인지 여부를 표시하는 플래그를 더 포함한다.
[017] 일부 실시예들에서, 함수 시그니처는 해싱된 형태로 제 1 그래프 노드에 포함되는데, 그 해싱된 형태는 매체 내에서 데이터 저장 공간을 덜 점유한다.
[018] 일부 실시예들에서, 차일드 노드는 코드베이스 내의 차일드 함수를 고유하게 식별하는 차일드 함수 시그니처; 파일 시스템 내에서 차일드 함수를 포함하는 데이터 파일의 절대 위치를 식별하는 차일드 노드 절대 경로; 및 그래프 노드의 연결 노드를 식별하는 정보를 포함하고, 그 연결 노드를 식별하는 정보는 차일드 노드에 의해 표현되는 차일드 함수를 인보크하는 콜-프롬 함수를 식별하는 콜-프롬 함수 시그니처의 표현을 포함하고, 그 연결 노드와 연관된 콜-프롬 함수 시그니처는 차일드 노드 및 연결 노드를 연결하는 그래프 에지를 나타낸다.
[019] 일부 실시예들에서, 제 1 그래프 노드는 차일드 노드의 연결 노드이다.
[020] 본원에 설명된 솔루션들, 기술들 및 시스템들의 실시예들은 시스템을 포함할 수 있고, 그 시스템은 프로세서 및 명령들을 포함하는 프로세서-판독가능 메모리를 포함하고, 그 명령들은 프로세서로 하여금 위에서 설명된 단계들 또는 동작들 중 일부 또는 모두를 수행하게 하도록 그리고/또는 위에서 설명된 데이터 구조들 중 하나 또는 그 초과의 표현들을 생성하게 하도록 구성된다.
[021] 본원에 설명된 솔루션들, 기술들 및 시스템들의 실시예들은 명령들을 포함하는 일시적인 또는 비-일시적인 컴퓨터-판독가능 매체를 포함할 수 있고, 그 명령들은 컴퓨터로 하여금 위에서 설명된 단계들 중 일부 또는 모두를 수행하게 하도록 그리고/또는 위에서 설명된 데이터 구조들 중 하나 또는 그 초과의 표현들을 생성하게 하도록 한다.
[022] 논의된 시스템들 및 방법들의 응용가능성의 추가적인 범위가 이후로 제공되는 상세한 설명으로부터 자명하게 될 것이다. 그러나, 상세한 설명 및 특정 예들은, 비록 시스템들 및 방법들의 실시예들을 나타내고 있지만, 단지 예시로서 제공된다는 것이 이해되어야 하는데, 그 이유는 본원에 개시된 개념들의 사상 및 범위 내에서의 다양한 변화들 및 변경들이 이러한 상세한 설명으로부터 당업자들에게 자명하게 될 것이기 때문이다.
[023] 논의된 시스템들 및 방법들은 본원의 아래에서 제공되는 상세한 설명 및 단지 예시적으로 제공되고 따라서 제한적이지 않은 첨부 도면들로부터 더욱 완전하게 이해될 것이다.
[024] 도 1a는 본원에 설명된 바와 같은 함수 콜 그래프 생성 동작의 실시예를 나타내는 블록도를 도시한다.
[025] 도 1b는 본원에 설명된 바와 같은 공유된 바이너리 식별 동작의 실시예를 나타내는 블록도를 도시한다.
[026] 도 1c는 본원에 설명된 바와 같은 함수 콜 그래프의 부분의 실시예를 나타내는 블록도를 도시한다.
[027] 도 2는 본원에 설명된 바와 같은 그래프 노드의 실시예를 나타내는 블록도를 도시한다.
[028] 도 3은 본원에 설명된 바와 같은 그래프 탐색 및 콜 경로 생성 동작의 실시예를 나타내는 블록도를 도시한다.
[029] 도 4는 본원에 설명된 바와 같은 콜 경로 분류 또는 랭킹 동작의 실시예를 나타내는 블록도를 도시한다.
[030] 도 5는 본원에 설명된 바와 같은 그래프 생성 및 콜 경로 식별 동작들 중 일부 또는 모두를 실행하도록 배열되는 컴퓨팅 디바이스의 실시예를 나타내는 블록도를 도시한다.
[031] 도면들은 상세한 설명 동안 상세히 설명될 것이다.
[032] 아래의 상세한 설명은 첨부 도면들을 참조한다. 상이한 도면들에서 동일한 참조 번호들은 동일하거나 유사한 엘리먼트들을 식별한다. 또한, 아래의 상세한 설명은 논의되는 개념들을 제한하지 않는다. 대신에, 본원에 논의된 개념들의 범위는 첨부된 청구항들 및 그들의 등가물들에 의해 정의된다.
[033] 복잡한 대규모 소프트웨어 물건 또는 소프트웨어 개발 환경은 개발 또는 유지관리를 행하는 프로그래머들이 익숙하지 않은 코드를 판독하는 것을 요구할 수 있다. 그러한 상황들에서는, 하나의 함수로부터 다른 함수로의 제어 흐름을 추적하는 것이 어려우면서 시간-소모적일 수 있다. 코드베이스 내에서 임의의 두 개의 함수들 간의 하나 또는 그 초과의 가능한 경로들을 찾을 수 있는 콜 경로 파인더는 코드를 이해하는 과정을 단순화하며, 더 빠르고 더 쉬운 소프트웨어 개발 및 유지관리를 허용할 수 있다.
[034] 특정 코드베이스에 대한 콜 경로 파인더의 실시예는 그래프 또는 나무 데이터 구조를 생성하고 이어서 질의함으로써 실현될 수 있다. 일부 실시예들에서, 그러한 그래프는 코드베이스의 각각의 함수를 그래프 노드로서 포함할 수 있고, 연결 노드들은 그 함수로부터 호출되거나 호출될 수 있는 모든 다른 가능한 함수들 및/또는 함수 인스턴스들을 나타낸다. 더욱이, 연결 노드들은 또한 특정 노드에 의해서 표현되는 함수를 인보크하거나 인보크할 수 있는 함수들 및/또는 함수 인스턴스들인 콜-프롬 함수들을 나타낼 수 있다.
[035] 모놀리식 코드베이스에서는, 예컨대, 그러한 그래프가 하나 또는 그 초과의 데이터베이스 테이블들에서 분류된 키 맵으로서 형성될 수 있다. 각각의 그래프 노드는 그 노드에 의해 표현되는 특정 함수를 식별하는 함수 시그니처와 같은 고유 시그니처를 포함할 수 있다. 코드베이스에 대한 업데이트 및 변경들을 참작하기 위해, 그러한 그래프는 규칙적인 간격들(예컨대, 밤마다)로 재형성 및/또는 업데이팅될 수 있다.
[036] 오브젝트-지향 기술들을 수반하는 실시예들에서, 인입 및 인출 함수 콜들의 정적 분석은 함수 오버로딩 또는 오버라이드와 같은 것들에 의해 야기되는 미묘한 차이들 또는 변화들을 캡처할 수 없다. 일부 실시예들에서, 함수는 베이스 클래스의 메소드 또는 함수에 대한 인터페이스 콜을 만들 수 있다. 일부 경우들에서, 이는 베이스 클래스의 인스턴스에 대한 콜일 수 있다. 다른 경우들에서, 이는 베이스 클래스 메소드의 오버로딩된 인스턴스에 대한 콜일 수 있다. 오버로딩된 함수들을 참작하려 의도된 일부 실시예들에서, 정해지 노드에 대한 연결들의 수는 차일드 또는 연결 노드로서 베이스 클래스 메소드의 오버라이드의 각 구현을 포함하도록 확장될 수 있다.
[037] 모놀리식 코드베이스에 대한 그래프 구성 프로세스의 실시예가 도 1a에 도시된다. 도시된 실시예에서, 코드베이스 내의 각각의 함수는 함수 시그니처를 가질 수 있다. 이는 코드베이스 내의 함수를 고유하게 식별하는 정보의 수, 스트링 또는 다른 피스(piece)일 수 있다. 일부 실시예들에서, 그러한 함수 시그니처는 그래프 구성 프로세스의 일부로서 함수에 대해 생성될 수 있다. 일부 실시예들에서, 코드베이스 또는 개발 환경에 대한 소스 관리 정책들 또는 실례들은 각각의 함수 및/또는 각각의 클래스가 함수 시그니처의 일부 또는 모두로서 사용될 수 있는 고유 식별자와 연관되어야 하는 것을 요구할 수 있다.
[038] 함수 시그니처의 예는 오브젝트-지향 프로그래밍 언어, 이를테면 예컨대 Java로 클래스 시그니처를 포함할 수 있다. 함수 시그니처의 다른 예는 특정 클래스에 대한 소스 코드 파일의 디렉토리 경로로부터 생성된 명칭, 클래스의 명칭, 및 클래스 내의 함수의 명칭을 포함할 수 있다. 다른 실시예들은 함수 시그니처로서 사용하기 위해 고유 식별자들을 생성하는데 다른 기술들을 활용할 수 있다.
[039] 함수 시그니처가 생성 또는 판독될 수 있고(1001), 그 시그니처에 의해 식별된 함수가 노드로서 그래프에 추가될 수 있다(1070). 일부 실시예들에서, 함수를 노드로서 그래프에 추가하는 것(1070)은 콜-투 및 콜-프롬 함수들(1200)을 식별하기 위해 함수를 분석하거나 그렇지 않으면 트레버싱(traversing)하는 것을 포함할 수 있다.
[040] 콜-투 함수들은 추가된 함수 내로부터 호출되거나 호출될 수 있는 그러한 함수들이다. 그러한 콜-투 함수들은 추가된 함수를 나타내는 노드의 칠드런 또는 연결 노드들로서 포함되는 그들의 함수 시그니처들을 가질 수 있다. 일부 실시예들에서, 추가된 함수를 호출하거나 호출할 수 있는 그러한 함수들인 콜-프롬 함수들은 또한 함수 시그니처에 기초하여 식별될 수 있다.
[041] 일부 실시예들에서, 코드베이스의 모든 함수 시그니처들은 하나 또는 그 초과의 데이터베이스 테이블들에서 분류될 수 있다. 일부 실시예들에서, 시그니처들은 데이터 룩업의 용이성을 위해 분류된 스트링 테이블에서 분류될 수 있다. 일부 실시예들에서, 함수 시그니처들은 콜-투, 콜-프롬, 및 특정 함수에 대한 임의의 관련된 상속 정보를 액세스하기 위한 키로서 표시하거나 기능할 수 있다. 그러한 실시예들에서, 그러한 데이터베이스 테이블들을 스캐닝하는 것은 특정 함수에 대한 콜-투 및 콜-프롬 데이터를 제공할 수 있다.
[042] 다른 실시예들에서, 콜-프롬 정보는 그래프 구성 동안에 반복적으로 생성될 수 있다. 그러한 실시예들에서, 특정 노드에서의 콜-프롬 함수를 식별하는 것은 그 특정 노드로 하여금 그 콜-프롬 함수를 나타내는 노드에 대해 콜-투 노드로서 식별될 수 있게 할 수 있다. 일부 그러한 실시예들에서, 마스터 콜-투 또는 콜-프롬 테이블 또는 데이터 구조는 그래프 생성 프로세스의 부분으로서 하나 또는 그 초과의 데이터베이스 테이블들에서 동적으로 생성될 수 있다. 일부 실시예들에서, 모든 그래프 노드들은 너비-우선 탐색을 용이하게 하기 위해 콜-투 값들을 포함할 수 있다. 일부 실시예들에서, 모든 그래프 노드들은 너비-우선 탐색을 용이하게 하기 위해 콜-프롬 값들을 포함할 수 있다.
[043] 일부 오브젝트-지향 실시예들에서, 추가된 함수는 베이스 클래스 메소드에 대한 인터페이스 콜(1010)을 포함할 수 있다. 베이스 클래스의 메소드 또는 함수에 대한 그러한 인터페이스 콜(1010)은 일부 경우들에서는 베이스 클래스의 인스턴스에 대한 콜일 수 있다. 다른 경우들에서, 그러한 인터페이스 콜(1010)은 베이스 클래스 메소드의 오버로딩된 인스턴스에 대한 콜일 수 있다. 정적 분석 셋팅에서는, 인터페이스 콜(1010)이 오버로딩된 인스턴스에 대한 것인지 여부가 쉽게 결정될 수 없기 때문에, 그래프 구성 방법의 일부 실시예들은 함수를 나타내는 노드의 콜-투 차일드 또는 연결 노드로서 베이스 클래스 메소드의 오버라이드의 각각의 구현을 추가할 수 있다(1020).
[044] 일부 실시예들에서, 그러한 상속 확장은 그래프에서의 노드들 및 연결들의 수가 감당하기힘들 정도로 커지게 할 수 있다. 일부 실시예들에서, 그러한 상속 확장은 불가능하거나 그렇지 않으면 가능성이 없는(예컨대, 허위 긍정) 그래프 에지들을 제안하는 차일드 또는 연결 노드들을 추가할 수 있다.
[045] 일부 실시예들에서, 함수는, 임의의 잠재적인 차일드 노드들(1020)과 함께, 콜 그래프에 추가될 수 있다(1090). 그 그래프는 다양한 콜 경로들에 대해 이러한 방식으로 형성될 수 있고(1050), 각각의 그래프 노드는 블룸 필터와 같은 필터와 연관된다. 정해진 콜-프롬/콜-투 함수 쌍을 위한 블룸 필터가 함수들에 공통적인 바이너리 파일들에 기초하여 생성될 수 있다(1040).
[046] 일부 실시예들에서, 블룸 필터들은 코드베이스 내에서의 컴피레이션(compilation)을 위해 컴파일되거나 표시되는 각각의 바이너리 파일에 기초하여 생성될 수 있다. 일부 실시예들에서, 그러한 블룸 필터들은, 어떤 소스 코드 파일들 및 어떤 소스 코드 파일 버전들이 애플리케이션 또는 프로그램의 특정 버전으로 컴파일될 것인지를 식별하는 버전 제어 툴과 같은 유틸리티에 기초하여 생성될 수 있다. 특정 블룸 필터의 길이 또는 데이터 사이즈는, 일부 실시예들에서, 컴파일된 애플리케이션 또는 프로그램을 나타내는 특정 바이너리 파일에 포함된 소스 코드 파일들 및/또는 함수들의 수에 기초하여 바뀔 수 있다.
[047] 일부 실시예들에서, 그래프 구성 프로세스는 코드베이스 내의 각각의 함수를 판독할 수 있다. 일부 그러한 실시예들에서, 일단 그래프 구성 프로세스가 모든 함수들이 판독(1060)되었고 그래프에 추가(1090)되었다고 표시하면, 이어서 생성된 그래프의 메모리 풋프린트를 감소(1080)시키는 것으로 진행할 수 있다. 메모리 풋프린트 감소의 실시예들은 위에서 논의된 바와 같이 해싱된 함수 시그니처들 및 가변-길이 블룸 필터들을 이용하는 것을 포함할 수 있다.
[048] 일부 실시예들에서, 구성된 콜 그래프는 그래프에 대한 더 빠른 액세스 및 그것의 트래버설(traversal)을 허용하기 위해 플래시 메모리와 같은 휘발성 메모리 또는 고속-액세스 메모리에 저장될 수 있다. 일부 그러한 실시예들에서, 블룸 필터의 길이 또는 데이터 사이즈는 허위 긍정 결과들에 대한 원하는 허용오차에 의존하여 바뀔 수 있다. 일부 실시예들에서, 0.01% 허위 긍정 결과들을 허용하기 위해 블룸 필터의 사이즈를 바꾸는 것은 데이터 품질과 데이터 사이즈 간의 양호한 균형을 허용할 수 있다. 함수-기반 블룸 필터들을 이용하는 실시예에서, 자신의 파일들이 더 많은 바이너리 파일들에 존재하는 함수들은 더 큰 사이즈의 블룸 필터들을 획득할 수 있다.
[049] 콜 경로를 찾기 위한 공통 바이너리 파일 식별 프로세스의 실시예의 예가 도 1b에 도시된다. 블룸 필터와 같은 바이너리 파일 필터(1100)와 그래프의 시작 노드(1170) 및 종료 노드(1180)로 시작해서, 그 시작 및 종료 노드들과 연관된 함수 시그니처들이 필터(1110)를 사용하여 평가될 수 있다. 만약 함수 시그니처들에 의해 식별된 함수들이 필터에 의해 표현되는 바이너리 파일들에 포함되는 것으로서 표시되지 않는다면(1130), 그 블룸 필터에 대한 필터링 프로세스는 종료하고, 후속하는 바이너리 파일들의 세트에 대한 필터링 프로세스가 개시될 수 있다.
[050] 만약 함수 시그니처들에 의해 식별된 함수들이 블룸 필터(1120)에서 표현되는 바이너리 파일들에 포함되는 것으로서 표시된다면, 차일드 또는 연결 노드로서 추가된 베이스 클래스 메소드의 오버라이드의 각각의 구현이 그 동일한 필터(1140)를 사용하여 평가될 수 있다. 필터를 통과하는 베이스 클래스 메소드의 오버라이드의 각각의 구현은 바이너리 파일들에 포함되도록 결정되고(1150), 함수 콜 경로에 잠재적인 노드로서 존재한다. 필터를 통과하지 않은 베이스 클래스 메소드의 오버라이드의 각각의 구현은 콜링(콜-프롬) 함수와 마찬가지로 그 바이너리 파일을 갖지 않는 것으로 결정되고(1160), 따라서 함수 콜 경로에서 잠재적인 노드가 아니다.
[051] 다른 실시예들에서, 블룸 필터는 상속 확장을 감안하기 위해 추가되는 차일드 또는 연결 노드들을 갖는 각각의 그래프 노드/함수 시그니처에 대해 생성될 수 있다. 그러한 실시예들에서, 블룸 필터는, 어떤 소스 코드 파일들 및 어떤 소스 코드 파일 버전들이 애플리케이션 또는 프로그램의 특정 버전으로 컴파일될 것인지를 식별하는 버전 제어 툴과 같은 유틸리티에 기초하여 생성될 수 있다. 그래프 노드들의 함수 시그니처들에 의해 식별되는 함수들에 기초한 바이너리 파일들의 특정 세트에 대한 블룸 필터는 식별된 함수들이 발생하는 바이너리 파일들 각각의 모든 함수들에 대한 정보를 포함할 수 있다. 그러한 실시예에서, 블룸 필터는 차일드 또는 연결 노드로서 추가된 베이스 클래스 메소드의 오버라이드의 각각의 구현을 직접 평가하는 것을 허용할 수 있는데(1140), 그 이유는 블룸 필터가 시작 및 종료 노드들에 표현된 함수들을 포함하는 바이너리 파일들에 이미 특정될 것이기 때문이다.
[052] 예시적인 함수 콜 그래프 또는 그래프 부분의 실시예가 도 1c에 도시된다. 도시된 실시예에서, 업데이트 요청 함수(1500)로부터의 함수 콜 경로들이 도시된다. 클래스 "클라이언트"에서 호출되는 업데이트 요청 함수(1500)는 클래스 "서버"에서 업데이트 요청 처리기 함수(1510)를 호출할 수 있다. 업데이트 요청 처리기 함수(1510)는 요청 검증 함수(1520), 요청 프로세싱 함수(1530), 및 응답 셋팅 함수(1540)를 호출할 수 있다. 클래스 "액션"으로부터의 요청 프로세싱 함수(1530)는 클래스들 "액션 1", "액션 2" 및 "액션 3"에서 요청 프로세싱 함수들(1550, 1560, 1570)에 의해 각각 오버라이딩될 수 있다. 이러한 연결들은 파선들로 표시되는데, 그 이유는 일부 실시예들에서는 그것들이 정석 분석들을 통해서보다는 런-타임 분석 동안에 그래프 내에서 해결되어야 하기 때문이다. 액션 2 요청 프로세싱 함수(1560)는 스스로 다시 호출하는 반복 계산 함수(1580)를 호출할 수 있다. 도시된 실시예에서, 함수들 각각은 그래프 노드를 나타낸다.
[053] 본원에 논의된 바와 같은 함수 콜 그래프의 노드를 나타내는 데이터 구조의 실시예가 도 2에 도시된다. 도시된 실시예에서, 그래프 노드(2010)는 그 노드에 의해 표현되는 특정 함수를 식별하는 함수 시그니처(20200)를 표시하는 정보를 포함할 수 있다. 그래프 노드(2010)는 또한 함수 시그니처에 의해 식별되는 함수를 포함하는 소스 파일의 절대 경로(20190)를 표시하는 정보를 포함할 수 있다. 그러한 절대 경로(20190)는 하나 또는 그 초과의 특정 저장부 또는 저장부-장착 디바이스들의 특정 저장 위치에서 데이터의 절대 물리 위치 및 가상 또는 논리 파일 시스템의 디렉토리 중 하나 또는 둘 모두에서의 특정 파일 위치에 대한 정보를 포함할 수 있다.
[054] 그래프 노드(2010)의 실시예는 또한 그래프 노드에 의해 식별된 함수가 컴파일되는 모든 바이너리 파일들에 기초하여 블룸 필터(20210)를 나타내는 정보를 포함할 수 있다. 위에서 논의된 바와 같이, 그러한 블룸 필터는 원하는 또는 용인가능한 레벨의 결함 허용오차에 기초하여 길이에 있어 가변적일 수 있다. 허위 긍정(또는 허위 부정) 결과들이 허용되지 않거나 그렇지 않으며 용인되지 않는 일부 실시예들에서는, 상이한 타입의 필터가 이용될 수 있다.
[055] 그래프 노드(2010)의 실시예는 차일드 또는 연결 노드들의 리스팅을 또한 포함할 수 있다. 비록 차일드 노드들로서 리스팅되지만, 그러한 노드들은 그래프 노드로부터 다른 노드로의 연결들을 나타내고, 그렇지 않으면 페어런츠 및 차일드 그래프 노드 간의 특징들 또는 데이터의 운송 또는 공통성이나 체계를 표시하지 않는다. 도시된 예시적인 그래프 노드(2010)는 잠재적으로 임의적인 수의 차일드 노드들(20100, 20130, 20160)을 포함한다. 각각의 차일드 노드(20100, 20130, 20160)는 개별적인 차일드 노드들(20100, 20130, 20160)의 함수 시그니처들에 따라 그래프 노드(2010)에서 식별될 수 있다. 각각의 함수가 장착되거나 고유 함수 시그니처에 의해 식별되는 실시예들에서, 그러한 함수 시그니처들은 또한 각각의 그래프 노드가 고유하게 식별되도록 허용한다.
[056] 그래프 노드(2010)에서 표현되는 각각의 차일드 노드(20100, 20130, 20160)는 또한 노드 종류(20110, 20140, 20170)에 대한 정보를 포함할 수 있다. 일부 실시예들에서, 노드 종류는 다이렉트 콜 종류 및 인스턴스 콜 종류 중 하나를 포함하고, 인스턴스 콜 종류는 차일드 노드가 콜가능 함수에서 인보크되는 베이스 클래스 메소드의 오버라이드의 구현을 나타낸다고 표시한다. 다이렉트 함수 콜들은 블룸 필터를 통해 그래프를 트래버싱해야할 필요가 없이 가시적이거나 혹은 그렇지 않으면 정적 분석을 위해 이용가능할 수 있다. 인스턴스 콜들은 런-타임 분석을 요구할 수 있다.
[057] 일부 실시예들에서, 그래프 노드(2010)에서 표현되는 각각의 차일드 노드(20100, 20130, 20160)는 또한 그 차일드 노드가 원격 프로시저 콜(20120, 20150, 20180)을 나타내는지 여부를 명시하는 플래그를 포함할 수 있다. 그러한 플래그는 코드베이스 밖의 함수들을 인보크하거나 트리거할 수 있는 프로시저들 또는 서브루틴들을 지칭하는 함수들의 식별을 가능하게 할 수 있다. 더욱이, 원격 프로시저 콜로서 플래그되는 함수는 일부 실시예들에서 코드베이스 내의 어떤 콜-투 함수들도 갖지 않을 수 있다.
[058] 일단 함수 콜 그래프의 실시예가 생성되면, 그래프는 시작 함수 및 종료 함수 간의 하나 또는 그 초과의 가능한 함수 콜 경로들을 찾기 위해 탐색될 수 있다. 콜 경로 탐색 동작의 실시예가 도 3에 도시된다.
[059] 도시된 실시예에서, 콜 그래프 탐색 툴은 시작 그래프 노드(3001)를 식별하는 함수 시그니처 및 종료 그래프 노드(3010)를 식별하는 함수 시그니처를 입력들로서 수신할 수 있다. 일부 실시예들에서, 콜 그래프 탐색 툴은 또한 시작 및 종료 노드의 공통 종속성들을 도시하는 리스팅 또는 데이터베이스를 구성하거나 액세스할 수 있다. 그러한 종속성들은 예컨대 특정 클래스, 함수 또는 소스 파일을 종속성으로서 포함하는 모든 바이너리들을 포함할 수 있다. 일부 그러한 실시예들에서는, 제 1 함수 및 제 2 함수 둘 모두가 단지 특정 실행가능물에 존재하는 경우 제 1 함수로부터 제 2 함수까지의 콜 그래프 경로를 결정하는데 있어, 모든 중간 그래프 노드들이 또한 단지 그 특정 실행가능물에 존재해야 한다. 이는 상이한 실행가능 파일들로부터의 함수들에 관련된 그래프 노드들을 고려사항으로부터 제거함으로써 그래프 탐색의 속도를 높일 수 있다.
[060] 시작 노드(3001) 또는 종료 노드(3010) 중 어느 하나에서 시작하여, 또는 일부 실시예들에서는, 시작 노드(3001) 및 종료 노드(3010) 둘 모두로부터 양방향으로 진행하여, 너비-우선 경로 탐색이 모든 차일드 또는 연결 노드들에 대해 개시될 수 있다. 일부 실시예들에서, 이는, 시작 또는 종료 노드 중 어느 하나가 원격 프로시저 콜(RPC)(3020)을 포함하는지를 먼저 검사함으로써 실현될 수 있다. 이러한 검사는 일부 실시예들에서 수행될 수 있는데, 그 이유는 심지어 모놀리식 코드베이스에서도 원격 프로시저 콜이 시작 및 종료 노드들에 의해 표현되는 함수들을 포함하는 것들을 넘어 바이너리 파일들의 세트의 함수들을 지칭할 수 있기 때문이다.
[061] 시작 및 종료 노드들 중 하나가 RPC(3020)인 실시예들에서, 사용되는 바이너리들의 세트는 시작 또는 종료 노드들 중 어느 하나를 지칭하는 모든 바이너리들을 포함할 수 있다(3040). 시작 또는 종료 노드 중 어느 것도 RPC가 아닌 실시예들에서, 사용되는 바이너리들의 세트는 시작 및 종료 노드들 둘 모두를 지칭하는 그러한 바이너리들만을 포함할 수 있다(3030).
[062] 각각의 노드에 대해, 그것의 블룸 필터가 추출될 수 있고, 공통 종속성들 중 적어도 하나가 그 노드에 대한 블룸 필터(3080)를 통과하는지 여부를 결정하기 위해 바이너리 파일들이 블룸 필터(3080)에 대해 테스트될 수 있다.
[063] 만약 공통 종속성들을 나타내는 바이너리 파일들이 그 노드에 대한 블룸 필터를 통과하지 않는다면, 노드는 가능한 또는 유력한 함수 콜 경로의 부분이 아니기 때문에 폐기된다(3070). 만약 공통 종속성들이 그 노드에 대한 블룸 필터를 통과한다면, 그 노드는 가능한 콜 경로들의 리스팅 또는 추적에 추가된다(3090). 너비-우선 탐색을 이용하는 실시예들에서, 그러한 평가는 그래프(3110)의 정해진 레벨에서 모든 노드들에 대해 진행할 수 있거나, 정해진 시긴 기간 내에 또는 컴퓨팅 자원들의 특정 할당을 통해 분석될 수 있는 그래프의 정해진 레벨에서 모든 노드들에 대해 진행할 수 있다. 그러한 실시예들에서는, 그래프 레벨의 정해진 노드가 그의 연관된 블룸 필터들로 평가된 이후에, 레벨의 그 다음 노드(3100)가 이어서, 레벨의 모든 노드들이 평가될 때까지(3110) 또는 일부 경우들에서는 미리 결정된 양의 시간이 경과하거나 미리 결정된 양의 컴퓨팅 자원들이 소모될 때까지, 유사하게 평가될 수 있다.
[064] 이어서, 경로 리스트에 포함된 노드들은 가장 가능한 그 다음 노드 및 가장 덜 가능한 그 다음 노드를 결정하기 위해 랭킹 방식에 따라 랭킹될 수 있다(3130). 일부 실시예들에서, 랭킹은 노드가 다이렉트 함수 콜 또는 오버로딩된/상속된 함수 콜인지 여부와 같은 팩터들에 기초하여 결정될 수 있다. 일부 그러한 실시예들에서, 다이렉트 함수 콜들은 오버로딩되거나 상속된 함수 콜들보다 더 높게 랭킹될 수 있다. 일부 실시예들에서는, 단지 특정 수의 랭킹된 노드들만이 관심이 있을 수 있다. 일부 그러한 실시예들에서는, 단지 5개의 가장 높게 랭킹된 노드들만이 랭킹된 노드들로서 유지될 수 있고, 나머지 노드들은 폐기되거나 그렇지 않으면 나중에 평가되지 않는다. 일부 실시예들에서, 종료 노드(3010)에 매칭하는 노드는 가장 높게 랭킹된 노드일 수 있다.
[065] 노드들이 랭킹(3130)된 이후에, 랭킹된 노드들 각각은 가장 높게 랭킹된 노드로 시작하여 확장될 수 있고(3120), 그로 인해서 그것이 후속하는 너비-우선 경로 탐색(3050)에 포함시킬 차일드 노드들(3060)을 갖는지 여부가 결정될 수 있다. 그러한 확장은 모든 랭킹된 노드들(3050)에 대해 진행할 수 있거나, 정해진 시간 기간 내에 또는 컴퓨팅 자원들의 특정 할당을 통해 분석될 수 있는 모든 랭킹된 노드들에 대해 진행할 수 있다.
[066] 일부 실시예들에서, 이러한 탐색 및 평가 동작은, 탐색 경로가 시작 노드(3001) 또는 종료 노드(3010)에서 종결할 때까지 또는 양방향 실시예들에서는 탐색 경로들이 만나고 확장되고 탐색될 어떤 차일드 또는 연결 노드들도 남아 있지 않을 때까지(3140), 계속된다. 일단 가능한 함수 콜 경로들의 리스트가 생성되면, 경로들의 리스트는 가장 가능한 또는 가장 유력한 것으로 간주되는 하나 또는 그 초과의 함수 콜 경로들을 식별하기 위해서 분류되거나(3150) 또는 랭킹될 수 있다. 이어서, 그래프 탐색 툴은 가장 가능한 경로들을 포함하는 콜 경로들 중 일부 또는 모두를 리턴할 수 있다(3160).
[067] 일부 실시예들에서, 그래프 탐색 툴은 단일 또는 브랜칭 경로를 따라 연결된 노드들의 표현들로서 함수 콜 경로들을 도시할 수 있는 그래픽 인터페이스를 포함하거나 또는 그것의 부분일 수 있다. 일부 실시예들에서, 상속 확장에 기초하여 노드들을 연결하는 그래프 에지들은 식별되거나 또는 그렇지 않으면 그와 같이 그것들을 식별하기 위해 상이하게 디스플레이될 수 있다.
[068] 일부 실시예들에서, 경로 리스트는, 전체 경로 길이(예컨대, 경로에서 그래프 에지들의 수 또는 노드들의 수), 경로가 애플리케이션 또는 물건 코드베이스들 간에 크로스하는지 여부, 경로가 특정 오브젝트들 또는 오브젝트 클래스들로부터의 함수들을 인보크하는지 여부, 및 빈번한 함수 콜 동작을 나타내는 이전 런-타임 추적들과 같은 팩터들을 포함한 다양한 기준들에 의해 분류될 수 있다. 경로 리스트 분류 및 가능성 결정 동작의 실시예가 도 4에 도시된다.
[069] 도 3에 도시된 것과 같은 그래프 탐색 동작에 기초하여 컴파일된 경로 리스트(4001)로 시작해서, 분류 및 경로 가능성 프로세스는 리스트에서 가장 짧은 경로들을 식별할 수 있다(4010). 일부 실시예들에서, 가장 짧은 경로들의 수는 리턴할 경로들의 수 및/또는 최대 허용 경로 길이를 관리하는 외부 정의 또는 외부 제어 셋팅에 의해 결정될 수 있다. 경로 길이는 경로의 노드들의 수, 경로에 포함된 그래프 에지들의 수, 또는 이들의 조합에 의해 결정될 수 있다. 일부 경로들에서는, 예컨대, 노드가 여러 번에 걸쳐 통과되어, 경로의 그래프 에지들의 수를 경로의 노드들의 수보다 크게 만들 수 있다.
[070] 일부 실시예들에서, 경로들은 그들이 특정 물건 또는 애플리케이션에 대한 코드베이스 내에 완전히 있는지 여부에 기초하여 식별될 수 있다(4020). 일부 실시예들에서는, 경로 길이에 기초하여 그리고 또한 경로들이 단일 물건 코드베이스 내에 남아 있는지 여부에 기초하여, 경로들에 우선권이 주어질 수 있다(4020). 일부 그러한 실시예들에서는, 물건 또는 애플리케이션 코드베이스 내에 완전히 있는 경로가 단일 물건 또는 애플리케이션 코드베이스 내에 완전히 있지 않은 동일하거나 유사한 길이의 경로보다 더 가능하거나 더 유력한 것으로 분류될 수 있다.
[071] 일부 실시예들에서, 오브젝트 클래스 가중 팩터들이 또한 경로들에 적용될 수 있다. 그러한 오브젝트 클래스 가중 팩터들은 일부 실시예들에서 특정 오브젝트들 또는 오브젝트 클래스들과 연관된 사용 빈도에 기초하여 결정될 수 있다. 그러한 실시예들에서, 가중 팩터와 연관된 특정 오브젝트 또는 오브젝트 클래스로부터의 함수를 나타내는 노드를 포함하는 함수 콜 경로들은 이를 행하지 않는 동일하거나 유사한 길이의 함수 콜 경로들보다 더 높은 공산 및 가능성이 제공될 수 있다.
[072] 일부 실시예들에서, 특정 함수 콜 경로의 공산 또는 가능성은 경로 길이, 코드베이스 및 클래스 가중 팩터들에 기초하여 계산되는 특정 가능성 백분율과 연관될 수 있다. 다른 실시예들에서, 특정 함수 콜 경로의 공산 또는 가능성은 특정 백분율을 제공하지 않고도 다른 콜 경로들에 비해 상대적인 용어들로 표현될 수 있다. 일부 실시예들에서, 특정 함수 콜 경로의 공산 또는 가능성은 콜 경로 리스트 내의 특정 콜 경로의 랭킹 순서에 의해 표현될 수 있다. 일부 실시예들에서, 콜 경로 가능성을 결정하는 것(4040)은 경로 길이(4010), 코드베이스 내의 경로 길이(4020) 및/또는 클래스 가중 팩터들(4030)에 기초하여 함수 콜 경로들을 재정렬하거나 재랭킹하는 것을 포함할 수 있다.
[073] 일부 실시예들에서, 경로 가능성을 결정(4040)하기 위해 경로 리스트 내의 함수 콜 경로들의 그러한 재정렬 또는 재랭킹은 과거 런-타임 추적들에 대해 함수 콜 경로들을 평가하는 것(4050)을 또한 포함할 수 있다. 그러한 런-타임 추적들은 이력 애플리케이션 작동에 기초하여 빈번한 및/또는 가능한 콜 경로들을 나타내는 이력 함수 콜 데이터를 포함할 수 있다. 일단 절대 또는 상대 콜 경로 가능성이 예컨대 콜 경로들을 가장 가능한 것부터 가장 덜 가능한 것까지 랭킹하거나 정렬함으로써 결정되면(4040), 임의의 양의 가장 가능한 콜 경로들(예컨대, 탑-랭킹 경로들)이 리턴되거나, 또는 그렇지 않으면 경로 탐색 툴 또는 다른 정보 요청 엔티티(이를테면 예컨대 애플리케이션 개발 또는 프로토타이핑 프로그램 또는 프로그램 스위트)의 사용자에게 표현하기 위해 선택될 수 있다.
[074] 비록 기능성의 측면에서 위에서 논의되었지만, 함수 그래프 생성 및 콜 경로 탐색의 특징들 및 특성들은 하나 또는 그 초과의 특수화된, 프로그래밍가능한, 및/또는 특별히 프로그래밍된 컴퓨팅 디바이스들 또는 이들의 부분들의 사용을 통해서 실현될 수 있다.
[075] 도 5는 본원에 설명된 바와 같은 콜 그래프 생성 및 콜 경로 탐색 기술들을 수행하도록 배열되는 예시적인 컴퓨팅 디바이스(500)를 예시하는 블록도이다. 매우 기본적인 구성(501)에서, 컴퓨팅 디바이스(500)는 통상적으로 하나 또는 그 초과의 프로세서들(510) 및 시스템 메모리(520)를 포함한다. 메모리 버스(530)는 프로세서(510)와 시스템 메모리(520) 간의 통신을 위해 사용될 수 있다.
[076] 원하는 구성에 따라, 프로세서(510)는 마이크로프로세서(μP), 마이크로제어기(μC), 디지털 신호 프로세서(DSP) 또는 이들의 임의의 조합을 포함한(그러나 이들로 제한되지는 않음) 임의의 타입의 프로세서일 수 있다. 프로세서(510)는 하나 또는 그 초과의 레벨들의 캐싱, 이를테면 레벨 1 캐시(511) 및 레벨 2 캐시(512), 프로세서 코어(513), 및 레지스터들(514)을 포함할 수 있다. 프로세서 코어(513)는 산술 논리 유닛(ALU), 플로팅 포인트 유닛(FPU), 디지털 신호 프로세싱 코어(DSP 코어), 또는 이들의 임의의 조합을 포함할 수 있다. 메모리 제어기(515)는 또한 프로세서(510)와 사용될 수 있거나, 일부 구현들에서, 메모리 제어기(515)는 프로세서(510)의 내부 부분일 수 있다.
[077] 원하는 구성에 따라, 시스템 메모리(520)는 휘발성 메모리(이를테면 RAM), 비-휘발성 메모리(이를테면 ROM, 플래시 메모리 등) 또는 이들의 임의의 조합을 포함한(그러나 이들로 제한되지는 않음) 임의의 타입의 시스템 메모리일 수 있다. 시스템 메모리(520)는 통상적으로 운영 시스템(521), 하나 또는 그 초과의 애플리케이션들(522), 및 프로그램 데이터(524)를 포함한다. 애플리케이션(522)은 본원에서 논의된 바와 같은 콜 그래프 생성 및/또는 콜 경로 탐색 특징을 포함할 수 있다. 프로그램 데이터(524)는 위에서 설명된 바와 같은 원하는 동작들을 수행하는데 유용한 하나 또는 그 초과의 종속성 리스트들 또는 오브젝트 명칭 리스트들(525)과 같은 로케이션 데이터를 포함한다. 일부 실시예들에서, 애플리케이션(522)이 운영 시스템(521) 상에서 프로그램 데이터(524)로 동작하도록 배열될 수 있고, 그로 인해서 전체 시스템은 본원에서 논의된 바와 같은 기술들의 하나 또는 그 초과의 특정 변화들을 수행한다. 이러한 설명된 기본적인 구성은 라인(501) 내의 그러한 컴포넌트들에 의해서 도 5에 예시되어 있다.
[078] 컴퓨팅 디바이스(500)는 기본적인 구성(501)과 임의의 필요한 디바이스들 및 인터페이스들 간의 통신들을 용이하게 하기 위해 추가적인 특징들 또는 기능성 및 추가적인 인터페이스들을 가질 수 있다. 예컨대, 버스/인터페이스 제어기(540)는 저장 인터페이스 버스(541)를 통해 기본적인 구성(501)과 하나 또는 그 초과의 데이터 저장 디바이스들(550) 간의 통신들을 용이하게 하기 위해 사용될 수 있다. 데이터 저장 디바이스들(550)은 제거가능 저장 디바이스들(551), 비-제거가능 저장 디바이스들(552), 또는 이들의 조합일 수 있다. 제거가능 저장 및 비-제거가능 저장 디바이스들의 예들은 몇 가지를 거론하자면 플렉시블 디스크 드라이브들 및 하드-디스크 드라이브들(HDD)과 같은 자기 디스크 디바이스들, 콤팩트 디스크(CD) 드라이브들 또는 디지털 다기능 디스크(DVD) 드라이브들과 같은 광학 디스크 드라이브들, SSD(solid-state drives), 및 테이프 드라이브들을 포함한다. 예시적인 컴퓨터 저장 매체들은 컴퓨터 판독가능 명령들, 데이터 구조들, 프로그램 모듈들 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기법으로 구현되는 휘발성 및 비휘발성, 제거가능 및 비-제거가능 매체들을 포함할 수 있다.
[079] 시스템 메모리(520), 제거가능 저장부(551) 및 비-제거가능 저장부(552)는 컴퓨터 저장 매체들의 모든 예들이다. 컴퓨터 저장 매체들은 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기법, CD-ROM, 디지털 다기능 디스크들(DVD) 또는 다른 광학 저장부, 자기 카세트들, 자기 테이프, 자기 디스크 저장 또는 다른 자기 저장 디바이스들, 또는 원하는 정보를 저장하기 위해사용될 수 있고 컴퓨팅 디바이스(500)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들로 제한되지는 않는다. 임의의 이러한 컴퓨터 저장 매체들은 디바이스(500)의 부분일 수 있다.
[080] 컴퓨팅 디바이스(500)는 또한 버스/인터페이스 제어기(540)를 통해 다양한 인터페이스 디바이스들(예컨대, 출력 인터페이스들, 주변 인터페이스들 및 통신 인터페이스들)로부터 기본적인 구성(501)으로의 통신을 용이하게 하기 위한 인터페이스 버스(542)를 포함할 수 있다. 예시적인 출력 디바이스들(560)은 그래픽 프로세싱 유닛(561) 및 오디오 프로세싱 유닛(562)을 포함하는데, 그것들은 하나 또는 그 초과의 A/V 포트들(563)을 통해 디스플레이 또는 스피커들과 같은 다양한 외부 디바이스들에 통신하도록 구성될 수 있다. 예시적인 주변 인터페이스들(570)은 직렬 인터페이스 제어기(571) 또는 병렬 인터페이스 제어기(572)를 포함하는데, 이들은 입력 디바이스들(예컨대, 키보드, 마우스, 펜, 음성 입력 디바이스, 카메라, 터치 입력 디바이스 등) 또는 다른 주변 디바이스들(예컨대, 프린터, 스캐너 등)과 같은 외부 디바이스들과 하나 또는 그 초과의 I/O 포트들(573)을 통해 통신하도록 구성될 수 있다. 예시적인 통신 디바이스(580)는 네트워크 제어기(581)를 포함하는데, 그 네트워크 제어기(581)는 하나 또는 그 초과의 통신 포트들(582)을 통한 네트워크 통신을 통해서 하나 또는 그 초과의 다른 컴퓨팅 디바이스들(590)과의 통신들을 용이하게 하도록 배열될 수 있다.
[081] 통신 접속은 통신 매체들의 일예이다. 통신 매체들은 통상적으로 컴퓨터 판독가능 명령들, 데이터 구조들, 프로그램 모듈들, 또는 캐리어 파 또는 다른 전송 메커니즘과 같은 변조된 데이터 신호 내의 다른 데이터에 의해 구현될 수 있고, 임의의 정보 전달 매체들을 포함한다. "변조된 데이터 신호"는 자신의 특징들 세트의 하나 또는 그 초과의 특징을 갖는 신호일 수 있고, 그 신호 내에 정보를 인코딩하기 위한 방식으로 변경될 수 있다. 비제한적인 예로서, 통신 매체들은 유선 네트워크 또는 다이렉트-유선 접속과 같은 유선 매체들, 및 음향, 라디오 주파수(RF), 적외선(IR) 및 다른 무선 매체들과 같은 무선 매체들을 포함할 수 있다. 본원에서 사용되는 바와 같은 컴퓨터 판독가능 매체들이란 용어는 저장 매체들 및 통신 매체들 양쪽 모두를 포함할 수 있다.
[082] 컴퓨팅 디바이스(500)는, 셀 폰, PDA(personal data assistant), 개인용 미디어 플레이어 디바이스, 무선 웹-시청 디바이스, 개인용 헤드셋 디바이스, 애플리케이션 특정 디바이스, 또는 위의 기능들 중 임의의 기능을 포함하는 하이브리드 디바이스와 같은 소형 팩터 휴대용(또는 모바일) 전자 디바이스의 부분으로서 구현될 수 있다. 컴퓨팅 디바이스(500)는 랩톱 컴퓨터 및 비-랩톱 컴퓨터 구성들 양쪽 모두를 포함한 개인용 컴퓨터로서 또한 구현될 수 있다.
[083] 일부 경우들에서는, 시스템들의 양상들의 하드웨어 및 소프트웨어 구현들 간에 거의 차이가 존재하지 않고; 하드웨어 또는 소프트웨어의 사용은 일반적으로 (그러나, 특정 상황에서는 하드웨어와 소프트웨어 사이에서의 선택이 중요하게 될 수 있다는 점에서 항상 그렇지는 않지만) 비용-대-효율성 절충들을 나타내는 설계 선택이다. 본원에 설명된 프로세스들 및/또는 시스템들 및/또는 다른 기법들(예컨대, 하드웨어, 소프트웨어 및/또는 펌웨어)이 실행될 수 있는 다양한 운송수단들이 존재하고, 바람직한 운송수단은 프로세스들 및/또는 시스템들 및/또는 다른 기법들이 전개되는 상황에 따라 바뀔 것이다. 예컨대, 만약 속도 및 정확성이 무엇보다 중요하다고 구현자가 결정한다면, 구현자는 주로 하드웨어 및/또는 펌웨어 운송수단을 선택할 수 있거나; 만약 융통성이 무엇보다 중요하다면, 구현자는 주로 소프트웨어 구현을 선택할 수 있거나; 또는 다시 한번 대안적으로, 구현자는 하드웨어, 소프트웨어 및/또는 펌웨어의 일부 구현을 선택할 수 있다.
[084] 앞선 상세한 설명은 블록도들, 흐름도들 및/또는 예들의 사용을 통해 디바이스들 및/또는 프로세스들의 다양한 실시예들을 기술하였다. 그러한 블록도들, 흐름도들 및/또는 예들이 하나 또는 그 초과의 기능들 및/또는 동작들을 포함하고 있는 한은, 그러한 블록도들, 흐름도들, 또는 예들 내의 각각의 기능 및/또는 동작은 광범위한 하드웨어, 소프트웨어, 펌웨어 또는 가상적으로 이들의 임의의 조합에 의해서 개별적으로 및/또는 총괄적으로 구현될 수 있다는 것이 당업자들에 의해 이해될 것이다. 일 실시예에서는, 본원에 설명된 청구대상의 몇몇 부분들이 ASIC(Application Specific Integrated Circuit)들, FPGA(Field Programmable Gate Array)들, DSP(digital signal processor)들, 또는 다른 집적 형태들을 통해 구현될 수 있다. 그러나, 당업자들은, 본원에 설명된 실시예들 중 일부 양상들이 전체적으로 또는 부분적으로, 하나 또는 그 초과의 컴퓨터들 상에서 실행하는 하나 또는 그 초과의 컴퓨터 프로그램들로서(예컨대, 하나 또는 그 초과의 컴퓨터 시스템들 상에서 실행하는 하나 또는 그 초과의 프로그램들로서), 하나 또는 그 초과의 프로세서들 상에서 실행하는 하나 또는 그 초과의 프로그램들로서(예컨대, 하나 또는 그 초과의 마이크로프로세서들 상에서 실행하는 하나 또는 그 초과의 프로그램들로서), 펌웨어로서, 또는 가상적으로 이들의 임의의 조합으로서, 집적 회로들로 동일하게 구현될 수 있다는 점과, 회로를 설계하는 것 및/또는 소프트웨어 또는 펌웨어에 대한 코드를 기록하는 것은 본 개시내용을 고려하여 당업자의 기술 내에 당연히 있을 것이라는 점을, 인지할 것이다. 게다가, 당업자들은, 본원에 설명된 청구대상의 메커니즘들이 다양한 형태들의 프로그램 물건으로서 배포될 수 있다는 점, 및 본원에 설명된 청구대상의 예시적인 실시예가 배포를 실제로 실행하기 위해 사용되는 특정 타입의 신호 베어링 매체와 상관없이 적용된다는 점을 인지할 것이다. 신호 베어링 매체의 예들은, 플로피 디스크, 하드 디스크 드라이브, 콤팩트 디스크(CD), 디지털 비디오 디스크(DVD), 디지털 테이프, 컴퓨터 메모리 등과 같은 레코딩가능 타입 매체; 및 디지털 및/또는 아날로그 통신 매체(예컨대, 광섬유 케이블, 도파관, 유선 통신 링크, 무선 통신 링크 등)과 같은 송신 타입 매체를 포함하지만, 이들로 제한되는 않는다.
[085] 당업자들은, 본원에 기술된 형태로 디바이스들 및/또는 프로세스들을 설명하고 그런 이후에 그러한 설명된 디바이스들 및/또는 프로세스들을 데이터 프로세싱 시스템들에 통합하기 위해 엔지니어링 수련들을 사용하는 것이 해당 분야에서 일반적이라는 것을 인지할 것이다. 즉, 본원에 설명된 디바이스들 및/또는 프로세스들 중 적어도 일부분은 적절한 양의 실험을 통해 데이터 프로세싱 시스템에 통합될 수 있다. 당업자들은, 통상적인 데이터 프로세싱 시스템이 일반적으로는 시스템 유닛 하우징, 비디오 디스플레이 디바이스, 휘발성 및 비-휘발성 메모리와 같은 메모리, 마이크로프로세서들 및 디지털 신호 프로세서들과 같은 프로세서들, 운영 시스템들, 드라이버들, 그래픽 사용자 인터페이스들 및 애플리케이션 프로그램들과 같은 컴퓨테이셔널 엔티티들, 터치 패드 또는 스크린과 같은 하나 또는 그 초과의 상호작용 디바이스들, 및/또는 피드백 루프들 및 제어 모터들(예컨대, 포지션 및/또는 속도를 감지하기 위한 피드백; 컴포넌트들 및/또는 양들을 이동 및/또는 조정하기 위한 제어 모터들)을 포함하는 제어 시스템들 중 하나 또는 그 초과를 포함한다는 것을 인지할 것이다. 통상적인 데이터 프로세싱 시스템은 임의의 적절한 상업적으로 입수가능한 컴포넌트들, 이를테면 데이터 컴퓨팅/통신 및/또는 네트워크 컴퓨팅/통신 시스템들에서 통상 발견되는 컴포넌트들을 활용하여 구현될 수 있다.
[086] 본원에서 실질적으로 임의의 복수 및/또는 단수 용어들의 사용에 대해서, 당업자들은 상황 및/또는 애플리케이션에 적합할 때 복수로부터 단수로 및/또는 단수로부터 복수로 전환할 수 있다. 다양한 단수/복수 치환들이 명확성을 위해 본원에서 명백히 기술될 수 있다.
[087] 본원에서 논의된 시스템들 및 솔루션들의 단지 예시적인 실시예들이 본 개시내용에 도시되고 설명된다. 본원에 논의된 시스템들 및 솔루션들은 다양한 다른 조합들 및 환경들에서 사용될 수 있고, 본원에서 표현된 바와 같은 개념들의 범위 내에서 변경들 또는 수정들이 가능할 수 있다는 것이 이해될 것이다. 일부 변형들이 하드웨어, 펌웨어 및/또는 소프트웨어의 조합들로 구현될 수 있다. 일부 변형들은 메모리 칩들, 하드 드라이브들, 플래시 메모리, 광학 저장 매체들과 같은 컴퓨터-판독가능 저장 매체들 상에서 적어도 부분적으로 구현될 수 있거나, 다양한 하드웨어 디바이스들 및/또는 하드웨어 디바이스들의 조합들/수집들 상에서의 설치에 의한 다운로딩을 위해 송신하기에 적절한 전체적으로 또는 부분적으로 컴파일된 프로그램들로서 구현될 수 있다. 그러한 변형들은 본원에 논의된 시스템들 및 솔루션들의 사상 및 범위로부터 벗어나는 것으로서 간주되지 않아야 하고, 당업자들에게 명백할 모든 그러한 수정들은 다음의 청구항들의 범위 내에 포함되도록 의도된다.

Claims (26)

  1. 코드베이스에 대한 함수 콜 그래프(function call graph)를 생성하는 컴퓨터-기반 방법으로서,
    프로세서를 통해, 함수 시그니처를 사용하여 상기 코드베이스 내의 함수들을 식별하는 단계(1001);
    특정 식별된 함수를 상기 함수 콜 그래프 내의 제 1 노드(1070)로서 표현하는 단계;
    상기 특정 함수에 대해, 상기 특정 함수의 함수 시그니처에 기초하여 콜-투(call-to) 함수들, 콜-프롬(call-from) 함수들, 상속 페어런츠(inheritance parents) 및 상속 칠드런(children), 및 상기 특정 함수와 연관된 베이스 클래스를 식별하는 단계(1200);
    식별된 콜-투 및 콜-프롬 함수들에 기초하여 제 1 차일드 노드들(1020)을 상기 제 1 노드에 추가하는 단계(1090);
    상기 특정 함수에서 베이스 클래스 메소드에 대한 인터페이스 콜(1010)에 대해, 상기 베이스 클래스 메소드의 오버라이드(override)의 구현들에 기초하여 제 2 차일드 노드들을 상기 제 1 노드에 추가하는 단계;
    상기 제 1 노드의 각각의 차일드 노드(1020)에 대해, 페어런츠-차일드 관계에 대한 바이너리 파일 필터를 생성하는 단계(1040)를 포함하고,
    상기 바이너리 파일 필터는 상기 특정 함수 및 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들에 기초하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  2. 제 1항에 있어서,
    상기 바이너리 파일 필터는 상기 특정 함수 및 상기 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들을 블룸 필터(Bloom filter)를 통과하는 파일들로서 표시하도록 구성된 상기 블룸 필터인, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  3. 제 1항에 있어서,
    상기 방법은 상기 함수 콜 그래프의 메모리 풋프린트를 감소시키는 단계(1080)를 더 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  4. 제 3항에 있어서,
    상기 메모리 풋프린트를 감소시키는 단계는 함수 시그니처들에 해시 함수를 적용하는 단계, 및 상기 해시 함수의 결과를 상기 함수 시그니처들의 표현으로서 저장하는 단계를 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  5. 바이너리 파일이 두 개의 함수들 간의 콜 경로를 포함하는지 여부를 결정하는 방법으로서,
    함수 콜 그래프 내의 시작 노드(1170)를 나타내는 정보를 수신하는 단계 ― 상기 시작 노드는 시작 함수와 연관됨 ―;
    함수 콜 그래프 내의 종료 노드(1180)를 나타내는 정보를 수신하는 단계 ― 상기 종료 노드는 종료 함수와 연관됨 ―;
    상기 시작 노드 및 상기 종료 노드 중 적어도 하나와 연관된 바이너리 파일을 제 1 블룸 필터(1110, 1140)로 테스트하는 단계를 포함하고,
    상기 테스트하는 단계는 상기 바이너리 파일이 상기 시작 함수 및 상기 종료 함수(1130, 1120)를 포함하는지 여부를 결정하기 위해 상기 제 1 블룸 필터를 상기 바이너리 파일에 적용하는 단계를 포함하는, 결정 방법.
  6. 제 2항에 있어서,
    상기 방법은 상기 특정 함수 및 상기 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들의 수에 기초하여 블룸 필터의 사이즈를 변경하는 단계를 더 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  7. 제 1항에 있어서,
    상기 바이너리 필터를 생성하는 단계는 상기 코드베이스의 바이너리 파일들에 기초하여 블룸 필터를 생성하는 단계를 포함하고,
    상기 방법은 생성된 블룸 필터를 상기 제 1 노드에 추가하는 단계를 더 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  8. 제 7항에 있어서,
    상기 오버라이드의 특정 추가된 구현을 포함하는 제 1 소스 코드 파일 및 상기 특정 함수를 포함하는 제 2 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하는지 여부를 결정하는 단계는 상기 제 1 노드의 블룸 필터를 상기 제 1 소스 코드 파일을 사용하여 컴파일된 바이너리 파일에 적용하는 단계를 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  9. 제 8항에 있어서,
    상기 블룸 필터의 사이즈는 상기 코드베이스의 얼마나 많은 바이너리 파일들이 제 2 소스 코드 파일을 사용하여 컴파일되거나 생성되는지에 의해 결정되고, 그로 인해서 자주 사용되는 소스 코드 파일은 더 큰 사이즈의 블룸 필터와 연관되는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법.
  10. 코드베이스 내의 두 개의 함수들 간의 가능한 콜 경로를 결정하는 방법으로서,
    소스 함수 및 목적지 함수를 입력들로서 수신하는 단계;
    함수 콜 그래프에서, 상기 소스 함수와 연관된 시작 노드(3001) 및 상기 목적지 함수와 연관된 종료 노드(3010)를 식별하는 단계;
    상기 시작 노드와 상기 목적지 노드 간에 함수 콜 그래프 내의 가능한 경로들을 탐색하는 단계(3050) ― 상기 탐색하는 단계는, 그래프의 레벨로 각각의 노드에 대해서, 상기 시작 노드 및 상기 종료 노드에 의해 공유되는 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계(3080), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖는 평가된 노드에 대해, 상기 평가된 노드를 가능한 경로 리스트에 포함시키는 단계(3080, 3090), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖지 않는 평가된 노드에 대해, 상기 평가된 노드를 임의의 가능한 경로 리스트로부터 배제시키는 단계(3080, 3070)를 포함함 ―;
    상기 가능한 경로 리스트에 포함된 노드들을 랭킹하는 단계(3130);
    각각의 랭킹된 노드에 대해, 랭킹된 노드가 차일드 노드들을 포함하는지를 결정하기 위해 상기 랭킹된 노드를 확장하는 단계;
    상기 랭킹된 노드가 차일드 노드들을 갖는다는 결정에 응답하여, 상기 랭킹된 노드를 시작 노드로서 처리하고, 상기 랭킹된 노드의 각각의 차일드 노드에 대해 상기 가능한 경로들을 탐색하는 단계를 수행하는 단계(3060);
    상기 랭킹된 노드가 어떤 차일드 노드들도 갖지 않는다는 결정에 응답하여, 상기 랭킹된 노드를 가능한 함수 콜 경로로서 포함하는 함수 콜 경로를 식별하는 단계(3060, 3140);
    상기 시작 노드와 상기 종료 노드 간의 가능한 함수 콜 경로들을 분류하는 단계(3150); 및
    분류된 가능한 함수 콜 경로들 중 적어도 하나를 가능한 콜 경로로서 리턴하는 단계(3160)를 포함하는, 결정 방법.
  11. 제 10항에 있어서,
    상기 모든 가능한 함수 콜 경로들을 분류하는 단계는,
    상기 모든 가능한 함수 콜 경로들을 가장 짧은 것부터 가장 긴 것까지 정렬하는 단계;
    정렬된 함수 콜 경로들 중에서, 완전히 단일 코드베이스 내에 있는 그러한 함수 콜 경로들을 식별하는 단계;
    상기 모든 가능한 함수 콜 경로들이 함수 콜 경로 길이 및 가중 팩터에 기초하여 가장 가능한 것부터 가장 덜 가능한 것까지 정렬되도록 가중 팩터들을 상기 정렬된 함수 콜 경로들에 적용하는 단계 ― 상기 가중 팩터는 완전히 단일 코드베이스 내에 있는 더욱 가능한 그러한 함수 콜 경로들로서 표시하는 것을 포함함 ―; 및
    상기 가중 팩터들을 적용하는 단계 이후에 적어도 가장 가능한 함수 콜 경로를 가능한 콜 경로로서 리턴하는 단계를 포함하는, 결정 방법.
  12. 제 11항에 있어서,
    상기 가중 팩터들을 적용하는 단계는 이전 함수 실행들로부터 생성되는 이력 추적 데이터에 의해 표시되는 함수 콜 경로들이 그러한 함수 콜 경로들을 더욱 가능한 것으로서 표시하는 가중 팩터들과 연관되도록 상기 이력 추적 데이터에 기초하여 가중 팩터들을 생성하는 단계를 포함하는, 결정 방법.
  13. 제 10항에 있어서,
    상기 가중 팩터들을 적용하는 단계는 공통적으로 사용되는 오브젝트 클래스들을 포함하는 콜 경로들이 더욱 가능한 것으로서 표시되도록 클래스-기반 가중 팩터들을 적용하는 단계를 포함하는, 결정 방법.
  14. 제 10항에 있어서,
    상기 가능한 경로들을 탐색하는 단계는 상기 그래프 내에서 모든 가능한 경로들을 탐색하는 단계를 포함하는, 결정 방법.
  15. 제 10항에 있어서,
    상기 가능한 경로들을 탐색하는 단계는 상기 시작 및 종료 노드들 둘 모두로부터 시작하는 양방향 탐색을 수행하는 단계를 포함하는, 결정 방법.
  16. 제 10항에 있어서,
    상기 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계는 상기 소스 함수 및 상기 목적지 함수 중 적어도 하나를 포함하는 소스 코드 파일로부터 컴파일된 적어도 하나의 바이너리 파일에 상기 노드와 연관된 블룸 필터를 적용하는 단계를 포함하고,
    상기 적어도 하나의 바이너리 파일이 적용된 블룸 필터를 통과하는 것에 대한 응답으로, 상기 노드는 상기 공통 종속성들의 리스트에 포함된 종속성을 갖는 것으로서 평가되는, 결정 방법.
  17. 제 16항에 있어서,
    상기 방법은,
    상기 소스 함수 및 상기 목적지 함수 중 적어도 하나가 원격 프로시저 콜들이라는 결정에 대한 응답으로, 상기 블룸 필터가 상기 소스 함수 및 상기 목적지 함수 중 적어도 하나를 포함하는 그러한 바이너리 파일들을 통과시키도록 구성되는 단계;
    상기 소스 함수 및 상기 목적지 함수 중 적어도 하나가 원격 프로시저 콜들이 아니라는 결정에 대한 응답으로, 상기 블룸 필터가 상기 소스 함수 및 상기 목적지 함수 둘 모두를 포함하는 그러한 바이너리 파일들을 통과시키도록 구성되는 단계를 더 포함하는, 결정 방법.
  18. 제 16항에 있어서,
    상기 블룸 필터의 사이즈는 상기 블룸 필터가 통과시키도록 구성되는 바이너리 파일들의 수에 기초하는, 결정 방법.
  19. 코드베이스에 대한 함수 콜 그래프를 나타내는 데이터 구조를 포함하는 비-일시적인 컴퓨터-판독가능 매체로서,
    상기 그래프는 복수의 그래프 노드들을 포함하고, 각각의 그래프 노드는 상기 코드베이스 내의 콜가능 함수를 나타내고,
    상기 복수의 그래프 노드들 중 제 1 그래프 노드는,
    상기 코드베이스 내의 콜가능 함수를 고유하게 식별하는 함수 시그니처;
    파일 시스템 내에서 상기 콜가능 함수를 포함하는 데이터 파일의 절대 위치를 식별하는 제 1 그래프 노드 절대 경로;
    상기 제 1 그래프 노드의 차일드 노드를 식별하는 정보 ― 상기 차일드 노드를 식별하는 정보는 상기 차일드 노드와 연관된 차일드 함수 및 상기 차일드 노드와 연관된 차일드 노드 종류를 식별하는 차일드 함수 시그니처의 표현을 포함함 ―를 포함하고,
    상기 차일드 노드와 연관된 상기 차일드 함수 시그니처는 상기 제 1 그래프 노드 및 상기 차일드 노드를 연결하는 그래프 에지를 나타내고,
    상기 차일드 노드 종류는 다이렉트 콜 종류 및 인스턴스 콜 종류 중 하나를 포함하고, 상기 인스턴스 콜 종류는 상기 콜가능 함수에서 인보크되는 베이스 클래스 메소드의 오버라이드의 구현을 나타내는, 비-일시적인 컴퓨터-판독가능 매체.
  20. 제 19항에 있어서,
    상기 차일드 노드를 식별하는 정보는 상기 차일드 노드와 연관된 차일드 함수가 원격 프로시저 콜 함수인지 여부를 표시하는 플래그를 더 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
  21. 제 19항에 있어서,
    상기 함수 시그니처는 해싱된 형태로 상기 제 1 그래프 노드에 포함되고, 상기 해싱된 형태는 매체 내에서 데이터 저장 공간을 덜 점유하는, 비-일시적인 컴퓨터-판독가능 매체.
  22. 제 19항에 있어서,
    상기 차일드 노드는,
    상기 코드베이스 내의 차일드 함수를 고유하게 식별하는 차일드 함수 시그니처;
    파일 시스템 내에서 차일드 함수를 포함하는 데이터 파일의 절대 위치를 식별하는 차일드 노드 절대 경로;
    그래프 노드의 연결 노드를 식별하는 정보를 포함하고,
    상기 연결 노드를 식별하는 정보는 상기 차일드 노드에 의해 표현되는 차일드 함수를 인보크하는 콜-프롬 함수를 식별하는 콜-프롬 함수 시그니처의 표현을 포함하고,
    상기 연결 노드와 연관된 콜-프롬 함수 시그니처는 상기 차일드 노드 및 상기 연결 노드를 연결하는 그래프 에지를 나타내는, 비-일시적인 컴퓨터-판독가능 매체.
  23. 제 19항에 있어서,
    상기 제 1 그래프 노드는 상기 차일드 노드의 연결 노드인, 비-일시적인 컴퓨터-판독가능 매체.
  24. 제 22항에 있어서,
    각각의 그래프 에지는 함수 콜 경로의 적어도 부분을 나타내고,
    방법은 과거 런-타임 추적들에 대해서 함수 콜 경로들을 평가함으로써 후속적인 랭킹을 수행하는 단계를 더 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
  25. 시스템으로서,
    프로세서;
    상기 프로세서로 하여금 코드베이스에 대한 함수 콜 그래프를 생성하는 방법을 수행하게 하는 명령들을 구현하는 프로세서-판독가능 메모리를 포함하고,
    상기 방법은,
    프로세서를 통해, 함수 시그니처를 사용하여 상기 코드베이스 내의 함수들을 식별하는 단계(1001);
    특정 식별된 함수를 상기 함수 콜 그래프 내의 제 1 노드(1070)로서 표현하는 단계;
    상기 특정 함수에 대해, 상기 특정 함수의 함수 시그니처에 기초하여 콜-투 함수들, 콜-프롬 함수들, 상속 페어런츠 및 상속 칠드런, 및 상기 특정 함수와 연관된 베이스 클래스를 식별하는 단계(1200);
    식별된 콜-투 및 콜-프롬 함수들에 기초하여 제 1 차일드 노드들(1020)을 상기 제 1 노드에 추가하는 단계(1090);
    상기 특정 함수에서 베이스 클래스 메소드에 대한 인터페이스 콜(1010)에 대해, 상기 베이스 클래스 메소드의 오버라이드의 구현들에 기초하여 제 2 차일드 노드들을 상기 제 1 노드에 추가하는 단계;
    상기 제 1 노드의 각각의 차일드 노드(1020)에 대해, 페어런츠-차일드 관계에 대한 바이너리 파일 필터를 생성하는 단계(1040)를 포함하고,
    상기 바이너리 파일 필터는 상기 특정 함수 및 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들에 기초하는, 시스템.
  26. 시스템으로서,
    프로세서;
    상기 프로세서로 하여금 코드베이스 내의 두 개의 함수들 간의 가능한 콜 경로를 결정하는 방법을 수행하게 하는 명령들을 구현하는 프로세서-판독가능 메모리를 포함하고,
    상기 방법은,
    소스 함수 및 목적지 함수를 입력들로서 수신하는 단계;
    함수 콜 그래프에서, 상기 소스 함수와 연관된 시작 노드(3001) 및 상기 목적지 함수와 연관된 종료 노드(3010)를 식별하는 단계;
    상기 시작 노드와 상기 목적지 노드 간에 함수 콜 그래프 내의 가능한 경로들을 탐색하는 단계(3050) ― 상기 탐색하는 단계는, 그래프의 레벨로 각각의 노드에 대해서, 상기 시작 노드 및 상기 종료 노드에 의해 공유되는 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계(3080), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖는 평가된 노드에 대해, 상기 평가된 노드를 가능한 경로 리스트에 포함시키는 단계(3080, 3090), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖지 않는 평가된 노드에 대해, 상기 평가된 노드를 임의의 가능한 경로 리스트로부터 배제시키는 단계(3080, 3070)를 포함함 ―;
    상기 가능한 경로 리스트에 포함된 노드들을 랭킹하는 단계(3130);
    각각의 랭킹된 노드에 대해서, 랭킹된 노드가 차일드 노드들을 포함하는지를 결정하기 위해 상기 랭킹된 노드를 확장하는 단계;
    상기 랭킹된 노드가 차일드 노드들을 갖는다는 결정에 응답하여, 상기 랭킹된 노드를 시작 노드로서 처리하고, 상기 랭킹된 노드의 각각의 차일드 노드에 대해 상기 가능한 경로들을 탐색하는 단계를 수행하는 단계(3060);
    상기 랭킹된 노드가 어떤 차일드 노드들도 갖지 않는다는 결정에 응답하여, 상기 랭킹된 노드를 가능한 함수 콜 경로로서 포함하는 함수 콜 경로를 식별하는 단계(3060, 3140);
    상기 시작 노드와 상기 종료 노드 간의 가능한 함수 콜 경로들을 분류하는 단계(3150); 및
    분류된 가능한 함수 콜 경로들 중 적어도 하나를 가능한 콜 경로로서 리턴하는 단계(3160)를 포함하는, 시스템.
KR1020167012999A 2013-11-19 2014-11-17 콜경로 파인더 KR101841751B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/084,399 2013-11-19
US14/084,399 US9218169B2 (en) 2013-11-19 2013-11-19 Callpath finder
PCT/US2014/065906 WO2015077175A1 (en) 2013-11-19 2014-11-17 Callpath finder

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020187007820A Division KR102154757B1 (ko) 2013-11-19 2014-11-17 콜경로 파인더

Publications (2)

Publication Number Publication Date
KR20160073402A true KR20160073402A (ko) 2016-06-24
KR101841751B1 KR101841751B1 (ko) 2018-05-04

Family

ID=53174616

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020167012999A KR101841751B1 (ko) 2013-11-19 2014-11-17 콜경로 파인더
KR1020187007820A KR102154757B1 (ko) 2013-11-19 2014-11-17 콜경로 파인더

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020187007820A KR102154757B1 (ko) 2013-11-19 2014-11-17 콜경로 파인더

Country Status (8)

Country Link
US (2) US9218169B2 (ko)
EP (2) EP4369180A3 (ko)
JP (1) JP6349395B2 (ko)
KR (2) KR101841751B1 (ko)
CN (1) CN105745647B (ko)
BR (1) BR112016009391B1 (ko)
DE (1) DE202014010893U1 (ko)
WO (1) WO2015077175A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11960888B2 (en) 2019-07-24 2024-04-16 SK Hynix Inc. Memory system, memory controller, and method for operating memory system

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112015003406B4 (de) 2014-07-24 2022-05-25 Ab Initio Technology Llc Datenherkunftssummierung
US9250891B1 (en) * 2014-10-28 2016-02-02 Amazon Technologies, Inc. Optimized class loading
US9483241B2 (en) * 2014-12-19 2016-11-01 Successfactors, Inc. Method ranking based on code invocation
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
US9405906B1 (en) * 2015-02-25 2016-08-02 Veracode, Inc. System and method for enhancing static analysis of software applications
US9569183B2 (en) * 2015-02-25 2017-02-14 Red Hat, Inc. Contract based builder
US9411706B1 (en) 2015-09-30 2016-08-09 Semmle Limited Suggesting candidate removable software dependencies
US11650903B2 (en) 2016-01-28 2023-05-16 Codesignal, Inc. Computer programming assessment
US10303517B1 (en) 2016-01-28 2019-05-28 BrainFights, Inc. Automated evaluation of computer programming
US11593342B2 (en) 2016-02-01 2023-02-28 Smartshift Technologies, Inc. Systems and methods for database orientation transformation
US10585655B2 (en) 2016-05-25 2020-03-10 Smartshift Technologies, Inc. Systems and methods for automated retrofitting of customized code objects
CN106020848A (zh) * 2016-06-07 2016-10-12 北京信息科技大学 面向c#的函数调用路径生成方法
US10089103B2 (en) 2016-08-03 2018-10-02 Smartshift Technologies, Inc. Systems and methods for transformation of reporting schema
US10467229B2 (en) 2016-09-30 2019-11-05 Microsoft Technology Licensing, Llc. Query-time analytics on graph queries spanning subgraphs
US9792114B1 (en) * 2016-10-10 2017-10-17 Semmle Limited Source code element signatures
US10545945B2 (en) 2016-10-28 2020-01-28 Microsoft Technology Licensing, Llc Change monitoring spanning graph queries
US10445361B2 (en) 2016-12-15 2019-10-15 Microsoft Technology Licensing, Llc Caching of subgraphs and integration of cached subgraphs into graph query results
US10402403B2 (en) 2016-12-15 2019-09-03 Microsoft Technology Licensing, Llc Utilization of probabilistic characteristics for reduction of graph database traversals
US10891326B2 (en) 2017-01-05 2021-01-12 International Business Machines Corporation Representation of a data analysis using a flow graph
US10242223B2 (en) 2017-02-27 2019-03-26 Microsoft Technology Licensing, Llc Access controlled graph query spanning
US10992729B2 (en) 2017-04-18 2021-04-27 Microsoft Technology Licensing, Llc Endpoint configuration for a communication session
US10388039B2 (en) 2017-05-31 2019-08-20 International Business Machines Corporation Accelerating data-driven scientific discovery
CN107479985B (zh) * 2017-06-30 2020-01-03 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
US11132180B2 (en) * 2018-01-05 2021-09-28 Microsoft Technology Licensing, Llc Neural-guided deductive search for program synthesis
US10740075B2 (en) * 2018-02-06 2020-08-11 Smartshift Technologies, Inc. Systems and methods for code clustering analysis and transformation
US10528343B2 (en) 2018-02-06 2020-01-07 Smartshift Technologies, Inc. Systems and methods for code analysis heat map interfaces
US10698674B2 (en) 2018-02-06 2020-06-30 Smartshift Technologies, Inc. Systems and methods for entry point-based code analysis and transformation
FR3078182B1 (fr) * 2018-02-19 2021-12-24 Bull Sas Systeme et procede informatique d'analyse de performance d'une application realisant des appels de fonction de communication entre plusieurs processus.
WO2019182191A1 (ko) 2018-03-21 2019-09-26 경북대학교 산학협력단 C0x2 아세틸화제를 유효성분으로 포함하는 퇴행성 신경질환의 예방 또는 치료용 약학적 조성물
US20200134482A1 (en) * 2018-10-29 2020-04-30 Walmart Apollo, Llc Scaling overrides in a rules engine using a streaming probabilistic data structure
JPWO2020174578A1 (ja) * 2019-02-26 2021-09-30 三菱電機株式会社 シーケンス図生成装置
CN110032394B (zh) * 2019-04-12 2022-05-31 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
US11782971B2 (en) * 2019-06-27 2023-10-10 Tencent America LLC Static and dynamic NBMP function image retrieval and scale ranking
CN111026467B (zh) * 2019-12-06 2022-12-20 合肥科大智能机器人技术有限公司 一种有限状态机的控制方法及有限状态机
US11360751B2 (en) * 2020-03-19 2022-06-14 Codelogic, Inc. Systems and methods for dependency analysis
US11593255B2 (en) * 2020-07-31 2023-02-28 Bank Of America Corporation Mobile log heatmap-based auto testcase generation
CN112631935B (zh) * 2020-12-30 2024-08-06 中国农业银行股份有限公司 一种基于版本冲突的测试方法和装置
CN116028375B (zh) * 2023-02-21 2023-06-16 深圳大数信科技术有限公司 基于图论的代码测试方法

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1195990A (ja) * 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP3694872B2 (ja) * 1999-09-22 2005-09-14 日立ソフトウエアエンジニアリング株式会社 従属サブルーチン探索支援装置
US7120904B1 (en) * 2000-04-19 2006-10-10 Intel Corporation Data-flow method for optimizing exception-handling instructions in programs
US7003507B2 (en) * 2000-09-18 2006-02-21 International Business Machines Corporation Scalable propagation-based methods for call graph construction
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
US6904590B2 (en) * 2001-05-25 2005-06-07 Microsoft Corporation Methods for enhancing program analysis
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7661095B2 (en) * 2005-04-14 2010-02-09 Hewlett-Packard Development Company, L.P. System and method to build a callgraph for functions with multiple entry points
US7721269B2 (en) * 2005-12-23 2010-05-18 Sas Institute Inc. System and method for detecting redundant subroutine calls
US7774760B2 (en) * 2005-12-23 2010-08-10 Microsoft Corporation Tracing errors in software
US7739553B2 (en) * 2007-05-31 2010-06-15 Microsoft Corporation System crash analysis using path tracing technologies
CN101436192B (zh) * 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
US8990792B2 (en) * 2008-05-26 2015-03-24 Samsung Electronics Co., Ltd. Method for constructing dynamic call graph of application
US8347272B2 (en) * 2008-07-23 2013-01-01 International Business Machines Corporation Call graph dependency extraction by static source code analysis
US8332558B2 (en) * 2008-09-30 2012-12-11 Intel Corporation Compact trace trees for dynamic binary parallelization
US8996568B2 (en) * 2009-07-14 2015-03-31 Qualcomm Incorporated Methods and apparatus for efficiently processing multiple keyword queries on a distributed network
CN101876939B (zh) * 2009-11-20 2011-12-21 北京信息科技大学 系统测试方法及装置
US8595709B2 (en) * 2009-12-10 2013-11-26 Microsoft Corporation Building an application call graph from multiple sources
US8788705B2 (en) * 2010-01-04 2014-07-22 Telefonaktiebolaget L M Ericsson (Publ) Methods and apparatus for secure routing of data packets
EP2529578A1 (en) * 2010-01-29 2012-12-05 Telefonaktiebolaget LM Ericsson (publ) Packet routing in a network
WO2011091871A1 (en) * 2010-01-29 2011-08-04 Telefonaktiebolaget Lm Ericsson (Publ) Packet routing in a network by modifying in-packet bloom filter
WO2011116987A1 (en) * 2010-03-26 2011-09-29 Software Diagnostics Technology Gmbh A method for automatically generating a trace data set for a software system, a computer system, and a computer program product
EP2390790A1 (en) * 2010-05-27 2011-11-30 Fujitsu Limited Profiling of software applications
EP2731024A4 (en) * 2011-07-07 2015-11-04 Nec Corp INFORMATION PROCESSING DEVICE, INFORMATION PROCESSING METHOD, AND PROGRAM
US8990243B2 (en) * 2011-11-23 2015-03-24 Red Hat, Inc. Determining data location in a distributed data store
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
US8762396B2 (en) * 2011-12-22 2014-06-24 Sap Ag Dynamic, hierarchical bloom filters for network data routing
CN103186406B (zh) * 2011-12-30 2016-08-17 国际商业机器公司 用于控制流分析的方法和装置
US8527532B2 (en) * 2012-01-31 2013-09-03 Adobe Systems Incorporated Transforming function calls for interaction with hierarchical data structures
US9092568B2 (en) * 2012-04-30 2015-07-28 Nec Laboratories America, Inc. Method and system for correlated tracing with automated multi-layer function instrumentation localization
US8918766B2 (en) * 2012-12-12 2014-12-23 Microsoft Corporation Analysis of propagated information using annotated forests
US10685313B2 (en) * 2012-12-14 2020-06-16 Software Ag Systems and/or methods for path finding on model structures
CN103345472B (zh) * 2013-06-04 2016-08-10 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法
CN103336760B (zh) * 2013-07-11 2016-12-28 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11960888B2 (en) 2019-07-24 2024-04-16 SK Hynix Inc. Memory system, memory controller, and method for operating memory system

Also Published As

Publication number Publication date
BR112016009391A2 (pt) 2017-08-01
DE202014010893U1 (de) 2017-02-20
KR101841751B1 (ko) 2018-05-04
JP6349395B2 (ja) 2018-06-27
WO2015077175A1 (en) 2015-05-28
EP4369180A2 (en) 2024-05-15
CN105745647B (zh) 2019-06-04
BR112016009391B1 (pt) 2023-03-28
BR112016009391A8 (pt) 2022-08-30
JP2016539421A (ja) 2016-12-15
KR102154757B1 (ko) 2020-09-10
CN105745647A (zh) 2016-07-06
EP3072070B1 (en) 2024-05-01
US9218169B2 (en) 2015-12-22
US10042746B2 (en) 2018-08-07
EP3072070A4 (en) 2017-08-09
KR20180032669A (ko) 2018-03-30
US20160092350A1 (en) 2016-03-31
EP3072070A1 (en) 2016-09-28
EP4369180A3 (en) 2024-05-22
US20150143339A1 (en) 2015-05-21

Similar Documents

Publication Publication Date Title
KR101841751B1 (ko) 콜경로 파인더
US11151151B2 (en) Integration template generation
KR102054568B1 (ko) 필터링 데이터 계통 다이어그램
US11288395B2 (en) Metadata storage architecture and data aggregation
US8782635B2 (en) Reconfiguration of computer system to allow application installation
US11650905B2 (en) Testing source code changes
EP3438813B1 (en) Component management platform
US11675575B2 (en) Checking source code validity at time of code update
CN110764748B (zh) 代码调用方法、装置、终端及存储介质
RU2679971C2 (ru) Осуществление доступа к семантическому контенту в системе разработки
US8433697B2 (en) Flexible metadata composition
KR101990603B1 (ko) 대규모 소스 코드 저장소들에서의 자동적인 임포트들 및 의존성들
WO2021014320A1 (en) Indexer operation and generation of index data
US9519566B2 (en) Modeling memory use of applications
US11340897B1 (en) Subject matter expert identification for computer software
US9703532B1 (en) Dynamically updating class instances based on class definition changes
US20220188103A1 (en) Subject matter expert identification and code analysis based on a probabilistic filter
KR102456960B1 (ko) 네트워크 데이터 처리 방법, 장치, 전자 기기, 저장매체 및 프로그램
CN117171397A (zh) 页面控件定位方法、设备及存储介质
CN118368236A (zh) 发现接口资源的方法及相关设备

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
A107 Divisional application of patent
GRNT Written decision to grant