KR101694778B1 - 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체 - Google Patents

소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체 Download PDF

Info

Publication number
KR101694778B1
KR101694778B1 KR1020150011094A KR20150011094A KR101694778B1 KR 101694778 B1 KR101694778 B1 KR 101694778B1 KR 1020150011094 A KR1020150011094 A KR 1020150011094A KR 20150011094 A KR20150011094 A KR 20150011094A KR 101694778 B1 KR101694778 B1 KR 101694778B1
Authority
KR
South Korea
Prior art keywords
error detection
alarm
source code
alert
subtree
Prior art date
Application number
KR1020150011094A
Other languages
English (en)
Other versions
KR20160064924A (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 PCT/KR2015/012791 priority Critical patent/WO2016085272A1/ko
Publication of KR20160064924A publication Critical patent/KR20160064924A/ko
Application granted granted Critical
Publication of KR101694778B1 publication Critical patent/KR101694778B1/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/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Abstract

본 발명은 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체에 관한 것이다.
본 발명의 일측면에 따르면, 정적분석기와 연동하는 오경보 저감 장치에서 실행되며, 정적분석기에서 발생하는 오류 검출 경보 중 오경보를 저감시키기 위한 방법으로서, 1) 발생한 오류 검출 경보에 관한 경보 타입(alarm types) 정보, 경보 경로(alarm path) 정보 및 경보의 대상이 된 소스 코드 정보를 입력받는 단계- 상기 경보 타입 정보는 발생한 오류 검출 경보가 미리 설정된 경보 타입 중에서 어느 타입에 해당하는지에 관한 정보이며, 상기 경보 경로 정보는 소스 코드의 실행 경로 중에서 상기 발생한 오류 검출 경보와 관련된 실행 경로에 관한 정보임-; 2) 상기 소스 코드를 추상 구문 트리(abstract syntax tree, AST)로 변환하는 단계; 3) 상기 추상 구문 트리에서 상기 오류 검출 경보와 관련되지 않은 불요(不要) 서브트리를 제거하는 단계; 4) 상기 오류 검출 경보의 경보 타입에 대하여 미리 설정된 피쳐 패턴 세트에 근거하여, 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터를 수득하는 단계; 및 5) 수득된 상기 피쳐 벡터를 오경보 분류 정보가 미리 학습된 분류기에 입력하여 오경보를 분류하는 단계;를 포함하여 구성된 소스 코드의 오류 검출에 있어서 오경보 저감 방법이 개시된다.

Description

소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체 {FALSE ALARM REDUCING METHOD IN FINDING POTENTIAL BUG IN A SOURCE CODE, COMPUTER PROGRAM FOR THE SAME, RECORDING MEDIUM STORING COMPUTER PROGRAM FOR THE SAME}
본 발명은 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체에 관한 것으로서, 정적분석기를 이용한 소스 코드의 오류 검출에 있어서 분석 대상 소스 코드에 오류가 존재하지 않음에도 불구하고 오류가 존재하는 것으로 잘못 판단하는 오경보를 저감시켜, 오경보의 검토 및 처리에 소요되는 리소스의 낭비를 방지할 수 있도록 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체에 관한 것이다.
소스 코드에 존재하는 잠재적인 오류(bug)나 취약점을 발견하기 위해 정적분석기가 널리 사용된다. 정적분석기는 각 기능별 체커의 실행에 의해 각 체커별로 미리 정의된 오류를 검출하고, 오류가 검출된 것으로 판단하면 이에 대한 경보(alarm) 메시지를 발생한다.
그러나, 이러한 정적분석기의 분석 과정에서 오류 여부의 판단이 항상 정확하게 이뤄지지 못하는 것이 현실이며, 이로 인해 분석 대상 소스 코드에 오류가 존재하지 않음에도 불구하고 오류가 존재하는 것으로 잘못 판단하여 오경보(false alarm)를 발생하는 문제가 존재하였다.
일반적으로 소스 코드의 오류 검출 경보가 발생되면, 오류를 검토 및 처리하기 위해 다양한 리소스가 투입되어야 하므로, 이러한 오경보는 프로그램 개발 및 검수 과정에서 다양한 리소스의 낭비 요인이 되었다.
대한민국 공개특허 제10-2014-0033616호 (2014.03.19 공개)
본 발명은 상기와 같은 종래의 문제점을 감안하여 안출한 것으로서, 정적분석기를 이용한 소스 코드의 오류 검출에 있어서 분석 대상 소스 코드에 오류가 존재하지 않음에도 불구하고 오류가 존재하는 것으로 잘못 판단하는 오경보(false alarm)를 저감시켜, 오경보의 검토 및 처리에 소요되는 리소스의 낭비를 방지할 수 있도록 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체를 제공하는 것을 그 목적으로 한다.
상기와 같은 목적을 달성하기 위한 본 발명의 일측면에 따르면, 정적분석기와 연동하는 오경보 저감 장치에서 실행되며, 정적분석기에서 발생하는 오류 검출 경보 중 오경보를 저감시키기 위한 방법으로서, 1) 발생한 오류 검출 경보에 관한 경보 타입(alarm types) 정보, 경보 경로(alarm path) 정보 및 경보의 대상이 된 소스 코드 정보를 입력받는 단계- 상기 경보 타입 정보는 발생한 오류 검출 경보가 미리 설정된 경보 타입 중에서 어느 타입에 해당하는지에 관한 정보이며, 상기 경보 경로 정보는 소스 코드의 실행 경로 중에서 상기 발생한 오류 검출 경보와 관련된 실행 경로에 관한 정보임-; 2) 상기 소스 코드를 추상 구문 트리(abstract syntax tree, AST)로 변환하는 단계; 3) 상기 추상 구문 트리에서 상기 오류 검출 경보와 관련되지 않은 불요(不要) 서브트리를 제거하는 단계; 4) 상기 오류 검출 경보의 경보 타입에 대하여 미리 설정된 피쳐 패턴 세트에 근거하여, 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터를 수득하는 단계; 및 5) 수득된 상기 피쳐 벡터를 오경보 분류 정보가 미리 학습된 분류기에 입력하여 오경보를 분류하는 단계;를 포함하여 구성된 소스 코드의 오류 검출에 있어서 오경보 저감 방법이 개시된다.
바람직하게, 본 발명은, 6) 상기 5) 단계에서 오경보로 분류된 오류 검출 경보를, 해당 경보 타입에 있어서의 정적분석기의 오류 검출 경보 대상에서 삭제하는 단계;를 더욱 포함하여 구성된 것을 특징으로 한다.
바람직하게, 상기 3) 단계에서, 상기 불요(不要) 서브트리의 제거는, 오류 검출 경보와 관련된 실행 경로 상에서 실행된 구문을 제외한 다른 일반 구문을 제거하는 제1 정책과, 오류 검출 경보와 관련된 실행 경로 상에서 실행된 분기문이 아닌 다른 분기문을 제거하는 제2 정책과- 단, 오류 검출 경보와 관련된 실행 경로는 분기문의 조건 판별 결과를 포함함-, 오류 검출 경보와 관련된 실행 경로 상에서 실행된 반복문이 아닌 다른 반복문을 제거하는 제3 정책과, 오류 검출 경보와 관련된 실행 경로 상에서 호출된 함수 및 상기 함수의 실행 경로를 상기 함수를 호출하는 노드의 서브트리로 포함하는 제4 정책과, 오류 검출 경보와 관련된 실행 경로와 관계 없는 선언문을 제거하는 제5 정책 중의 적어도 어느 하나의 정책에 근거하여 이뤄지는 것을 특징으로 한다.
바람직하게, 상기 4) 단계에서, 상기 피쳐 패턴 세트는, 상기 오류 검출 경보의 특정 경보 타입에 대하여 미리 설정된 n 개의 피쳐 패턴의 세트 형태로 구성되며, 상기 피쳐 패턴은, 조건문 발생, 루프문 발생, 리턴문 발생, 브레이크(break) 또는 컨티뉴(continue)문 발생, 엑시트(exit) 또는 어서트(assert) 메소드 호출(method invocation) 발생, 널 표현(null expression) 발생, 널 값과의 비교(comparisons with a null value) 발생, 널 할당(null assignments) 발생, 널 값을 리턴하는 문(statements)의 발생 중의 어느 하나인 것을 특징으로 한다.
바람직하게, 상기 4) 단계에서, 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터(Vj(R))의 수득 과정은, 401) 상기 오류 검출 경보의 경보 타입(j)에 대하여, 하기 수학식1과 같이, n 개의 피쳐 패턴(p)의 세트 형태로 구성된 피쳐 패턴 세트(P)를 정의하는 단계;
[수학식1]
P = {p1, p2, ..., pn}
402) 하기 수학식2와 같이, 추상 구문 트리 상의 임의의 노드 d에 대한 n 차원의 패턴 만족 벡터(v(P,d))를 정의하는 단계;
[수학식2]
Figure 112015007249709-pat00001
(단, S(d,pi)는 임의의 노드 d 또는 노드 d를 루트로 하는 서브트리가 i 번째 피쳐 패턴(pi)에 매칭되는지 여부를 나타내는 인자로서, 하기 수학식3과 같이 정의되며, i 번째 피쳐 패턴(pi)은 단일 노드 또는 서브트리일 수 있음
[수학식3]
Figure 112015007249709-pat00002
)
403) 하기 수학식4와 같이, 추상 구문 트리 상의 임의의 노드 D에 대한 피쳐 벡터(V(P,D))를 정의하는 단계; 및
[수학식4]
Figure 112015007249709-pat00003
(단, d1,...,dm은 임의의 노드 D의 자식 노드들이며,
V(P,d1)...V(P,dm) 는 자식 노드 d1,...,dm에 대하여 상기 수학식4를 통해 구한 피쳐 벡터이며,
v(P,D)는 임의의 노드 D에 대한 n 차원의 패턴 만족 벡터임)
404) 하기 수학식5를 이용하여, 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터(Vj(R))를 수득하는 단계;를 포함하여 구성된 것을 특징으로 한다.
[수학식5]
Figure 112015007249709-pat00004
(단, R은 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리의 루트 노드로서 상기 수학식4의 노드 D에 대응하며,
j는 발생한 오류 검출 경보에 관한 경보 타입을 나타내는 인자임)
바람직하게, 상기 5) 단계의 분류기는 SVM(Support Vector Machine)이며, 오류 검출 경보에 관한 경보 타입 별로 생성되는 것을 특징으로 한다.
본 발명의 또 다른 일측면에 따르면, 하드웨어와 결합되어 상기 소스 코드의 오류 검출에 있어서 오경보 저감 방법을 실행시키기 위하여 매체에 저장된 컴퓨터 프로그램이 개시된다.
본 발명의 또 다른 일측면에 따르면, 상기 소스 코드의 오류 검출에 있어서 오경보 저감 방법을 컴퓨터에서 실행하기 위한 컴퓨터 프로그램이 기록된, 컴퓨터로 판독 가능한 기록 매체가 개시된다.
이와 같은 본 발명에 따르면, 정적분석기를 이용한 소스 코드의 오류 검출에 있어서 분석 대상 소스 코드에 오류가 존재하지 않음에도 불구하고 오류가 존재하는 것으로 잘못 판단하는 오경보(false alarm)를 저감시킬 수 있으며, 이에 따라 오경보의 검토 및 처리에 소요되는 리소스의 낭비를 방지할 수 있다는 장점이 있다.
특히, 본 발명은, 오류 경보가 발생된 소스 코드의 구조적 특징을 이용하여 오경보 여부를 분류하므로, 오경보 분류의 정확도를 향상시킬 수 있다는 장점이 있다.
도 1은 본 발명의 일실시예에 따른 소스 코드의 오류 검출에 있어서 오경보 저감 방법을 설명하기 위한 개념도이다.
본 발명은 그 기술적 사상 또는 주요한 특징으로부터 벗어남이 없이 다른 여러가지 형태로 실시될 수 있다. 따라서, 본 발명의 실시예들은 모든 점에서 단순한 예시에 지나지 않으며 한정적으로 해석되어서는 안 된다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는 데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "구비하다", "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시예를 상세히 설명하되, 도면 부호에 관계없이 동일하거나 대응하는 구성 요소는 동일한 참조 번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 본 발명을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
도 1은 본 발명의 일실시예에 따른 소스 코드의 오류 검출에 있어서 오경보 저감 방법을 설명하기 위한 개념도이다.
본 실시예의 발명은, 정적분석기와 연동하는 오경보 저감 장치에서 실행되며, 정적분석기에서 발생하는 오류 검출 경보 중 오경보를 저감시키기 위한 방법이다.
일예로, 상기 오경보 저감 장치는 오경보 저감 방법을 실행하는 컴퓨팅 수단 또는 그 기능 모듈로 이해될 수 있으며, 정적분석기에 연동 모듈 형태로 구현되거나, 내부 모듈 형태로 구현될 수 있다.
본 실시예의 오경보 저감 장치는 공지의 다양한 정적분석기와 연동한다. 일예로, 정적분석기는 문법기반(Syntactic) 분석 또는 의미기반(Semantic) 분석 방식의 다양한 상용 제품들이 공지된 바 있으며, 그 상세한 설명은 생략한다.
S1 단계에서, 오경보 저감 장치는, 발생한 오류 검출 경보에 관한 경보 타입(alarm type) 정보, 경보 경로(alarm path) 정보 및 경보의 대상이 된 소스 코드 정보를 입력받는다. 일예로, 상기 입력은 오경보 저감 장치의 입력 요청 또는 정적분석기의 설정에 근거하여, 오경보 저감 장치와 연동하는 정적분석기가 오경보 저감 장치로 상기 각 정보를 입력 제공하거나, 다른예로, 상기 각 정보가 기록된 파일을 사용자가 오경보 저감 장치가 독출 가능하도록 입력하는 방식으로 이뤄질 수 있다.
상기 경보 타입 정보는 발생한 오류 검출 경보가 미리 설정된 경보 타입 중에서 어느 타입에 해당하는지에 관한 정보이며, 상기 경보 경로 정보는 소스 코드의 실행 경로 중에서 상기 발생한 오류 검출 경보와 관련된 실행 경로에 관한 정보이다.
정적분석기는 각 기능별 체커의 실행에 의해 각 체커별로 미리 정의된 기준에 근거하여 분석 대상 소스 코드의 오류 여부를 검출하고, 오류가 검출된 것으로 판단하면 이에 대한 특정한 경보(alarm)를 발생한다.
이때, 상기 경보는 검출된 오류에 대하여 체커에 미리 설정된 특정 경보 메시지를 출력하는 방식으로 이뤄진다. 각 경보 메시지는 기본적으로 특정 체커에 종속되어 있으며, 일반적으로 소스 코드의 특징이나 형태, 혹은 실행 경로 상의 특징을 반영하고 있지는 않다.
하나의 '경보 타입'은 동일한 경보 메시지를 가진다. 일예로, 하나의 체커는 하나의 경보 메시지를 발생시키며, 하나의 '경보 타입'을 정의하는 것으로 이해될 수 있다.
일예로, 상기 '경보 타입'은 'general null dereference', 'dereferencing of an unchecked null value' 및 'dereferencing of a returned null value' 등을 그 예로 들 수 있으며, 이외에도 다양한 경보 타입이 설정될 수 있다.
일예로, 상기 경보 타입(alarm types) 별로 후술하는 피쳐 패턴 세트가 정의된다.
S2 단계에서, 오경보 저감 장치는, 상기 소스 코드를 추상 구문 트리(abstract syntax tree, AST)로 변환한다.
추상 구문 트리(abstract syntax tree, AST)는 프로그래밍 언어로 작성된 소스 코드의 추상 구문 구조의 트리로서, 이 트리의 각 노드는 소스 코드에서 발생되는 구조체를 나타낸다. 추상 구문 트리의 상세한 개념은 다수의 공지 자료를 통해 이해될 수 있으므로 상세 설명은 생략한다.
S3 단계에서, 오경보 저감 장치는, 상기 추상 구문 트리에서 상기 오류 검출 경보와 관련되지 않은 불요(不要) 서브트리를 제거한다.
불요(不要) 서브트리의 제거는 통상의 규칙 기반 기법에 의해 이뤄질 수 있다.
일예로, 상기 불요(不要) 서브트리의 제거는, 오류 검출 경보와 관련된 실행 경로 상에서 실행된 구문을 제외한 다른 일반 구문을 제거하는 제1 정책과, 오류 검출 경보와 관련된 실행 경로 상에서 실행된 분기문이 아닌 다른 분기문을 제거하는 제2 정책과- 단, 오류 검출 경보와 관련된 실행 경로는 분기문의 조건 판별 결과를 포함함-, 오류 검출 경보와 관련된 실행 경로 상에서 실행된 반복문이 아닌 다른 반복문을 제거하는 제3 정책과, 오류 검출 경보와 관련된 실행 경로 상에서 호출된 함수 및 상기 함수의 실행 경로를 상기 함수를 호출하는 노드의 서브트리로 포함하는 제4 정책과, 오류 검출 경보와 관련된 실행 경로와 관계 없는 선언문을 제거하는 제5 정책 중의 적어도 어느 하나의 정책에 근거하여 이뤄진다.
S4 단계에서, 오경보 저감 장치는, 상기 오류 검출 경보의 경보 타입에 대하여 미리 설정된 피쳐 패턴 세트에 근거하여, 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터를 수득한다.
소스 코드로부터 구해진 추상 구문 트리(abstract syntax tree, AST)는 분류기를 통한 오경보 분류를 위해 그대로 입력 데이터로 활용 하기에는 너무 크고 복잡한 구조를 갖는다. 본 실시예와 같이 소스 코드로부터 구해진 추상 구문 트리에 대하여 피쳐 벡터를 수득하고 이를 이용하여 분류기 학습을 하게 되면, 학습 시간을 줄이고 성능을 향상시키는 장점을 얻게 된다.
바람직하게, 상기 피쳐 패턴 세트는, 상기 오류 검출 경보의 특정 경보 타입에 대하여 미리 설정된 n 개의 피쳐 패턴의 세트 형태로 구성되며, 상기 피쳐 패턴은, 조건문 발생, 루프문 발생, 리턴문 발생, 브레이크(break) 또는 컨티뉴(continue)문 발생, 엑시트(exit) 또는 어서트(assert) 메소드 호출(method invocation) 발생, 널 표현(null expression) 발생, 널 값과의 비교(comparisons with a null value) 발생, 널 할당(null assignments) 발생, 널 값을 리턴하는 문(statements)의 발생 중의 어느 하나일 수 있다. 이를 표로 정리하면 다음과 같다.
구분 피쳐 패턴
1 조건문 발생
2 루프문 발생
3 리턴문 발생
4 브레이크(break) 또는 컨티뉴(continue)문 발생
5 엑시트(exit) 또는 어서트(assert) 메소드 호출(method invocation) 발생
6 널 표현(null expression) 발생
7 널 값과의 비교(comparisons with a null value) 발생
8 널 할당(null assignments) 발생
9 널 값을 리턴하는 문(statements)의 발생
바람직하게, 상기 S4 단계에서, 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터(Vj(R))의 수득 과정은 다음과 같이 실행된다.
S401 단계에서, 오경보 저감 장치는, 상기 오류 검출 경보의 경보 타입(j)에 대하여, 하기 수학식1과 같이, n 개의 피쳐 패턴(p)의 세트 형태로 구성된 피쳐 패턴 세트(P)를 정의한다.
[수학식1]
P = {p1, p2, ..., pn}
S402 단계에서, 오경보 저감 장치는, 하기 수학식2와 같이, 추상 구문 트리 상의 임의의 노드 d에 대한 n 차원의 패턴 만족 벡터(v(P,d))를 정의한다.
[수학식2]
Figure 112015007249709-pat00005
(단, S(d,pi)는 임의의 노드 d 또는 노드 d를 루트로 하는 서브트리가 i 번째 피쳐 패턴(pi)에 매칭되는지 여부를 나타내는 인자로서, 하기 수학식3과 같이 정의되며, i 번째 피쳐 패턴(pi)은 단일 노드 또는 서브트리일 수 있음
[수학식3]
Figure 112015007249709-pat00006
)
S403 단계에서, 오경보 저감 장치는, 하기 수학식4와 같이, 추상 구문 트리 상의 임의의 노드 D에 대한 피쳐 벡터(V(P,D))를 정의한다.
[수학식4]
Figure 112015007249709-pat00007
(단, d1,...,dm은 임의의 노드 D의 자식 노드들이며,
V(P,d1)...V(P,dm) 는 자식 노드 d1,...,dm에 대하여 상기 수학식4를 통해 구한 피쳐 벡터이며,
v(P,D)는 임의의 노드 D에 대한 n 차원의 패턴 만족 벡터임)
S404 단계에서, 오경보 저감 장치는, 하기 수학식5를 이용하여, 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터(Vj(R))를 수득한다.
[수학식5]
Figure 112015007249709-pat00008
(단, R은 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리의 루트 노드로서 상기 수학식4의 노드 D에 대응하며,
j는 발생한 오류 검출 경보에 관한 경보 타입을 나타내는 인자임)
상기 수학식5는, 상기 수학식4의 임의의 노드 D로서, 불요(不要) 서브트리가 제거된 상기 추상 구문 트리의 루트 노드 R을 입력하여 구해지는 식으로 이해될 수도 있다.
S5 단계에서, 오경보 저감 장치는, 수득된 상기 피쳐 벡터를 오경보 분류 정보가 미리 학습된 분류기에 입력하여 오경보를 분류한다. 이를 위해, S5 단계에서는, 상기 S404 단계에서 수득된 피쳐 벡터(Vj(R))를 오경보 분류 정보가 미리 학습된 분류기에 입력하여 오경보를 분류하게 된다.
분류기의 학습은, 예를 들어, 분류기를 생성하고자 하는 특정한 경보 타입에 해당하면서, 오경보/정상 경보 여부를 알고 있는 다수의 학습용 오류 검출 경보의 피쳐 벡터를 분류기에 미리 입력하고, 상기 학습용 오류 검출 경보의 오경보/정상 경보 여부에 관한 정보와 그 피쳐 패턴에 관한 정보에 근거하여 분류기에 공지의 기계 학습 기법에 의한 학습을 하도록 하는 방식을 이뤄질 수 있다. 도 1의 S101 단계는 각 경보 타입 별로 분류기 학습이 이뤄지는 단계를 나타낸다. 일예로, 피쳐 벡터를 분류기에 미리 입력하는 것은, 오경보/정상 경보 여부를 알고 있는 소스 코드와 해당 소스 코드에 대한 경보 타입(alarm types)을 입력하는 과정을 통해 이뤄질 수 있다.
바람직하게, 상기 분류기는 SVM(Support Vector Machine) 분류기이며, 오류 검출 경보에 관한 경보 타입 별로 SVM 분류기가 생성된다. 비선형적 피쳐 벡터를 분류하기 위해 커널 함수를 이용한 맵핑 변환 과정이 포함될 수도 있다.
일예로, 본 실시예에 의한 SVM(Support Vector Machine) 분류기는 다음과 같이 구성될 수 있다. k 개의 경보 타입에 대응하여, k 개의 분류기 모델 M1, M2, ..., Mk 를 생성할 수 있다.
SVM 분류기는 입력 공간 X로부터 제공되는 i번째 타입의 입력 데이터 Vi(Ri1), ...,Vi(Rin) 를 고차원 피쳐 공간 F로 맵핑하고, 다음과 같은 과정을 통해 최대 마진(margin) 초평면을 구한다.
[수학식6]
Figure 112015007249709-pat00009
[수학식7]
Figure 112015007249709-pat00010
(단, b 및 ai 는 초평면을 결정하기 위한 파라메터이며,
yj 는 j번째 학습 데이터 Vi(Rij)의 라벨이고 '1'(참) 또는 '-1'(거짓) 중의 어느 하나의 값을 가지며,
K 는 비선형 맵핑을 단순화하기 위한 커널 함수이며,
Figure 112015007249709-pat00011
는 맵핑 함수임)
상기 수학식7은 i번째 타입의 모델 Mi에 대응하는 최적 초평면을 나타낸다.
이러한 분류기 구성을 통해, 타입 j의 새로운 경보가 입력되는 경우, 모델 Mj 가 사용되게 된다.
일예로, 경보를 분류하기 위한 모델의 학습은 LIBSVM를 포함하는 공지 기술이 적용될 수 있다. LIBSVM의 구성은 "LIBSVM: A Library for Support Vector Machines,"(ACM Transactions on Intelligent Systems and Technology, vol. 2, no. 3, pp. 1-39, 2011., C. Chang and C. Lin) 등을 통해 참조될 수 있다.
분류기에 의한 분류 결과는, 예를 들어, SVM 분류기의 분류 결과, 오경보가 아닌 정상 경보로 분류된 경우에는 '1'의 값을 가지며, 오경보로 분류된 경우에는 '-1'의 값을 갖는 라벨을 출력하는 방식으로 이뤄질 수 있다.
한편, 다른예로서, SVM 분류기 이외의 다른 방식으로 구현되는 공지의 기계 학습 방식의 분류기가 사용될 수도 있음은 물론이다.
S6 단계에서, 오경보 저감 장치는, 상기 S5 단계에서 오경보로 분류된 오류 검출 경보를, 해당 경보 타입에 있어서의 정적분석기의 오류 검출 경보 대상에서 삭제한다. 바람직하게, 이러한 삭제 처리는 오경보 저감 장치에 미리 설정된 기준에 근거하여 자동으로 이뤄질 수 있으며, 다른 예로, 오경보로 분류된 오류 검출 경보를 사용자가 확인할 수 있도록 하고 삭제 명령을 입력받는 방식도 가능하다.
이를 통해, 상기 삭제 이후의 정적분석기의 소스 코드 분석 과정에서 오경보로 분류된 오류 검출 경보가 발생되는 것이 방지될 수 있으며, 결과적으로 오경보가 저감될 수 있다.
상기와 같은 최종 삭제 처리 과정에서 있어서, 상기 분류 결과값과 함께 해당 결과값에 대한 개연성(probability) 정보값을 더욱 제공하도록 구성될 수 있으며, 상기 개연성 정보값에 스레쉬홀드(θ)를 설정할 수 있도록 하여, 최종 삭제 분류 결과에 더욱 타당성을 부여할 수 있다.
예를 들어, 특정 오류 검출 경보가 오경보로 분류된 경우, 분류 결과값과 함께 제공된 개연성 정보값이 미리 설정된 스레쉬홀드보다 높은 경우에만 실제 오경보로 판단하여 삭제 처리되도록 구성될 수 있다.
스레쉬홀드를 높이면, 오경보 분류의 정확도는 더욱 높아지지만 오경보임에도 불구하고 오경보로 분류되지 않는 경우가 증가될 수 있으며, 스레쉬홀드를 낮추면, 정상 경보가 오경보로 분류될 확률이 높아지게 되므로, 오류 검출 경보의 건 수, 정확도에 대한 트레이드 오프 고려 등 여러가지 상황을 고려하여 적절하게 스레쉬홀드가 설정되는 것이 바람직하다.
개연성(probability) 정보값의 제공은 "Probability Estimates for Multi-class Classification by Pairwise Coupling,"(The Journal of Machine Learning Research, vol. 5, pp. 975-1005, 2004., T. Wu et al.)를 포함하는 공지 기술을 통해 이뤄질 수 있다.
본 출원인에 의해 제안된 상용 정적분석기(SPARROW)로부터 발생되는 경보를 대상으로 본 실시예에 의한 오경보 저감 방법을 실험하였다. 실험 대상의 경보는 10개의 자바 오픈 소스 코드로부터 제공되었다. 각 소스 코드는 213~3,398 개의 파일과, 15,037~292,967 개의 라인으로 구성된 것들이 사용되었다. 이들 소스 코드로부터 총 265개의 경보가 얻어졌다.
실험에는 'general null dereference', 'dereferencing of an unchecked null value' 및 'dereferencing of a returned null value' 의 3가지 '경보 타입'을 사용하였다.
피쳐 패턴으로서 상기 표 1에 예시된 피쳐 패턴들이 사용되었다.
실험 결과, 본 실시예의 오경보 저감 방법에 의해, 50%의 스레쉬홀드에서 37.33% 의 오경보가 발견 및 제거될 수 있었다.
본 발명의 실시예 들은 다양한 컴퓨터로 구현되는 동작을 수행하기 위한 프로그램과 이를 기록한 컴퓨터 판독가능 매체를 포함한다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD, USB 드라이브와 같은 광기록 매체, 플롭티컬 디스크와 같은 자기-광 매체, 및 롬, 램, 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
S1,S2,S3,S4,S5,S6,S101: 오경보 저감 방법의 각 단계

Claims (8)

  1. 정적분석기와 연동하는 오경보 저감 장치에서 실행되며, 정적분석기에서 발생하는 오류 검출 경보 중 오경보를 저감시키기 위한 방법으로서,
    1) 발생한 오류 검출 경보에 관한 경보 타입(alarm types) 정보, 경보 경로(alarm path) 정보 및 경보의 대상이 된 소스 코드 정보를 입력받는 단계- 상기 경보 타입 정보는 발생한 오류 검출 경보가 미리 설정된 경보 타입 중에서 어느 타입에 해당하는지에 관한 정보이며, 상기 경보 경로 정보는 소스 코드의 실행 경로 중에서 상기 발생한 오류 검출 경보와 관련된 실행 경로에 관한 정보임-;
    2) 상기 소스 코드를 추상 구문 트리(abstract syntax tree, AST)로 변환하는 단계;
    3) 상기 추상 구문 트리에서 상기 오류 검출 경보와 관련되지 않은 불요(不要) 서브트리를 제거하는 단계- 상기 불요 서브트리의 제거는 오류 검출 경보와 관련된 실행 경로 상에서 실행된 구문이 아닌 구문을 제거하는 정책에 근거하여 이뤄짐-;
    4) 상기 오류 검출 경보의 경보 타입에 대하여 미리 설정된 피쳐 패턴 세트에 근거하여, 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터를 수득하는 단계; 및
    5) 수득된 상기 피쳐 벡터를 오경보 분류 정보가 미리 학습된 분류기에 입력하여 오경보를 분류하는 단계;를 포함하여 구성된 소스 코드의 오류 검출에 있어서 오경보 저감 방법.
  2. 제1항에 있어서,
    6) 상기 5) 단계에서 오경보로 분류된 오류 검출 경보를, 해당 경보 타입에 있어서의 정적분석기의 오류 검출 경보 대상에서 삭제하는 단계;를 더욱 포함하여 구성된 것을 특징으로 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법.
  3. 제1항에 있어서,
    상기 3) 단계에서, 상기 불요(不要) 서브트리의 제거는,
    오류 검출 경보와 관련된 실행 경로 상에서 실행된 구문을 제외한 다른 일반 구문을 제거하는 제1 정책과,
    오류 검출 경보와 관련된 실행 경로 상에서 실행된 분기문이 아닌 다른 분기문을 제거하는 제2 정책과- 단, 오류 검출 경보와 관련된 실행 경로는 분기문의 조건 판별 결과를 포함함-,
    오류 검출 경보와 관련된 실행 경로 상에서 실행된 반복문이 아닌 다른 반복문을 제거하는 제3 정책과,
    오류 검출 경보와 관련된 실행 경로 상에서 호출된 함수 및 상기 함수의 실행 경로를 상기 함수를 호출하는 노드의 서브트리로 포함하는 제4 정책과,
    오류 검출 경보와 관련된 실행 경로와 관계 없는 선언문을 제거하는 제5 정책 중의 적어도 어느 하나의 정책에 근거하여 이뤄지는 것을 특징으로 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법.
  4. 제1항에 있어서,
    상기 4) 단계에서, 상기 피쳐 패턴 세트는,
    상기 오류 검출 경보의 특정 경보 타입에 대하여 미리 설정된 n 개의 피쳐 패턴의 세트 형태로 구성되며,
    상기 피쳐 패턴은, 조건문 발생, 루프문 발생, 리턴문 발생, 브레이크(break) 또는 컨티뉴(continue)문 발생, 엑시트(exit) 또는 어서트(assert) 메소드 호출(method invocation) 발생, 널 표현(null expression) 발생, 널 값과의 비교(comparisons with a null value) 발생, 널 할당(null assignments) 발생, 널 값을 리턴하는 문(statements)의 발생 중의 어느 하나인 것을 특징으로 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법.
  5. 제1항에 있어서,
    상기 4) 단계에서, 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터(Vj(R))의 수득 과정은,
    401) 상기 오류 검출 경보의 경보 타입(j)에 대하여, 하기 수학식1과 같이, n 개의 피쳐 패턴(p)의 세트 형태로 구성된 피쳐 패턴 세트(P)를 정의하는 단계;
    [수학식1]
    P = {p1, p2, ..., pn}
    402) 하기 수학식2와 같이, 추상 구문 트리 상의 임의의 노드 d에 대한 n 차원의 패턴 만족 벡터(v(P,d))를 정의하는 단계;
    [수학식2]
    Figure 112015007249709-pat00012

    (단, S(d,pi)는 임의의 노드 d 또는 노드 d를 루트로 하는 서브트리가 i 번째 피쳐 패턴(pi)에 매칭되는지 여부를 나타내는 인자로서, 하기 수학식3과 같이 정의되며, i 번째 피쳐 패턴(pi)은 단일 노드 또는 서브트리일 수 있음
    [수학식3]
    Figure 112015007249709-pat00013
    )
    403) 하기 수학식4와 같이, 추상 구문 트리 상의 임의의 노드 D에 대한 피쳐 벡터(V(P,D))를 정의하는 단계; 및
    [수학식4]
    Figure 112015007249709-pat00014

    (단, d1,...,dm은 임의의 노드 D의 자식 노드들이며,
    V(P,d1)...V(P,dm) 는 자식 노드 d1,...,dm에 대하여 상기 수학식4를 통해 구한 피쳐 벡터이며,
    v(P,D)는 임의의 노드 D에 대한 n 차원의 패턴 만족 벡터임)
    404) 하기 수학식5를 이용하여, 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리에 대한 피쳐 벡터(Vj(R))를 수득하는 단계;를 포함하여 구성된 것을 특징으로 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법.
    [수학식5]
    Figure 112015007249709-pat00015

    (단, R은 상기 불요(不要) 서브트리가 제거된 상기 추상 구문 트리의 루트 노드로서 상기 수학식4의 노드 D에 대응하며,
    j는 발생한 오류 검출 경보에 관한 경보 타입을 나타내는 인자임)
  6. 제1항에 있어서,
    상기 5) 단계의 분류기는 SVM(Support Vector Machine)이며, 오류 검출 경보에 관한 경보 타입 별로 생성되는 것을 특징으로 하는 소스 코드의 오류 검출에 있어서 오경보 저감 방법.
  7. 하드웨어와 결합되어 제1항 내지 제6항 중의 어느 한 항에 따른 소스 코드의 오류 검출에 있어서 오경보 저감 방법을 실행시키기 위하여 매체에 저장된 컴퓨터 프로그램.
  8. 제1항 내지 제6항 중의 어느 한 항에 따른 소스 코드의 오류 검출에 있어서 오경보 저감 방법을 컴퓨터에서 실행하기 위한 컴퓨터 프로그램이 기록된, 컴퓨터로 판독 가능한 기록 매체.
KR1020150011094A 2014-11-28 2015-01-23 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체 KR101694778B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/KR2015/012791 WO2016085272A1 (ko) 2014-11-28 2015-11-26 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20140168981 2014-11-28
KR1020140168981 2014-11-28

Publications (2)

Publication Number Publication Date
KR20160064924A KR20160064924A (ko) 2016-06-08
KR101694778B1 true KR101694778B1 (ko) 2017-01-10

Family

ID=56193851

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150011094A KR101694778B1 (ko) 2014-11-28 2015-01-23 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체

Country Status (1)

Country Link
KR (1) KR101694778B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200071413A (ko) * 2018-12-11 2020-06-19 한국전자통신연구원 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110078651A1 (en) * 2009-09-28 2011-03-31 Cadence Design Systems, Inc. Method and system for test reduction and analysis
US20120216280A1 (en) * 2011-02-18 2012-08-23 Microsoft Corporation Detection of code-based malware

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102013582B1 (ko) 2012-09-07 2019-08-23 삼성전자 주식회사 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110078651A1 (en) * 2009-09-28 2011-03-31 Cadence Design Systems, Inc. Method and system for test reduction and analysis
US20120216280A1 (en) * 2011-02-18 2012-08-23 Microsoft Corporation Detection of code-based malware

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
‘LIBSVM: A Library for Support Vector Machines’, Chih-Chung Chang; Chih-Jen Lin(2013)*

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200071413A (ko) * 2018-12-11 2020-06-19 한국전자통신연구원 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
KR102546424B1 (ko) * 2018-12-11 2023-06-23 한국전자통신연구원 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법

Also Published As

Publication number Publication date
KR20160064924A (ko) 2016-06-08

Similar Documents

Publication Publication Date Title
KR101694783B1 (ko) 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
US11568134B2 (en) Systems and methods for diagnosing problems from error logs using natural language processing
US10585780B2 (en) Enhancing software development using bug data
US9208057B2 (en) Efficient model checking technique for finding software defects
US8412653B2 (en) Knowledge extraction and transformation
US10380349B2 (en) Security analysis using relational abstraction of data structures
US8589888B2 (en) Demand-driven analysis of pointers for software program analysis and debugging
US11853421B2 (en) Method and apparatus for analyzing malicious code
Nguyen et al. Filtering noise in mixed-purpose fixing commits to improve defect prediction and localization
CN113468525B (zh) 针对二进制程序的相似漏洞检测方法及装置
US20140310688A1 (en) Using stack data and source code to rank program changes
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
WO2016085272A1 (ko) 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
US20230394369A1 (en) Tracking provenance in data science scripts
Alomari et al. Clone detection through srcClone: A program slicing based approach
KR101694778B1 (ko) 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
US20230129536A1 (en) Method and system for identifying static analysis alarms based on semantics of changed source code
US20070299705A1 (en) Method and apparatus for observation model validation
CN113392016A (zh) 对程序异常情况处理的规约生成方法、装置、设备及介质
CN113946856B (zh) 可编排插件化的大规模动态敏感数据审计方法及系统
KR102291948B1 (ko) 조건식 오류 자동 체크 장치 및 그 방법
CN113596043B (zh) 攻击检测方法、攻击检测装置、存储介质与电子设备
CN114756401B (zh) 基于日志的异常节点检测方法、装置、设备及介质
EP3910478B1 (en) Method and system for classification and ranking of delta alarms
Thessalonica et al. Research Article Intelligent Mining of Association Rules Based on Nanopatterns for Code Smells Detection

Legal Events

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

Payment date: 20191217

Year of fee payment: 4