KR102185294B1 - Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor - Google Patents

Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor Download PDF

Info

Publication number
KR102185294B1
KR102185294B1 KR1020190002270A KR20190002270A KR102185294B1 KR 102185294 B1 KR102185294 B1 KR 102185294B1 KR 1020190002270 A KR1020190002270 A KR 1020190002270A KR 20190002270 A KR20190002270 A KR 20190002270A KR 102185294 B1 KR102185294 B1 KR 102185294B1
Authority
KR
South Korea
Prior art keywords
source code
syntax
information
memory
work list
Prior art date
Application number
KR1020190002270A
Other languages
Korean (ko)
Other versions
KR20200086093A (en
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 KR1020190002270A priority Critical patent/KR102185294B1/en
Publication of KR20200086093A publication Critical patent/KR20200086093A/en
Application granted granted Critical
Publication of KR102185294B1 publication Critical patent/KR102185294B1/en

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/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

일 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치는, 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 구문 분석부, 공유 자원에 대한 정보를 저장하는 글로벌 메모리, 상기 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리 및 적어도 하나 이상의 동적으로 생성되는 워크 리스트- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-를 포함하는 메모리부, 상기 추출된 정보 및 상기 접근 제어 메모리의 값에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 구문 영역에 상기 결정된 구문을 추가하는 할일 관리부, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 상기 글로벌 메모리에 저장되어 있는 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 기호 실행부, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 결함 검출부를 포함한다.The source code analysis apparatus of a parallel program according to an embodiment includes a parsing unit for extracting information necessary for analysis from the source code of the parallel program, a global memory storing information on a shared resource, and access control for the shared resource. Access control memory for storing information for synchronization and at least one dynamically generated work list- The work list includes a syntax area for storing a syntax and a memory area for storing execution results of the syntax of the syntax area. A memory unit including, based on the extracted information and the value of the access control memory, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs A to-do management unit that adds the determined syntax to the syntax area of, and the determined syntax is a preference based on information stored in the memory area of a work list for a thread to which the determined syntax belongs and information stored in the global memory. A symbol execution unit that stores the execution and symbol execution result in the memory area of the work list or the global memory for the thread to which the determined syntax belongs, and the state of the memory area of the work list for the thread to which the determined syntax belongs, and And a defect detector configured to detect information on a defect that may cause a problem in the source code based on the state of the global memory.

Description

병렬 프로그램의 소스 코드 분석 장치 및 방법, 기록매체{APPARATUS AND METHOD FOR ANALYZING SOURCE CODE OF CONCURRENT PROGRAM AND COMPUTER READIBLE STORAGE MEDIUM THEREFOR}Apparatus and method for analyzing source code of parallel program, recording medium {APPARATUS AND METHOD FOR ANALYZING SOURCE CODE OF CONCURRENT PROGRAM AND COMPUTER READIBLE STORAGE MEDIUM THEREFOR}

본 발명은 병렬 프로그램의 소스 코드 분석 장치 및 방법에 관한 것으로, 보다 자세하게는 병렬 프로그램의 실행 흐름을 추적하여 병렬 프로그램의 소스 코드에서 문제를 일으킬 수 있는 결함을 검출하는 소스 코드 분석 장치 및 방법에 관한 것이다.The present invention relates to an apparatus and method for analyzing a source code of a parallel program, and more particularly, to a source code analysis apparatus and method for detecting a defect that may cause a problem in the source code of a parallel program by tracking the execution flow of the parallel program. will be.

프로그램 소스 코드의 정적 분석은 컴퓨터 소프트웨어를 분석하는 여러 가지 방법 중 하나이다. 이 방법의 특징은 소프트웨어를 직접 실행하지 않고 개발 중인 소프트웨어의 소스 코드를 대상으로 분석을 수행한다는 점이다. 이 방법의 목적은 분석을 통해 소프트웨어가 잠재적으로 가지고 있는 결함이나 보안 취약점을 사전에 찾아내 소프트웨어의 품질 및 보안성을 향상시키는 것이다. 만약 이러한 결함이나 취약점이 고쳐지지 않은 소프트웨어의 경우 잘못된 동작을 수행하거나 해커들이 시스템에 침입하는데 이용될 수 있다.Static analysis of program source code is one of several methods of analyzing computer software. The feature of this method is that the analysis is performed on the source code of the software being developed without directly executing the software. The purpose of this method is to improve the quality and security of software by finding potential flaws or security vulnerabilities in software through analysis. If such flaws or vulnerabilities are not fixed, software may perform incorrect operations or be used by hackers to infiltrate the system.

정적 분석 도구(Static Analysis Tool)는 정적 프로그램 분석을 사람의 손이 아닌 소프트웨어를 이용하여 자동적으로 수행하도록 개발된 프로그램이다. 일반적으로 소스 코드의 크기는 매우 방대하므로 수동으로 정적 프로그램 분석을 수행하는 것은 거의 불가능하다고 볼 수 있다. 따라서 이러한 분석을 자동화하여 수행할 수 있도록 해주는 것이 정적 분석 도구의 역할이라고 할 수 있다. 정적 분석 도구는 종류에 따라 소스 코드에서 다양한 종류의 결함이나 취약점을 검출할 수 있으며, 분석을 통해 검출된 결함을 사용자에게 알려준다. 검출된 결함을 통해 사용자는 문제가 되는 부분을 보다 쉽게 찾을 수 있다.Static Analysis Tool is a program developed to automatically perform static program analysis using software rather than human hands. In general, the size of the source code is very large, so it is almost impossible to manually perform static program analysis. Therefore, it can be said that it is the role of static analysis tools to automate and perform such analysis. The static analysis tool can detect various types of defects or vulnerabilities in the source code depending on the type, and informs the user of the detected defect through analysis. The detected defect makes it easier for the user to find the problematic part.

병렬 프로그램은 프로그램의 실행이 순차적으로 이뤄지지 않고 병렬적으로 소스 코드의 여러 지점이 실행에 개입될 수 있으므로 일반적인 프로그램보다 정적 분석으로 결함에 대한 정확한 정보를 찾기가 어렵다. 따라서 병렬 프로그램을 위한 소스 코드 분석 방법에 대한 필요성이 대두되고 있다.In a parallel program, execution of the program is not performed sequentially, and multiple points of the source code may be involved in execution in parallel, so it is more difficult to find accurate information about a defect through static analysis than a general program. Therefore, there is a need for a source code analysis method for parallel programs.

한국등록특허, 제 10-1507469 호 (2015.04.03. 공고)Korean Registered Patent, No. 10-1507469 (announced on April 3, 2015)

본 발명의 해결하고자 하는 과제는 소스 코드의 여러 부분이 병렬적으로 실행되는 병렬 프로그램의 특성을 반영한 소스 코드의 분석 장치 및 방법을 제공하는 것이다.An object to be solved of the present invention is to provide an apparatus and method for analyzing a source code reflecting characteristics of a parallel program in which several parts of the source code are executed in parallel.

또한, 병렬 프로그램의 소스 코드는 그대로 두고 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 소스 코드의 정적 분석을 하는 소스 코드의 분석 장치 및 방법을 제공한다.In addition, it provides a source code analysis apparatus and method for static analysis of the source code by simulating the execution flow of the parallel program while leaving the source code of the parallel program as it is.

다만, 본 발명의 해결하고자 하는 과제는 이상에서 언급한 것으로 제한되지 않으며, 언급되지 않은 또 다른 해결하고자 하는 과제는 아래의 기재로부터 본 발명이 속하는 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.However, the problem to be solved of the present invention is not limited to the ones mentioned above, and another problem to be solved that is not mentioned can be clearly understood by those of ordinary skill in the art from the following description. will be.

일 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치는, 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 구문 분석부, 공유 자원에 대한 정보를 저장하는 글로벌 메모리, 상기 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리 및 적어도 하나 이상의 동적으로 생성되는 워크 리스트- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-를 포함하는 메모리부, 상기 추출된 정보 및 상기 접근 제어 메모리의 값에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 구문 영역에 상기 결정된 구문을 추가하는 할일 관리부, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 상기 글로벌 메모리에 저장되어 있는 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 기호 실행부, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 결함 검출부를 포함하며, 상기 기호 실행부는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 접근 제어 메모리의 정보를 갱신한다.The source code analysis apparatus of a parallel program according to an embodiment includes a parsing unit for extracting information necessary for analysis from the source code of the parallel program, a global memory storing information on a shared resource, and access control for the shared resource. Access control memory for storing information for synchronization and at least one dynamically generated work list- The work list includes a syntax area for storing a syntax and a memory area for storing execution results of the syntax of the syntax area. A memory unit including, based on the extracted information and the value of the access control memory, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs A to-do management unit that adds the determined syntax to the syntax area of, and the determined syntax is a preference based on information stored in the memory area of a work list for a thread to which the determined syntax belongs and information stored in the global memory. A symbol execution unit that stores the execution and symbol execution result in the memory area of the work list or the global memory for the thread to which the determined syntax belongs, and the state of the memory area of the work list for the thread to which the determined syntax belongs, and And a defect detection unit for detecting information on a defect that may cause a problem in the source code based on the state of the global memory, and the symbol execution unit is a command in which the determined syntax is a command for synchronizing access control to the shared resource. In this case, information in the access control memory is updated.

또한, 상기 분석에 필요한 정보는 상기 소스 코드의 라인 수, 상기 소스 코드의 위치 정보 및 상기 소스 코드의 구문 구조에 관한 정보 중 적어도 하나를 포함한다.In addition, the information necessary for the analysis includes at least one of the number of lines of the source code, location information of the source code, and information on the syntax structure of the source code.

또한, 상기 결함에 관한 정보는 상기 소스 코드내의 상기 결함의 위치 정보, 상기 결함의 유형, 상기 결함의 원인에 관한 정보, 상기 결함이 발생하게 된 상기 소스 코드의 흐름에 관한 정보 중 적어도 하나를 포함한다.In addition, the information on the defect includes at least one of information on the location of the defect in the source code, the type of the defect, information on the cause of the defect, and information on the flow of the source code where the defect occurs. do.

또한, 상기 글로벌 메모리는 전역 변수의 값 또는 동적으로 힙에 할당된 영역의 값을 저장한다.Also, the global memory stores a value of a global variable or a value of an area dynamically allocated to the heap.

또한, 상기 접근 제어를 동기화하는 명령은 공유 자원 공간에 대한 접근 시간을 제어하는 명령이다.In addition, the command for synchronizing the access control is a command for controlling the access time to the shared resource space.

일 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법은, 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 단계, 상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며, 상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신한다.According to an embodiment, a method for analyzing a source code of a parallel program includes the steps of extracting information necessary for analysis from a source code of a parallel program, and the parallel program based on information for synchronizing the extracted information and access control to a shared resource. Simulating the execution flow of a program to determine a statement to be executed next among the source code, and adding the determined statement to a work list for a thread to which the determined statement belongs-The work list includes a syntax area for storing a statement and the Including a memory area for storing the execution result of the syntax in the syntax area-, information stored in the memory area of the work list for the thread to which the determined syntax belongs, and the shared resource stored in the global memory Based on the information on the symbol execution and storing the result of symbol execution in the memory area or the global memory of the work list for the thread to which the determined syntax belongs, and the work list for the thread to which the determined syntax belongs And detecting information on a defect that may cause a problem in the source code based on a state of a memory area and a state of the global memory, and the storing step includes controlling access to the shared resource by the determined syntax In the case of a command to synchronize, information for synchronizing the access control is updated according to the execution of the command.

일 실시예에 따른 컴퓨터 판독 가능한 기록매체에 저장된 프로그램은 병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 단계, 상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-, 상기 결정된 구문을 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여 기호 실행하고 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계, 및 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며, 상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신하는 병렬 프로그램의 소스 코드 분석 방법을 프로세서가 수행하도록 하는 명령어를 포함한다.A program stored in a computer-readable recording medium according to an embodiment includes the steps of extracting information necessary for analysis from a source code of a parallel program, and the parallel program based on information for synchronizing access control to the extracted information and shared resources. Simulating the execution flow of a program to determine a statement to be executed next among the source code, and adding the determined statement to a work list for a thread to which the determined statement belongs-The work list includes a syntax area for storing a statement and the Including a memory area for storing the execution result of the syntax in the syntax area-, information stored in the memory area of the work list for the thread to which the determined syntax belongs, and the shared resource stored in the global memory Based on the information on the symbol execution and storing the result of symbol execution in the memory area or the global memory of the work list for the thread to which the determined syntax belongs, and the work list for the thread to which the determined syntax belongs And detecting information on a defect that may cause a problem in the source code based on a state of a memory area and a state of the global memory, and the storing step includes controlling access to the shared resource by the determined syntax In the case of a command for synchronizing the command, the processor includes an instruction for causing the processor to perform a source code analysis method of a parallel program that updates information for synchronizing the access control according to the execution of the command.

일 실시예에 따르면 소스 코드의 여러 부분이 병렬적으로 실행되는 병렬 프로그램의 특성을 반영함으로써 보다 정확하게 병렬 프로그램의 결함을 검출할 수 있다.According to an exemplary embodiment, defects of a parallel program may be more accurately detected by reflecting characteristics of a parallel program in which several parts of a source code are executed in parallel.

또한, 병렬 프로그램의 소스 코드는 그대로 두고 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 소스 코드의 정적 분석을 수행함으로써 메모리를 많이 차지하지 않고 용이하게 병렬 프로그램의 소스 코드를 분석할 수 있다.In addition, it is possible to analyze the source code of the parallel program easily without taking up a lot of memory by performing static analysis of the source code by simulating the execution flow of the parallel program while leaving the source code of the parallel program as it is.

도 1은 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치의 기능 블록도이다.
도 2는 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법의 실행 단계를 보여주는 흐름도이다.
도 3은 병렬 프로그램이 아닌 단일 프로세스로 이루어진 프로그램의 예시를 보여주는 도면이다.
도 4는 도 3의 프로그램의 제어 흐름을 보여주는 그래프이다.
도 5는 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법에 의해 도 3의 소스 코드의 정적 분석이 수행되는 과정에서의 워크 리스트의 변화를 보여주는 도면이다.
도 6은 병렬 프로그램의 예시를 보여주는 도면이다.
도 7은 도 6의 프로그램의 제어 흐름을 보여주는 그래프이다.
도 8은 도 6의 병렬 프로그램의 실행 순서를 보여주는 도면이다.
도 9 내지 도 13은 도 6의 병렬 프로그램에 대해 본 발명의 실시예에 다른 소스 코드 분석 방법이 수행되는 과정에서 워크 리스트의 변화를 보여주는 도면이다.
1 is a functional block diagram of an apparatus for analyzing a source code of a parallel program according to an embodiment of the present invention.
2 is a flowchart showing an execution step of a method for analyzing a source code of a parallel program according to an embodiment of the present invention.
3 is a diagram showing an example of a program consisting of a single process rather than a parallel program.
4 is a graph showing the control flow of the program of FIG. 3.
FIG. 5 is a diagram showing a change in a work list in a process in which static analysis of the source code of FIG. 3 is performed by a method of analyzing a source code of a parallel program according to an embodiment of the present invention.
6 is a diagram showing an example of a parallel program.
7 is a graph showing the control flow of the program of FIG. 6.
8 is a diagram illustrating an execution sequence of the parallel program of FIG. 6.
9 to 13 are diagrams showing changes in a work list in a process of performing a source code analysis method according to an embodiment of the present invention for the parallel program of FIG. 6.

본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.Advantages and features of the present invention, and a method of achieving them will become apparent with reference to the embodiments described below in detail together with the accompanying drawings. However, the present invention is not limited to the embodiments disclosed below, but may be implemented in a variety of different forms, and only these embodiments make the disclosure of the present invention complete, and are common knowledge in the technical field to which the present invention pertains. It is provided to completely inform the scope of the invention to those who have, and the invention is only defined by the scope of the claims.

본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.In describing the embodiments of the present invention, if it is determined that a detailed description of a known function or configuration may unnecessarily obscure the subject matter of the present invention, a detailed description thereof will be omitted. In addition, terms to be described later are terms defined in consideration of functions in an embodiment of the present invention, which may vary according to the intention or custom of users or operators. Therefore, the definition should be made based on the contents throughout this specification.

도 1은 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치의 기능 블록도이다.1 is a functional block diagram of an apparatus for analyzing a source code of a parallel program according to an embodiment of the present invention.

본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치(100)는 병렬 프로그램의 실행 흐름을 파악하여 그 실행 흐름에 따라 소스 코드의 구문의 실행을 시뮬레이션 함으로써 병렬 프로그램에서 문제를 일으킬 수 있는 결함을 추출하는 장치이다. 병렬 프로그램의 소스 코드 분석 장치(100)는 구문 분석부(110), 할일 관리부(120), 기호 실행부(130), 메모리부(140) 및 결함 검출부(150)로 구성될 수 있다. The source code analysis apparatus 100 for a parallel program according to an embodiment of the present invention detects the execution flow of the parallel program and simulates the execution of the syntax of the source code according to the execution flow, thereby detecting defects that may cause problems in the parallel program. It is a device to extract. The source code analysis apparatus 100 for a parallel program may include a syntax analysis unit 110, a to-do management unit 120, a symbol execution unit 130, a memory unit 140, and a defect detection unit 150.

구문 분석부(110)는 병렬 프로그램의 소스 코드에서 정적 분석에 필요한 정보, 가령 소스 코드의 라인 수, 소스 코드의 위치 정보 및 소스 코드의 구문 구조에 관한 정보 등을 추출하여 이후의 소스 코드 분석의 필요에 따라 이들 정보들을 재구성한다. The syntax analysis unit 110 extracts information necessary for static analysis from the source code of the parallel program, such as the number of lines of the source code, location information of the source code, and information about the syntax structure of the source code, and analyzes the source code. Reorganize these information as needed.

메모리부(140)는 전역 변수 또는 동적으로 힙에 할당된 영역과 같은 공유 자원의 값을 저장하는 글로벌 메모리(142), 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리(144), 및 구문을 저장하는 구문 영역 및 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역으로 구성되는 적어도 하나 이상의 동적으로 생성되는 워크 리스트(work list)(146)를 포함한다.The memory unit 140 includes a global memory 142 that stores a value of a shared resource, such as a global variable or an area dynamically allocated to the heap, and an access control memory 144 that stores information for synchronizing access control to the shared resource. ), and at least one dynamically generated work list 146 comprising a syntax area storing a syntax and a memory area storing execution results of the syntax of the syntax area.

할일 관리부(120)는 구문 분석부(110)에 의해 추출된 정보에 기초하여 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 소스 코드 중 다음에 실행될 구문을 결정하고, 결정된 구문을 그 구문이 속한 쓰레드(thread)를 위한 워크 리스트의 구문 영역에 저장한다. 할일 관리부(120)는 병렬 프로그램의 실행 흐름을 따라가면서 새로운 쓰레드를 만날 때마다 그 쓰레드를 위한 워크 리스트를 생성하고, 다음에 실행될 구문을 그 구문이 속하는 쓰레드를 위한 워크 리스트에 저장한다. 따라서 병렬 프로그램을 분석하는 동안 하나 이상의 워크 리스트가 생성될 수 있다. The to-do management unit 120 simulates the execution flow of a parallel program based on the information extracted by the syntax analysis unit 110 to determine the next statement to be executed among source codes, and uses the determined statement as a thread to which the statement belongs. It is saved in the syntax area of the work list for. Whenever a new thread is encountered while following the execution flow of the parallel program, the to-do management unit 120 creates a work list for that thread, and stores a statement to be executed next in a work list for the thread to which the statement belongs. Thus, more than one work list can be created while analyzing a parallel program.

기호 실행부(130)는 할일 관리부(120)에 의해 다음에 실행될 구문으로 결정된 구문을 그 구문이 속하는 쓰레드를 위한 워크 리스트의 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 전역 변수 등의 값에 기초하여 기호 실행하고 기호 실행한 결과를 해당 워크 리스트의 메모리 영역에 저장한다. 기호 실행부(130)는 실행할 구문이 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 접근 제어 메모리(144)에 저장되어 있는 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 갱신함으로써 전역 변수 등 복수의 쓰레드에 의해 공유되는 공유 자원에 대하여 한번에 하나의 쓰레드만이 해당 공유 자원에 액세스하도록 동기화시킬 수 있다. 공유 자원에 대한 접근 제어 동기화 명령은 전역 변수와 같은 공유 자원에 대한 접근을 시간적 또는 공간적으로 동기화하는 메커니즘을 구현하는 명령으로, 예를 들어 멀티 쓰레드(multi thread) 환경에서 mutex를 이용하여 공유 자원 영역에 대한 접근 시간을 제어하는 명령들을 포함할 수 있다. 구체적으로 pthread_mutex_lock(&mutex)는 mutex에 lock을 걸어 해당 mutex를 원하는 다른 쓰레드의 실행을 막는 명령이고, pthread_mutex_unlock(&mutex)는 mutex를 unlock하여 해당 mutex를 원하는 다른 쓰레드의 실행을 허용하는 명령이다. 이러한 공유 자원에 대한 접근 제어를 동기화하기 위한 정보, 예를 들어 mutex가 특정 쓰레드에 의해 lock된 상태인지 또는 mutex가 unlock 상태인지 등에 대한 정보는 메모리부(140)의 접근 제어 메모리(144)에 저장된다.The symbol execution unit 130 converts the syntax determined by the to-do management unit 120 as a statement to be executed next, such as information stored in the memory area of the work list for the thread to which the statement belongs, and global variables stored in the global memory. The symbol is executed based on the value and the result of the symbol executed is stored in the memory area of the work list. When the syntax to be executed is a command for synchronizing access control for a shared resource, the symbol execution unit 130 updates information for synchronizing access control for a shared resource stored in the access control memory 144 so that a plurality of global variables, etc. For a shared resource shared by a thread of, only one thread at a time can be synchronized to access the shared resource. The access control synchronization command for shared resources is a command that implements a mechanism to synchronize access to shared resources such as global variables temporally or spatially.For example, in a multithreaded environment, using a mutex, a shared resource area It may contain commands to control the access time to. Specifically, pthread_mutex_lock(&mutex) is a command that locks a mutex to prevent the execution of another thread that wants the corresponding mutex, and pthread_mutex_unlock(&mutex) is a command that unlocks the mutex and allows execution of other threads that want the mutex. Information for synchronizing access control to these shared resources, for example, information on whether the mutex is locked by a specific thread or the mutex is unlocked is stored in the access control memory 144 of the memory unit 140 do.

결함 검출부(150)는 기호 실행부(130)에 의해 기호 실행된 구문이 속하는 쓰레드의 워크 리스트(146)의 메모리 영역의 상태 및/또는 글로벌 메모리(142)의 상태에 기초하여 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출한다. 소스 코드의 결함이란 해당 프로그램의 실행 시 에러가 발생할 수 있는 부분 또는 보안상 취약할 수 있는 부분 등을 포함한다. 결함 검출부(150)는 검출되는 결함에 관하여 결함이 검출된 소스 코드의 파일명, 소스 코드내에서 해당 결함이 어느 위치에서 검출되었는지에 관한 정보 (소스 코드내의 라인 번호 등), 결함이 어떤 유형의 것인지에 관한 정보, 결함의 원인이 무엇인지에 관한 정보, 소스 코드 내에서 결함이 발생하게 된 실행 흐름에 관한 정보 등을 포함할 수 있다.The defect detection unit 150 detects a problem in the source code based on the state of the memory area of the work list 146 of the thread to which the symbol executed by the symbol execution unit 130 belongs and/or the state of the global memory 142. Detect information about possible defects. Defects in source code include parts that may cause errors or may be vulnerable to security when executing the corresponding program. The defect detection unit 150 determines the file name of the source code in which the defect was detected, information on where the defect was detected in the source code (line number in the source code, etc.), and the type of defect. Information, information on what the cause of the defect is, and information about the execution flow that caused the defect to occur in the source code.

도 2는 도 1의 소스 코드 분석 장치가 동작하는 과정을 보여주는 흐름도이다.2 is a flowchart illustrating a process of operating the source code analysis apparatus of FIG. 1.

본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 장치(100)의 구문 분석부(110)는 분석하고자 하는 병렬 프로그램의 소스 코드로부터 정적 분석에 필요한 정보, 예를 들어 추상 구문 트리(Abstract Syntax Tree)나 소스 코드의 라인 수, 소스 코드의 파일명 및 소스 코드가 어디에 존재하는지에 대한 위치 정보 등을 추출하여 정제한다(S210). The syntax analysis unit 110 of the source code analysis apparatus 100 for a parallel program according to an embodiment of the present invention provides information necessary for static analysis from the source code of a parallel program to be analyzed, for example, an abstract syntax tree. ), the number of lines of the source code, the file name of the source code, and location information on where the source code exists, and the like is extracted and refined (S210).

구문 분석부(110)가 추출한 정보 및/또는 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하고 있는 접근 제어 메모리(144)의 값에 기초하여, 할일 관리부(120)는 병렬 프로그램의 실행 흐름을 시뮬레이션하고 실행 흐름상 다음에 실행될 구문을 결정하여 결정된 구문을 그 구문이 속하는 쓰레드를 위한 워크 리스트(146)의 구문 영역에 추가한다(S220). 할일 관리부(120)는 병렬 프로그램의 실행 흐름을 시뮬레이션 할 때 접근 제어 메모리(144)에 전역 변수 등의 공유 자원에 대해 lock을 걸고 있는 쓰레드가 있는지를 파악하여 그런 쓰레드가 존재하는 경우 lock을 걸고 있는 쓰레드의 소스 코드에 대한 분석을 계속 진행하고 동일한 공유 자원에 접근하고자 하는 다른 쓰레드의 분석은 수행하지 않는다. 또한, pthread_join(thread1,NULL)과 같이 'thread1'이 지시하는 쓰레드의 종료를 대기하라는 명령 구문을 만나면 thread1의 소스 코드 분석이 완료될 때까지 thread1의 소스 코드 분석을 진행하고, thread1의 소스 코드 분석이 완료되면 다른 쓰레드의 소스 코드 분석을 진행한다. 할일 관리부(120)는 실행 흐름을 시뮬레이션 할 때 복수 개의 쓰레드 중 어느 것을 먼저 실행할지에 대해 순서가 상관없는 경우 임의의 쓰레드의 워크 리스트를 선택하여 다음에 실행할 구문을 결정할 수 있다.Based on the information extracted by the syntax analysis unit 110 and/or the value of the access control memory 144 that stores information for synchronizing access control to shared resources, the to-do management unit 120 executes the parallel program Is simulated, a statement to be executed next in the execution flow is determined, and the determined statement is added to the syntax area of the work list 146 for the thread to which the statement belongs (S220). When simulating the execution flow of a parallel program, the to-do management unit 120 determines whether there are threads that are locking on shared resources such as global variables in the access control memory 144, and locks them when such threads exist. The analysis of the thread's source code continues, and other threads that want to access the same shared resource are not analyzed. In addition, when a command statement to wait for the termination of the thread indicated by'thread1', such as pthread_join(thread1,NULL), is encountered, the source code analysis of thread1 is performed until the source code analysis of thread1 is completed, and the source code of thread1 is analyzed. When this is completed, the source code analysis of other threads proceeds. When simulating the execution flow, the to-do management unit 120 may select a work list of an arbitrary thread and determine a statement to be executed next when the order of which of the plurality of threads to be executed first is irrelevant.

기호 실행부(130)는 할일 관리부(120)에 의해 결정된, 다음에 수행할 구문을, 그 구문이 속하는 쓰레드의 워크 리스트(146)의 메모리 영역에 저장되어 있는 정보 및/또는 글로벌 메모리(142)에 저장되어 있는 정보에 기초하여 기호 실행하고, 기호 실행한 결과를 워크 리스트(146)의 메모리 영역 또는 글로벌 메모리(142)에 저장한다(S230 내지 S250). 기호 실행되는 구문이 전역 변수 등 공유 자원을 사용하는 경우 글로벌 메모리(142)로부터 공유 자원의 값을 읽고 구문을 기호 실행한 후의 공유 자원의 값을 글로벌 메모리(142)에 저장한다. 기호 실행부(130)는 결정된 구문이 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우(S240의 '예') 접근 제어 메모리(144)의 정보를 갱신한다. 예를 들어, 도 9에 도시된 바와 같이 실행되는 구문이 mythread1이라는 쓰레드를 위한 워크 리스트(500)의 pthread_mutex_lock(mutex)(505)인 경우, 기호 실행부(130)는 mutex가 lock이 걸려있는지를 접근 제어 메모리(144)의 값으로 판정하고, 접근 제어 메모리(144)가 비어 있으면 mutex가 lock이 걸려있지 않다고 판정하여 도 10에 도시된 바와 같이 접근 제어 메모리(144)에 mutex에 lock을 건 쓰레드로 mythread1을 기록한다. 이렇게 접근 제어 메모리(144)에 mythread1이 기록되어 있는 동안은 mythread1이 아닌 다른 쓰레드가 mutex에 lock을 요청하고 공유 자원에 접근하는 것을 대기시킨다. 한편, 도 11에 도시된 바와 같이 실행되는 구문이 mythread1이라는 쓰레드의 워크 리스트(500)의 pthread_mutex_unlock(mutex)(525)인 경우, 기호 실행부(130)는 접근 제어 메모리(144)에 기록되어 있는 mythread1을 삭제함으로써 mutex를 unlock한다. The symbol execution unit 130 determines a statement to be executed next, determined by the to-do management unit 120, information stored in the memory area of the work list 146 of the thread to which the statement belongs and/or the global memory 142 The symbol is executed based on the information stored in the symbol and the result of the symbol execution is stored in the memory area of the work list 146 or in the global memory 142 (S230 to S250). When the phrase executed symbolically uses a shared resource such as a global variable, the value of the shared resource is read from the global memory 142 and the value of the shared resource after the symbol is executed is stored in the global memory 142. The symbol execution unit 130 updates the information of the access control memory 144 when the determined syntax is a command for synchronizing access control to the shared resource (YES in S240). For example, as shown in FIG. 9, when the executed statement is pthread_mutex_lock(mutex) 505 in the work list 500 for a thread named mythread1, the symbol execution unit 130 determines whether the mutex is locked. A thread that determines the value of the access control memory 144 and locks the mutex in the access control memory 144 as shown in FIG. 10 by determining that the mutex is not locked if the access control memory 144 is empty Record mythread1 as As long as mythread1 is recorded in the access control memory 144, a thread other than mythread1 requests a lock to the mutex and waits for access to the shared resource. On the other hand, as shown in FIG. 11, when the executed statement is pthread_mutex_unlock (mutex) 525 in the work list 500 of the thread named mythread1, the symbol execution unit 130 is recorded in the access control memory 144. Unlock the mutex by deleting mythread1.

기호 실행부(130)에 의한 기호 실행(S230 내지 S250)후 결함 검출부(150)는 워크 리스트(146)의 메모리 영역의 상태 및/또는 글로벌 메모리(144)의 상태에 기초하여 소스 코드에서 문제를 일으킬 수 있는 결함이 존재하는지를 검출하고(S260), 결함이 존재하는 경우(S270의 '예') 결함에 관한 정보를 제공한다(S280). 결함이 검출되지 않는 경우(S270의 '아니오') 소스 코드의 마지막 구문을 분석할 때까지(S290의 '아니오') S220 내지 S290 단계를 반복 수행한다.After the symbol execution by the symbol execution unit 130 (S230 to S250), the defect detection unit 150 detects a problem in the source code based on the state of the memory area of the work list 146 and/or the state of the global memory 144. It is detected whether a possible defect exists (S260), and if a defect exists (YES in S270), information on the defect is provided (S280). If a defect is not detected ('No' in S270), steps S220 to S290 are repeatedly performed until the last syntax of the source code is analyzed ('No' in S290).

이하에서는 도 3 내지 도 5를 참조하여 본 발명의 실시예에 따른 소스 코드 분석 방법에 의해 병렬 프로그램이 아닌 단일 프로세스로 이루어진 프로그램이 분석되는 과정을 살펴보겠다.Hereinafter, a process in which a program composed of a single process rather than a parallel program is analyzed by the source code analysis method according to an embodiment of the present invention will be described with reference to FIGS. 3 to 5.

도 3과 같은 소스 코드의 프로그램의 제어 흐름을 그래프로 나타내면 도 4와 같다. 도 4의 제어 흐름에 따라 소스 코드의 구문을 분석하면 도 5와 같이 워크 리스트의 값이 변화하게 된다. 이를 이하에서 상세하게 살펴보도록 한다.4 is a graph showing the control flow of the program of the source code as shown in FIG. 3. When the syntax of the source code is analyzed according to the control flow of FIG. 4, the work list value changes as shown in FIG. 5. This will be described in detail below.

본 발명의 실시예에 따른 소스 코드 분석 방법에 따라 소스 코드를 분석하는 경우 도 5의 310과 같이 함수 caller의 시작 구문을 워크 리스트의 구문 영역(312)에, 빈 메모리를 워크 리스트의 메모리 영역(314)에 추가함으로써 함수 caller의 소스 코드 분석을 시작한다. 메모리 영역(314)의 'true' 부분은 현재 메모리 영역의 상태가 유효할 조건을, '{}' 부분은 메모리의 상태를 나타내는 것으로, 'true'는 메모리의 상태가 항상 유효함을, '{}' 는 빈 메모리 상태를 나타낸다. 할일 관리부(120)가 다음에 수행될 구문 'n:=1'을 워크 리스트의 구문 영역(322)에 추가하고, 기호 실행부(130)가 구문 영역(322)의 'n:=1' 구문을 메모리 영역(324)의 상태에 기초하여 기호 실행하고 그 결과를 메모리 영역(334)의 변수 n에 '1'로 저장한다. 할일 관리부(120)는 다음에 실행될 구문인 'if(x>0)'을 워크 리스트의 구문 영역(332)에 삽입한다. 기호 실행부(13)가 구문 영역(332)의 'if(x>0)' 구문을 기호 실행하면 if 문에서 분기가 일어나고, 할일 관리부(120)는 조건문이 참일 경우 (x>0인 경우)에 실행되는 구문 'n=10/n'과 조건문이 거짓일 경우 (x<=0인 경우) 실행되는 구문 'return n'을 모두 워크 리스트의 구문 영역 (342, 346)에 추가하고, 기호 실행부(130)는 메모리 영역(344, 348)의 현재 메모리 상태가 유효한 조건으로 각각 'x>0'와 'x<=0'을 추가한다. 도 5의 342 및 346과 같이 기호 실행할 구문이 2개 이상일 경우 기호 실행부(130)는 임의로 하나를 선택하여 기호 실행할 수 있다. 도 5의 350에서는 구문 영역 342의 구문 'n=10/n'이 먼저 기호 실행된 결과를 도시하고 있다. 이제 다음에 실행될 구문이 없으므로 결함 검출부(150)는 이 때의 워크 리스트(350)의 메모리 영역(354, 358)의 상태로 함수 caller의 하는 일을 요약할 수 있다. 즉 caller라는 함수는 x가 0보다 크면 10을 리턴하며 x가 0 이하이면 1을 리턴한다. 그리고 워크 리스트의 메모리 영역(354, 358)의 최종 상태에 기초할 때caller라는 함수에서는 결함이 검출되지 않음을 알 수 있다.When analyzing the source code according to the source code analysis method according to an embodiment of the present invention, as shown in 310 of FIG. 5, the start syntax of the function caller is assigned to the syntax area 312 of the work list, and the empty memory is assigned to the memory area of the work list ( 314) to start analyzing the source code of the function caller. The'true' part of the memory area 314 indicates a condition that the current state of the memory area is valid, the'{}' part indicates the state of the memory, and'true' indicates that the memory state is always valid, and'{ }'represents an empty memory state. The to-do management unit 120 adds the syntax'n:=1' to be executed next to the syntax area 322 of the work list, and the symbol execution unit 130 adds the syntax'n:=1' of the syntax area 322 Is symbolically executed based on the state of the memory area 324 and the result is stored as '1' in the variable n of the memory area 334. The to-do management unit 120 inserts'if(x>0)', which is a phrase to be executed next, into the syntax area 332 of the work list. When the symbol execution unit 13 symbolically executes the'if(x>0)' syntax in the syntax area 332, a branch occurs in the if statement, and the to-do management unit 120 if the conditional statement is true (when x>0) Adds both the phrase'n=10/n' and the phrase'return n'that is executed when the conditional statement is false (when x<=0) to the syntax area (342, 346) of the work list, and executes the symbol The unit 130 adds'x>0' and'x<=0', respectively, as conditions in which the current memory states of the memory areas 344 and 348 are valid. As shown in 342 and 346 of FIG. 5, when there are two or more phrases to be executed, the symbol execution unit 130 may select one and execute the symbol. In 350 of FIG. 5, the syntax'n=10/n' of the syntax area 342 shows a result of symbol execution first. Since there is no statement to be executed next, the defect detection unit 150 can summarize the work of the function caller in the state of the memory regions 354 and 358 of the work list 350 at this time. That is, a function called caller returns 10 if x is greater than 0 and 1 if x is less than 0. Also, based on the final state of the memory areas 354 and 358 of the work list, it can be seen that a defect is not detected in a function called caller.

이제 본 발명의 실시예에 따른 병렬 프로그램의 소스 코드 분석 방법에 따라 도 6과 같은 병렬 프로그램의 분석이 수행되는 과정을 살펴보도록 한다. 도 6에서 함수 runner를 일반 프로그램이라고 가정하면 이 함수에서 변수 'keep'은 '5+n'이 할당되어 'n=100/(keep-n)' 구문에서 'keep-n'이 5가 되므로 'n=100/(keep-n)'의 실행 결과는 '100/5'가 되어 전혀 결함이 없는 프로그램으로 분석된다. 그러나 함수 runner는 병렬 프로그램으로 이를 실제로 실행하면 mythread1이라는 쓰레드와 mythread2라는 쓰레드가 병렬적으로 실행되므로 어떤 경우 함수 runner의 'n=100/(keep-n)' 구문은 '100/0'이 되어 '0'으로 나누는 에러가 발생하게 된다. 도 6의 함수 runner를 본 발명의 실시예에 따른 소스 코드 분석 방법으로 분석하면 'n=100/(keep-n)' 구문에서 '0'으로 나누는 결함이 검출됨을 살펴보겠다.Now, a process in which the parallel program analysis as shown in FIG. 6 is performed according to the method for analyzing the source code of the parallel program according to the embodiment of the present invention will be described. Assuming that the function runner is a general program in FIG. 6, the variable'keep' is assigned to '5+n' in this function, and'keep-n' becomes 5 in the syntax'n=100/(keep-n)'. The execution result of n=100/(keep-n)' becomes '100/5', which is analyzed as a program with no defects. However, the function runner is a parallel program, and when it is actually executed, a thread called mythread1 and a thread called mythread2 are executed in parallel. In some cases, the syntax'n=100/(keep-n)' of the function runner becomes '100/0' An error dividing by 0'occurs. When analyzing the function runner of FIG. 6 by the source code analysis method according to an embodiment of the present invention, it will be described that a defect divided by '0' in the syntax'n=100/(keep-n)' is detected.

도 7은 도 6의 프로그램의 제어 흐름을 그래프로 나타낸 것이고, 도 8은 이러한 제어 흐름에서 도 6의 병렬 프로그램에 대하여 thread 관련 함수들의 의미를 고려해서 각 구문의 실행 순서를 일련 번호로 표시한 도면이다. 여기서 상대적으로 높은 숫자를 갖는 구문은 상대적으로 낮은 숫자를 갖는 구문보다 항상 나중에 실행되고, 같은 숫자를 갖는 구문들은 실행되는 순서가 결정적이지 않다. 예를 들어, 도 8에서 10번 구문('n=100/(keep-n)')을 실행하기 전에 그보다 번호가 작은 구문들이 먼저 실행되게 된다. 따라서, 함수 runner의 10번 구문이 실행되기 전에 함수 runner의 1번 내지 4번 구문이 실행되고, 5번 구문에서 pthread_join(thread1, NULL)을 만나면 mythread1의 실행이 완료될 때까지 대기하게 되므로, mythread1의 4번 내지 7번이 실행될 수 있다. 이후 mythread2의 6번 내지 9번 구문이 실행될 수 있다. 함수 runner의 2번 구문이 실행되면 'keep'의 값은 '5'가 되고, mythread1의 5번 구문이 실행되면 'n'의 값은 '10'이 되고, mythread2의 7번 구문이 실행되면 'n'의 값은 '5'가 된다. 따라서 함수 runner의 10번 구문에서 'keep-n'은 항상 0이 되어 10번 구문에서는 항상 0으로 나누기 오류가 발생하게 된다.FIG. 7 is a graph showing the control flow of the program of FIG. 6, and FIG. 8 is a diagram showing the execution order of each statement in serial numbers in consideration of the meaning of thread-related functions for the parallel program of FIG. 6 in this control flow. to be. Here, statements with a relatively high number are always executed later than statements with a relatively low number, and the order in which statements with the same number are executed is not critical. For example, before executing the 10th statement ('n=100/(keep-n)') in FIG. 8, statements with a smaller number are executed first. Therefore, before the 10th statement of the function runner is executed, the 1st to 4th statements of the function runner are executed, and when pthread_join(thread1, NULL) is encountered in the 5th statement, it waits until the execution of mythread1 is completed, so mythread1 Numbers 4 to 7 of can be executed. Thereafter, statements 6 to 9 of mythread2 can be executed. When the 2nd statement of the function runner is executed, the value of'keep' becomes '5', when the 5th statement of mythread1 is executed, the value of'n' becomes '10', and when the 7th statement of mythread2 is executed, ' The value of n'becomes '5'. Therefore,'keep-n' in the 10th statement of the function runner is always 0, and in the 10th statement, a division by 0 error always occurs.

이하에서는 도 9 내지 도 13을 참조하여 도 6의 병렬 프로그램에 대해 본 발명의 실시예에 다른 소스 코드 분석 방법이 수행되는 과정에서 워크 리스트의 변화를 살펴보도록 한다.Hereinafter, with reference to FIGS. 9 to 13, changes in the work list will be described in the process of performing a source code analysis method different from the embodiment of the present invention for the parallel program of FIG. 6.

본 발명의 실시예에 따른 소스 코드 분석 방법에 의해 도 6과 같은 병렬 프로그램을 분석할 경우 처음에는 일반 프로그램 분석과 같이 하나의 워크 리스트(도 9의 400)를 사용한다. 공유 자원은 여러 쓰레드가 같이 사용할 수 있으므로 글로벌 메모리(142)에 저장한다. 'n'과 같은 전역 변수 또는 동적으로 힙에 할당된 영역에 접근할 때는 글로벌 메모리(142)를 참조한다. 소스 코드 분석 중 pthread_create 같은 쓰레드 생성 함수를 만나면 할일 관리부(120)는 해당하는 쓰레드를 관리하기 위한 워크 리스트를 추가로 생성한다. 워크 리스트가 복수 개일 경우 특별한 조건이 없는 한 다음에 실행할 구문은 워크 리스트가 존재하는 임의의 쓰레드로 결정할 수 있다.When analyzing a parallel program as shown in FIG. 6 by a source code analysis method according to an embodiment of the present invention, one work list (400 in FIG. 9) is initially used as in general program analysis. Shared resources are stored in the global memory 142 because multiple threads can use them together. When accessing a global variable such as'n' or a dynamically allocated area on the heap, the global memory 142 is referred to. When a thread creation function such as pthread_create is encountered during source code analysis, the to-do management unit 120 additionally creates a work list for managing the corresponding thread. When there are multiple work lists, the next statement to be executed can be determined by an arbitrary thread in which the work list exists unless there are special conditions.

도 9는 함수 runner의 소스 코드 분석 중 3번 구문 'pthread_create(&thread1, NULL, mythread1, NULL)'이 기호 실행된 후 함수 runner의 다음에 실행될 구문이 mythread2 쓰레드를 생성하는 'pthread_create(&thread2, NULL, mythread2, NULL)'(405)이고, mythread1의 다음에 실행될 구문이 'pthread_mutex_lock(mutex)'(505)인 경우를 보여주는 도면이다. 본 발명의 실시예에 따른 소스 코드 분석 장치(100)의 기호 실행부(130)가 mythread1의 다음에 실행될 구문(505)을 선택하는 경우 'pthread_mutex_lock(mutex)'을 기호 실행하게 되고 이 경우 접근 제어 메모리(144)를 참조하여 mutex가 이미 lock 되어 있는지를 확인하여 이미 다른 쓰레드에 의해 lock이 걸려있다면 'pthread_mutex_lock(mutex)'을 기호 실행하지 않고 대기한다. mutex가 다른 쓰레드에 의해 lock 되어 있지 않다면 mutex에 lock을 요청한 mythread1을 접근 제어 메모리(144)에 기록(도 10의 144)하고 계속 소스 코드 분석을 진행한다 (도 10의 515). 기호 실행부(130)가 mythread1의 5번 구문 'n+=10'(515)을 기호 실행하려면 전역 변수 'n'을 사용해야 하고 이 경우 'n+=10' 구문(515)의 기호 실행 결과로 글로벌 메모리(142)에 변수 'n'의 값이 10으로 되었음을 저장한다(도10의 142). mythread1의 소스 코드 분석 중 'pthread_mutex_unlock(mutex)'과 같이 mutex를 unlock하는 함수를 만나면 접근 제어 메모리의 mutex에 기록되어 있던 mythread1을 삭제한다(도 12의 144). 소스 코드 분석 중 'pthread_join'과 같이 해당 쓰레드의 수행 종료를 기다리는 함수를 만나면 해당 쓰레드의 실행이 끝날 때까지 기다린다. 따라서 함수 runner의 5번 구문 'pthread_join(thread1, NULL)'의 기호 실행에 따라 도 12에 도시된 바와 같이 mythread1의 실행이 완료될 때까지 함수 runner의 워크 리스트에서 다음에 실행할 구문이 선택되지 않는다. mythread1의 실행이 완료되면 함수 runner의 워크 리스트에서 다음에 실행될 구문이 선택되고, 도 13에 도시된 바와 같이 mythread2를 위한 워크 리스트(600)가 생성되고 mythread2의 소스 코드 분석이 진행된다.FIG. 9 shows the statement to be executed next to the function runner after the third statement'pthread_create(&thread1, NULL, mythread1, NULL)' is symbolically executed during the source code analysis of the function runner, and then the statement to be executed is'pthread_create(&thread2, NULL,' mythread2, NULL)' (405), and the statement to be executed next to mythread1 is'pthread_mutex_lock(mutex)' (505). When the symbol execution unit 130 of the source code analysis apparatus 100 according to an embodiment of the present invention selects the syntax 505 to be executed next to mythread1,'pthread_mutex_lock(mutex)' is symbolically executed. In this case, access control It checks whether the mutex is already locked by referring to the memory 144, and if it is already locked by another thread, it waits without executing'pthread_mutex_lock(mutex)' symbolically. If the mutex is not locked by another thread, mythread1, which requested the lock of the mutex, is recorded in the access control memory 144 (144 in FIG. 10), and source code analysis is continued (515 in FIG. 10). In order for the symbol execution unit 130 to symbolically execute the 5th phrase'n+=10' (515) of mythread1, the global variable'n' must be used. In this case, the global memory as a result of symbol execution of the'n+=10' statement (515) It is stored in (142) that the value of the variable'n' is 10 (142 in Fig. 10). During the source code analysis of mythread1, when a function that unlocks a mutex such as'pthread_mutex_unlock(mutex)' is encountered, mythread1 recorded in the mutex of the access control memory is deleted (144 in FIG. 12). During source code analysis, if a function waiting for the execution of the thread to be terminated is encountered, such as'pthread_join', it waits until the execution of the thread is completed. Therefore, according to the execution of the symbol of the 5th phrase'pthread_join(thread1, NULL)' of the function runner, the next statement to be executed in the work list of the function runner is not selected until the execution of mythread1 is completed as shown in FIG. 12. When the execution of mythread1 is completed, a statement to be executed next is selected from the work list of the function runner, a work list 600 for mythread2 is generated as shown in FIG. 13, and the source code analysis of mythread2 is performed.

100: 병렬 프로그램의 소스 코드 분석 장치
110: 구문 분석부
120: 할일 관리부
130: 기호 실행부
140: 메모리부
150: 결함 검출부
100: parallel program source code analysis device
110: parsing unit
120: To-Do Management Department
130: symbol execution unit
140: memory unit
150: defect detection unit

Claims (12)

병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 구문 분석부;
공유 자원에 대한 정보를 저장하는 글로벌 메모리, 상기 공유 자원에 대한 접근 제어를 동기화하기 위한 정보를 저장하는 접근 제어 메모리 및 적어도 하나 이상의 동적으로 생성되는 워크 리스트- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-를 포함하는 메모리부;
상기 추출된 정보 및 상기 접근 제어 메모리의 값에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 구문 영역에 상기 결정된 구문을 추가하는 할일 관리부;
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 상기 글로벌 메모리에 저장되어 있는 정보에 기초하여, 상기 결정된 구문을 기호 실행하고, 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 기호 실행부; 및
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여, 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 결함 검출부를 포함하며,
상기 기호 실행부는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 접근 제어 메모리의 정보를 갱신하는
병렬 프로그램의 소스 코드 분석 장치.
A parsing unit for extracting information necessary for analysis from the source code of the parallel program;
A global memory for storing information on shared resources, an access control memory for storing information for synchronizing access control for the shared resource, and at least one dynamically generated work list-the work list is a syntax area for storing a phrase And a memory area for storing a result of execution of the syntax in the syntax area;
Based on the extracted information and the value of the access control memory, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and in the syntax area of the work list for the thread to which the determined statement belongs A to-do management unit for adding the determined phrase;
Based on the information stored in the memory area of the work list for the thread to which the determined syntax belongs and information stored in the global memory, the determined syntax is symbolically executed, and the result of symbolic execution is determined to which the determined syntax belongs. A symbol execution unit that stores the memory area of a work list for threads or the global memory; And
A defect detection unit configured to detect information on a defect that may cause a problem in the source code, based on the state of the memory area of the work list for the thread to which the determined syntax belongs and the state of the global memory,
The symbol execution unit updates information of the access control memory when the determined syntax is a command to synchronize access control to the shared resource.
Source code analysis device for parallel programs.
제 1 항에 있어서,
상기 분석에 필요한 정보는
상기 소스 코드의 라인 수, 상기 소스 코드의 위치 정보 및 상기 소스 코드의 구문 구조에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 장치.
The method of claim 1,
The information required for the above analysis is
Including at least one of the number of lines of the source code, location information of the source code, and information on the syntax structure of the source code
Source code analysis device for parallel programs.
제 1 항에 있어서,
상기 결함에 관한 정보는
상기 소스 코드내의 상기 결함의 위치 정보, 상기 결함의 유형, 상기 결함의 원인에 관한 정보, 상기 결함이 발생하게 된 상기 소스 코드의 흐름에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 장치.
The method of claim 1,
Information on the above defects
Including at least one of information on the location of the defect in the source code, the type of the defect, information on the cause of the defect, and information on the flow of the source code that caused the defect
Source code analysis device for parallel programs.
제 1 항에 있어서,
상기 글로벌 메모리는 전역 변수의 값 또는 동적으로 힙에 할당된 영역의 값을 저장하는
병렬 프로그램의 소스 코드 분석 장치.
The method of claim 1,
The global memory stores the values of global variables or dynamically allocated areas on the heap.
Source code analysis device for parallel programs.
제 1 항에 있어서,
상기 접근 제어를 동기화하는 명령은 공유 자원 공간에 대한 접근 시간을 제어하는 명령인
병렬 프로그램의 소스 코드 분석 장치.
The method of claim 1,
The command to synchronize the access control is a command to control the access time to the shared resource space.
Source code analysis device for parallel programs.
병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 단계;
상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-;
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여, 상기 결정된 구문을 기호 실행하고, 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계; 및
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여, 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며,
상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신하는
병렬 프로그램의 소스 코드 분석 방법.
Extracting information necessary for analysis from the source code of the parallel program;
Based on the extracted information and information for synchronizing access control to shared resources, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs Adding the determined syntax to the work list, the work list including a syntax area storing a syntax and a memory area storing execution results of the syntax of the syntax area;
Based on the information stored in the memory area of the work list for the thread to which the determined syntax belongs and information on the shared resource stored in the global memory, the determined syntax is symbolically executed, and the symbol execution result is displayed. Storing in the memory area or the global memory of a work list for a thread to which the determined statement belongs; And
And detecting information on a defect that may cause a problem in the source code, based on a state of the memory area of a work list for a thread to which the determined statement belongs and a state of the global memory,
In the storing step, when the determined syntax is a command for synchronizing access control to the shared resource, updating information for synchronizing the access control according to execution of the command
How to analyze the source code of parallel programs.
제 6 항에 있어서,
상기 분석에 필요한 정보는
상기 소스 코드의 라인 수, 상기 소스 코드의 위치 정보 및 상기 소스 코드의 구문 구조에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 방법.
The method of claim 6,
The information required for the above analysis is
Including at least one of the number of lines of the source code, location information of the source code, and information on the syntax structure of the source code
How to analyze the source code of parallel programs.
제 6 항에 있어서,
상기 저장하는 단계는
상기 워크 리스트가 2개 이상인 경우 임의로 소정의 워크 리스트를 선택하는
병렬 프로그램의 소스 코드 분석 방법.
The method of claim 6,
The storing step
If there are two or more work lists, randomly selecting a predetermined work list
How to analyze the source code of parallel programs.
제 6 항에 있어서,
상기 결함에 관한 정보는
상기 소스 코드내의 상기 결함의 위치 정보, 상기 결함의 종류, 상기 결함의 원인에 관한 정보, 상기 결함이 발생하게 된 상기 소스 코드의 흐름에 관한 정보 중 적어도 하나를 포함하는
병렬 프로그램의 소스 코드 분석 방법.
The method of claim 6,
Information on the above defects
Including at least one of information on the location of the defect in the source code, the type of the defect, information on the cause of the defect, and information on the flow of the source code in which the defect occurs
How to analyze the source code of parallel programs.
제 6 항에 있어서,
상기 글로벌 메모리는 전역 변수의 값 또는 동적으로 힙에 할당된 영역의 값을 저장하는
병렬 프로그램의 소스 코드 분석 방법.
The method of claim 6,
The global memory stores the values of global variables or dynamically allocated areas on the heap.
How to analyze the source code of parallel programs.
제 6 항에 있어서,
상기 접근 제어를 동기화하는 명령은 공유 자원 공간에 대한 접근 시간 제어 명령인
병렬 프로그램의 소스 코드 분석 방법.
The method of claim 6,
The command for synchronizing the access control is an access time control command for the shared resource space.
How to analyze the source code of parallel programs.
병렬 프로그램의 소스 코드로부터 분석에 필요한 정보를 추출하는 단계;
상기 추출된 정보 및 공유 자원에 대한 접근 제어를 동기화하기 위한 정보에 기초하여 상기 병렬 프로그램의 실행 흐름을 시뮬레이션 하여 상기 소스 코드 중 다음에 실행될 구문을 결정하고, 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트에 상기 결정된 구문을 추가하는 단계- 상기 워크 리스트는 구문을 저장하는 구문 영역 및 상기 구문 영역의 구문의 실행 결과를 저장하는 메모리 영역을 포함함-;
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역에 저장되어 있는 정보 및 글로벌 메모리에 저장되어 있는 상기 공유 자원에 대한 정보에 기초하여, 상기 결정된 구문을 기호 실행하고, 기호 실행한 결과를 상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역 또는 상기 글로벌 메모리에 저장하는 단계; 및
상기 결정된 구문이 속하는 쓰레드를 위한 워크 리스트의 상기 메모리 영역의 상태 및 상기 글로벌 메모리의 상태에 기초하여, 상기 소스 코드에서 문제를 일으킬 수 있는 결함에 관한 정보를 검출하는 단계를 포함하며,
상기 저장하는 단계는 상기 결정된 구문이 상기 공유 자원에 대한 접근 제어를 동기화하는 명령인 경우 상기 명령의 실행에 따라 상기 접근 제어를 동기화하기 위한 정보를 갱신하는 병렬 프로그램의 소스 코드 분석 방법을 프로세서가 수행하도록 하는 명령어를 포함하는 프로그램이 기록된
컴퓨터 판독 가능한 기록매체.
Extracting information necessary for analysis from the source code of the parallel program;
Based on the extracted information and information for synchronizing access control to shared resources, the execution flow of the parallel program is simulated to determine the next statement to be executed among the source codes, and a work list for the thread to which the determined statement belongs Adding the determined syntax to the work list, the work list including a syntax area storing a syntax and a memory area storing execution results of the syntax of the syntax area;
Based on the information stored in the memory area of the work list for the thread to which the determined syntax belongs and information on the shared resource stored in the global memory, the determined syntax is symbolically executed, and the symbol execution result is displayed. Storing in the memory area or the global memory of a work list for a thread to which the determined statement belongs; And
And detecting information on a defect that may cause a problem in the source code, based on a state of the memory area of a work list for a thread to which the determined statement belongs and a state of the global memory,
In the storing step, if the determined syntax is a command for synchronizing access control to the shared resource, the processor performs a source code analysis method of a parallel program updating information for synchronizing the access control according to execution of the command. A program containing instructions to cause
Computer-readable recording medium.
KR1020190002270A 2019-01-08 2019-01-08 Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor KR102185294B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190002270A KR102185294B1 (en) 2019-01-08 2019-01-08 Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190002270A KR102185294B1 (en) 2019-01-08 2019-01-08 Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor

Publications (2)

Publication Number Publication Date
KR20200086093A KR20200086093A (en) 2020-07-16
KR102185294B1 true KR102185294B1 (en) 2020-12-01

Family

ID=71839670

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190002270A KR102185294B1 (en) 2019-01-08 2019-01-08 Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor

Country Status (1)

Country Link
KR (1) KR102185294B1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112328334A (en) * 2020-10-30 2021-02-05 腾讯科技(深圳)有限公司 Message interaction-based card punching method and device and computer readable storage medium

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100205071B1 (en) 1996-05-02 1999-06-15 정선종 Method for recognizing execution errors of a parallel program
JP2016170707A (en) 2015-03-13 2016-09-23 株式会社東芝 Control program division apparatus, control program division method, computer program, and division source code production method

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101862799B1 (en) * 2011-12-12 2018-05-31 삼성전자주식회사 Memory controller and memory control method
KR20140147318A (en) * 2013-06-19 2014-12-30 한국전자통신연구원 Apparatus and method for detecting concurrency error of parallel program for multicore
KR101507469B1 (en) 2015-01-06 2015-04-03 (주)싸이버텍 Method for providing source code analysis service
KR20180120966A (en) * 2017-04-28 2018-11-07 코드마인드(주) Method and device for defect tracking

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100205071B1 (en) 1996-05-02 1999-06-15 정선종 Method for recognizing execution errors of a parallel program
JP2016170707A (en) 2015-03-13 2016-09-23 株式会社東芝 Control program division apparatus, control program division method, computer program, and division source code production method

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112328334A (en) * 2020-10-30 2021-02-05 腾讯科技(深圳)有限公司 Message interaction-based card punching method and device and computer readable storage medium

Also Published As

Publication number Publication date
KR20200086093A (en) 2020-07-16

Similar Documents

Publication Publication Date Title
US6954747B1 (en) Methods for comparing versions of a program
US6593940B1 (en) Method for finding errors in multithreaded applications
US6922827B2 (en) Iterative software development environment with prioritized build rules
US10489150B2 (en) Software dependency shading
US7530056B1 (en) Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
CN107704382B (en) Python-oriented function call path generation method and system
US7844971B2 (en) Method and apparatus for detecting cross-thread stack access in multithreaded programs
US7536678B2 (en) System and method for determining the possibility of adverse effect arising from a code change in a computer program
US20110302565A1 (en) Implicit workspace dependencies
US8276118B2 (en) Depicting changes to structures in an integrated development environment
US9785416B2 (en) Presenting a custom view in an integrated development environment based on a variable selection
CN111796831A (en) Compiling method and device for multi-chip compatibility
JP2004530236A (en) Verification Language Synthesis
JPH07191865A (en) Analysis method of interblock in operating system
CN109614325A (en) A kind of method and device, electronic equipment and the storage medium of determining control property
CN112860312A (en) Method and device for detecting item dependency relationship change
KR102185294B1 (en) Apparatus and method for analyzing source code of concurrent program and computer readible storage medium therefor
US8769498B2 (en) Warning of register and storage area assignment errors
US20140095937A1 (en) Latent defect indication
CN105550575A (en) Method and device for obtaining un-exported function address and data structure offset
JP2019109688A (en) Software evaluation system
KR102156845B1 (en) Apparatus and method for performing symbolic execution
US7185318B1 (en) Method, system and computer program for comparing a first specification with a second specification
CN116361182B (en) Symbol execution method for error state guidance
JP2006092149A (en) Document file copy movement monitoring system, method and program

Legal Events

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