KR102631545B1 - 프로그램 분석 방법 및 그 시스템 - Google Patents

프로그램 분석 방법 및 그 시스템 Download PDF

Info

Publication number
KR102631545B1
KR102631545B1 KR1020190058027A KR20190058027A KR102631545B1 KR 102631545 B1 KR102631545 B1 KR 102631545B1 KR 1020190058027 A KR1020190058027 A KR 1020190058027A KR 20190058027 A KR20190058027 A KR 20190058027A KR 102631545 B1 KR102631545 B1 KR 102631545B1
Authority
KR
South Korea
Prior art keywords
execution time
external
software
execution
node
Prior art date
Application number
KR1020190058027A
Other languages
English (en)
Other versions
KR20200132460A (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 삼성에스디에스 주식회사
Priority to KR1020190058027A priority Critical patent/KR102631545B1/ko
Publication of KR20200132460A publication Critical patent/KR20200132460A/ko
Application granted granted Critical
Publication of KR102631545B1 publication Critical patent/KR102631545B1/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/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • 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/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code

Abstract

정적 프로그램 분석(static program analysis) 방법 및 그 시스템이 제공된다. 본 발명의 일 실시예에 따른 정적 프로그램 분석 방법은 소스 코드에 외부 라이브러리의 메소드를 호출하는 구문이 포함된 경우 해당 구문의 실행 소요 시간을 예측함에 있어서, 호출된 메소드의 실행 소요 시간을 예측하기 위해 마련된 통계 모델을 이용함으로써, 소스 코드 내부 로직의 확인이 불가능한 외부 라이브러리 메소드가 호출된 경우에도 높은 정확도의 실행 소요 시간 예측이 가능하도록 한다.

Description

프로그램 분석 방법 및 그 시스템{METHOD AND SYSTEM FOR PROGRAM ANALYSIS}
본 발명은 프로그램 분석 방법 및 그 시스템에 관한 것이다. 보다 자세하게는, 분석 대상 프로그램에 대한 실행(execution) 없이 프로그램에 대한 분석을 진행하는 정적 프로그램 분석(static program analysis) 방식으로 프로그램 실행 소요 시간을 예측하는 방법 및 그 시스템에 관한 것이다.
정적 프로그램 분석은 실제 실행 없이 소프트웨어를 분석하는 것을 가리킨다. 정적 프로그램 분석은 대부분의 경우 분석 대상 프로그램의 소스 코드를 입력 받아 진행되나, 때때로 분석 대상 프로그램의 목적 파일(object file)을 입력 받아 진행되는 경우도 있다. 정적 프로그램 분석을 통해 소프트웨어의 무결성이 검증될 수 있고, WCET(Worst-Case Execution Time) 예측 등을 통하여 소프트웨어의 성능도 검증될 수 있다.
외부 시스템과 연계되는 대형 소프트웨어에는 DBMS(DataBase Management System)와의 연동 등의 사유로 외부 라이브러리의 메소드가 호출되는 경우가 많다. 또한, 상기 외부 라이브러리가 외부에서 개발된 것으로 동적으로 링크되는 것이라면, 상기 외부 라이브러리에 대한 정적 프로그램 분석이 어렵다. 따라서, 정적 프로그램 분석 방식으로 외부 시스템과 연계되는 대형 소프트웨어의 실행 소요 시간을 예측하는 것에는 한계가 있다.
(비특허문헌1) "Static WCET Analysis: Methods and Tools", Timo Lilja (비특허문헌2) "https://en.wikipedia.org/wiki/Static_program_analysis" (웹문헌)
본 개시의 몇몇 실시예를 통해 해결하고자 하는 기술적 과제는, 소스 코드가 확보되지 않는 외부 메소드가 사용된 프로그램에 대하여, 정적 프로그램 분석 방식으로 높은 정확도의 실행 소요 시간을 예측하는 방법, 그 방법이 적용된 컴퓨팅 장치 또는 컴퓨팅 시스템을 제공하는 것이다.
본 개시의 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 개시의 기술분야에서의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 프로그램 분석 방법은 분석 대상 소프트웨어의 제어 흐름(control flow)을 얻는 단계와, 상기 제어 흐름 상의 각 노드 별 실행 소요 시간을 예측하되, 상기 각 노드는 하나 이상의 인접한 구문(statement)들로 구성된 것인 단계와, 상기 예측된 각 노드 별 실행 시간을 이용하여, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계를 포함한다. 이 때, 상기 각 노드 별 실행 소요 시간을 예측하는 단계는 상기 각 노드 별로, 노드 실행 후의 변수값에 대한 정보를 결정하는 단계와, 상기 노드가 외부 라이브러리에 포함된 외부 메소드의 호출을 포함하는 것인 경우, 상기 외부 메소드에 파라미터로서 입력되는 변수값에 대한 정보와 상기 외부 메소드의 실행 시간에 대한 통계 모델을 이용하여 외부 메소드의 실행 소요 시간을 예측함으로써 상기 노드의 실행 소요 시간을 예측하는 단계를 포함할 수 있다.
일 실시예에서, 상기 통계 모델은 상기 외부 메소드에 파라미터로서 입력되는 변수값을 독립 변수로 하고, 그 경우의 실행 소요 시간을 종속 변수로 하는 것일 수 있다. 이 때, 상기 통계 모델은 상기 외부 메소드에 파라미터로서 입력되는 변수가 복수개인 경우, 그 중 실행 소요 시간에 영향을 미치는 일부의 변수만을 상기 독립 변수로 하는 것일 수도 있다.
또한, 상기 통계 모델이 상기 외부 메소드에 파라미터로서 입력되는 변수값을 독립 변수로 하고, 그 경우의 실행 소요 시간을 종속 변수로 하는 것일 때, 상기 각 노드 별로 노드 실행 후의 변수값에 대한 정보를 결정하는 단계는, 요약 해석(abstract interpretation)에 따라, 각 구문의 수학적 모델에 구문 실행 전의 변수값의 범위를 입력하여 구문 실행 후의 변수값의 범위를 얻음으로써 노드 실행 후의 변수값의 범위를 얻는 단계를 포함하고, 상기 외부 메소드에 파라미터로서 입력되는 변수값에 대한 정보와 상기 외부 메소드의 실행 시간에 대한 통계 모델을 이용하여 외부 메소드의 실행 소요 시간을 예측하는 단계는, 상기 외부 메소드에 파라미터로서 입력되는 변수의 값으로서, 상기 요약 해석에 따라 얻어진 상기 변수의 변수값 범위에 속하는 대표값을 세팅하는 단계와, 상기 대표값을 상기 외부 메소드의 통계 모델에 적용하여 외부 메소드의 실행 소요 시간을 예측하는 단계를 포함할 수 있다.
일 실시예에서, 상기 각 노드 중 일부의 노드는, 적어도 2회 이상 실행되는 복수의 인접한 구문(statement)들로 구성되는 패턴일 수 있다.
일 실시예에서, 상기 통계 모델은, 상기 분석 대상 소프트웨어의 배포(deploy) 버전에 포함된 에이전트에 의하여 송부되는 외부 라이브러리 호출 정보를 이용하여 생성된 것일 수 있다.
일 실시예에서, 상기 통계 모델은, 상기 외부 라이브러리를 임포트(import)한 소프트웨어로서 상기 분석 대상 소프트웨어와 상이한 소프트웨어에 포함된 에이전트에 의하여 송부되는 외부 라이브러리 호출 정보를 이용하여 생성된 것일 수도 있다. 이 때, 상기 통계 모델은, 상기 외부 라이브러리 호출 정보 중 실행 소요 시간이, 상기 에이전트가 실행되는 시스템 환경에 대한 정보를 이용하여 조정된 결과를 이용하여 생성된 것일 수 있다.
일 실시예에서, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계는, 요약 해석(abstract interpretation)에 따라, 각 구문의 수학적 모델에 구문 실행 전의 변수값의 범위를 입력하여 구문 실행 후의 변수값의 범위를 얻음으로써 노드 실행 후의 변수값의 범위를 얻는 단계와, 상기 제어 흐름에 포함된 루프의 반복 회수를 결정하는 변수의 상기 요약 해석에 따른 변수값 범위를 이용하여, 상기 루프의 반복 회수를 예측하는 단계와, 상기 루프의 반복 회수를 더 이용하여, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계를 포함할 수 있다.
일 실시예에서, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계는, 복수의 상기 외부 메소드 별 전체 실행 소요 시간 예측치에 대한 정보인 외부 메소드 실행 소요 시간 정보를 출력하는 단계를 포함할 수 있다. 이 때, 상기 외부 메소드 실행 소요 시간 정보를 출력하는 단계는, 이전 버전의 분석 대상 소프트웨어의 상기 외부 메소드 실행 소요 시간 정보와 현재 버전의 분석 대상 소프트웨어의 상기 외부 메소드 실행 소요 시간 정보의 비교 데이터를 출력하는 단계를 포함할 수 있다. 또한, 상기 비교 데이터를 출력하는 단계는, 제1 외부 메소드의 외부 메소드 실행 소요 시간이 이전 버전 대비 현재 버전에서 기준치 이상 증가한 경우, 상기 제1 외부 메소드를 호출하는 구문 중 이전 버전과 달라진 구문을 표시하는 단계를 포함할 수 있다.
상기 기술적 과제를 해결하기 위한, 본 발명의 다른 실시예에 따른 프로그램 분석 시스템은, 제1 소프트웨어의 실행 도중 외부 라이브러리에 포함된 외부 메소드의 호출 정보를 제공하는 수집 에이전트로부터 제공받은 정보를 이용하여, 상기 외부 메소드의 실행 시간에 대한 통계 모델을 생성하는 통계 모델 관리 장치와, 제2 소프트웨어의 제어 흐름(control flow)을 얻고, 상기 제어 흐름 상의 각 노드 별 실행 소요 시간을 예측하며, 상기 예측된 각 노드 별 실행 시간을 이용하여 상기 제2 소프트웨어의 실행 소요 시간을 예측하는 정적 프로그램 분석 장치를 포함한다. 이 때, 상기 통계 모델은 상기 외부 메소드에 파라미터로서 입력되는 변수값을 독립 변수로 하고, 그 경우의 실행 소요 시간을 종속 변수로 하는 것이고, 상기 정적 프로그램 분석 장치는, 상기 각 노드 별로, 노드 실행 후의 변수값의 범위를 결정하고, 상기 노드가 외부 라이브러리에 포함된 외부 메소드의 호출을 포함하는 것인 경우, 상기 외부 메소드에 파라미터로서 입력되는 변수값의 범위와 상기 외부 메소드의 실행 시간에 대한 통계 모델을 이용하여 외부 메소드의 실행 소요 시간을 예측하는 것일 수 있다.
일 실시예에서, 상기 제1 소프트웨어는 상기 제2 소프트웨어의 배포 버전이고, 상기 제2 소프트웨어는 상기 제1 소프트웨어의 개발중인 버전일 수 있다.
일 실시예에서, 상기 제1 소프트웨어는 상기 제2 소프트웨어와 서로 다른 소프트웨어로서, 상기 제2 소프트웨어와 동일한 상기 외부 라이브러리를 임포트(import)한 것일 수 있다.
도 1은 본 발명의 일 실시예에 따른 프로그램 분석 시스템의 구성도이다.
도 2는 본 발명의 다른 실시예에 따른 프로그램 분석 시스템의 구성도이다.
도 3은 본 발명의 몇몇 실시예들에 따른 프로그램 분석 시스템에 포함되는 통계 모델 관리 장치의 상세 구성도이다.
도 4는 도 3의 통계 모델 관리 장치의 통계 분석 모듈의 상세 구성도이다.
도 5는 본 발명의 몇몇 실시예들에서 참조되는 통계 모델을 설명하기 위한 개념도이다.
도 6은 본 발명의 몇몇 실시예들에 따른 프로그램 분석 시스템에 포함되는 정적 프로그램 분석 장치에서 실행되는 정적 프로그램 분석 소프트웨어(110)의 기능 단위를 설명하기 위한 도면이다.
도 7은 본 발명의 몇몇 실시예들에서 참조되는 제어 흐름(control flow) 상 각 노드의 개념을 설명하기 위한 도면이다.
도 8a 및 도 8b는 본 발명의 또 다른 실시예에 따른 프로그램 분석 방법의 순서도이다.
도 9는 본 발명의 또 다른 실시예에 따른 프로그램 분석 장치의 하드웨어 구성도이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명의 기술적 사상은 이하의 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 이하의 실시예들은 본 발명의 기술적 사상을 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 본 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명의 기술적 사상은 청구항의 범주에 의해 정의될 뿐이다.
각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명의 실시예들을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 개시의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 개시가 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다. 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 개시를 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다.
또한, 본 개시의 구성 요소를 설명하는 데 있어서, 제1, 제2 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 이하, 도면을 참조하여 본 발명의 몇몇 실시예들을 설명한다.
먼저, 도 1 내지 도 7을 참조하여 본 발명의 몇몇 실시예들에 따른 프로그램 분석 시스템의 구성 및 동작을 설명한다.
도 1은 본 발명의 일 실시예에 따른 프로그램 분석 시스템의 구성도이다. 도 1에 도시된 바와 같이, 본 실시예에 따른 프로그램 분석 시스템(10)은 통계 모델 관리 장치(200) 및 정적 프로그램 분석 장치(100)를 포함할 수 있다. 또한, 프로그램 분석 시스템(10)은 외부 라이브러리(3)가 임포트(import) 된 제1 소프트웨어(1)를 실행하는 운영 컴퓨팅 장치(5)로부터 외부 라이브러리 호출 정보를 수신한다.
통계 모델 관리 장치(200)는 운영 컴퓨팅 장치(5)에서 실행되는 수집 에이전트(4)로부터 외부 라이브러리 호출 정보를 수신하고, 수신된 상기 외부 라이브러리 호출 정보를 분석하여, 외부 라이브러리의 각 메소드 별 통계 모델을 생성하고, 갱신하는 컴퓨팅 장치이다. 상기 통계 모델은 메소드 실행 소요 시간을 종속 변수로 하고, 상기 메소드에 파라미터로서 입력되는 변수값을 독립 변수로 하는 것이다. 즉, 상기 메소드의 호출 시 함께 입력되는 파라미터의 값이 상기 통계 모델에 입력되면, 상기 통계 모델은 상기 메소드의 실행 소요 시간을 출력하게 되는 것이다. 통계 모델 관리 장치(200)가 상기 외부 라이브러리 호출 정보를 분석하여 상기 통계 모델을 생성하는 구체적인 과정은 도 3 및 도 4를 참조하여 추후 자세히 설명한다.
통계 모델 관리 장치(200)는 정적 프로그램 분석 장치(100)에 상기 통계 모델을 정의하는 데이터를 제공한다. 이 때, 통계 모델 관리 장치(200)는 정적 프로그램 분석 장치(100)로부터 특정 라이브러리의 특정 메소드에 대한 통계 모델의 제공을 요청받고, 그 응답으로서 통계 모델을 제공할 수도 있고(request-response 방식), 정적 프로그램 분석 장치(100)에 주기적/비주기적으로 최신의 통계 모델을 제공할 수도 있다(push 방식).
정적 프로그램 분석 장치(100)는 제1 소프트웨어(1)가 임포트 하는 외부 라이브러리(3)와 동일한 외부 라이브러리(3)를 임포트 하는 제2 소프트웨어(2)의 프로그램 분석을 수행하는 정적 프로그램 분석 소프트웨어(110)를 실행하는 컴퓨팅 장치이다. 제2 소프트웨어(2)는 소스 코드 또는 목적 파일의 형태로 정적 프로그램 분석 소프트웨어(110)에 입력될 수 있다.
일 실시예에서, 제1 소프트웨어(1)는 제2 소프트웨어(2)의 배포 버전이고, 제2 소프트웨어(2)는 제1 소프트웨어(1)의 개발중인 버전일 수 있다. 즉, 현재 배포(deploy)되어 운영 중에 있는 소프트웨어를 업데이트 하기 위한 개발을 진행한 결과 빌드(build) 된 제2 소프트웨어(2)의 실행 소요 시간 예측은, 운영 중인 소프트웨어의 실행 과정에서 외부 라이브러리(3)의 메소드가 호출되는 경우 측정된 실행 소요 시간이 반영된 통계 모델을 이용하여 수행될 수 있는 것이다. 제2 소프트웨어(2)가 개발 완료되면 운영 컴퓨팅 장치(5)에 설치될 것이기 때문에, 상기 통계 모델은 실제 운영 상황에서의 외부 라이브러리(3)의 메소드의 실행 소요 시간을 정확하게 반영할 수 있다. 따라서, 본 실시예에 따르면 개발 중인 제2 소프트웨어(2)의 실행 소요 시간 예측의 정확도를 극대화할 수 있는 효과를 얻는다.
다른 실시예에서, 제1 소프트웨어(1)는 제2 소프트웨어(2)와 서로 다른 소프트웨어일 수도 있다. 본 실시예에서, 제1 소프트웨어(1)와 제2 소프트웨어(2)가 버전만 다른 동일 소프트웨어가 아니라 전혀 다른 소프트웨어이고, 동일한 외부 라이브러리(3)를 임포트한 것에 불과한 것이다. 따라서, 외부 라이브러리(3)를 임포트 한 것이라면 어떠한 소프트웨어라도 외부 라이브러리 호출 정보를 제공할 수 있는 것이다. 본 실시예에서, 통계 모델 관리 장치(200)는 외부 라이브러리(3)를 임포트한 다양한 소프트웨어로부터 외부 라이브러리 호출 정보를 수집하고, 이렇게 수집된 풍부한 외부 라이브러리 호출 정보를 이용하여 보다 정확한 통계 모델을 생성할 수 있는 효과를 얻는다.
수집 에이전트(4)는 제1 소프트웨어(1)가 실행될 때 함께 실행되는 소프트웨어로서, 외부 라이브러리의 메소드가 호출되는 것을 감지하고, 외부 라이브러리 호출 정보를 생성하여 지정된 수신 장치에 상기 외부 라이브러리 호출 정보를 송신한다. 상기 외부 라이브러리 호출 정보는 상기 메소드의 호출 시점에 입력되는 각각의 파라미터 별 변수값, 상기 메소드가 호출되는 시점으로부터 상기 메소드가 다시 리턴(return) 될 때까지의 시간 차이인 실행 소요 시간, 및 외부 라이브러리 및 메소드 명칭 등에 대한 정보를 포함할 수 있다.
수집 에이전트(4)는 제1 소프트웨어(1)의 빌드(build) 시점에 제1 소프트웨어(1)와 함께 링크 되거나, 제1 소프트웨어(1)가 빌드 되어 생성된 바이너리에 코드 패치(patch)되는 방식으로 제1 소프트웨어(1)에 포함될 수 있다.
또한, 수집 에이전트(4)는 제1 소프트웨어(1)의 런타임에 실행될 수도 있다. 예를 들어, 수집 에이전트(4)가 실행되어 메모리에 로드된 상태에서, 수집 에이전트(4)의 실행 코드가 수집 에이전트(4)의 메모리 내 코드 영역 중 일부에 인젝션(injection) 되는 방식으로, 수집 에이전트(4)가 실행될 수 있을 것이다. 또한, 제1 소프트웨어(1)의 프로세스에 attach 방식으로 주입(inject) 될 수도 있을 것이다. 이하, 각 프로그래밍 언어에서 제공하는 프로파일링(또는 instrumentation) 방식에 따른 구체적인 수집 에이전트(4) 실행 방법을 제시한다. 아래에서 설명되는 수집 에이전트(4) 실행 방법에 따르면 에이전트 실행의 오버헤드(overhead)를 낮출 수 있고, 수집 에이전트(4) 실행을 쉽게 할 수 있는 효과를 얻는다.
JAVA의 경우, 프로그램 실행 시, 수집 에이전트를 아래와 같이 JAVA 명령어(JAVA Instrumentation API)를 이용하여, 실행 옵션으로 지정할 수 있다.
"> java -javaagent:agent.jar -classpath ??"
JAVA의 경우, JVM의 HotSpot Attach API를 통해 에이전트 코드를 제1 소프트웨어(1)의 외부에서 제1 소프트웨어(1)에 주입할 수도 있다.
C 또는 C++의 경우, 컴파일러가 제공하는 instrumentation function 주입 기능을 사용하여, 제1 소프트웨어(1)의 빌드 후 에이전트 코드를 제1 소프트웨어(1)에 주입할 수 있다. 예를 들어, 마이크로소프트 사의 MS Visual C의 경우, _penter 및 _pexit 기능을 사용하여 에이전트 코드를 제1 소프트웨어(1)에 주입할 수 있고, gcc의 경우 finstrument-functions 옵션을 이용하여 에이전트 코드를 제1 소프트웨어(1)에 주입할 수 있을 것이다.
도 2를 참조하여 본 발명의 다른 실시예에 따른 프로그램 분석 시스템에 대하여 설명한다. 본 실시예에 따른 프로그램 분석 시스템은 정적 프로그램 분석 장치(100a)를 포함한다. 도 1에 도시된 바와 같이 통계 모델 관리 장치(200)와 정적 프로그램 분석 장치(100)는 별개의 컴퓨팅 장치로 구성될 수도 있겠으나, 도 2에 도시된 바와 같이, 하나의 컴퓨팅 장치(100a)에 구현될 수도 있을 것이다. 즉, 도 1의 통계 모델 관리 장치(200)는 도 2의 통계 모델 관리 소프트웨어(120)의 형태로 구현되고, 정적 프로그램 분석 소프트웨어(110)와 함께 실행될 수 있을 것이다. 본 실시예에 따르면, 통계 모델을 정의하는 데이터의 요청 및 그 응답이 하나의 컴퓨팅 장치 내에서 신속하게 이뤄질 수 있는 효과를 얻는다.
이하, 통계 모델이 생성되는 과정에 대한 이해를 돕기 위하여 도 3을 참조하여 설명한다. 도 3은 본 발명의 몇몇 실시예들에 따른 프로그램 분석 시스템에 포함되는 통계 모델 관리 장치의 상세 구성도이다.
수집 에이전트(4)가 모니터링 하고 있는 소프트웨어에서 외부 라이브러리가 호출될 때마다, 수집 에이전트(4)는 통계 모델 관리 장치(200)에 외부 라이브러리 호출 정보를 송신한다. 상기 외부 라이브러리는, 이미 설명된 바와 같이, 라이브러리 명칭, 메소드 명칭, 파라미터 값 및 실행 소요 시간을 포함할 수 있다. 그리고, 상기 외부 라이브러리 호출 정보는 통계 모델 관리 장치(200)의 정보 수집 모듈(202)에 의하여 외부 라이브러리 호출 이력 저장부(204)에 정형화된 형태로 저장될 것이다. 예를 들어, 정보 수집 모듈(202)은 각각의 메소드(즉, 특정 라이브러리의 특정 메소드) 별로 파라미터 값 및 실행 소요 시간을 포함하는 테이블을 생성하고, 외부 라이브러리 호출 이력 저장부(204)에 저장되는 상기 테이블에 데이터를 지속적으로 삽입할 수 있을 것이다.
몇몇 실시예들에서, 상기 외부 라이브러리 호출 정보에는 수집 에이전트(4)가 실행되는 시스템 환경이 더 포함될 수 있다. 상기 시스템 환경은, 예를 들어 프로세서의 사양(specification), 메모리의 사양, 시스템 버스의 사양 등 프로그램의 실행 속도에 영향을 미칠 수 있는 다양한 사양 정보를 포함할 수 있다. 동일한 연산량을 요구하는 메소드 호출이라도 그 시스템 환경에 따라 실행 소요 시간이 달라질 수 있을 것이므로, 상기 외부 라이브러리 호출 정보에 포함된 실행 소요 시간은 시스템 환경을 반영하여 보정될 필요가 있을 것이다. 즉, 정보 수집 모듈(202)은 외부 라이브러리 호출 정보 중 실행 소요 시간을 상기 인스턴스가 실행되는 시스템 환경에 대한 정보를 이용하여 조정한 후, 외부 라이브러리 호출 이력 저장부(204)에 저장할 수 있을 것이다.
상기 실행 소요 시간의 조정은, 수집 에이전트(4)가 모니터링 하고 있는 소프트웨어가 정적 프로그램 분석 장치(100)에 의하여 분석되는 소프트웨어의 배포 버전인 경우에도 수행될 수 있고, 수집 에이전트(4)가 모니터링 하고 있는 소프트웨어가 정적 프로그램 분석 장치(100)에 의하여 분석되는 소프트웨어와 서로 다른 것일 때도 수행될 수 있을 것이다. 다만, 수집 에이전트(4)가 모니터링 하고 있는 소프트웨어가 정적 프로그램 분석 장치(100)에 의하여 분석되는 소프트웨어의 배포 버전인 경우에는 수집 에이전트(4)의 실행 환경이 달라질 가능성이 높지 않은 점에서, 상기 실행 소요 시간의 조정은 다양한 시스템 환경에서 상기 외부 라이브러리 호출 정보가 송신되는 경우(즉, 수집 에이전트(4)가 모니터링 하고 있는 소프트웨어가 정적 프로그램 분석 장치(100)에 의하여 분석되는 소프트웨어와 서로 다른 것인 경우)에 더 효과적이다.
통계 분석 모듈(206)은 외부 라이브러리 호출 이력 저장부(204)에 저장된 데이터를 분석하여 통계 모델을 정의하는 데이터를 생성한 후, 통계 모델 저장부(208)에 저장한다. 통계 모델 서비스 모듈(210)은 정적 프로그램 분석 장치(100)의 요청에 응답하여 통계 모델을 저장할 수 있을 것이다. 도 3에 도시된 것과 달리, 통계 모델 서비스 모듈(210)이 특정 메소드의 통계 모델이 업데이트 되는 것에 응답하여 업데이트 된 통계 모델을 정적 프로그램 분석 장치(100)에 푸시(push) 형태로 송신할 수도 있음은 물론이다.
정보 수집 모듈(202)은 수집 에이전트(4)로부터 상기 외부 라이브러리 호출 정보를 수신할 때마다 외부 라이브러리 호출 이력 저장부(204)에 대한 저장 동작을 수행(real-time processing)할 수 있을 것이나, 통계 분석 모듈(206)이 외부 라이브러리 호출 이력 저장부(204)에 저장된 데이터를 분석하여 신규의 통계 모델을 생성하거나, 기존의 통계 모델을 업데이트 하는 작업은 주기적으로 수행(batch processing)될 수 있을 것이다. 통계 모델의 생성 또는 업데이트는 어느 정도의 데이터가 축적된 상태에서 수행되는 것이 효율적이기 때문이다.
이하, 통계 분석 모듈(206)이 통계 모델을 생성하는 방법에 대하여 도 4 내지 도 5를 참조하여 설명한다.
메소드의 호출 시 함께 입력되는 파라미터가 복수개인 경우, 그 중 일부만 실행 소요 시간에 영향을 미칠 수 있다. 이런 경우, 상기 메소드의 실행 소요 시간에 대한 통계 모델의 독립 변수에는 실행 소요 시간에 영향을 미치는 파라미터만 포함되는 것이 바람직하다. 유효 파라미터 선별부(261)는 외부 라이브러리 호출 이력 저장부(204)에 저장된 데이터를 분석하여 실행 소요 시간에 영향을 미치는 유효 파라미터를 선별한다.
유효 파라미터 선별부(261)는 각 파라미터에 대한 수행시간 영향 여부를 판단하기 위해, 파라미터를 변수로 하는 변수 선택방법(전진선택법, 후진제거법, 단계별방법)을 수행한다. 상기 전진선택법, 후진제거법, 단계별방법은 널리 알려진 단계적 회귀분석 방법인 바, 자세한 설명은 생략한다. 단계적 회귀분석 방법 자체에 대한 설명을 생략하는 것일 뿐, 본 실시예에서 메소드의 여러 파라미터들 중 실행 소요 시간에 영향을 미치는 유효 파라미터를 선택하기 위해 단계적 회귀분석 방법을 채택하는 것은, 통상의 기술자가 쉽게 착안할 수 있는 것은 아니다.
통계 모델 생성부(262)는 회귀 분석(regression analysis) 등의 통계적 방법론에 따라 외부 라이브러리 호출 이력 저장부(204)에 저장된 유효 파라미터 값 별 실행 소요 시간에 따른 통계 모델을 생성한다. 상기 통계 모델은 상기 유효 파라미터의 값을 독립 변수로 하고, 실행 소요 시간을 종속 변수로 하는 것이다. 도 5에 도시된 예시를 참조하면, LIB1이라는 외부 라이브러리의 METHOD1이 3개의 파라미터(PARAM1, PARAM2, PARAM3)를 가지는데(5) 그 중 유효 파라미터가 PARAM1인 경우, 통계 모델 생성부(262)는 독립 변수가 PARAM1이고 종속 변수가 LIB1.METHOD1의 실행 소요 시간인 회귀 모델을 [1.5PARAM1+2](6)와 같이 생성할 수 있을 것이다(선형 회귀 모델). 회귀 분석에 따라 상기 회귀 모델이 생성되는 과정 역시 널리 알려진 방법인 바, 자세한 설명은 생략한다.
이하, 도 6을 참조하여 본 발명의 몇몇 실시예들에 따른 프로그램 분석 시스템에 포함되는 정적 프로그램 분석 장치에서 실행되는 정적 프로그램 분석 소프트웨어(110)의 기능 단위 및 동작을 설명한다. 도 6에 도시된 각각의 기능 단위(111 내지 117)는 특정 기능의 수행을 위한 복수의 인스트럭션(instruction)들의 집합체로 이해될 수 있을 것이다. 또한, 상기 인스트럭션은 실행됨에 따라 메모리에 로드(load)된 소프트웨어의 바이너리에 포함되어, 프로세서에서 실행되는 각각의 명령어를 의미한다.
먼저, CFG(Control Flow Graph) 생성기(111)가 제2 소프트웨어(2)의 소스 코드 또는 목적 파일을 입력 받아 제2 소프트웨어(2)의 제어 흐름(control flow)을 식별하고, 식별된 제어 흐름을 가리키는 제어 흐름 그래프(CFG)를 생성한다. 상기 제어 흐름 그래프에 포함되는 노드는 각각의 구문(statement)이거나, 인접한 복수의 구문일 수 있다. 도 7에 도시된 11개의 구문 각각이 모두 노드로서 표현될 수도 있으나, 정적 프로그램 분석의 효율성을 위하여 2회 이상 수행되는 인접한 복수의 구문이 있다면, 상기 인접한 복수의 구문이 하나의 패턴(pattern)을 구성하는 것으로 보고, 상기 패턴이 하나의 노드로서 표현될 수도 있는 것이다. 예를 들어, 도 7의 구문 3 내지 구문 6은 하나의 패턴(7-1)을 구성한다, 이러한 패턴이 nickname이라는 변수에 대하여 반복하여 수행(7-2)되고 있기 때문이다.
다음으로, 요약 해석(abstract interpretation) 로직(112)이, 상기 생성된 제어 흐름 그래프(CFG)를 참조하여, 각각의 노드의 실행 후에 각각의 변수값의 범위가 어떻게 변화되는지 결정한다. 요약 해석 로직(112)은 각 구문의 수학적 모델에 구문 실행 전의 변수값의 범위를 입력하여 구문 실행 후의 변수값의 범위를 얻음으로써 노드 실행 후의 변수값의 범위를 얻는다.
요약 해석 로직(112)은 패턴을 구성하는 복수의 구문에 대하여 상기 패턴이 실행되기 전의 각 변수값 범위가 상기 패턴이 실행된 후에 어떻게 변화하는지를 가리키는 수학적 모델을 생성할 수 있다. 이 경우, 상기 패턴에 대하여는 하나의 수학적 모델으로 패턴 수행 전후의 변수값 범위 변화를 얻을 수 있으므로, 상기 패턴에 속한 각각의 구문 별로 구문 수행 전후의 변수값 범위 변화를 얻고, 이를 종합하여 패턴 수행 전후의 변수값 범위 변화를 얻는 것보다 연산량을 줄일 수 있다.
요약 해석 로직(112)은 각각의 CFG 노드에 대하여 실행 소요 시간의 예측 치를 결정할 수 있다. 예를 들어, 상기 실행 소요 시간은 WCET(Worst Case Execution Time)을 가리킬 수 있다.
요약 해석 로직(112)은 외부 메소드 호출이 포함된 구문을 가지는 CFG 노드에 대하여, 상기 외부 메소드가 리턴되는 지점에 상기 외부 메소드의 리턴 값이 할당되는 변수를 초기화한 후 그 다음 구문들의 수행에 따른 상기 변수의 값을 추적하는 방식으로 요약 해석을 수행할 수 있다. 상기 초기화의 결과, 리턴 값이 할당되는 변수는 특정 초기 값을 갖게 되거나, 그 범위가 기 설정된 초기 범위(최소값 내지 최대값 사이)를 갖게 될 것이다.
몇몇 실시예에서, 요약 해석 로직(112)은 외부 메소드 호출이 포함된 구문을 가지는 CFG 노드에 대하여, 상기 외부 메소드가 리턴되는 지점에, 상기 외부 메소드의 리턴 값이 할당되는 변수에 대한 '변경된 범위'(refinement of intervals)로의 초기화를 진행할 수도 있다.
상기 '변경된 범위'는 외부 라이브러리 호출 이력을 통계적으로 분석하여 얻어질 수 있다. 이를 위해, 수집 에이전트가 상기 외부 메소드의 리턴 값을 더 송신하고, 상기 통계 모델 관리 장치가 상기 외부 메소드의 파라미터 값과 그 때의 리턴 값을 통계적으로 분석하여 상기 외부 메소드에 대하여 파라미터 값과 그 때의 리턴 값 사이의 관계를 가리키는 통계 모델을 수립할 수 있다. 예를 들어, 각각의 파라미터 값이 속하는 클러스터 별로 리턴 값의 범위가 매칭되는 상기 통계 모델이 수립될 수 있을 것이다. 이처럼 외부 메소드가 호출되는 구문에서, 외부 메소드의 리턴 값을 할당 받는 변수를 무조건 일률적으로 초기화하는 것이 아니라, 외부 메소드에 입력되는 파라미터 값이 속하는 클러스터에 대응되는 '변경된 범위'로 초기화하게 되면, 외부 메소드 호출 구문이 포함된 소프트웨어에 대한 요약 해석의 정확도를 더 높일 수 있는 효과를 얻는다.
외부 메소드 실행 소요 시간 예측 로직(113)은, 통계 모듈 관리 장치(200)로부터 제공된 통계 모델에, 요약 해석 로직(112)에 의하여 결정된 유효 파라미터의 변수값 범위를 반영하여 외부 메소드의 호출 시점부터 상기 외부 메소드의 호출이 리턴(return) 될 때 까지의 실행 소요 시간의 예측 치를 결정한다. 상기 통계 모델의 입력 값이 유효 파라미터의 변수값인 경우, 요약 해석 로직(112)은 유효 파라미터의 변수값 범위에 속한 대표값(예를 들어, 중앙값)을 상기 통계 모델에 입력할 수 있을 것이다.
즉, CFG 노드들 중 외부 메소드를 호출하는 구문을 포함하는 노드의 실행 소요 시간은, 외부 메소드 실행 소요 시간 예측 로직(113)에 의하여 얻어진 외부 메소드 실행 소요 시간 예측치를 이용하여 예측되는 것으로 이해될 수 있을 것이다.
또한, 루프 카운터 로직(114)은 요약 해석 로직(112)에 의하여 결정된 각각의 변수값 범위를 참조하여, 루프 반복 회수를 결정한다. 예를 들어, 루프 반복 회수가 '2*a'로 지정되어 있고, 요약 해석 로직(112)에 의하여 결정된 변수 'a'의 변수값 범위가 10에서 20 사이인 경우, 변수 'a'의 변수값 범위의 대표값이 10에서 20사이의 중앙값인 15로 결정될 수 있으므로, 상기 루프 반복 회수는 30으로 결정될 수 있을 것이다.
실행 소요 시간 예측 로직(115)은 각각의 CFG 노드 별 실행 소요 시간 예측치와, 루프 반복 회수를 종합하여 분석 대상 프로그램의 전체 실행 소요 시간을 예측한다.
몇몇 실시예에서, 분석 대상 프로그램의 전체 실행 소요 시간이 예측되어 사용자에 출력되는 것에 그치지 않고, 실행 소요 시간 예측 결과가 추가적으로 분석되어, 개발자가 이전 버전 대비 더 나은 성능의 프로그램을 개발하도록 가이드 할 수 있다. 이를 위해, 실행 소요 시간 예측 이력 관리 로직(116)은 정적 프로그램 분석을 수행한 이력을 저장하고, 고급 분석 로직(117)에 이를 제공하여, 고급 분석 로직(117)이 현재 버전의 분석 결과와 이전 버전의 분석 결과의 비교를 수행하도록 한다.
일 실시예에서, 고급 분석 로직(117)은 복수의 상기 외부 메소드 별 전체 실행 소요 시간 예측치에 대한 정보인 외부 메소드 실행 소요 시간 정보를 출력할 수 있다. 이를 통해, 사용자는 외부 메소드 별로 전체 실행 소요 시간에 차지하는 비중을 파악할 수 있을 것이다.
또한, 고급 분석 로직(117)은 이전 버전의 분석 대상 소프트웨어의 상기 외부 메소드 실행 소요 시간 정보와 현재 버전의 분석 대상 소프트웨어의 상기 외부 메소드 실행 소요 시간 정보의 비교 데이터를 출력할 수도 있다. 이를 통해, 사용자는 이전 버전의 메소드 별 전체 실행 소요 시간과 현재 버전의 메소드 별 전체 실행 소요 시간을 비교할 수도 있을 것이다.
또한, 고급 분석 로직(117)은 특정 외부 메소드의 외부 메소드 실행 소요 시간이 이전 버전 대비 현재 버전에서 기준치 이상 증가한 경우, 상기 특정 외부 메소드를 호출하는 구문 중 이전 버전과 달라진 구문이 개발 툴(120)을 통하여 표시되도록, 개발 툴(120)을 제어할 수도 있을 것이다. 이를 통해, 사용자는 외부 메소드가 이전 버전 대비 비효율적으로 사용된 구문을 즉각적으로 파악할 수 있을 것이다.
이하, 도 8a 내지 도 8b를 참조하여, 본 발명의 또 다른 실시예에 따른 프로그램 분석 방법을 설명한다. 본 실시예에 따른 프로그램 분석 방법은 컴퓨팅 장치에 의하여 수행될 수 있다. 상기 컴퓨팅 장치는, 예를 들어 도 1에 도시된 정적 프로그램 분석 장치(100) 또는 도 2에 도시된 정적 프로그램 분석 장치(100a)일 수 있다. 따라서, 이하 동작의 주체에 관한 기재가 없는 경우, 그 동작의 주체는 상기 컴퓨팅 장치인 것으로 이해될 수 있을 것이다. 따라서, 본 실시예에 적용될 수 있는 것으로 별다른 기재가 없더라도, 도 1 내지 도 7을 참조하여 지금까지 설명한 실시예에 반영된 기술적 특징들은 그대로 본 실시예에 따른 프로그램 분석 방법에 적용될 수 있다. 먼저, 도 8a를 참조하여 설명한다.
단계 S101에서, 분석 대상 소프트웨어의 소스 코드 또는 목적 파일이 얻어진다. 단계 S103에서, 상기 분석 대상 소프트웨어의 제어 흐름이 얻어진다. 단계 S105에서, 상기 제어 흐름에 따라 순차적으로 실행될 구문들을 대상으로 반복하여 호출되는 패턴이 식별된다. 상기 패턴에는 인접한 복수의 구문들이 포함된다.
다음으로, 단계 S107에서 하나의 구문 또는 단계 S105에서 식별된 패턴을 노드로 하는 제어 흐름 그래프가 생성된다. 또한, 단계 S109에서 상기 제어 흐름 상의 각 구문 실행 전후의 변수값 범위의 변화가 요약 해석을 통해 결정되고, 상기 변수값 범위의 변화가 종합되어 각 CFG 노드 실행 후의 변수값 범위가 결정된다.
다음으로 도 8b를 참조하여 설명한다. 단계 S111에서, 현재 노드가 CFG 시작 노드로 초기화 된다.
현재 CFG 노드가 루프 노드인 경우(S113), 요약 해석을 통해 결정된 변수 값 범위를 참조하여 루프 반복 회수가 예측된다(S115).
현재 CFG 노드가 루프 노드가 아닌 경우, 현재 CFG 노드가 외부 메소드의 호출을 수행하는 구문을 포함하는지 판단된다(S117).
현재 CFG 노드가 외부 메소드의 호출을 수행하는 구문을 포함한다면, 상기 외부 메소드 호출 시점의 유효 파라미터 변수값 범위를 참조하여 상기 외부 메소드의 대표값이 결정되고, 상기 대표값이 상기 외부 메소드의 통계 모델에 입력됨으로써, 상기 통계 모델로부터 출력된 상기 외부 메소드의 실행 소요 시간 예측치가 얻어진다(S119).
현재 CFG 노드가 외부 메소드의 호출을 수행하는 구문을 포함하지 않는다면, 현재 CFG 노드 실행 시점의 변수값 범위를 참조하여, 요약 해석에 따라 현재 CFG 노드의 실행 소요 시간 예측치가 얻어진다(S121).
각각의 CFG 노드에 대한 단계 S113 내지 S121의 동작은 다음 CFG 노드가 더 이상 존재하지 않을 때까지 반복하여 수행된다(S123, S125).
단계 S127에서, CFG 노드의 각 루프 반복 횟수 및 각 CFG 노드의 실행 소요 시간 예측치를 이용하여 분석 대상 소프트웨어의 실행 소요 시간이 예측 된다. 또한, 단계 S129에서, 도 6을 참조하여 설명한 실행 소요 시간 관련 고급 분석도 수행될 수 있다.
지금까지 도 8a 내지 도 8b를 참조하여 설명된 본 발명의 실시예들은 컴퓨터가 읽을 수 있는 매체 상에 컴퓨터가 읽을 수 있는 코드로 구현될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록 매체는, 예를 들어 이동형 기록 매체(CD, DVD, 블루레이 디스크, USB 저장 장치, 이동식 하드 디스크)이거나, 고정식 기록 매체(ROM, RAM, 컴퓨터 구비 형 하드 디스크)일 수 있다. 상기 컴퓨터로 읽을 수 있는 기록 매체에 기록된 상기 컴퓨터 프로그램은 인터넷 등의 네트워크를 통하여 다른 컴퓨팅 장치에 전송되어 상기 다른 컴퓨팅 장치에 설치될 수 있고, 이로써 상기 다른 컴퓨팅 장치에서 사용될 수 있다.
이하, 도 9는 본 발명의 또 다른 실시예에 따른 프로그램 분석 장치의 하드웨어 구성도이다. 도 9는 도 8a 내지 도 8b를 참조하여 설명된 방법이 통계 모델 관리 소프트웨어(120)와 정적 프로그램 분석 소프트웨어(110)로서 구현되어 컴퓨팅 장치에 설치(install)된 것으로 이해될 수 있을 것이다.
도 9에 도시된 바와 같이, 본 실시예에 따른 프로그램 분석 장치는 하나 이상의 프로세서(1100), 시스템 버스(1000), 네트워크 인터페이스(1200), 프로세서(1100)에 의하여 수행되는 통계 모델 관리 소프트웨어(120)와 정적 프로그램 분석 소프트웨어(110)을 로드(load)하는 메모리(1400)와, 통계 모델 관리 소프트웨어(120)와 정적 프로그램 분석 소프트웨어(110)를 저장하는 스토리지(1300)를 포함할 수 있다.
네트워크 인터페이스(1200)는 외부의 컴퓨팅 장치에서 실행되는 수집 에이전트(미도시)와 네트워크를 통하여 연결되고, 상기 수집 에이전트로부터 수신된 외부 라이브러리 호출 정보를 통계 모델 관리 소프트웨어(120)에 전달한다. 통계 모델 관리 소프트웨어(120)는 상기 외부 라이브러리 호출 정보를 수집하고, 통계 분석하여, 외부 라이브러리의 각 메소드 별로 실행 소요 시간을 얻기 위한 통계 모델을 생성한다. 몇몇 실시예들에서, 통계 모델 관리 소프트웨어(120)의 기능이 외부 장치에서 독립적으로 구현될 수도 있음은 이미 설명한 바 있다.
이상에서, 본 발명의 실시예를 구성하는 모든 구성 요소들이 하나로 결합되거나 결합되어 동작하는 것으로 설명되었다고 해서, 본 개시의 기술적 사상이 반드시 이러한 실시예에 한정되는 것은 아니다. 즉, 본 개시의 목적 범위 안에서라면, 그 모든 구성요소들이 하나 이상으로 선택적으로 결합하여 동작할 수도 있다.
도면에서 동작들이 특정한 순서로 도시되어 있지만, 반드시 동작들이 도시된 특정한 순서로 또는 순차적 순서로 실행되어야만 하거나 또는 모든 도시 된 동작들이 실행되어야만 원하는 결과를 얻을 수 있는 것으로 이해되어서는 안 된다. 특정 상황에서는, 멀티태스킹 및 병렬 처리가 유리할 수도 있다. 더욱이, 위에 설명한 실시예들에서 다양한 구성들의 분리는 그러한 분리가 반드시 필요한 것으로 이해되어서는 안 되고, 설명된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품으로 함께 통합되거나 다수의 소프트웨어 제품으로 패키지 될 수 있음을 이해하여야 한다.
이상 첨부된 도면을 참조하여 본 개시의 실시예들을 설명하였지만, 본 개시가 속하는 기술분야에서 통상의 지식을 가진 자는 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 본 개시가 다른 구체적인 형태로도 실시될 수 있다는 것을 이해할 수 있다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로 이해해야만 한다. 본 개시의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 개시에 의해 정의되는 기술적 사상의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (15)

  1. 컴퓨팅 장치에 의하여 수행되는 방법에 있어서,
    분석 대상 소프트웨어의 제어 흐름(control flow)을 얻는 단계;
    상기 제어 흐름 상의 각 노드 별 실행 소요 시간을 예측하되, 상기 각 노드는 하나 이상의 인접한 구문(statement)들로 구성된 것인, 단계; 및
    상기 예측된 각 노드 별 실행 시간을 이용하여, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계를 포함하되,
    상기 각 노드 별 실행 소요 시간을 예측하는 단계는,
    상기 각 노드 별로, 노드 실행 후의 변수값에 대한 정보를 결정하는 단계; 및
    상기 노드가 외부 라이브러리에 포함된 외부 메소드의 호출을 포함하는 것인 경우, 상기 외부 메소드에 파라미터로서 입력되는 변수값에 대한 정보와 상기 외부 메소드의 실행 시간에 대한 통계 모델을 이용하여 외부 메소드의 실행 소요 시간을 예측함으로써 상기 노드의 실행 소요 시간을 예측하는 단계를 포함하고,
    상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계는,
    요약 해석(abstract interpretation)에 따라, 각 구문의 수학적 모델에 구문 실행 전의 변수값의 범위를 입력하여 구문 실행 후의 변수값의 범위를 얻음으로써 노드 실행 후의 변수값의 범위를 얻는 단계;
    상기 제어 흐름에 포함된 루프의 반복 회수를 결정하는 변수의 상기 요약 해석에 따른 변수값 범위를 이용하여, 상기 루프의 반복 회수를 예측하는 단계; 및
    상기 루프의 반복 회수를 더 이용하여, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계를 포함하는,
    프로그램 분석 방법.
  2. 제1 항에 있어서,
    상기 통계 모델은,
    상기 외부 메소드에 파라미터로서 입력되는 변수값을 독립 변수로 하고, 그 경우의 실행 소요 시간을 종속 변수로 하는 것인,
    프로그램 분석 방법.
  3. 제2 항에 있어서,
    상기 통계 모델은,
    상기 외부 메소드에 파라미터로서 입력되는 변수가 복수개인 경우, 그 중 실행 소요 시간에 영향을 미치는 일부의 변수만을 상기 독립 변수로 하는 것인,
    프로그램 분석 방법.
  4. 제2 항에 있어서,
    상기 각 노드 별로, 노드 실행 후의 변수값에 대한 정보를 결정하는 단계는,
    요약 해석(abstract interpretation)에 따라, 각 구문의 수학적 모델에 구문 실행 전의 변수값의 범위를 입력하여 구문 실행 후의 변수값의 범위를 얻음으로써 노드 실행 후의 변수값의 범위를 얻는 단계를 포함하고,
    상기 외부 메소드에 파라미터로서 입력되는 변수값에 대한 정보와 상기 외부 메소드의 실행 시간에 대한 통계 모델을 이용하여 외부 메소드의 실행 소요 시간을 예측하는 단계는,
    상기 외부 메소드에 파라미터로서 입력되는 변수의 값으로서, 상기 요약 해석에 따라 얻어진 상기 변수의 변수값 범위에 속하는 대표값을 세팅하는 단계;
    상기 대표값을 상기 외부 메소드의 통계 모델에 적용하여 외부 메소드의 실행 소요 시간을 예측하는 단계를 포함하는,
    프로그램 분석 방법.
  5. 제1 항에 있어서,
    상기 각 노드 중 일부의 노드는, 적어도 2회 이상 실행되는 복수의 인접한 구문(statement)들로 구성되는 패턴인,
    프로그램 분석 방법.
  6. 제1 항에 있어서,
    상기 통계 모델은,
    상기 분석 대상 소프트웨어의 배포(deploy)된 버전의 인스턴스에 포함된 에이전트에 의하여 송부되는 외부 라이브러리 호출 정보를 이용하여 생성된 것인,
    프로그램 분석 방법.
  7. 제1 항에 있어서,
    상기 통계 모델은,
    상기 외부 라이브러리를 임포트(import)한 소프트웨어로서 상기 분석 대상 소프트웨어와 상이한 소프트웨어에 포함된 에이전트에 의하여 송부되는 외부 라이브러리 호출 정보를 이용하여 생성된 것인,
    프로그램 분석 방법.
  8. 제7 항에 있어서,
    상기 통계 모델은,
    상기 외부 라이브러리 호출 정보 중 실행 소요 시간이, 상기 에이전트가 실행되는 시스템 환경에 대한 정보를 이용하여 조정된 결과를 이용하여 생성된 것인,
    프로그램 분석 방법.
  9. 삭제
  10. 제1 항에 있어서,
    상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 단계는,
    복수의 상기 외부 메소드 별 전체 실행 소요 시간 예측치에 대한 정보인 외부 메소드 실행 소요 시간 정보를 출력하는 단계를 포함하는,
    프로그램 분석 방법.
  11. 제10 항에 있어서,
    상기 외부 메소드 실행 소요 시간 정보를 출력하는 단계는,
    이전 버전의 분석 대상 소프트웨어의 상기 외부 메소드 실행 소요 시간 정보와 현재 버전의 분석 대상 소프트웨어의 상기 외부 메소드 실행 소요 시간 정보의 비교 데이터를 출력하는 단계를 포함하는,
    프로그램 분석 방법.
  12. 제11 항에 있어서,
    비교 데이터를 출력하는 단계는,
    제1 외부 메소드의 외부 메소드 실행 소요 시간이 이전 버전 대비 현재 버전에서 기준치 이상 증가한 경우, 상기 제1 외부 메소드를 호출하는 구문 중 이전 버전과 달라진 구문을 표시하는 단계를 포함하는,
    프로그램 분석 방법.
  13. 제1 소프트웨어의 실행 도중 외부 라이브러리에 포함된 외부 메소드의 호출 정보를 제공하는 수집 에이전트로부터 제공 받은 정보를 이용하여, 상기 외부 메소드의 실행 시간에 대한 통계 모델을 생성하는 통계 모델 관리 장치; 및
    제2 소프트웨어의 제어 흐름(control flow)을 얻고, 상기 제어 흐름 상의 각 노드 별 실행 소요 시간을 예측하며, 상기 예측된 각 노드 별 실행 시간을 이용하여 상기 제2 소프트웨어의 실행 소요 시간을 예측하는 정적 프로그램 분석 장치를 포함하되,
    상기 통계 모델은 상기 외부 메소드에 파라미터로서 입력되는 변수값을 독립 변수로 하고, 그 경우의 실행 소요 시간을 종속 변수로 하는 것이고,
    상기 정적 프로그램 분석 장치는,
    상기 각 노드 별로, 노드 실행 후의 변수값의 범위를 결정하고, 상기 노드가 외부 라이브러리에 포함된 외부 메소드의 호출을 포함하는 것인 경우, 상기 외부 메소드에 파라미터로서 입력되는 변수값의 범위와 상기 외부 메소드의 실행 시간에 대한 통계 모델을 이용하여 외부 메소드의 실행 소요 시간을 예측하고,
    상기 정적 프로그램 분석 장치는,
    상기 제2 소프트웨어의 실행 소요 시간을 예측하되, 요약 해석(abstract interpretation)에 따라, 각 구문의 수학적 모델에 구문 실행 전의 변수값의 범위를 입력하여 구문 실행 후의 변수값의 범위를 얻음으로써 노드 실행 후의 변수값의 범위를 얻고, 상기 제어 흐름에 포함된 루프의 반복 회수를 결정하는 변수의 상기 요약 해석에 따른 변수값 범위를 이용하여, 상기 루프의 반복 회수를 예측하고, 상기 루프의 반복 회수를 더 이용하여, 상기 분석 대상 소프트웨어의 실행 소요 시간을 예측하는 것인,
    프로그램 분석 시스템.
  14. 제13 항에 있어서,
    상기 제1 소프트웨어는 상기 제2 소프트웨어의 배포 버전이고, 상기 제2 소프트웨어는 상기 제1 소프트웨어의 개발중인 버전인,
    프로그램 분석 시스템.
  15. 제13 항에 있어서,
    상기 제1 소프트웨어는 상기 제2 소프트웨어와 서로 다른 소프트웨어로서, 상기 제2 소프트웨어와 동일한 상기 외부 라이브러리를 임포트(import)한 것인,
    프로그램 분석 시스템.
KR1020190058027A 2019-05-17 2019-05-17 프로그램 분석 방법 및 그 시스템 KR102631545B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190058027A KR102631545B1 (ko) 2019-05-17 2019-05-17 프로그램 분석 방법 및 그 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190058027A KR102631545B1 (ko) 2019-05-17 2019-05-17 프로그램 분석 방법 및 그 시스템

Publications (2)

Publication Number Publication Date
KR20200132460A KR20200132460A (ko) 2020-11-25
KR102631545B1 true KR102631545B1 (ko) 2024-01-30

Family

ID=73645308

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190058027A KR102631545B1 (ko) 2019-05-17 2019-05-17 프로그램 분석 방법 및 그 시스템

Country Status (1)

Country Link
KR (1) KR102631545B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112685206B (zh) * 2021-01-07 2024-04-12 北京全路通信信号研究设计院集团有限公司 一种交互数据正确性判断方法、装置、电子设备和介质
KR102519639B1 (ko) * 2021-06-30 2023-04-06 삼성에스디에스 주식회사 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100943887B1 (ko) * 2008-02-05 2010-02-24 재단법인서울대학교산학협력재단 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7007270B2 (en) * 2001-03-05 2006-02-28 Cadence Design Systems, Inc. Statistically based estimate of embedded software execution time
KR100938489B1 (ko) * 2007-10-25 2010-01-28 김태효 Ipet기법을 이용하여 실시간 시스템의 최장수행시간을분석하는 자동화된 도구 및 방법
KR101788279B1 (ko) * 2015-08-12 2017-10-19 충남대학교산학협력단 테스트 기법을 이용한 최악 실행 시간 측정 시스템 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100943887B1 (ko) * 2008-02-05 2010-02-24 재단법인서울대학교산학협력재단 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법

Also Published As

Publication number Publication date
KR20200132460A (ko) 2020-11-25

Similar Documents

Publication Publication Date Title
Meier et al. Automated transformation of component-based software architecture models to queueing petri nets
US9569179B1 (en) Modifying models based on profiling information
US9043788B2 (en) Experiment manager for manycore systems
CN102222023B (zh) 异步工作流
Leather et al. Machine learning in compilers: Past, present and future
Dongarra et al. Self-adapting numerical software for next generation applications
US20140189660A1 (en) Control flow analysis methods and computing devices for converting cobol-sourced programs to object-oriented program structures
Yamato Study and evaluation of automatic GPU offloading method from various language applications
KR102631545B1 (ko) 프로그램 분석 방법 및 그 시스템
Walter et al. An expandable extraction framework for architectural performance models
EP3526674B1 (en) Time-parallelized integrity testing of software code
Costa et al. Collectionswitch: A framework for efficient and dynamic collection selection
CN104407968A (zh) 一种通过静态分析测算代码指令最长运行时间的方法
Ardalani et al. A static analysis-based cross-architecture performance prediction using machine learning
Li et al. EdgeProg: Edge-centric programming for IoT applications
US10303468B2 (en) Real-time quality of service monitoring apparatus and method
Feljan et al. Task allocation optimization for multicore embedded systems
US20190079972A1 (en) System and method for parallel query processing based on jit compilation
Navarro et al. Adaptive and architecture-independent task granularity for recursive applications
KR101705996B1 (ko) 자바스크립트 소스 코드를 최적화하기 위한 자바스크립트 소스 코드 정적 분석 장치 및 방법
CN109416627B (zh) 用于修订功能或向自动化设备添加功能的方法
Majo et al. Integrating profile caching into the hotspot multi-tier compilation system
Tetzlaff et al. Static prediction of loop iteration counts using machine learning to enable hot spot optimizations
Bedadala et al. Generation of Call Graph for Java Higher Order Functions
Tartara et al. Parallel iterative compilation: using MapReduce to speedup machine learning in compilers

Legal Events

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