KR102546424B1 - 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 - Google Patents

학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 Download PDF

Info

Publication number
KR102546424B1
KR102546424B1 KR1020180159129A KR20180159129A KR102546424B1 KR 102546424 B1 KR102546424 B1 KR 102546424B1 KR 1020180159129 A KR1020180159129 A KR 1020180159129A KR 20180159129 A KR20180159129 A KR 20180159129A KR 102546424 B1 KR102546424 B1 KR 102546424B1
Authority
KR
South Korea
Prior art keywords
error
code
block
data
source code
Prior art date
Application number
KR1020180159129A
Other languages
English (en)
Other versions
KR20200071413A (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 KR1020180159129A priority Critical patent/KR102546424B1/ko
Publication of KR20200071413A publication Critical patent/KR20200071413A/ko
Application granted granted Critical
Publication of KR102546424B1 publication Critical patent/KR102546424B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명에 따른 소스 코드 오류 분석 장치에 의해 수행되는 소스 코드 오류 분석 방법은, 입력받은 분석 대상 코드에 대한 전처리를 수행하여, 상기 분석 대상 코드에 상응하는 코드 블록을 생성하는 단계, 기계 학습을 통해 생성된 오류 분석기를 이용하여, 상기 코드 블록에 포함된 비문법적 오류를 분석하는 단계, 그리고 상기 코드 블록에 상기 비문법적 오류가 포함된 것으로 판단된 경우, 상기 코드 블록 및 상기 비문법적 오류의 정보를 출력하는 단계를 포함하며, 상기 오류 분석기는, 오류가 포함된 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아 기계 학습을 수행하여 생성된 것이다.

Description

학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법{MACHINE LEARNING DATA GENERATING APPARATUS, APPARATUS AND METHOD FOR ANALYZING ERRORS IN SOURCE CODE}
본 발명은 프로그램 소스 코드의 비문법적 오류를 분석하는 기술에 관한 것으로, 특히 기계 학습을 이용하여 프로그램 소스 코드의 비문법적 오류를 분석하는 기술 및 기계 학습을 위한 학습용 데이터를 생성하는 기술에 관한 것이다.
컴퓨터 분야와 같은 ICT 분야에서는, Java, C, C++ 등의 프로그래밍 언어나, HTML, BNF, NNEF 등의 디스크립티브(descriptive) 언어와 같이, 문법적 구성을 가지는 언어를 사용하여 논리적 알고리즘이나 프로그램을 작성한다. 그리고 컴파일러나 인터프리터를 통해, 작성된 언어들은 컴퓨터에서 실행되기 위한 코드로 변환된다.
프로그램 개발 과정에서 문법적 오류나 비문법적 오류가 발생할 수 있으며, 발생된 오류를 정정하여 프로그램을 완성한다.
문법적 오류는 구문 오류, 신택스 에러(syntax error)라고 하며, 프로그래밍 언어에서 사용되도록 고안된 일련의 문자열이나 문자 블록의 구문 속 오류를 의미한다. 문법적 오류는 컴파일 과정에서 검출할 수 있으며, 컴파일러나 인터프리터는 프로그래밍 언어에 따라 구문 상의 오류나 명령어 문법의 오류를 검출할 수 있다.
반면, 비문법적 오류는 논리적 오류를 포함하며, 프로그램이 동작하기는 하나, 부정확하게 동작하거나 비정상적으로 종료될 수 있는 결함을 의미한다.
개발 과정에서 문법적 오류가 없는 경우에도, 개발자가 처음 의도한 바와 같이 프로그램이 실행되지 않을 수 있으며, 이 경우 논리적 오류 등의 비문법적 오류가 발생한 것일 수 있다. 비문법적 오류는 문법적 오류와 달리 발생 즉시 개발자가 인지하기는 어려울 수 있으며, 의도치 않은 결과를 유발할 수 있다.
개발자는 전후 관계나 전체적인 흐름을 통해 비문법적 오류를 검출할 수 있으나, 컴파일러와 인터프리터는 이와 같은 기능을 처리하지 못한다. 또한 개발자의 개발 능력이나 경험이 부족할 경우, 비문법적 오류를 찾는데 소요되는 시간이 길어질 수 있다.
따라서, 기계 학습을 이용하여 프로그램 소스 코드의 비문법적 오류를 분석하고, 오류 발견 동분야의 전문가와 같은 수준의 오류 정정기능을 제공할 수 있는 기술의 개발이 필요하다.
한국 공개 특허 제10-2000-0038106호, 2000년 07월 05일 공개(명칭: 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법)
본 발명의 목적은 기계 학습을 이용하여 프로그램 소스 코드의 비문법적 오류를 찾는 것이다.
또한, 본 발명의 목적은 프로그램 소스 코드에 포함된 오류를 분석하여 문법적 및 비문법적 오류를 분석하여, 오류 및 오류의 분석 결과를 개발자에게 제공하는 것이다.
또한, 본 발명의 목적은 프로그램 개발 및 프로그램 교육 시, 디버깅에 활용할 수 있도록 하여, 개발 시간을 단축하는 것이다.
상기한 목적을 달성하기 위한 본 발명에 따른 소스 코드 오류 분석 장치에 의해 수행되는 소스 코드 오류 분석 방법은, 입력받은 분석 대상 코드에 대한 전처리를 수행하여, 상기 분석 대상 코드에 상응하는 코드 블록을 생성하는 단계, 기계 학습을 통해 생성된 오류 분석기를 이용하여, 상기 코드 블록에 포함된 비문법적 오류를 분석하는 단계, 그리고 상기 코드 블록에 상기 비문법적 오류가 포함된 것으로 판단된 경우, 상기 코드 블록 및 상기 비문법적 오류의 정보를 출력하는 단계를 포함하며, 상기 오류 분석기는, 오류가 포함된 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아 기계 학습을 수행하여 생성된 것이다.
이때, 상기 코드 블록을 생성하는 단계는, 상기 분석 대상 코드를 문장 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 분할한 후 코드값으로 변환하여, 상기 분석 대상 코드에 대한 상기 코드 블록을 생성할 수 있다.
이때, 상기 코드 블록을 생성하는 단계는, 상기 분석 대상 코드에 대한 어휘 분석을 수행하여 상기 분석 대상 코드를 상기 토큰 단위로 분할한 토큰을 생성하고, 상기 토큰을 코드값으로 변환하여 상기 코드 블록을 생성할 수 있다.
이때, 상기 코드 블록을 생성하는 단계는, 상기 토큰이 기 정의된 단어인 경우 상기 토큰을 상기 기 정의된 단어에 상응하는 코드값으로 변환하고, 상기 토큰이 변수 또는 상수인 경우 식별 토큰값 및 코드값으로 변환하여 상기 코드 블록을 생성할 수 있다.
이때, 상기 코드 블록을 생성하는 단계는, 하나의 문장 또는 복수의 연결된 문장들로 구성된 상기 코드 블록을 생성할 수 있다.
이때, 상기 코드 블록을 생성하는 단계는, 상기 코드 블록의 사이즈를 설정한 후, 상기 코드 블록의 사이즈에 상응하는 상기 코드 블록을 생성할 수 있다.
이때, 상기 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 생성하는 단계, 그리고 상기 학습용 데이터 셋을 이용하여, 상기 오류 분석기의 기계 학습을 수행하는 단계를 더 포함할 수 있다.
이때, 상기 학습용 데이터 셋을 생성하는 단계는, 블록 구성 정보를 기반으로 프로그램 소스 코드로부터 블록 데이터를 생성하는 단계, 생성된 상기 블록 데이터에 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여, 상기 오류 데이터를 생성하는 단계, 그리고 상기 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 생성하는 단계를 포함할 수 있다.
이때, 상기 블록 데이터를 생성하는 단계는, 상기 소스 코드의 어휘 분석 결과를 기반으로 상기 블록 데이터의 사이즈를 설정하고, 설정된 상기 블록 데이터의 사이즈에 상응하는 상기 블록 데이터를 생성할 수 있다.
이때, 상기 코드 블록을 생성한 후, 상기 코드 블록에 포함된 문법적 오류를 분석하는 단계를 더 포함할 수 있다.
또한, 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치는, 분석 대상 코드를 입력받는 코드 입력부, 상기 분석 대상 코드에 대한 전처리를 수행하여, 상기 분석 대상 코드에 상응하는 코드 블록을 생성하는 코드 블록 생성부, 기계 학습을 통해 생성된 오류 분석기를 이용하여, 상기 코드 블록에 포함된 비문법적 오류를 분석하는 비문법적 오류 분석부, 그리고 상기 코드 블록에 상기 비문법적 오류가 포함된 것으로 판단된 경우, 상기 코드 블록 및 상기 비문법적 오류의 정보를 출력하는 오류 정보 출력부를 포함하며, 상기 오류 분석기는, 오류가 포함된 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아 기계 학습을 수행하여 생성된 것일 수 있다.
이때, 상기 오류 분석기에 상기 학습용 데이터 셋을 입력하여 상기 기계 학습을 수행하는 기계 학습 수행부를 더 포함할 수 있다.
이때, 프로그램 소스 코드에 상응하는 블록 데이터에 오류를 추가하여 오류 데이터를 생성하고, 상기 오류 데이터 및 상기 오류의 정보를 포함하는 상기 학습용 데이터 셋을 생성하는 학습용 데이터 셋 생성부를 더 포함할 수 있다.
이때, 상기 코드 블록 생성부는, 상기 분석 대상 코드를 문장 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 분할한 후 코드값으로 변환하여, 코드 블록 사이즈에 상응하는 코드 블록을 생성할 수 있다.
이때, 상기 코드 블록 생성부는, 상기 분석 대상 코드에 대한 어휘 분석을 수행하여 상기 분석 대상 코드를 상기 토큰 단위로 분할한 토큰을 생성하고, 상기 토큰의 종류에 상응하도록 상기 토큰을 코드값으로 변환하여 상기 코드 블록을 생성할 수 있다.
이때, 상기 코드 블록에 포함된 문법적 오류를 분석하는 문법적 오류 분석부를 더 포함할 수 있다.
또한, 본 발명의 일실시예에 따른 소스 코드 오류 분석을 위한 학습용 데이터 생성 장치는, 프로그램 소스 코드와, 블록 구성 정보, 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나를 포함하는 오류 생성 정보를 입력받는 입력부, 상기 블록 구성 정보를 기반으로, 상기 프로그램 소스 코드로부터 블록 데이터를 생성하는 블록 데이터 생성부, 생성된 상기 블록 데이터에 상기 오류 정보 및 상기 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여, 오류 데이터를 생성하는 오류 데이터 생성부, 그리고 상기 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 생성하는 학습용 데이터 생성부를 포함한다.
이때, 상기 블록 데이터 생성부는, 하나의 문장 또는 복수의 연결된 문장으로 구성된 상기 블록 데이터를 생성할 수 있다.
이때, 상기 블록 데이터 생성부는, 상기 프로그램 소스 코드에 대한 어휘 분석을 수행하여 상기 프로그램 소스 코드를 토큰 단위로 분할한 토큰을 생성하고, 상기 토큰을 코드값으로 변환하여 상기 블록 데이터를 생성할 수 있다.
이때, 상기 블록 데이터 생성부는, 상기 토큰이 기 정의된 단어인 경우 상기 토큰을 상기 기 정의된 단어에 상응하는 코드값으로 변환하고, 상기 토큰이 변수 또는 상수인 경우 식별 토큰값 및 코드값으로 변환하여 상기 블록 데이터를 생성할 수 있다.
본 발명에 따르면, 기계 학습을 이용하여 프로그램 소스 코드의 비문법적 오류를 찾을 수 있다.
또한 본 발명에 따르면, 프로그램 소스 코드에 포함된 오류를 분석하여 문법적 및 비문법적 오류를 분석하여, 오류 및 오류의 분석 결과를 개발자에게 제공할 수 있다.
또한 본 발명에 따르면, 프로그램 개발 및 프로그램 교육 시, 디버깅에 활용할 수 있도록 하여, 개발 시간을 단축할 수 있다.
도 1은 본 발명의 일실시예에 따른 학습용 데이터 생성 장치 및 소스 코드 오류 분석 장치가 적용되는 환경을 개략적으로 나타낸 도면이다.
도 2는 본 발명의 일실시예에 따른 학습용 데이터 생성 장치의 구성을 나타낸 도면이다.
도 3은 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치의 구성을 나타낸 도면이다.
도 4는 본 발명의 일실시예에 따른 학습용 데이터 생성 방법을 나타낸 순서도이다.
도 5는 본 발명의 일실시예에 따른 학습용 데이터 생성 과정을 설명하기 위한 도면이다.
도 6은 본 발명의 일실시예에 따른 소스 코드 오류 분석 방법을 나타낸 순서도이다.
도 7은 본 발명의 일실시예에 따른 소스 코드 오류 분석 과정을 설명하기 위한 도면이다.
도 8은 제1 프로그램 소스 코드를 나타낸 예시도이다.
도 9는 오류가 추가된 제1 프로그램 소스 코드를 나타낸 예시도이다.
도 10은 제2 프로그램 소스 코드를 나타낸 예시도이다.
도 11은 오류가 추가된 제2 프로그램 소스 코드를 나타낸 예시도이다.
도 12는 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 블록도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시 예들을 도면에 예시하고 상세하게 설명하고자 한다.
그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가진 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 본 발명을 설명함에 있어 전체적인 이해를 용이하게 하기 위하여 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 본 발명의 일실시예에 따른 학습용 데이터 생성 장치 및 소스 코드 오류 분석 장치가 적용되는 환경을 개략적으로 나타낸 도면이다.
도 1에 도시한 바와 같이, 소스 코드 오류 분석 시스템은 소스 코드 오류 분석을 위한 학습용 데이터 생성 장치(100), 소스 코드 오류 분석 장치(200) 및 사용자 단말기(300) 중 적어도 어느 하나를 포함할 수 있다.
먼저, 소스 코드 오류 분석을 위한 학습용 데이터 생성 장치(100)는 소스 코드 오류 분석 장치(200)가 기계 학습 수행 시 사용할 학습용 데이터를 생성한다. 이하에서는 설명의 편의를 위하여, 소스 코드 오류 분석을 위한 학습용 데이터 생성 장치(100)를 학습용 데이터 생성 장치(100)로 명명한다.
기계 학습에 입력되는 학습용 데이터의 양과 그 값의 다양성은 기계 학습 데이터 모델의 정확도와 밀접한 상관관계가 있다. 복수의 다양한 데이터들을 이용하여 기계 학습을 수행할 경우, 기계 학습 데이터 모델(실행 엔진)의 정확성이 향상될 수 있다.
이때, 퍼블릭 도메인(Public domain)에 존재하거나, 실제 발생한 경우의 데이터를 학습용 데이터로 입력할 경우, 학습을 위한 양 및 다양성 측면에서 제한적일 수 있다. 일반적으로 쉽게 획득 가능한 프로그램의 소스 코드들은 대부분 오류가 포함되지 않고 정상적으로 실행되는 실행 코드들이다. 또한, 이미 공개된 오류 소스 코드들은 다양한 오류를 포함하지 않을 수 있다.
따라서, 본 발명의 일실시예에 따른 학습용 데이터 생성 장치(100)는 학습용 데이터의 양과 학습용 데이터의 다양성을 위하여, 프로그램 소스 코드에 인위적으로 오류를 추가한 학습용 데이터 셋을 생성할 수 있다.
학습용 데이터 생성 장치(100)는 프로그램 소스 코드와 오류 생성 정보를 입력받아, 오류(error)가 추가된 오류 데이터를 생성할 수 있다. 학습용 데이터 생성 장치(100)의 입력은 프로그램 소스 코드, 출력하고자 하는 블록의 구성, 오류의 종류 및 오류 생성 규칙 중 적어도 어느 하나일 수 있으며, 학습용 데이터 생성 장치(100)의 출력은 입력에 의해 생성된 블록(오류 데이터)과 오류로 구성된 복수의 인스턴스들의 집합일 수 있다.
학습용 데이터 생성 장치(100)는 프로그램 소스 코드로부터 블록 데이터를 생성하고, 생성된 블록 데이터에 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여 오류 데이터를 생성할 수 있다.
그리고 학습용 데이터 생성 장치(100)는 생성된 오류 데이터와, 해당 오류 데이터에 추가된 오류의 정보를 포함하는 학습용 데이터 셋을 생성할 수 있다. 학습용 데이터 생성 장치(100)는 생성된 학습용 데이터 셋을 데이터베이스에 저장할 수 있으며, 소스 코드 오류 분석 장치(200)로 전달할 수 있다.
여기서, 학습용 데이터 셋은 기계 학습을 수행하기 위한 입력값과, 입력값에 대한 결과값으로 구성될 수 있다. 기계 학습 수행 시 어떠한 입력값과 어떠한 출력값을 사용하는지에 따라 내부의 복잡성 및 결과의 정확성에 영향을 줄 수 있다.
학습용 데이터 셋의 입력값은 코드 블록 형태이고, 출력값은 입력값에 대한 오류 정보일 수 있다. 입력값은 프로그램 소스 코드의 블록 데이터가 고유한 코드값으로 변환되어 부호화된 것이고, 출력값은 입력값에 오류가 포함되어 있는지 여부 및 포함된 오류에 대한 정보에 관한 것일 수 있다.
다음으로 소스 코드 오류 분석 장치(200)는 분석 대상 코드를 입력받고, 기계 학습을 이용하여 분석 대상 코드에 대한 비문법적 오류를 분석하고, 오류 분석의 수행 결과를 출력할 수 있다.
소스 코드 오류 분석 장치(200)는 분석 대상 코드에 대한 전처리를 수행하여, 코드 블록을 생성할 수 있다. 그리고 소스 코드 오류 분석 장치(200) 기계 학습을 통해 생성된 오류 분석기를 이용하여 코드 블록에 포함된 비문법적 오류를 분석할 수 있다. 코드 블록에 비문법적 오류가 포함되어 있는 것으로 판단된 경우, 소스 코드 오류 분석 장치(200)는 코드 블록 및 코드 블록에 포함된 오류의 정보를 출력할 수 있다.
여기서, 오류 분석기는, 오류가 포함된 오류 데이터 및 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아, 기계 학습을 수행하여 생성된 것일 수 있으며, 실행 엔진이나 데이터 모델을 의미할 수 있다.
소스 코드 오류 분석 장치(200)는 분석 대상 코드를 문장 단위 또는 토큰 단위로 분할한 후 코드값으로 변환하여 코드 블록을 생성할 수 있다.
특히, 소스 코드 오류 분석 장치(200)는 분석 대상 코드에 대한 어휘 분석을 수행하여 분석 대상 코드를 토큰 단위로 분할하고, 토큰 단위로 분할하여 생성한 토큰의 종류에 상응하도록 토큰을 코드값으로 변환하여 코드 블록을 생성할 수 있다.
그리고 소스 코드 오류 분석 장치(200)는 토큰이 기 정의된 단어인 경우, 토큰을 기 정의된 단어에 상응하는 코드값으로 변환할 수 있다. 반면, 토큰이 변수이거나 상수인 경우, 소스 코드 오류 분석 장치(200)는 변수 또는 상수에 상응하는 식별 토큰값과 코드값으로 변환하여 코드 블록을 생성할 수 있다.
이때, 소스 코드 오류 분석 장치(200)는 하나의 문장 또는 복수의 연결된 문장들로 구성된 코드 블록을 생성할 수 있으며, 코드 블록 사이즈에 상응하는 코드 블록을 생성할 수 있다.
설명의 편의를 위하여, 소스 코드 오류 분석 장치(200)가 비문법적 오류를 분석하는 것으로 설명하였으나 이에 한정하지 않고 소스 코드 오류 분석 장치(200)는 문법적 오류를 분석할 수도 있다. 특히, 소스 코드 오류 분석 장치(200)는 분석 대상 코드의 문법적 오류를 분석하고, 분석 대상 코드에 문법적 오류가 없는 것으로 판단된 경우에만 비문법적 오류를 분석하는 형태로 구현될 수 있다.
마지막으로 사용자 단말기(300)는 소스 코드 오류 분석 장치(200)로부터 코드 블록 및 검출된 오류에 대한 정보를 수신하여 출력할 수 있다.
이때, 사용자 단말기(300)는 데스크톱(Desktop) 등 컴퓨터이거나, 스마트폰(Smart Phone), 스마트 패드(Smart Pad), 태블릿 컴퓨터(Tablet PC), 노트북(Note book), 넷북(Net book) 등의 모바일 단말일 수 있으며, 사용자 단말기(300)의 종류는 이에 한정되지 않는다.
설명의 편의를 위하여, 도 1에는 사용자 단말기(300)가 소스 코드 오류 분석 장치(200)와 통신을 수행하는 것으로 도시하였으나 이에 한정하지 않고, 사용자 단말기(300)는 학습용 데이터 생성 장치(100)와 통신을 수행할 수도 있다.
사용자 단말기(300)는 학습용 데이터 생성 장치(100)로 프로그램 소스 코드 및 오류 생성 정보 중 적어도 어느 하나를 입력할 수 있으며, 사용자 단말기(300)로부터 오류 데이터 및 오류의 정보를 포함하는 학습용 데이터 셋을 수신하여 저장할 수 있다. 그리고 사용자 단말기(300)는 학습용 데이터 생성 장치(100)로부터 수신된 학습용 데이터 셋을 소스 코드 오류 분석 장치(200)로 전달할 수 있다.
이하에서는 도 2 및 도 3을 통하여 본 발명의 일실시예에 따른 학습용 데이터 생성 장치 및 소스 코드 오류 분석 장치의 구성에 대하여 더욱 상세하게 설명한다.
도 2는 본 발명의 일실시예에 따른 학습용 데이터 생성 장치의 구성을 나타낸 도면이다.
도 2에 도시한 바와 같이, 소스 코드 오류 분석을 위한 학습용 데이터 생성 장치(100)는 입력부(110), 블록 데이터 생성부(120), 오류 데이터 생성부(130) 및 학습용 데이터 생성부(140)를 포함할 수 있다.
먼저, 입력부(110)는 프로그램 소스 코드와 오류 생성 정보를 입력받을 수 있다. 이때, 오류 생성 정보는, 블록 구성 정보, 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나를 포함할 수 있다.
그리고 블록 데이터 생성부(120)는 블록 구성 정보를 기반으로, 프로그램 소스 코드로부터 블록 데이터를 생성할 수 있다. 이때, 블록 데이터 생성부(120)는 문장 단위 또는 토큰 단위로 프로그램 소스 코드를 분할한 후, 코드값으로 변환하여 블록 데이터를 생성할 수 있다. 문장 단위로 분할하여 블록 데이터를 생성하는 경우, 블록 데이터 생성부(120)는 하나의 문장 또는 복수의 연결된 문장으로 구성된 블록 데이터를 생성할 수 있다.
또한, 블록 데이터 생성부(120)는 프로그램 소스 코드에 대한 어휘 분석을 수행하여 프로그램 소스 코드를 토큰 단위로 분할한 토큰을 생성할 수 있으며, 생성된 토큰을 코드값으로 변환하여 블록 데이터를 생성할 수 있다.
이때, 블록 데이터 생성부(120)는 토큰이 기 정의된 단어인 경우, 기 정의된 단어에 상응하는 코드값으로 변환하고, 토큰이 변수이거나 상수인 경우, 변수 또는 상수에 상응하는 식별 토큰값과 코드값으로 변환하여 블록 데이터를 생성할 수 있다.
또한, 블록 데이터 생성부(120)는 블록 데이터 사이즈에 상응하는 블록 데이터를 생성할 수 있으며, 프로그램 소스 코드의 어휘 분석 결과를 기반으로 블록 데이터 사이즈를 설정하고, 설정된 블록 데이터 사이즈에 상응하는 블록 데이터를 생성할 수 있다.
다음으로 오류 데이터 생성부(130)는 블록 데이터에 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여, 오류 데이터를 생성할 수 있다.
마지막으로, 학습용 데이터 생성부(140)는 오류 데이터 및 추가된 오류의 정보를 포함하는 학습용 데이터 셋을 생성할 수 있다. 학습용 데이터 생성부(140)는 생성된 학습용 데이터 셋을 데이터베이스에 저장하거나, 소스 코드 오류 분석 장치(200)의 입력으로 사용되도록 소스 코드 오류 분석 장치(200)로 전송할 수 있다.
도 3은 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치의 구성을 나타낸 도면이다.
도 3에 도시한 바와 같이, 소스 코드 오류 분석 장치(200)는 코드 입력부(210), 코드 블록 생성부(220), 문법적 오류 분석부(230), 비문법적 오류 분석부(240), 오류 정보 출력부(250), 학습용 데이터 셋 생성부(260) 및 기계 학습 수행부(270)를 포함할 수 있다.
먼저, 코드 입력부(210)는 분석 대상 코드를 입력받는다.
그리고 코드 블록 생성부(220)는 입력받은 분석 대상 코드에 대한 전처리를 수행한다. 코드 블록 생성부(220)는 분석 대상 코드에 상응하는 코드 블록을 생성한다.
코드 블록 생성부(220)는 분석 대상 코드를 문장 단위 또는 토큰 단위로 분할한 후, 코드값으로 변환하여 코드 블록을 생성할 수 있다. 문장 단위로 분할하여 코드 블록을 생성하는 경우, 코드 블록 생성부(220)는 하나의 문장 또는 복수의 연결된 문장들로 구성된 코드 블록을 생성할 수 있다.
그리고 코드 블록 생성부(220)는 분석 대상 코드에 대한 어휘 분석을 수행하여 분석 대상 코드를 토큰 단위로 분할한 토큰을 생성할 수 있으며, 생성된 토큰의 종류에 상응하도록 토큰을 코드값으로 변환하여 코드 블록을 생성할 수 있다.
이때, 코드 블록 생성부(220)는 코드 블록 사이즈에 상응하는 코드 블록을 생성할 수 있으며, 분석 대상 코드의 어휘 분석 결과를 기반으로 코드 블록 사이즈를 설정하고, 설정된 코드 블록 사이즈에 상응하는 코드 블록을 생성할 수 있다.
다음으로 문법적 오류 분석부(230)는 코드 블록에 포함된 문법적 오류를 분석할 수 있다.
그리고 비문법적 오류 분석부(240)는 기계 학습을 통해 생성된 오류 분석기를 이용하여, 코드 블록에 포함된 비문법적 오류를 분석할 수 있다. 여기서, 오류 분석기는, 오류가 포함된 오류 데이터 및 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아 기계 학습을 수행하여 생성된 것일 수 있으며, 비문법적 오류 분석부(240)는 코드 블록에 논리적 오류가 포함되어 있는지 여부를 판단하고, 코드 블록에 포함된 오류를 검출할 수 있다.
오류 정보 출력부(250)는 코드 블록에 문법적 오류 및 비문법적 오류 중 적어도 어느 하나를 포함하는 오류가 포함된 것으로 판단된 경우, 코드 블록 및 비문법적 오류의 정보를 출력할 수 있다.
그리고, 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치(200)는 학습용 데이터 셋 생성부(260) 및 기계 학습 수행부(270) 중 적어도 어느 하나를 포함할 수 있다.
학습용 데이터 셋 생성부(260)는 프로그램 소스 코드에 상응하는 블록 데이터에 오류를 추가하여 오류 데이터를 생성하고, 오류 데이터 및 오류의 정보를 포함하는 학습용 데이터 셋을 생성할 수 있다.
마지막으로, 기계 학습 수행부(270)는 오류 분석기에 학습용 데이터 셋을 입력하여, 기계 학습을 수행할 수 있다.
이때, 기계 학습 수행부(270)는 기계 학습을 수행하여 오류 분석기를 생성하거나, 기 생성된 오류 분석기에 학습용 데이터 셋을 입력하여 기계 학습을 수행하고, 이를 통하여 기 생성된 오류 분석기를 보정할 수 있다.
설명의 편의를 위하여, 도 2의 소스 코드 오류 분석 장치(200)가 학습용 데이터 셋 생성부(260) 및 기계 학습 수행부(270)를 포함하는 것으로 도시하였으나 이에 한정하지 않고, 학습용 데이터 셋 생성부(260) 및 기계 학습 수행부(270) 중 적어도 어느 하나는 소스 코드 오류 분석 장치(200)와 별개의 장치로 구현될 수 있다.
이하에서는 도 4 내지 도 7을 통하여 본 발명의 일실시예에 따른 학습용 데이터 생성 장치 및 소스 코드 오류 분석 장치의 동작 방법에 대하여 더욱 상세하게 설명한다.
도 4는 본 발명의 일실시예에 따른 학습용 데이터 생성 방법을 나타낸 순서도이고, 도 5는 본 발명의 일실시예에 따른 학습용 데이터 생성 과정을 설명하기 위한 도면이다.
먼저, 학습용 데이터 생성 장치(100)는 프로그램 소스 코드 및 오류 생성 정보를 입력받는다(S410).
학습용 데이터 생성 장치(100)는 학습용 데이터 셋을 생성하기 위하여 프로그램 소스 코드 및 블록 구성 정보, 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나를 포함하는 오류 생성 정보를 입력받을 수 있다.
여기서, 프로그램 소스 코드는 오류가 포함되어 있지 않고, 정상적으로 실행되는 프로그램 소스 코드일 수 있으며, 오류가 추가될 대상이 되는 소스 코드를 의미한다. 그리고 블록 구성 정보는 생성하고자 하는 블록의 구성에 대한 정보를 의미하고, 오류 정보는 추가하고자 하는 오류의 종류 정보를 포함할 수 있으며, 오류 생성 규칙 정보는 추가하고자 하는 오류를 생성하는 규칙에 관한 것일 수 있다.
그리고 학습용 데이터 생성 장치(100)는 프로그램 소스 코드로부터 블록 데이터를 생성한다(S420).
학습용 데이터 생성 장치(100)는 블록 구성 정보를 기반으로, 프로그램 소스 코드로부터 블록 데이터를 생성할 수 있다. 여기서, 블록 구성 정보는 출력하고자 하는 오류 데이터의 블록에 대한 정보로, 프로그램 소스 코드에 상응하는 문법으로 표시될 수 있다. 그리고 블록 구성 정보는 후술할 S430 단계에서 생성되는 오류 데이터의 블록 크기에 영향을 줄 수 있다.
학습용 데이터 생성 장치(100)는 프로그램 소스 코드를 복수의 코드 블록으로 분할하여 블록 데이터를 생성할 수 있다. 여기서, 블록 데이터는 프로그램 소스 코드 상에서 하나의 문장 또는 연결된 복수의 문장들로 구성될 수 있다.
이때, 학습용 데이터 생성 장치(100)는 단순히 프로그램 소스 코드를 작은 단위로 분할하여 블록 데이터를 생성하는 것이 아니라, 어휘 분석(lexical analysis)을 수행하여 각 문장들을 토큰으로 해석하고, 토큰에 상응하는 코드값으로 변환 및 부호화하여 블록 데이터를 생성할 수 있다.
학습용 데이터 생성 장치(100)는 키워드나 오퍼레이터와 같이 사전에 정의된(predefine) 단어들은 그에 상응하는 코드로 변환하고, 변수 또는 상수는 변수 또는 상수 임을 나타내는 토큰값과 그에 상응하는 코드로 변환하여 블록 데이터를 생성할 수 있다. 예를 들어, 변수 A 및 변수 B가 존재하는 경우, 학습용 데이터 생성 장치(100)는 변수 A 및 변수 B가 변수임을 나타내는 코드값과, 변수 A 및 변수 B가 서로 상이한 변수임을 나타내는 주소 등의 값으로 구분하여 부호화할 수 있다.
다음으로 학습용 데이터 생성 장치(100)는 오류를 추가한 오류 데이터를 생성한다(S430).
학습용 데이터 생성 장치(100)는 생성된 블록 데이터에, 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여 오류 데이터를 생성할 수 있다.
여기서, 오류 정보는 오류의 생성 여부 및 생성하고자 하는 오류의 종류 중 적어도 어느 하나에 대한 정보를 포함할 수 있으며, 오류 생성 규칙 정보는 입력된 프로그램 소스 코드에 대해 어느 정도의 블록 데이터(블록 인스턴스)를 생성할지, 어떠한 방식으로 오류를 생성할지, 어떠한 오류를 어느 정도 생성할지 등에 관한 정보일 수 있다.
그리고 학습용 데이터 생성 장치(100)는 오류 생성 규칙 정보를 기반으로 오류의 종류에 상응하는 오류를 블록 데이터에 추가하여 오류 데이터를 생성할 수 있다.
일반적으로 오류는 문법적 오류와 비문법적 오류로 구분될 수 있으며, 문법적 오류는 프로그래밍 언어에 따라 정해진 문법에 맞지 않도록 작성되어 발생하는 오류를 의미한다. 반면, 비문법적 오류는 변수 명이 유사한 것들이 잘못 사용되거나, 연속된 연산문들에서 문장의 상하 위치가 바뀐 경우 등으로, 컴파일 시 프로그램 오류로 검출되지는 않으나, 실행 시 개발자의 의도와 다른 결과값을 도출하는 오류를 의미한다.
학습용 데이터 생성 장치(100)는 프로그래밍 소스 코드가 작성된 언어의 문법을 이용하여 학습용 데이터 셋을 생성하며, 학습용 데이터 생성 장치(100)는 사용자가 제공하는 규칙에 의해 생성되거나 유전 알고리즘(Genetic Algorithm)과 같은 인공지능에서 사용하는 데이터 생성 방식을 이용하여 일부가 변형되거나, 에러가 추가된 오류 데이터를 생성할 수 있다. 규칙에 의한 방식은 우리가 통상적으로 생각할 수 있는 특정 변수를 다른 특정 변수로 기계적으로 교체한다든지, 특정 위치의 변수를 다른 특정 위치의 변수와 교체를 하는 것과 같이 정해진 규칙에 의해 일률적으로 바꿀 수 있는 것을 의미한다. 여기서는 Linux의 명령어 방식의 에디터에서 단순한 문법적 명령어를 통해 단어나 문장들을 치환하는 것과 같이 단순한 문법적 표현에 의해서 바꾸는 것도 포함할 수 있다.
마지막으로, 학습용 데이터 생성 장치(100)는 학습용 데이터 셋을 생성한다(S440).
여기서, 학습용 데이터 셋({블록, 오류})은, S430 단계에서 생성된 오류 데이터 및 오류 데이터에 포함된 오류의 정보로 구성될 수 있다.
오류 데이터는 블록 데이터와 실질적으로 동일한 형태일 수 있으며, 오류의 정보는 오류 데이터에 포함된 오류에 관한 정보로, 학습용 데이터 생성 장치(100)는 오류 데이터에 오류의 정보를 태깅(tagging)하여 학습용 데이터 셋으로 저장할 수 있다.
도 6은 본 발명의 일실시예에 따른 소스 코드 오류 분석 방법을 나타낸 순서도이고, 도 7은 본 발명의 일실시예에 따른 소스 코드 오류 분석 과정을 설명하기 위한 도면이다.
먼저, 소스 코드 오류 분석 장치(200)는 기계 학습을 수행하여 오류 분석기를 생성한다(S610).
소스 코드 오류 분석 장치(200)는 학습용 데이터 생성 장치(100)가 도 4의 과정을 수행하여 생성한 학습용 데이터 셋을 입력받아, 기계 학습을 수행할 수 있다.
이때, 소스 코드 오류 분석 장치(200)는 오류 데이터에 오류의 정보가 태깅된 형태의 학습용 데이터 셋({블록, 오류})을 입력받을 수 있으며, 여기서, 블록은 오류가 포함된 소스 코드인 오류 데이터를 의미하고, 오류는 오류 데이터에 포함된 오류에 관한 정보를 의미할 수 있다. 오류는 블록의 특징을 나타낸 코드로서, 반드시 오류값만을 나타내지 않고 오류의 특정값은 블록내에 오류가 없음을 나타낼 수도 있다.
기 생성된 오류 분석기가 존재하는 경우, 소스 코드 오류 분석 장치(200)는 S610 단계의 수행을 생략하고, S620 단계 이후의 과정을 수행하여 소스 코드 오류를 분석할 수 있다.
다음으로 소스 코드 오류 분석 장치(200)는 분석 대상 코드를 입력받는다(S620).
소스 코드 오류 분석 장치(200)는 소스 코드 내에 오류(error)가 포함되어 있는지 여부를 확인하기 위하여, 분석 대상이 되는 소스 코드인 분석 대상 코드를 입력받는다.
그리고 소스 코드 오류 분석 장치(200)는 전처리를 수행하고, 코드 블록을 생성한다(S630).
소스 코드 오류 분석 장치(200)는 입력받은 분석 대상 코드를 실행 엔진인 오류 분석기가 해석할 수 있는 작은 단위의 프로그램으로 분할하는 전처리를 수행할 수 있다.
이때, 소스 코드 오류 분석 장치(200)는 프로그램 소스 파일인 분석 대상 코드를 블록 단위로 분할하고, 블록 단위에 상응하는 블록 인덱스와 함께 오류 분석기에 입력할 수 있다.
소스 코드 오류 분석 장치(200)는 분석 대상 코드를 문장 단위로 분할할 수 있으며, 어휘 분석(lexical analysis)을 통해 블록 내의 소스 코드를 토큰 단위로 분할할 수 있다. 또한, 소스 코드 오류 분석 장치(200)는 각 문장들을 토큰으로 해석하고, 토큰에 상응하는 코드값으로 변환 및 부호화하여 코드 블록을 생성할 수 있다.
이때, 소스 코드 오류 분석 장치(200)는 토큰이 기 정의된 단어인 경우, 해당 기 정의된 단어에 상응하는 코드값으로 변환할 수 있다. 또한, 토큰이 변수 또는 상수인 경우, 변수 또는 상수에 대한 식별 토큰값과, 해당 토큰에 상응하는 코드값으로 변환할 수 있다.
소스 코드 오류 분석 장치(200)는 하나의 문장 또는 복수의 문장들로 구성된 코드 블록을 생성할 수 있으며, 여기서 복수의 문장들은 서로 연결된 문장들일 수 있다.
그리고 소스 코드 오류 분석 장치(200)는 코드 블록 사이즈에 상응하는 코드 블록을 생성할 수 있다. 예를 들어, 코드 블록 사이즈가 1인 경우, 소스 코드 오류 분석 장치(200)는 하나의 문장으로 구성된 코드 블록을 생성할 수 있고, 코드 블록 사이즈가 5인 경우, 연속되는 다섯 개의 문장으로 구성된 코드 블록을 생성할 수 있다.
다음으로 소스 코드 오류 분석 장치(200)는 문법적 오류를 분석하고(S640), 비문법적 오류를 분석할 수 있다(S650).
소스 코드 오류 분석 장치(200)는 비문법적 오류를 분석하는 S650 단계를 수행하기 이전에, 문법적 오류를 분석하는 S640 단계를 수행할 수 있다. 이때, 소스 코드 오류 분석 장치(200)는 문법적 오류를 분석하는 S640 단계를 선택적으로 수행할 수 있다.
S640 단계에서, 소스 코드 오류 분석 장치(200)는 전처리된 결과를 파싱하여, 문법적 오류가 포함되어 있는지 여부를 검사할 수 있다. 소스 코드 오류 분석 장치(200)는 일반적인 컴파일러의 파서와 실질적으로 동일한 기능을 수행할 수 있으며, 파싱을 통해 문법적 오류를 분석할 수 있다.
그리고 소스 코드 오류 분석 장치(200)는 문법적 오류를 분석한 결과, 분석 대상 코드에 문법적 오류가 존재하지 않는 것으로 판단된 경우, S650 단계를 수행하여 비문법적 오류를 분석할 수 있다.
반면, 문법적 오류를 분석한 결과 분석 대상 코드에 문법적 오류가 존재하는 것으로 판단된 경우, 소스 코드 오류 분석 장치(200)는 S650 단계의 수행을 생략하고, S660 단계를 수행하여 발견된 문법적 오류에 대한 정보를 출력할 수 있다.
설명의 편의를 위하여, 문법적 오류가 검출되지 않은 경우에만 비문법적 오류를 검출하는 과정을 수행하는 것으로 설명하였으나 이에 한정하지 않고, 문법적 오류가 검출된 경우에도 비문법적 오류를 검출하는 과정을 수행하고, 후술할 S660 단계에서 문법적 오류 및 비문법적 오류의 분석 결과를 출력할 수 있다.
비문법적 오류는 하나의 문장 내에서 발생되거나, 문장들 간의 잘못된 변수 사용이나, 잘못된 문장 순서 배치에 의해서 발생될 수도 있다. 따라서, 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치(200)는 문장 단위로 비문법적 오류를 분석하는 것이 아니라, 블록 단위로 비문법적 오류를 분석하여 검출할 수 있다.
마지막으로, 소스 코드 오류 분석 장치(200)는 S640 단계 및 S650 단계 중 적어도 어느 하나의 분석 결과를 출력한다(S660).
소스 코드 오류 분석 장치(200)는 S640 단계에서 문법적 오류가 검출된 경우, 검출된 문법적 오류에 관한 내용을 출력할 수 있으며, S650 단계에서 비문법적 오류가 검출된 경우 비문법적 오류에 관한 내용을 출력할 수 있다. 또한, 소스 코드 오류 분석 장치(200)는 사용자 단말기(300) 상에 오류 관련 정보를 출력할 수 있다.
도 8은 제1 프로그램 소스 코드를 나타낸 예시도이고, 도 9는 오류가 추가된 제1 프로그램 소스 코드를 나타낸 예시도이다.
도 8에 도시한 제1 프로그램 소스 코드는 순환 인공 신경망(recurrent neural network, RNN)를 NNEF(Neural Network Exchange Format)에 맞춰 작성한 프로그램 소스 코드로, 도 9에 도시된 오류가 추가된 제1 프로그램 소스 코드에는 문장 내에서 일부 변수의 순서가 바뀌어 있다.
도 9에 도시한 바와 같이, NNEF(Neural Network Exchange Format) 예제코드에서 s와 b의 위치가 바뀐 경우, 문법상 오류는 발견되지 않을 수 있다. 그러나 RNN을 알고 있는 개발 전문가들은 코드의 구성에서 변수에 저장되고 사용되는 흐름과 사용하는 변수 명이나, 크기를 기반으로, s와 b의 위치가 바뀌었음을 알아차릴 수 있다.
기존의 문법 오류 검색 기술로는 도 9의 비문법적 오류를 탐지할 수 없다. 그러나, 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치(200)는 기계 학습된 오류 분석기를 이용하여 s와 b의 위치가 바뀌는 비문법적 오류가 발생하였음을 탐지하고, 사용자(개발자)에게 알릴 수 있다.
도 10은 제2 프로그램 소스 코드를 나타낸 예시도이고, 도 11은 오류가 추가된 제2 프로그램 소스 코드를 나타낸 예시도이다.
도 10에 도시된 제2 프로그램 소스 코드와 같이, 컨볼루션(Convolution) 시 컨볼루션(Convolution)을 수행한 후 정규화 (Normalization) 과정을 수행한다. 반면, 도 11에 도시된 소스 코드에서는 정규화 과정을 수행한 후, 컨볼루션하는 것으로 작성되어 있다.
이때, 본 발명의 일실시예에 따른 소스 코드 오류 분석 장치(200)는 정규화 과정을 수행하는 문장과 컨볼루션을 수행하는 문장의 위치가 바뀐 것으로 판단하고, 사용자에게 정규화 과정과 컨볼루션 과정의 순서가 바뀌는 비문법적 오류가 발생하였음을 알릴 수 있다.
도 12는 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 블록도이다.
도 12를 참조하면, 본 발명의 실시예는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템(1200)에서 구현될 수 있다. 도 12에 도시된 바와 같이, 컴퓨터 시스템(1200)은 버스(1220)를 통하여 서로 통신하는 하나 이상의 프로세서(1210), 메모리(1230), 사용자 인터페이스 입력 장치(1240), 사용자 인터페이스 출력 장치(1250) 및 스토리지(1260)를 포함할 수 있다. 또한, 컴퓨터 시스템(1200)은 네트워크(1280)에 연결되는 네트워크 인터페이스(1270)를 더 포함할 수 있다. 프로세서(1210)는 중앙 처리 장치 또는 메모리(1230)나 스토리지(1260)에 저장된 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1230) 및 스토리지(1260)는 다양한 형태의 휘발성 또는 비휘발성 저장 매체일 수 있다. 예를 들어, 메모리는 ROM(1231)이나 RAM(1232)을 포함할 수 있다.
따라서, 본 발명의 실시예는 컴퓨터로 구현된 방법이나 컴퓨터에서 실행 가능한 명령어들이 기록된 비일시적인 컴퓨터에서 읽을 수 있는 매체로 구현될 수 있다. 컴퓨터에서 읽을 수 있는 명령어들이 프로세서에 의해서 수행될 때, 컴퓨터에서 읽을 수 있는 명령어들은 본 발명의 적어도 한 가지 태양에 따른 방법을 수행할 수 있다.
이상에서와 같이 본 발명에 따른 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법은 상기한 바와 같이 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
100: 소스 코드 오류 분석을 위한 학습용 데이터 생성 장치
110: 입력부 120: 블록 데이터 생성부
130: 오류 데이터 생성부 140: 학습용 데이터 생성부
200: 소스 코드 오류 분석 장치
210: 코드 입력부 220: 코드 블록 생성부
230: 문법적 오류 분석부 240: 비문법적 오류 분석부
250: 오류 정보 출력부 260: 학습용 데이터 셋 생성부
270: 기계 학습 수행부 300: 사용자 단말기
1200: 컴퓨터 시스템 1210: 프로세서
1220: 버스 1230: 메모리
1231: 롬 1232: 램
1240: 사용자 인터페이스 입력 장치
1250: 사용자 인터페이스 출력 장치
1260: 스토리지 1270: 네트워크 인터페이스
1280: 네트워크

Claims (20)

  1. 소스 코드 오류 분석 장치에 의해 수행되는 소스 코드 오류 분석 방법에 있어서,
    입력받은 분석 대상 코드에 대한 전처리를 수행하여, 상기 분석 대상 코드에 상응하는 코드 블록을 생성하는 단계,
    기계 학습을 통해 생성된 오류 분석기를 이용하여, 상기 코드 블록에 포함된 비문법적 오류를 분석하는 단계, 그리고
    상기 코드 블록에 상기 비문법적 오류가 포함된 것으로 판단된 경우, 상기 코드 블록 및 상기 비문법적 오류의 정보를 출력하는 단계를 포함하며,
    상기 오류 분석기는 오류가 포함된 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아 기계 학습을 수행하여 생성된 이고,
    상기 오류 데이터는 프로그램 소스 코드와, 블록 구성 정보, 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나를 포함하는 오류 생성 정보를 입력받고, 상기 블록 구성 정보를 기반으로, 상기 프로그램 소스 코드로부터 블록 데이터를 생성하고, 생성된 상기 블록 데이터에 상기 오류 정보 및 상기 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여 생성되는 소스 코드 오류 분석 방법.
  2. 제1항에 있어서,
    상기 코드 블록을 생성하는 단계는,
    상기 분석 대상 코드를 문장 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 분할한 후 코드값으로 변환하여, 상기 분석 대상 코드에 대한 상기 코드 블록을 생성하는 소스 코드 오류 분석 방법.
  3. 제2항에 있어서,
    상기 코드 블록을 생성하는 단계는,
    상기 분석 대상 코드에 대한 어휘 분석을 수행하여 상기 분석 대상 코드를 상기 토큰 단위로 분할한 토큰을 생성하고, 상기 토큰을 코드값으로 변환하여 상기 코드 블록을 생성하는 소스 코드 오류 분석 방법.
  4. 제3항에 있어서,
    상기 코드 블록을 생성하는 단계는,
    상기 토큰이 기 정의된 단어인 경우 상기 토큰을 상기 기 정의된 단어에 상응하는 코드값으로 변환하고, 상기 토큰이 변수 또는 상수인 경우 식별 토큰값 및 코드값으로 변환하여 상기 코드 블록을 생성하는 소스 코드 오류 분석 방법.
  5. 제1항에 있어서,
    상기 코드 블록을 생성하는 단계는,
    하나의 문장 또는 복수의 연결된 문장들로 구성된 상기 코드 블록을 생성하는 소스 코드 오류 분석 방법.
  6. 제5항에 있어서,
    상기 코드 블록을 생성하는 단계는,
    상기 코드 블록의 사이즈를 설정한 후, 상기 코드 블록의 사이즈에 상응하는 상기 코드 블록을 생성하는 소스 코드 오류 분석 방법.
  7. 제1항에 있어서,
    상기 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 생성하는 단계, 그리고
    상기 학습용 데이터 셋을 이용하여, 상기 오류 분석기의 기계 학습을 수행하는 단계를 더 포함하는 소스 코드 오류 분석 방법.
  8. 제7항에 있어서,
    상기 학습용 데이터 셋을 생성하는 단계는,
    블록 구성 정보를 기반으로 프로그램 소스 코드로부터 블록 데이터를 생성하는 단계,
    생성된 상기 블록 데이터에 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여, 상기 오류 데이터를 생성하는 단계, 그리고
    상기 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 생성하는 단계를 포함하는 소스 코드 오류 분석 방법.
  9. 제8항에 있어서,
    상기 블록 데이터를 생성하는 단계는,
    상기 소스 코드의 어휘 분석 결과를 기반으로 상기 블록 데이터의 사이즈를 설정하고, 설정된 상기 블록 데이터의 사이즈에 상응하는 상기 블록 데이터를 생성하는 소스 코드 오류 분석 방법.
  10. 제1항에 있어서,
    상기 코드 블록을 생성한 후, 상기 코드 블록에 포함된 문법적 오류를 분석하는 단계를 더 포함하는 소스 코드 오류 분석 방법.
  11. 분석 대상 코드를 입력받는 코드 입력부,
    상기 분석 대상 코드에 대한 전처리를 수행하여, 상기 분석 대상 코드에 상응하는 코드 블록을 생성하는 코드 블록 생성부,
    기계 학습을 통해 생성된 오류 분석기를 이용하여, 상기 코드 블록에 포함된 비문법적 오류를 분석하는 비문법적 오류 분석부, 그리고
    상기 코드 블록에 상기 비문법적 오류가 포함된 것으로 판단된 경우, 상기 코드 블록 및 상기 비문법적 오류의 정보를 출력하는 오류 정보 출력부를 포함하며,
    상기 오류 분석기는 오류가 포함된 오류 데이터 및 상기 오류의 정보를 포함하는 학습용 데이터 셋을 입력받아 기계 학습을 수행하여 생성된 것이고,
    상기 오류 데이터는 프로그램 소스 코드와, 블록 구성 정보, 오류 정보 및 오류 생성 규칙 정보 중 적어도 어느 하나를 포함하는 오류 생성 정보를 입력받고, 상기 블록 구성 정보를 기반으로, 상기 프로그램 소스 코드로부터 블록 데이터를 생성하고, 생성된 상기 블록 데이터에 상기 오류 정보 및 상기 오류 생성 규칙 정보 중 적어도 어느 하나에 상응하는 오류를 추가하여 생성되는 소스 코드 오류 분석 장치.
  12. 제11항에 있어서,
    상기 오류 분석기에 상기 학습용 데이터 셋을 입력하여 상기 기계 학습을 수행하는 기계 학습 수행부를 더 포함하는 소스 코드 오류 분석 장치.
  13. 제12항에 있어서,
    프로그램 소스 코드에 상응하는 블록 데이터에 오류를 추가하여 오류 데이터를 생성하고, 상기 오류 데이터 및 상기 오류의 정보를 포함하는 상기 학습용 데이터 셋을 생성하는 학습용 데이터 셋 생성부를 더 포함하는 소스 코드 오류 분석 장치.
  14. 제11항에 있어서,
    상기 코드 블록 생성부는,
    상기 분석 대상 코드를 문장 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 분할한 후 코드값으로 변환하여, 코드 블록 사이즈에 상응하는 코드 블록을 생성하는 소스 코드 오류 분석 장치.
  15. 제14항에 있어서,
    상기 코드 블록 생성부는,
    상기 분석 대상 코드에 대한 어휘 분석을 수행하여 상기 분석 대상 코드를 상기 토큰 단위로 분할한 토큰을 생성하고, 상기 토큰의 종류에 상응하도록 상기 토큰을 코드값으로 변환하여 상기 코드 블록을 생성하는 소스 코드 오류 분석 장치.
  16. 제15항에 있어서,
    상기 코드 블록에 포함된 문법적 오류를 분석하는 문법적 오류 분석부를 더 포함하는 소스 코드 오류 분석 장치.
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020180159129A 2018-12-11 2018-12-11 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법 KR102546424B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180159129A KR102546424B1 (ko) 2018-12-11 2018-12-11 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180159129A KR102546424B1 (ko) 2018-12-11 2018-12-11 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20200071413A KR20200071413A (ko) 2020-06-19
KR102546424B1 true KR102546424B1 (ko) 2023-06-23

Family

ID=71137271

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180159129A KR102546424B1 (ko) 2018-12-11 2018-12-11 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법

Country Status (1)

Country Link
KR (1) KR102546424B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200121611A (ko) 2019-04-16 2020-10-26 삼성전자주식회사 서버 및 그 제어 방법
CN112149405B (zh) * 2020-09-28 2023-10-10 西安工程大学 一种基于卷积神经网络的程序编译错误信息特征提取方法
KR102485137B1 (ko) 2020-12-07 2023-01-06 한국전자기술연구원 프로그램 오류 자동 수정 방법 및 이를 지원하는 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
KR101694778B1 (ko) * 2014-11-28 2017-01-10 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000038106A (ko) 1998-12-03 2000-07-05 정선종 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
KR101694778B1 (ko) * 2014-11-28 2017-01-10 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 오경보 저감 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체

Also Published As

Publication number Publication date
KR20200071413A (ko) 2020-06-19

Similar Documents

Publication Publication Date Title
US11354225B2 (en) Automating identification of test cases for library suggestion models
US11093240B2 (en) Automating identification of code snippets for library suggestion models
CN110908640B (zh) 实现业务功能的方法和脚本引擎
US20200264870A1 (en) Automating Generation of Library Suggestion Engine Models
US20190265955A1 (en) Method and system for comparing sequences
US20190324744A1 (en) Methods, systems, articles of manufacture, and apparatus for a context and complexity-aware recommendation system for improved software development efficiency
US11775414B2 (en) Automated bug fixing using deep learning
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
KR102546424B1 (ko) 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
EP3008585B1 (en) Automatic source code generation
US10459829B2 (en) Overall test tool migration pipeline
CN109857641A (zh) 对程序源文件进行缺陷检测的方法及装置
US20070157183A1 (en) Computer program code comparison using lexemes
CN101751281A (zh) 编译器生成系统和方法
KR102485137B1 (ko) 프로그램 오류 자동 수정 방법 및 이를 지원하는 시스템
CN114911711A (zh) 一种代码缺陷分析方法、装置、电子设备及存储介质
CN115066674A (zh) 使用源代码元素的数值数组表示来评估源代码的方法
US11847436B2 (en) Machine learning (ML) model-based compiler
CN116166236A (zh) 代码推荐方法、装置、计算机设备及存储介质
CN110286912A (zh) 代码检测方法、装置及电子设备
CN106126225B (zh) 一种基于程序演进模型的目标代码逆向工程方法
CN117113080A (zh) 数据处理和代码处理方法、装置、一体机和存储介质
CN116360794A (zh) 数据库语言解析方法、装置、计算机设备及存储介质
CN115145575A (zh) 一种高级语言的解析方法、设备和计算机可读存储介质
CN109359055B (zh) 一种数据测试的方法和设备

Legal Events

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