KR20160073402A - 콜경로 파인더 - Google Patents
콜경로 파인더 Download PDFInfo
- 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
Links
- 230000006870 function Effects 0.000 claims abstract description 323
- 238000000034 method Methods 0.000 claims abstract description 104
- 238000012545 processing Methods 0.000 claims description 13
- 230000004044 response Effects 0.000 claims description 10
- 238000013500 data storage Methods 0.000 claims description 4
- 238000012360 testing method Methods 0.000 claims description 3
- 230000000977 initiatory effect Effects 0.000 claims 2
- 230000001052 transient effect Effects 0.000 claims 1
- 238000004891 communication Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 11
- 230000009471 action Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 5
- 238000010276 construction Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 241000614201 Adenocaulon bicolor Species 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000002425 crystallisation Methods 0.000 description 1
- 230000008025 crystallization Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/74—Reverse engineering; Extracting design information from source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural 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
[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] 도면들은 상세한 설명 동안 상세히 설명될 것이다.
[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)
- 코드베이스에 대한 함수 콜 그래프(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)를 포함하고,
상기 바이너리 파일 필터는 상기 특정 함수 및 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들에 기초하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 제 1항에 있어서,
상기 바이너리 파일 필터는 상기 특정 함수 및 상기 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들을 블룸 필터(Bloom filter)를 통과하는 파일들로서 표시하도록 구성된 상기 블룸 필터인, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 제 1항에 있어서,
상기 방법은 상기 함수 콜 그래프의 메모리 풋프린트를 감소시키는 단계(1080)를 더 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 제 3항에 있어서,
상기 메모리 풋프린트를 감소시키는 단계는 함수 시그니처들에 해시 함수를 적용하는 단계, 및 상기 해시 함수의 결과를 상기 함수 시그니처들의 표현으로서 저장하는 단계를 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 바이너리 파일이 두 개의 함수들 간의 콜 경로를 포함하는지 여부를 결정하는 방법으로서,
함수 콜 그래프 내의 시작 노드(1170)를 나타내는 정보를 수신하는 단계 ― 상기 시작 노드는 시작 함수와 연관됨 ―;
함수 콜 그래프 내의 종료 노드(1180)를 나타내는 정보를 수신하는 단계 ― 상기 종료 노드는 종료 함수와 연관됨 ―;
상기 시작 노드 및 상기 종료 노드 중 적어도 하나와 연관된 바이너리 파일을 제 1 블룸 필터(1110, 1140)로 테스트하는 단계를 포함하고,
상기 테스트하는 단계는 상기 바이너리 파일이 상기 시작 함수 및 상기 종료 함수(1130, 1120)를 포함하는지 여부를 결정하기 위해 상기 제 1 블룸 필터를 상기 바이너리 파일에 적용하는 단계를 포함하는, 결정 방법. - 제 2항에 있어서,
상기 방법은 상기 특정 함수 및 상기 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들의 수에 기초하여 블룸 필터의 사이즈를 변경하는 단계를 더 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 제 1항에 있어서,
상기 바이너리 필터를 생성하는 단계는 상기 코드베이스의 바이너리 파일들에 기초하여 블룸 필터를 생성하는 단계를 포함하고,
상기 방법은 생성된 블룸 필터를 상기 제 1 노드에 추가하는 단계를 더 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 제 7항에 있어서,
상기 오버라이드의 특정 추가된 구현을 포함하는 제 1 소스 코드 파일 및 상기 특정 함수를 포함하는 제 2 소스 코드 파일이 적어도 하나의 공통 바이너리 파일을 공유하는지 여부를 결정하는 단계는 상기 제 1 노드의 블룸 필터를 상기 제 1 소스 코드 파일을 사용하여 컴파일된 바이너리 파일에 적용하는 단계를 포함하는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 제 8항에 있어서,
상기 블룸 필터의 사이즈는 상기 코드베이스의 얼마나 많은 바이너리 파일들이 제 2 소스 코드 파일을 사용하여 컴파일되거나 생성되는지에 의해 결정되고, 그로 인해서 자주 사용되는 소스 코드 파일은 더 큰 사이즈의 블룸 필터와 연관되는, 코드베이스에 대한 함수 콜 그래프를 생성하는 컴퓨터-기반 방법. - 코드베이스 내의 두 개의 함수들 간의 가능한 콜 경로를 결정하는 방법으로서,
소스 함수 및 목적지 함수를 입력들로서 수신하는 단계;
함수 콜 그래프에서, 상기 소스 함수와 연관된 시작 노드(3001) 및 상기 목적지 함수와 연관된 종료 노드(3010)를 식별하는 단계;
상기 시작 노드와 상기 목적지 노드 간에 함수 콜 그래프 내의 가능한 경로들을 탐색하는 단계(3050) ― 상기 탐색하는 단계는, 그래프의 레벨로 각각의 노드에 대해서, 상기 시작 노드 및 상기 종료 노드에 의해 공유되는 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계(3080), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖는 평가된 노드에 대해, 상기 평가된 노드를 가능한 경로 리스트에 포함시키는 단계(3080, 3090), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖지 않는 평가된 노드에 대해, 상기 평가된 노드를 임의의 가능한 경로 리스트로부터 배제시키는 단계(3080, 3070)를 포함함 ―;
상기 가능한 경로 리스트에 포함된 노드들을 랭킹하는 단계(3130);
각각의 랭킹된 노드에 대해, 랭킹된 노드가 차일드 노드들을 포함하는지를 결정하기 위해 상기 랭킹된 노드를 확장하는 단계;
상기 랭킹된 노드가 차일드 노드들을 갖는다는 결정에 응답하여, 상기 랭킹된 노드를 시작 노드로서 처리하고, 상기 랭킹된 노드의 각각의 차일드 노드에 대해 상기 가능한 경로들을 탐색하는 단계를 수행하는 단계(3060);
상기 랭킹된 노드가 어떤 차일드 노드들도 갖지 않는다는 결정에 응답하여, 상기 랭킹된 노드를 가능한 함수 콜 경로로서 포함하는 함수 콜 경로를 식별하는 단계(3060, 3140);
상기 시작 노드와 상기 종료 노드 간의 가능한 함수 콜 경로들을 분류하는 단계(3150); 및
분류된 가능한 함수 콜 경로들 중 적어도 하나를 가능한 콜 경로로서 리턴하는 단계(3160)를 포함하는, 결정 방법. - 제 10항에 있어서,
상기 모든 가능한 함수 콜 경로들을 분류하는 단계는,
상기 모든 가능한 함수 콜 경로들을 가장 짧은 것부터 가장 긴 것까지 정렬하는 단계;
정렬된 함수 콜 경로들 중에서, 완전히 단일 코드베이스 내에 있는 그러한 함수 콜 경로들을 식별하는 단계;
상기 모든 가능한 함수 콜 경로들이 함수 콜 경로 길이 및 가중 팩터에 기초하여 가장 가능한 것부터 가장 덜 가능한 것까지 정렬되도록 가중 팩터들을 상기 정렬된 함수 콜 경로들에 적용하는 단계 ― 상기 가중 팩터는 완전히 단일 코드베이스 내에 있는 더욱 가능한 그러한 함수 콜 경로들로서 표시하는 것을 포함함 ―; 및
상기 가중 팩터들을 적용하는 단계 이후에 적어도 가장 가능한 함수 콜 경로를 가능한 콜 경로로서 리턴하는 단계를 포함하는, 결정 방법. - 제 11항에 있어서,
상기 가중 팩터들을 적용하는 단계는 이전 함수 실행들로부터 생성되는 이력 추적 데이터에 의해 표시되는 함수 콜 경로들이 그러한 함수 콜 경로들을 더욱 가능한 것으로서 표시하는 가중 팩터들과 연관되도록 상기 이력 추적 데이터에 기초하여 가중 팩터들을 생성하는 단계를 포함하는, 결정 방법. - 제 10항에 있어서,
상기 가중 팩터들을 적용하는 단계는 공통적으로 사용되는 오브젝트 클래스들을 포함하는 콜 경로들이 더욱 가능한 것으로서 표시되도록 클래스-기반 가중 팩터들을 적용하는 단계를 포함하는, 결정 방법. - 제 10항에 있어서,
상기 가능한 경로들을 탐색하는 단계는 상기 그래프 내에서 모든 가능한 경로들을 탐색하는 단계를 포함하는, 결정 방법. - 제 10항에 있어서,
상기 가능한 경로들을 탐색하는 단계는 상기 시작 및 종료 노드들 둘 모두로부터 시작하는 양방향 탐색을 수행하는 단계를 포함하는, 결정 방법. - 제 10항에 있어서,
상기 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계는 상기 소스 함수 및 상기 목적지 함수 중 적어도 하나를 포함하는 소스 코드 파일로부터 컴파일된 적어도 하나의 바이너리 파일에 상기 노드와 연관된 블룸 필터를 적용하는 단계를 포함하고,
상기 적어도 하나의 바이너리 파일이 적용된 블룸 필터를 통과하는 것에 대한 응답으로, 상기 노드는 상기 공통 종속성들의 리스트에 포함된 종속성을 갖는 것으로서 평가되는, 결정 방법. - 제 16항에 있어서,
상기 방법은,
상기 소스 함수 및 상기 목적지 함수 중 적어도 하나가 원격 프로시저 콜들이라는 결정에 대한 응답으로, 상기 블룸 필터가 상기 소스 함수 및 상기 목적지 함수 중 적어도 하나를 포함하는 그러한 바이너리 파일들을 통과시키도록 구성되는 단계;
상기 소스 함수 및 상기 목적지 함수 중 적어도 하나가 원격 프로시저 콜들이 아니라는 결정에 대한 응답으로, 상기 블룸 필터가 상기 소스 함수 및 상기 목적지 함수 둘 모두를 포함하는 그러한 바이너리 파일들을 통과시키도록 구성되는 단계를 더 포함하는, 결정 방법. - 제 16항에 있어서,
상기 블룸 필터의 사이즈는 상기 블룸 필터가 통과시키도록 구성되는 바이너리 파일들의 수에 기초하는, 결정 방법. - 코드베이스에 대한 함수 콜 그래프를 나타내는 데이터 구조를 포함하는 비-일시적인 컴퓨터-판독가능 매체로서,
상기 그래프는 복수의 그래프 노드들을 포함하고, 각각의 그래프 노드는 상기 코드베이스 내의 콜가능 함수를 나타내고,
상기 복수의 그래프 노드들 중 제 1 그래프 노드는,
상기 코드베이스 내의 콜가능 함수를 고유하게 식별하는 함수 시그니처;
파일 시스템 내에서 상기 콜가능 함수를 포함하는 데이터 파일의 절대 위치를 식별하는 제 1 그래프 노드 절대 경로;
상기 제 1 그래프 노드의 차일드 노드를 식별하는 정보 ― 상기 차일드 노드를 식별하는 정보는 상기 차일드 노드와 연관된 차일드 함수 및 상기 차일드 노드와 연관된 차일드 노드 종류를 식별하는 차일드 함수 시그니처의 표현을 포함함 ―를 포함하고,
상기 차일드 노드와 연관된 상기 차일드 함수 시그니처는 상기 제 1 그래프 노드 및 상기 차일드 노드를 연결하는 그래프 에지를 나타내고,
상기 차일드 노드 종류는 다이렉트 콜 종류 및 인스턴스 콜 종류 중 하나를 포함하고, 상기 인스턴스 콜 종류는 상기 콜가능 함수에서 인보크되는 베이스 클래스 메소드의 오버라이드의 구현을 나타내는, 비-일시적인 컴퓨터-판독가능 매체. - 제 19항에 있어서,
상기 차일드 노드를 식별하는 정보는 상기 차일드 노드와 연관된 차일드 함수가 원격 프로시저 콜 함수인지 여부를 표시하는 플래그를 더 포함하는, 비-일시적인 컴퓨터-판독가능 매체. - 제 19항에 있어서,
상기 함수 시그니처는 해싱된 형태로 상기 제 1 그래프 노드에 포함되고, 상기 해싱된 형태는 매체 내에서 데이터 저장 공간을 덜 점유하는, 비-일시적인 컴퓨터-판독가능 매체. - 제 19항에 있어서,
상기 차일드 노드는,
상기 코드베이스 내의 차일드 함수를 고유하게 식별하는 차일드 함수 시그니처;
파일 시스템 내에서 차일드 함수를 포함하는 데이터 파일의 절대 위치를 식별하는 차일드 노드 절대 경로;
그래프 노드의 연결 노드를 식별하는 정보를 포함하고,
상기 연결 노드를 식별하는 정보는 상기 차일드 노드에 의해 표현되는 차일드 함수를 인보크하는 콜-프롬 함수를 식별하는 콜-프롬 함수 시그니처의 표현을 포함하고,
상기 연결 노드와 연관된 콜-프롬 함수 시그니처는 상기 차일드 노드 및 상기 연결 노드를 연결하는 그래프 에지를 나타내는, 비-일시적인 컴퓨터-판독가능 매체. - 제 19항에 있어서,
상기 제 1 그래프 노드는 상기 차일드 노드의 연결 노드인, 비-일시적인 컴퓨터-판독가능 매체. - 제 22항에 있어서,
각각의 그래프 에지는 함수 콜 경로의 적어도 부분을 나타내고,
방법은 과거 런-타임 추적들에 대해서 함수 콜 경로들을 평가함으로써 후속적인 랭킹을 수행하는 단계를 더 포함하는, 비-일시적인 컴퓨터-판독가능 매체. - 시스템으로서,
프로세서;
상기 프로세서로 하여금 코드베이스에 대한 함수 콜 그래프를 생성하는 방법을 수행하게 하는 명령들을 구현하는 프로세서-판독가능 메모리를 포함하고,
상기 방법은,
프로세서를 통해, 함수 시그니처를 사용하여 상기 코드베이스 내의 함수들을 식별하는 단계(1001);
특정 식별된 함수를 상기 함수 콜 그래프 내의 제 1 노드(1070)로서 표현하는 단계;
상기 특정 함수에 대해, 상기 특정 함수의 함수 시그니처에 기초하여 콜-투 함수들, 콜-프롬 함수들, 상속 페어런츠 및 상속 칠드런, 및 상기 특정 함수와 연관된 베이스 클래스를 식별하는 단계(1200);
식별된 콜-투 및 콜-프롬 함수들에 기초하여 제 1 차일드 노드들(1020)을 상기 제 1 노드에 추가하는 단계(1090);
상기 특정 함수에서 베이스 클래스 메소드에 대한 인터페이스 콜(1010)에 대해, 상기 베이스 클래스 메소드의 오버라이드의 구현들에 기초하여 제 2 차일드 노드들을 상기 제 1 노드에 추가하는 단계;
상기 제 1 노드의 각각의 차일드 노드(1020)에 대해, 페어런츠-차일드 관계에 대한 바이너리 파일 필터를 생성하는 단계(1040)를 포함하고,
상기 바이너리 파일 필터는 상기 특정 함수 및 차일드 노드에 의해 표현되는 함수를 포함하는 바이너리 파일들에 기초하는, 시스템. - 시스템으로서,
프로세서;
상기 프로세서로 하여금 코드베이스 내의 두 개의 함수들 간의 가능한 콜 경로를 결정하는 방법을 수행하게 하는 명령들을 구현하는 프로세서-판독가능 메모리를 포함하고,
상기 방법은,
소스 함수 및 목적지 함수를 입력들로서 수신하는 단계;
함수 콜 그래프에서, 상기 소스 함수와 연관된 시작 노드(3001) 및 상기 목적지 함수와 연관된 종료 노드(3010)를 식별하는 단계;
상기 시작 노드와 상기 목적지 노드 간에 함수 콜 그래프 내의 가능한 경로들을 탐색하는 단계(3050) ― 상기 탐색하는 단계는, 그래프의 레벨로 각각의 노드에 대해서, 상기 시작 노드 및 상기 종료 노드에 의해 공유되는 공통 종속성들의 리스트에 대해서 노드를 평가하는 단계(3080), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖는 평가된 노드에 대해, 상기 평가된 노드를 가능한 경로 리스트에 포함시키는 단계(3080, 3090), 상기 공통 종속성들의 리스트에 포함된 종속성을 갖지 않는 평가된 노드에 대해, 상기 평가된 노드를 임의의 가능한 경로 리스트로부터 배제시키는 단계(3080, 3070)를 포함함 ―;
상기 가능한 경로 리스트에 포함된 노드들을 랭킹하는 단계(3130);
각각의 랭킹된 노드에 대해서, 랭킹된 노드가 차일드 노드들을 포함하는지를 결정하기 위해 상기 랭킹된 노드를 확장하는 단계;
상기 랭킹된 노드가 차일드 노드들을 갖는다는 결정에 응답하여, 상기 랭킹된 노드를 시작 노드로서 처리하고, 상기 랭킹된 노드의 각각의 차일드 노드에 대해 상기 가능한 경로들을 탐색하는 단계를 수행하는 단계(3060);
상기 랭킹된 노드가 어떤 차일드 노드들도 갖지 않는다는 결정에 응답하여, 상기 랭킹된 노드를 가능한 함수 콜 경로로서 포함하는 함수 콜 경로를 식별하는 단계(3060, 3140);
상기 시작 노드와 상기 종료 노드 간의 가능한 함수 콜 경로들을 분류하는 단계(3150); 및
분류된 가능한 함수 콜 경로들 중 적어도 하나를 가능한 콜 경로로서 리턴하는 단계(3160)를 포함하는, 시스템.
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)
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)
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)
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 | 北京信息科技大学 | 一种基于逆向工程自动生成软件文档的方法及装置 |
-
2013
- 2013-11-19 US US14/084,399 patent/US9218169B2/en active Active
-
2014
- 2014-11-17 KR KR1020167012999A patent/KR101841751B1/ko active IP Right Grant
- 2014-11-17 BR BR112016009391-7A patent/BR112016009391B1/pt active IP Right Grant
- 2014-11-17 EP EP24164113.3A patent/EP4369180A3/en active Pending
- 2014-11-17 WO PCT/US2014/065906 patent/WO2015077175A1/en active Application Filing
- 2014-11-17 DE DE202014010893.5U patent/DE202014010893U1/de active Active
- 2014-11-17 KR KR1020187007820A patent/KR102154757B1/ko active IP Right Grant
- 2014-11-17 EP EP14864350.5A patent/EP3072070B1/en active Active
- 2014-11-17 CN CN201480062873.3A patent/CN105745647B/zh active Active
- 2014-11-17 JP JP2016532101A patent/JP6349395B2/ja active Active
-
2015
- 2015-12-09 US US14/963,841 patent/US10042746B2/en active Active
Cited By (1)
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 |