KR102096017B1 - 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템 - Google Patents

추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템 Download PDF

Info

Publication number
KR102096017B1
KR102096017B1 KR1020180151155A KR20180151155A KR102096017B1 KR 102096017 B1 KR102096017 B1 KR 102096017B1 KR 1020180151155 A KR1020180151155 A KR 1020180151155A KR 20180151155 A KR20180151155 A KR 20180151155A KR 102096017 B1 KR102096017 B1 KR 102096017B1
Authority
KR
South Korea
Prior art keywords
unit
vector
bug
source code
name
Prior art date
Application number
KR1020180151155A
Other languages
English (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 KR1020180151155A priority Critical patent/KR102096017B1/ko
Application granted granted Critical
Publication of KR102096017B1 publication Critical patent/KR102096017B1/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
    • 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

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)
  • Stored Programmes (AREA)

Abstract

본 발명은 소스코드를 대상으로 서로 다른 두 개의 벡터를 생성하고, 두 벡터의 조합을 머신러닝으로 분석하여 버그 포함 여부를 분류하는 시스템 및 방법에 관한 기술로서, 진단 대상 소스코드를 입력받는 코드입력부와, 코드입력부가 입력받은 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 계층화부와, 구문트리 변환부에서 변환된 추상 구문 트리를 부모 노드 및 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 직렬배치부와, 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출한 후, 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 명칭추출부와, 제1벡터와 제2벡터를 병합하는 병합부와, 병합부에서 병합된 벡터데이터 및 머신러닝을 이용하여 소스코드의 버그 포함 여부를 분류하는 버그진단부를 포함한다.

Description

추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템 {METHOD AND SYSTEM FOR PREDICTING SOFTWARE BUGS BY EMBEDDING SOURCE CODE BASED ON AN ABSTRACT SYNTAX TREE}
본 발명은 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템에 관한 것으로서, 보다 상세하게는 소스코드를 대상으로 서로 다른 두 개의 벡터를 생성하고, 두 벡터의 조합을 머신러닝으로 분석하여 버그 포함 여부를 분류하는 시스템 및 방법에 관한 기술이다.
현대 소프트웨어는 규모가 커지고 복잡해져 완전한 안정성을 보장하기가 어려워졌다. 소프트웨어의 안정성을 저해하는 요인 중 하나는 소스코드의 버그이다. 소스코드의 버그를 바로잡기 위해서는 많은 코드를 검토해야 하고, 버그를 방지하기 위해 수많은 테스트 케이스를 마련하여 테스트를 실시해야 한다. 소프트웨어 테스트는 전체 소프트웨어 개발 비용 중 절반을 차지할 정도로 소프트웨어 개발에서 높은 비중을 차지한다.
최근 소프트웨어 버그 예측 분야에서 활발하게 연구되고 있는 기술은 코드복잡도에 관련된 피쳐(feature)(Halstead features, CK features)와, 코드의 텍스트 정보 및 커밋 정보를 이용하는 머신러닝 분류기(Naive Bayes, Support Vector Machine, Decision Tree 등)로 분류된다. 그러나 피쳐를 사용하는 경우 소스코드의 내용 및 구조적 정보를 반영하지 못하고, 수작업으로 피쳐를 제작해야 하는 수고가 발생한다.
등록특허공보 제10-1696694호
이에 본 발명은 상기와 같은 종래의 제반 문제점을 해소하기 위해 제안된 것으로, 본 발명의 목적은 소스코드를 대상으로 서로 다른 두 개의 벡터를 생성하고, 두 벡터의 조합을 머신러닝으로 분석하여 버그 포함 여부를 분류하는 시스템 및 방법을 제공하기 위한 것이다.
상기와 같은 목적을 달성하기 위하여 본 발명의 기술적 사상에 의한 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 시스템은 진단 대상 소스코드를 입력받는 코드입력부; 상기 코드입력부가 입력받은 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 계층화부; 상기 구문트리 변환부에서 변환된 추상 구문 트리를 부모 노드 및 상기 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 직렬배치부; 상기 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출한 후, 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 명칭추출부; 상기 제1벡터와 상기 제2벡터를 병합하는 병합부; 및 상기 병합부에서 병합된 벡터데이터 및 머신러닝을 이용하여 상기 소스코드의 버그 포함 여부를 분류하는 버그진단부를 포함하는 것을 특징으로 한다.
또한, 상기 직렬배치부는 부모 노드와 자식 노드의 그룹을 나열하여 직렬화 하는 것을 특징으로 할 수 있다.
또한, 상기 직렬배치부는 직렬화된 노드를 CBOW 방식으로 워드임베딩하는 것으로 상기 제1벡터를 생성하는 것을 특징으로 할 수 있다.
또한, 상기 특징정보에는 클래스의 호출, 클래스의 이름, 메소드의 호출, 메소드의 이름이 포함되는 것을 특징으로 할 수 있다.
또한, 상기 명칭추출부는 이름정보를 카멜케이스 파싱 후 GloVE 모델을 이용하는 것을 특징으로 할 수 있다.
또한, 상기 명칭추출부는 상기 이름정보의 카멜케이스 파싱 시 파싱 단어를 최대 3개로 제한하는 것을 특징으로 할 수 있다.
또한, 상기 버그진단부는 버그 포함 여부 분류 시 이진분류(Binary Classification) 방법을 더 이용하는 것을 특징으로 할 수 있다.
또한, 상기 버그진단부가 이용하는 머신러닝은 합성곱신경망(convolution neural network)인 것을 특징으로 할 수 있다.
한편, 상기와 같은 목적을 달성하기 위하여 본 발명의 기술적 사상에 의한 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법은 코드입력부가 진단 대상 소스코드를 입력받는 단계; 계층화부가 상기 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 단계; 직렬배치부가 상기 추상 구문 트리를 부모 노드 및 상기 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 단계; 명칭추출부가 상기 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출하는 단계; 상기 명칭추출부가 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 단계; 병합부가 상기 제1벡터와 상기 제2벡터를 병합하는 단계; 및 버그진단부가 상기 병합부에서 병합된 벡터데이터 및 머신러닝을 이용하여 상기 소스코드의 버그 포함 여부를 분류하는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 직렬배치부가 제1벡터를 생성하는 단계는, 부모 노드와 자식 노드의 그룹을 나열하여 직렬화 하는 단계; 상기 직렬화된 노드를 CBOW 방식으로 워드임베딩하는 것으로 제1벡터를 생성하는 단계를 포함하는 것을 특징으로 할 수 있다.
또한, 상기 특징정보에는 클래스의 호출, 클래스의 이름, 메소드의 호출, 메소드의 이름이 포함되는 것을 특징으로 할 수 있다.
또한, 상기 명칭추출부가 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 단계 전, 상기 명칭추출부가 상기 이름정보를 카멜케이스 파싱하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
또한, 상기 버그진단부가 상기 소스코드의 버그 포함 여부를 분류하는 단계는, 버그 포함 여부 분류 시 이진분류(Binary Classification) 방법을 더 이용하는 것을 특징으로 할 수 있다.
또한, 상기 머신러닝은 합성곱신경망(convolution neural network)인 것을 특징으로 할 수 있다.
본 발명에 의한 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템에 따르면,
첫째, 소스코드의 잠재적인 버그를 자동으로 예측 가능하여 개발자와 프로젝트의 전체 비용을 줄일 수 있다.
둘째, 추상 구문 트리를 부모 노드와 자식 노드를 그룹화 하여 직렬화하기 때문에 직렬화된 노드에서도 추상 구문 트리의 계측 특징이 나타나게 된다.
도 1은 본 발명의 실시예에 따른 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 시스템의 구성도.
도 2는 소스코드가 추상 구문 트리로 변환되는 예시를 나타내는 도면.
도 3은 직렬배치부가 추상 구문 트리의 노드를 직렬화하는 과정을 나타내는 도면.
도 4는 직렬화된 노드를 Word2Vec의 CBOW 방식으로 워드임베딩하여 벡터로 변환하는 과정을 나타낸 도면.
도 5는 명칭추출부가 이름정보를 카멜케이스 파싱하고, GloVE 모델을 이용하여 벡터화 하는 과정을 나타낸 도면.
도 6은 제1벡터 및 제2벡터가 결합되는 특징을 나타내는 도면.
도 7은 버그진단부가 병합된 벡터를 머신러닝에 입력하여 버그 포함 여부를 분류하는 과정을 나타낸 도면.
도 8은 본 발명의 실시예에 따른 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법의 순서도.
첨부한 도면을 참조하여 본 발명의 실시예들에 의한 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템에 대하여 상세히 설명한다. 본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
또한, 다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
본 발명의 실시예에 따른 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템은 소스코드를 대상으로 두 개의 벡터를 생성하고, 두 벡터의 조합을 분석하여 버그 포함 여부를 분류하는 것이 특징이다. 두 개의 벡터 생성 방법 중 첫 번째는 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환 후, 노드를 직렬로 배열하여 제1벡터를 생성하는 방법이고, 두 번째는 함수 이름 및 호출, 클래스 이름 및 호출과 관련된 노드를 GloVE(Global Vectors for Word Representation) 모델을 이용하여 제2벡터를 생성하는 방법이다.
도 1을 참조하면, 이 실시예는 진단 대상 소스코드를 입력받는 코드입력부(110); 코드입력부(110)가 입력받은 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 계층화부; 구문트리 변환부(120)에서 변환된 추상 구문 트리를 부모 노드 및 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 직렬배치부(140); 상기 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출한 후, 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 명칭추출부(150); 제1벡터와 제2벡터를 병합하는 병합부(160); 및 병합부(160)에서 병합된 벡터데이터 및 머신러닝을 이용하여 소스코드의 버그 포함 여부를 분류하는 버그진단부(180)를 포함한다.
코드입력부(110)는 버그 포함 여부가 분류될 소스코드를 입력받는다. 소스코드는 전자파일 형태로 구성될 수 있다.
도 2를 참조하면, 계층화부는 소스코드를 추상 구문 트리로 변환한다. 추상 구문 트리의 각 노드는 소스코드에서 발생되는 구조체를 나타낸다. 구문이 추상적이라는 의미는 실제 구문에서 나타나는 모든 세세한 정보를 나타내지는 않음을 의미한다. 소스코드의 추상 구문 트리 변환에는 JavaParser가 이용될 수 있다.
도 3을 참조하면, 직렬배치부(140)는 워드임베딩을 위해 N-ary 트리, 즉 계층적인 추상 구문 트리를 직렬화 한다. 이것은 버그진단부(180)가 이용하는 머신러닝이 합성곱신경망(convolution neural network)인 경우, 가변적인 형태를 가지는 추상 구문 트리는 입력으로 이용될 수 없기 때문이다.
구체적으로, 추상 구문 트리를 부모 노드 및 부모 노드와 연결된 자식 노드를 그룹짓고, 부모 노드와 자식 노드의 그룹을 나열하여 직렬화한다.
노드 직렬화 특징을 설명하기 위해 도면에 최상위 계층에 위치한 노드부터 다음 계층에 위치한 노드 순서로 넘버링을 하였다.
노드1은 다음 계층의 노드2, 노드3, 노드4와 연결된다. 이때, 노드1이 부모 노드가 되고, 노드2 내지 노드 4가 자식 노드가 된다. 노드1 내지 노드4는 한 그룹(적색 점선)이 되어 직렬로 배열된다. 직렬화 시 부모 노드가 가장 먼저 배치되고, 다음에 자식 노드가 배열된다.
노드2는 다음 계층의 노드5 및 노드6과 연결된다. 노드2, 노드5 및 노드6은 한 그룹(청색 점선)을 형성하며, 부모 노드는 노드2가 된다. 노드2의 그룹은 노드1의 그룹 후에 직렬로 나열된다.
직렬화된 노드는 그룹 정보를 포함하기 위해 앞서 자식 노드로서 등장한 노드가 다음에 부모 노드로서 다시 등장할 수 있다(노드2 및 노드4 참조). 이로써 직렬화된 노드는 추상 구문 트리에서 나타나는 계층 관계를 그대로 포함하게 된다.
도 4를 참조하면, 직렬배치부(140)는 직렬화된 노드를 Word2Vec의 CBOW 방식으로 워드임베딩하여 제1벡터를 생성한다. CBOW 방식으로 워드임베딩된 결과물로 도출되는 벡터는 50차원의 크기를 가진다. 이 실시예는 하나의 소스코드 파일에서 나타날 수 있는 벡터의 최대 개수를 600개로 설정하고, 600개를 넘지 않으면 0 벡터 처리, 600개를 넘으면 삭제 처리를 실시하였다.
명칭추출부(150)는 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출한 후, 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환한다. 특징정보에는 클래스의 호출, 클래스의 이름, 메소드의 호출, 메소드의 이름이 포함된다. 반면, 주석 등 의미의 중요도가 낮은 노드는 제거된다.
명칭추출부(150)는 특징정보를 포함하는 노드를 선별한 후, 선별된 노드의 이름정보를 추출한다. 이름정보는 클래스, 메소드의 선언과 호출 시 사용되는 명칭이 된다.
도 5를 참조하면, 명칭추출부(150)는 각각의 이름정보를 카멜케이스(camel case) 파싱(parsing)한다. 카멜케이스는 여러 단어가 간격 없이 결합되어있는 경우, 중간에 배치된 단어의 첫 번째 문자를 대문자로 표기하여 단어에 식별력을 부여하는 방법이다. 즉, 카멜케이스 파싱은 여러 단어가 결합되어 구성된 이름정보를 단어별로 나누는 작업이 된다. 명칭추출부(150)는 이름정보의 카멜케이스 파싱 시 파싱 단어를 최대 3개로 제한한다.
이름정보는 string 포맷의 데이터지만, 머신러닝에 데이터를 입력하기 위해서는 이 정보를 숫자로 변환해야한다. 따라서 명칭추출부(150)는 카멜케이스 파싱된 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환한다. 이 실시예의 모델은 GloVE 방식으로 학습된 것이다. 상기 모델은 트위터 데이터를 이용하는 50차원 모델인 것이 특징이다.
도 6을 참조하면, 병합부(160)는 제1벡터와 제2벡터를 병합한다. 이 실시예는 제1벡터 말단에 제2벡터를 연결하였으나, 벡터의 연결 순서와 위치는 이것으로 한정되지 않는다.
도 7을 참조하면, 버그진단부(180)는 병합부(160)에서 병합된 벡터데이터 및 머신러닝을 이용하여 소스코드의 버그 포함 여부를 분류한다. 버그진단부(180)는 버그 포함 여부 분류 시 이진분류(Binary Classification) 방법을 더 이용한다. 이 실시예는 머신러닝으로 합성곱신경망(convolution neural network)을 이용하였다.
소스코드의 벡터는 버그진단부(180)의 합성곱신경망 및 이진분류로 분석되어 버그 포함 여부가 분류된다.
이어서, 본 발명의 실시예에 따른 소프트웨어 버그 예측 방법을 설명한다.
도 8을 참조하면, 이 실시예는 코드입력부(110)가 진단 대상 소스코드를 입력받는 단계(S110); 계층화부가 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 단계(S120); 직렬배치부(140)가 추상 구문 트리를 부모 노드 및 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 단계(S130, S140); 명칭추출부(150)가 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출하는 단계(S150); 명칭추출부(150)가 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 단계(S170); 병합부(160)가 제1벡터와 제2벡터를 병합하는 단계(S180); 및 버그진단부(180)가 병합부(160)에서 병합된 벡터데이터 및 머신러닝을 이용하여 소스코드의 버그 포함 여부를 분류하는 단계(S190)를 포함한다.
이때, 직렬배치부(140)가 제1벡터를 생성하는 단계는 세부적으로, 부모 노드와 자식 노드의 그룹을 나열하여 직렬화 하는 단계(S130)와, 직렬화된 노드를 CBOW 방식으로 워드임베딩하는 것으로 제1벡터를 생성하는 단계(S140)를 포함한다.
또한, S170 단계 전에는, 명칭추출부(150)가 이름정보를 카멜케이스 파싱하는 단계(S160)가 더 포함된다.
또한, S190 단계는 버그 포함 여부 분류 시 이진분류(Binary Classification) 방법을 더 이용하고, 머신러닝은 합성곱신경망(convolution neural network)을 이용한다.
실험.
본 발명의 실시예에 따른 소프트웨어 버그 예측 방법 및 시스템의 성능 평가를 위해 실험을 실시하였다.
실험을 위해 tera-PROMISE에서 제공하는 버그 존재 여부가 기록된 데이터를 이용하였다.
일반적으로, 버그가 있는 파일의 수는 버그가 없는 파일보다 적다. 이러한 데이터 불균형은 머신러닝 모델에 악영향을 미칠 수 있으므로 데이터 수를 조절하였다. 데이터 수 조절을 위해 SMOTE(Synthetic Minority Over-sampling Technique), 단순 복사, Spread Subsample 등의 방법을 이용하였다.
이 실시예를 평가하기 위해, 보편적으로 이용되는 F-measure(F1 score)를 사용하였다.
훈련 데이터 세트는 프로젝트의 두 버전 중 낮은 버전을, 테스트 데이터 세트는 높은 버전을 선택했다.
학습 데이터의 불균형을 해소하기 위해, 훈련 데이터 세트에서만 버그가 있는 파일과 버그가 없는 파일의 수를 일치되게 하였다.
[수학식1]
Figure 112018119668116-pat00001
[수학식2]
Figure 112018119668116-pat00002
[수학식3]
Figure 112018119668116-pat00003
Figure 112018119668116-pat00004
는 버그파일을 올바로 분류한 수이고,
Figure 112018119668116-pat00005
는 버그가 없는 파일을 버그파일로 분류한 수이며,
Figure 112018119668116-pat00006
는 버그파일을 버그가 없는 파일로 분류한 수이다.
따라서 정밀도는 버그파일로 분류한 데이터 중 실제 버그가 있는 경우의 비율이고, 재현율은 전체 버그파일 중 버그가 있는 것으로 분류된 수의 비율이다. 이진 분류기에서 정밀도와 재현율은 서로 trade-off 관계에 있다. F1 score는 두 수치 모두를 이용하므로 적절한 평가 방법이라고 할 수 있다.
프로젝트명 일반임베딩 이 실시예
lucene 70.59% 75.86%
xalan 64.23% 69.84%
xerces 30.56% 33.73%
synapse 53.73% 57.61%
camel 40.42% 42.35%
표 1은 2017년 발표된 논문 Software Defect Prediction via Convolutional Neural Network(J. Li, P. He, J .Zhu, and M. R. Lyu)에서 제시된 일반임베딩 방법과, 이 실시예를 동일 조건으로 실험한 결과이다.
실험결과, 일반임베딩 방법을 이용하는 것보다 이 실시예를 이용할 때 성능이 약 4.7% 내지 10.3% 향상된 것을 확인할 수 있었다.
이상에서 본 발명의 바람직한 실시예를 설명하였으나, 본 발명은 다양한 변화와 변경 및 균등물을 사용할 수 있다. 본 발명은 상기 실시예를 적절히 변형하여 동일하게 응용할 수 있음이 명확하다. 따라서 상기 기재 내용은 다음 특허청구범위의 한계에 의해 정해지는 본 발명의 범위를 한정하는 것이 아니다.
100 : 소프트웨어 버그 예측 시스템
110 : 코드입력부 120 : 구문트리 변환부
140 : 직렬배치부 150 : 명칭추출부
160 : 병합부 180 : 버그진단부

Claims (14)

  1. 진단 대상 소스코드를 입력받는 코드입력부;
    상기 코드입력부가 입력받은 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 계층화부;
    상기 계층화부에서 변환된 추상 구문 트리를 부모 노드 및 상기 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 직렬배치부;
    상기 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출한 후, 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 명칭추출부;
    상기 제1벡터와 상기 제2벡터를 병합하는 병합부; 및
    상기 병합부에서 병합된 벡터데이터 및 머신러닝을 이용하여 상기 소스코드의 버그 포함 여부를 분류하는 버그진단부를 포함하는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  2. 제1항에 있어서,
    상기 직렬배치부는 부모 노드와 자식 노드의 그룹을 나열하여 직렬화 하는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  3. 제2항에 있어서,
    상기 직렬배치부는 직렬화된 노드를 CBOW 방식으로 워드임베딩하는 것으로 상기 제1벡터를 생성하는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  4. 제1항에 있어서,
    상기 특징정보에는 클래스의 호출, 클래스의 이름, 메소드의 호출, 메소드의 이름이 포함되는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  5. 제1항에 있어서,
    상기 명칭추출부는 이름정보를 카멜케이스 파싱 후 GloVE 모델을 이용하는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  6. 제5항에 있어서,
    상기 명칭추출부는 상기 이름정보의 카멜케이스 파싱 시 파싱 단어를 최대 3개로 제한하는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  7. 제1항에 있어서,
    상기 버그진단부는 버그 포함 여부 분류 시 이진분류(Binary Classification) 방법을 더 이용하는 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  8. 제7항에 있어서,
    상기 버그진단부가 이용하는 머신러닝은 합성곱신경망(convolution neural network)인 것을 특징으로 하는 소프트웨어 버그 예측 시스템.
  9. 코드입력부가 진단 대상 소스코드를 입력받는 단계;
    계층화부가 상기 소스코드를 추상 구문 트리(Abstract Syntax Tree)로 변환하는 단계;
    직렬배치부가 상기 추상 구문 트리를 부모 노드 및 상기 부모 노드와 연결된 자식 노드를 그룹지어 배열하는 것으로 제1벡터를 생성하는 단계;
    명칭추출부가 상기 추상 구문 트리에서 특징정보를 포함하는 노드의 이름정보를 추출하는 단계;
    상기 명칭추출부가 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 단계;
    병합부가 상기 제1벡터와 상기 제2벡터를 병합하는 단계; 및
    버그진단부가 상기 병합부에서 병합된 벡터데이터 및 머신러닝을 이용하여 상기 소스코드의 버그 포함 여부를 분류하는 단계를 포함하는 것을 특징으로 하는 소프트웨어 버그 예측 방법.
  10. 제9항에 있어서, 상기 직렬배치부가 제1벡터를 생성하는 단계는,
    부모 노드와 자식 노드의 그룹을 나열하여 직렬화 하는 단계;
    상기 직렬화된 노드를 CBOW 방식으로 워드임베딩하는 것으로 제1벡터를 생성하는 단계를 포함하는 것을 특징으로 하는 소프트웨어 버그 예측 방법.
  11. 제9항에 있어서,
    상기 특징정보에는 클래스의 호출, 클래스의 이름, 메소드의 호출, 메소드의 이름이 포함되는 것을 특징으로 하는 소프트웨어 버그 예측 방법.
  12. 제11항에 있어서, 상기 명칭추출부가 상기 이름정보를 GloVE 모델을 이용하여 제2벡터로 변환하는 단계 전,
    상기 명칭추출부가 상기 이름정보를 카멜케이스 파싱하는 단계를 더 포함하는 것을 특징으로 하는 소프트웨어 버그 예측 방법.
  13. 제9항에 있어서, 상기 버그진단부가 상기 소스코드의 버그 포함 여부를 분류하는 단계는,
    버그 포함 여부 분류 시 이진분류(Binary Classification) 방법을 더 이용하는 것을 특징으로 하는 소프트웨어 버그 예측 방법.
  14. 제13항에 있어서,
    상기 머신러닝은 합성곱신경망(convolution neural network)인 것을 특징으로 하는 소프트웨어 버그 예측 방법.
KR1020180151155A 2018-11-29 2018-11-29 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템 KR102096017B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180151155A KR102096017B1 (ko) 2018-11-29 2018-11-29 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180151155A KR102096017B1 (ko) 2018-11-29 2018-11-29 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템

Publications (1)

Publication Number Publication Date
KR102096017B1 true KR102096017B1 (ko) 2020-04-01

Family

ID=70276146

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180151155A KR102096017B1 (ko) 2018-11-29 2018-11-29 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템

Country Status (1)

Country Link
KR (1) KR102096017B1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112115428A (zh) * 2020-08-14 2020-12-22 咪咕文化科技有限公司 代码文件的混淆方法、装置、电子设备和存储介质
CN114936158A (zh) * 2022-05-28 2022-08-23 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
KR20220169778A (ko) * 2021-06-21 2022-12-28 고려대학교 산학협력단 프로그램 코드 처리 장치 및 방법
CN114936158B (zh) * 2022-05-28 2024-06-04 南通大学 一种基于图卷积神经网络的软件缺陷定位方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040194072A1 (en) * 2003-03-25 2004-09-30 Venter Barend H. Multi-language compilation
WO2011051802A1 (en) * 2009-10-27 2011-05-05 Echostar Global B.V. Embedding dynamic information in electronic devices
KR20160064930A (ko) * 2014-11-28 2016-06-08 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
KR101696694B1 (ko) 2015-08-17 2017-01-18 (주)트리니티소프트 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040194072A1 (en) * 2003-03-25 2004-09-30 Venter Barend H. Multi-language compilation
WO2011051802A1 (en) * 2009-10-27 2011-05-05 Echostar Global B.V. Embedding dynamic information in electronic devices
KR20160064930A (ko) * 2014-11-28 2016-06-08 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
US20170329694A1 (en) * 2014-11-28 2017-11-16 Fasoo. Com Co., Ltd Method for classifying alarm types in detecting source code error, computer program therefor, recording medium thereof
JP2017537400A (ja) * 2014-11-28 2017-12-14 ファスー ドット コム カンパニー リミテッドFasoo. Com Co., Ltd ソースコードの誤り検出における警報類型分類方法、そのためのコンピュータプログラム、およびその記録媒体
KR101696694B1 (ko) 2015-08-17 2017-01-18 (주)트리니티소프트 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112115428A (zh) * 2020-08-14 2020-12-22 咪咕文化科技有限公司 代码文件的混淆方法、装置、电子设备和存储介质
CN112115428B (zh) * 2020-08-14 2024-04-09 咪咕文化科技有限公司 代码文件的混淆方法、装置、电子设备和存储介质
KR20220169778A (ko) * 2021-06-21 2022-12-28 고려대학교 산학협력단 프로그램 코드 처리 장치 및 방법
KR102609946B1 (ko) * 2021-06-21 2023-12-04 고려대학교 산학협력단 프로그램 코드 처리 장치 및 방법
CN114936158A (zh) * 2022-05-28 2022-08-23 南通大学 一种基于图卷积神经网络的软件缺陷定位方法
CN114936158B (zh) * 2022-05-28 2024-06-04 南通大学 一种基于图卷积神经网络的软件缺陷定位方法

Similar Documents

Publication Publication Date Title
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
Poshyvanyk et al. Feature location using probabilistic ranking of methods based on execution scenarios and information retrieval
US8370808B2 (en) Apparatus and a method for generating a test case
Franks et al. Cacheca: A cache language model based code suggestion tool
US20150066814A1 (en) Sentiment Analysis of Data Logs
JP2015109096A (ja) 概念継承を使用した構造化および非構造化データの概念ベース分析
US11474933B2 (en) Test cycle optimization using contextual association mapping
Bittencourt et al. Improving automated mapping in reflexion models using information retrieval techniques
KR102096017B1 (ko) 추상 구문 트리를 기반으로 소스코드를 임베딩하여 소프트웨어 버그를 예측하는 방법 및 시스템
CN110109681A (zh) 不同平台间代码的转换方法及系统
CN111858323B (zh) 一种基于代码表示学习的即时软件缺陷预测方法
Misra et al. Is there a correlation between code comments and issues? an exploratory study
Shatnawi et al. An Assessment of Eclipse Bugs' Priority and Severity Prediction Using Machine Learning
Khan et al. [Retracted] A Novel Approach to Automate Complex Software Modularization Using a Fact Extraction System
CN109816038A (zh) 一种物联网固件程序分类方法及其装置
CN112487437B (zh) 一种基于用户界面特征的安卓仿冒应用检测方法及装置
CN116975881A (zh) 一种基于llvm的漏洞细粒度定位方法
CN109800147B (zh) 一种测试案例生成方法及终端设备
JP2013077124A (ja) ソフトウェアテストケース生成装置
Henderson et al. The Lispkit Manual
CN114328265A (zh) 一种软件安全性分析方法及系统
CN113900956A (zh) 测试用例的生成方法、装置、计算机设备及存储介质
Fan et al. High-frequency keywords to predict defects for android applications
Aiken et al. Measuring Improvement of F 1-Scores in Detection of Self-Admitted Technical Debt
US20230118164A1 (en) Method and apparatus for data augmentation

Legal Events

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