KR101850303B1 - 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 - Google Patents

소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 Download PDF

Info

Publication number
KR101850303B1
KR101850303B1 KR1020160118171A KR20160118171A KR101850303B1 KR 101850303 B1 KR101850303 B1 KR 101850303B1 KR 1020160118171 A KR1020160118171 A KR 1020160118171A KR 20160118171 A KR20160118171 A KR 20160118171A KR 101850303 B1 KR101850303 B1 KR 101850303B1
Authority
KR
South Korea
Prior art keywords
information
source code
modification
modification information
violation
Prior art date
Application number
KR1020160118171A
Other languages
English (en)
Other versions
KR20180030349A (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 KR1020160118171A priority Critical patent/KR101850303B1/ko
Priority to US15/632,161 priority patent/US10261884B2/en
Publication of KR20180030349A publication Critical patent/KR20180030349A/ko
Application granted granted Critical
Publication of KR101850303B1 publication Critical patent/KR101850303B1/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/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • G06F11/1056Updating check bits on partial write, i.e. read/modify/write

Abstract

본 발명은 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체에 관한 것으로, 더욱 상세하게는 소스 코드의 결함을 자동으로 수정할 수 있는 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체에 관한 것이다.
실시 형태에 따른 소스 코드 위배 수정 방법은, 소스 코드를 분석하여 하나 또는 다수의 위배를 검출하는, 위배 검출 단계; 검출된 상기 위배를 수정하기 위한 다수의 수정 정보를 생성하는, 수정 정보 생성 단계; 생성된 상기 다수의 수정 정보를 병합하는, 수정 정보 병합 단계; 및 병합된 상기 수정 정보에 기초하여 상기 소스 코드를 수정하는, 수정 단계;를 포함하고, 상기 수정 정보 생성 단계에서 생성된 상기 다수의 수정 정보 각각은, 우선순위(order)를 포함하고, 상기 우선순위(order)의 맨 앞 첫번째 숫자는 라인 번호이고, 두번째 숫자는 수정 종류에 따라 미리 결정된 숫자이고, 상기 두번째 숫자 다음의 숫자들은 상기 위배가 발생한 위치의 코드 블록 깊이(code block depth)이다.

Description

소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체{METHOD FOR CORRECTING VIOLATION OF SOURCE CODE AND COMPUTER READABLE RECORDING MEDIUM HAVING PROGRAM THE SAME}
본 발명은 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체에 관한 것으로, 더욱 상세하게는 소스 코드의 결함을 자동으로 수정할 수 있는 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체에 관한 것이다.
정적 프로그램 분석(Static Code Analysis)은 컴퓨터 소프트웨어를 분석하는 여러 가지 방법 중 하나이다. 이 방법의 특징은 소프트웨어를 직접 실행하지 않고 개발중인 소프트웨어의 소스 코드를 대상으로 분석을 수행한다는 점이다.
정적 분석 도구(Static Analysis Tool)는 정적 프로그램 분석을 사람의 손이 아닌 소프트웨어를 이용하여 자동적으로 수행하도록 개발된 프로그램이다. 일반적으로 소스 코드의 크기는 매우 방대하며, 사람의 손으로 일일이 정적 프로그램 분석을 수행하는 것은 거의 불가능하다고 볼 수 있다. 따라서 이러한 분석을 자동화하여 수행할 수 있도록 해주는 것이 정적 분석 도구의 역할이라고 할 수 있다. 정적 분석 도구는 종류에 따라 소스 코드에서 다양한 종류의 결함이나 취약점을 검출할 수 있으며, 분석을 통해 검출된 결함을 사용자에게 알려준다.
상기와 같은 정적 분석 도구 형태의 소스 코드 분석 장치가 기존에 다양하게 제안된 바 있다. 그러나, 기존에 제안 또는 사용되어온 소스 코드 분석 장치는 결함 검출 및 그에 대한 검출 메시지 생성이라는 제한된 기능만을 제공하여, 검출된 결함에 대한 수정 작업은 사용자(프로그래머)의 개인적인 지식과 경험에 의존해야 한다는 한계가 있었다.
또한, 기존에 제안 또는 사용되어온 소스 코드 분석 장치가 검출한 결함이 수천 내지 수만개에 이를 경우, 이러한 수많은 결함들을 일일이 수정하는데 많은 시간이 소요되며, 특히, 수많은 결함들 중 일부가 아주 단순한 결함임에도 이를 일일이 수정하는 반복적인 작업에 많은 시간이 소요되는 문제가 있다.
종래 기술의 하나로서, 대한민국 등록특허 제10-1623174호(이하, ‘선행기술’이라 함)가 있다. 상기 선행기술은, 미리 정의된 분석툴에 따라 분석한 소스 코드에 결함이 발견된 경우에 ‘결함 수정안을 사용자에게 제시’하는 것이 특징이다. 즉, 상기 선행기술은 사용자에게 결함 수정안을 제시할 뿐, 결함을 직접 수정하는 작업은 사용자(프로그래머)가 직접 수행해야 한다. 따라서, 이러한 선행기술으로도 검출된 결함에 대한 수정 작업은 사용자(프로그래머)의 개인적인 지식과 경험에 의존해야 한다는 한계가 그대로 존재하며, 검출된 결함이 수천 내지 수만개에 이를 경우에 검출된 결함들을 일일이 수정하는데 적지않은 시간이 소요된다.
따라서, 사용자(프로그래머)가 검출된 결함에 대한 수정을 직접 수행하는 것이 아니라, 검출된 결함을 자동으로 수정할 수 있는 방법과 도구가 필요하다.
대한민국 등록특허 제10-1623174호 (2016년05월16일 등록)
본 발명은, 소스 코드의 분석을 통해 검출된 결함을 자동으로 수정할 수 있는 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체를 제공한다.
본 발명의 해결하고자 하는 과제는 이상에서 언급된 것들에 한정되지 않으며, 언급되지 아니한 다른 해결하고자 하는 과제들은 아래의 기재로부터 당업자에게 명확하게 이해되어질 수 있을 것이다.
실시 형태에 따른 소스 코드 위배 수정 방법은, 소스 코드를 분석하여 하나 또는 다수의 위배를 검출하는, 위배 검출 단계; 검출된 상기 위배를 수정하기 위한 다수의 수정 정보를 생성하는, 수정 정보 생성 단계; 생성된 상기 다수의 수정 정보를 병합하는, 수정 정보 병합 단계; 및 병합된 상기 수정 정보에 기초하여 상기 소스 코드를 수정하는, 수정 단계;를 포함한다.
여기서, 상기 다수의 수정 정보 각각은, 수정이 시작되는 라인 번호, 수정 내용, 수정 종류 및 우선순위(order) 중 적어도 하나 이상을 포함할 수 있다.
여기서, 상기 수정 정보 병합 단계는, 상기 우선순위에 따라 상기 다수의 수정 정보의 순서를 정렬하여 상기 다수의 수정 정보를 병합하고, 상기 수정 단계는, 상기 순서에 따라 상기 소스 코드를 수정할 수 있다.
여기서, 상기 위배 검출 단계에서 검출된 상기 하나 또는 다수의 위배가 연속되는 둘 이상의 라인의 추가 또는 삭제이면, 상기 수정 정보 병합 단계는, 하나의 수정 정보에 상기 연속되는 둘 이상의 라인의 추가 또는 삭제의 정보를 포함시킬 수 있다.
여기서, 상기 수정 정보 병합 단계는, 미리 설정된 규칙에 따라 생성된 상기 다수의 수정 정보를 병합하고, 상기 미리 설정된 규칙은, 상기 다수의 수정 정보들을 수정이 시작되는 라인의 순서에 따라 정렬하는 단계; 어느 한 라인에 대한 수정 정보가 다수인 경우, 상기 다수의 수정 정보들을 수정(Modify), 삭제(Delete) 및 추가(Add) 순서대로 정렬하는 단계; 및 상기 어느 한 라인에 대한 수정(Modify)하는 수정 정보가 둘 이상이면, 미리 설정된 병합 규칙에 따라 하나의 병합 수정 정보를 생성하고, 상기 어느 한 라인에 대한 삭제(Delete)하는 수정 정보가 둘 이상이면, 가장 많은 라인을 삭제하는 수정 정보를 선택하고, 상기 어느 한 라인에 대한 추가(Add)하는 수정 정보가 둘 이상이면, 미리 지정한 우선순위(order)에 따라 정렬하는 단계;를 포함할 수 있다.
여기서, 상기 미리 설정된 병합 규칙은, 상기 둘 이상의 수정 정보 각각에 포함된 우선순위(order)에 따라, 상기 둘 이상의 수정 정보를 정렬하는, 정렬 단계; 인덱서를 상기 어느 한 라인에 대한 소스 코드 원본과 상기 둘 이상의 수정 정보 각각의 최초 컬럼에 추가하는, 추가 단계; 및 추가된 모든 인덱서들이 지시하는 문자를 비교하여 상기 병합 수정 정보를 결정하고, 상기 모든 인덱서들의 이동을 결정하는, 결정 단계;를 포함할 수 있다.
여기서, 상기 모든 인덱서가 지시하는 문자들이 동일한 경우, 상기 병합 수정 정보의 최초 컬럼에 동일한 상기 문자를 추가하고, 상기 모든 인덱서를 다음 컬럼으로 이동시키는 단계; 및 상기 모든 인덱서가 지시하는 문자들 중 어느 하나의 문자만 다르고 나머지들은 동일한 경우, (a), (b) 및 (c) 중 어느 하나에 따라 상기 모든 인덱서의 이동과 상기 병합 수정 정보를 결정하는 단계;를 포함하되, 상기 (a)는, 상기 어느 하나의 문자가 속한 수정 정보의 종류가 삽입(insert)이면, 상기 병합 수정 정보의 최초 컬럼에 상기 어느 하나의 문자를 추가하고, 상기 어느 하나의 문자가 속한 수정 정보의 인덱서만 다음 컬럼으로 이동시키고, 상기 (b)는, 상기 어느 하나의 문자가 속한 수정 정보의 종류가 삭제(delete)이면, 상기 병합 수정 정보의 상기 최초 컬럼에 어떠한 문자도 추가하지 않고, 상기 어느 하나의 문자가 속한 수정 정보의 인덱서를 제외한 나머지 인덱서들을 상기 다음 컬럼으로 이동시키고, 상기 (c)는, 상기 어느 하나의 문자가 속한 수정 정보의 종류가 교체(replace)이면, 상기 병합 수정 정보의 최초 컬럼에 상기 어느 하나의 문자를 추가하고, 상기 모든 인덱서를 상기 다음 컬럼으로 이동시킨다.
상술한 실시 형태에 따른 소스 코드의 위배 수정 방법을 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체를 포함한다.
본 발명에 따른 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체를 사용하면, 소스 코드의 분석을 통해 검출된 결함을 자동으로 수정할 수 있다. 따라서, 사용자(프로그래머)가 직접 결함을 수정하는 경우보다 시간적 및 비용적으로 효율적인 이점이 있다.
도 1은 본 발명의 실시 형태에 따른 소스 코드의 위배 수정 방법을 설명하기 위한 순서도이다.
도 2 내지 도 18은 도 1에 도시된 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법의 일 예를 설명하기 위한 도면들이다.
도 19 내지 도 25는 도 1에 도시된 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법의 다른 일 예를 설명하기 위한 도면들이다.
도 26 내지 도 31은 도 1에 도시된 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법의 또 다른 일 예를 설명하기 위한 도면들이다.
도 32는 본 발명의 실시 형태에 따른 소스 코드 위배 수정 모듈의 블록도이다.
도 33 내지 도 38은 도 1 내지 도 31에서 설명한 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법이 기록된 컴퓨터로 판독가능한 기록매체(소위, ‘소스 코드 위배 수정 도구’)가, 컴퓨터에 설치 및 실행되어 컴퓨터의 표시 장치에서 디스플레이되고 있는 화면의 예들이다.
이하, 본 발명의 바람직한 실시예의 상세한 설명이 첨부된 도면들을 참조하여 설명된다. 도면들 중 인용부호들 및 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 인용부호들로 표시됨을 유의해야 한다. 참고로 본 발명을 설명함에 있어서 관련된 공지 기능 혹은 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 이하 첨부된 도면을 참조하여 본 발명의 실시 형태에 따른 을 설명한다.
도 1은 본 발명의 실시 형태에 따른 소스 코드의 위배 수정 방법을 설명하기 위한 순서도이다.
도 1을 참조하면, 본 발명의 실시 형태에 따른 소스 코드의 위배 수정 방법은, 위배 검출 단계(110), 수정 정보 생성 단계(130), 수정 정보 병합 단계(150) 및 수정 단계(170)를 포함한다. 이하, 각 단계를 상세히 설명한다.
위배 검출 단계(110)는, 입력된 소스 코드를 분석하여 하나 또는 다수의 위배를 검출하는 단계이다.
소스 코드는, 코드 파일의 형태로 입력받을 수 있다. 일 예로, 코드 파일의 입력은 사용자의 파일 입력 또는 오프 조작에 의해 이뤄질 수 있다.
소스 코드의 분석은, 정적 분석 도구(Static Analysis Tool)와 같은 프로그램을 통해 분석될 수 있다. 상기 정적 분석 도구는, 문법기반(Syntactic)의 분석 또는 의미기반(Semantic)의 분석 방식 등의 다양한 방식을 가질 수 있다. 이러한 상기 정적 분석 도구를 이용하여 미리 정의된 규칙에 반하는 위배를 검출할 수 있다.
수정 정보 생성 단계(130)는, 위배 검출 단계(110)에서 검출된 위배를 수정하기 위한 하나 또는 다수의 수정 정보를 생성한다.
상기 수정 정보는, 위배가 존재하는 소스 코드와 규칙에 맞게 수정된 소스 코드의 차이점을 특정 단위를 기준으로 기록하여 저장된 것일 수 있다. 여기서, 상기 수정 정보는 unified diff 포맷(format)의 형식을 가질 수 있다.
상기 수정 정보는, 수정이 시작되는 라인(line)의 번호, 수정 내용, 수정 종류(예를 들어, 추가, 삭제, 변경) 및 우선순위(order) 중 적어도 하나 이상을 포함할 수 있다. 또한, 수정 정보는, 상세 위배 내용을 더 포함할 수 있다.
여기서, 우선순위(order)는 라인 번호, 수정의 종류 및 위배가 발생한 위치의 코드 블록 깊이(code block depth)를 고려하여 결정되는 값으로서, 우선순위(order)의 맨 앞 숫자는 라인 번호를 의미하고, 그 다음 숫자는 수정의 종류(예를 들어, 수정은 ‘1’, 추가는 ‘2’, 삭제는 ‘3’)에 따라 결정되고, 그 다음 숫자들은 위배가 발생한 위치의 코드 블록 깊이로 결정될 수 있다.
수정 정보 생성 단계(130)에서 생성되는 수정 정보의 개수는, 다수일 수 있다.
예를 들어, 연속되지 않는 둘 이상의 라인을 추가(또는 삭제)하는 경우, 추가(또는 삭제)되는 라인의 개수에 따라 결정될 수 있다. 또한, 어느 하나의 특정 라인 내에 존재하는 하나 이상의 컬럼의 수정(예를 들어, 추가, 삭제, 변경)의 개수에 따라 결정될 수도 있다. 예를 들어, 아래의 표들을 참조하여 설명한다.
현재의 소스 코드 수정되는 소스 코드
1번 라인 aaaaa aaaaa
2번 라인 ccccc bbbbb
3번 라인 eeeee ccccc
4번 라인 ddddd
5번 라인 eeeee
표 1은, 현재의 소스 코드에 하나 또는 다수의 위배가 존재하는데, 상기 하나 또는 다수의 위배를 수정하기 위해서는 현재의 소스 코드의 1번 라인 다음에 1개의 라인(bbbbb)이 추가되고, 현재의 소스 코드의 3번 라인 다음에 1개의 라인(ddddd)이 추가되어야 하는 가정이다. 표 1과 같은 경우, 생성되는 수정 정보의 개수는 다음과 같이 2개이다.
수정 정보 1: @@ -1,0 +1,1 @@
+bbbbb
수정 정보 2: @@ -3,0 +3,1 @@
+ddddd
현재의 소스 코드 수정되는 소스 코드
1번 라인 aaaaa aaaaa
2번 라인 bbbbb ccccc
3번 라인 ccccc eeeee
4번 라인 ddddd
5번 라인 eeeee
표 2는, 현재의 소스 코드에 하나 또는 다수의 위배가 존재하는데, 상기 하나 또는 다수의 위배를 수정하기 위해서는 현재의 소스 코드의 1번 라인 다음의 라인(bbbbb)이 삭제되고, 현재의 소스 코드의 3번 라인 다음의 라인(ddddd)이 삭제되어야 하는 가정이다. 표 2와 같은 경우, 생성되는 수정 정보의 개수는 다음과 같이 2개이다.
수정 정보 1: @@ -1,0 +1,1 @@
-bbbbb
수정 정보 2: @@ -3,0 +3,1 @@
-ddddd
현재의 소스 코드 수정되는 소스 코드
1번 라인 aabbcc aazzbbee
표 3은, 현재의 소스 코드에 하나 또는 다수의 위배가 존재하는데, 상기 하나 또는 다수의 위배를 수정하기 위해서는 현재의 소스 코드의 1번 라인 내의 컬럼(aa) 다음에 새로운 컬럼(zz)이 추가되어야 하고, 현재의 소스 코드의 1번 라인 내의 다른 컬럼(cc)이 새로운 컬럼(ee)로 변경되어야 하는 가정이다. 표 3과 같은 경우, 생성되는 수정 정보의 개수는, 다음과 같이 2개이다.
수정 정보 1: @@ -1,1 +1,1 @@
-aabbcc
+aazzbbcc
수정 정보 2: @@ -1,1 +1,1 @@
-aabbcc
+aabbee
한편, 수정 정보 생성 단계(130)에서 생성되는 수정 정보에는, 둘 이상의 수정 내용을 포함할 수 있다. 예를 들어, 검출된 하나 또는 다수의 위배를 수정하기 위해서 연속되는 둘 이상의 라인을 추가 또는 삭제해야 하는 경우에는 하나의 수정 정보에 연속되는 둘 이상의 라인의 추가 또는 삭제 정보를 포함시킬 수 있다. 예를 들어, 아래의 여러 표들을 참조하여 설명한다.
현재의 소스 코드 수정되는 소스 코드
1번 라인 aaaaa aaaaa
2번 라인 bbbbb bbbbb
3번 라인 eeeee ccccc
4번 라인 ddddd
5번 라인 eeeee
표 4는, 현재의 소스 코드에 하나 또는 다수의 위배가 존재하는데, 상기 하나 또는 다수의 위배를 수정하기 위해서는 2번 라인 다음에 연속되는 둘 이상의 라인인, 2개의 라인(ccccc, ddddd)이 추가되어야 하는 가정이다. 표 4와 같은 경우, 생성되는 수정 정보는 다음과 같이 1개이다.
수정 정보: @@ -2,0 +2,2 @@
+ccccc
+ddddd
현재의 소스 코드 수정되는 소스 코드
1번 라인 aaaaa aaaaa
2번 라인 bbbbb bbbbb
3번 라인 ccccc eeeee
4번 라인 ddddd
5번 라인 eeeee
표 5는, 현재의 소스 코드에 하나 또는 다수의 위배가 존재하는데, 상기 하나 또는 다수의 위배를 수정하기 위해서는 연속되는 둘 이상의 라인인, 3번 라인과 4번 라인(ccccc, ddddd)이 삭제되어야 하는 가정이다. 표 5와 같은 경우, 생성되는 수정 정보는 다음과 같이 1개이다.
수정 정보: @@ -2,2 +2,0 @@
-ccccc
-ddddd
수정 정보 병합 단계(150)는, 생성된 다수의 수정 정보를 병합하는 단계이다. 따라서, 수정 정보 생성 단계(130)에서 하나의 수정 정보만 생성된 경우에는, 본 단계는 생략될 수 있다.
수정 정보 병합 단계(150)는 다수의 수정 정보를 병합할 때, 미리 설정된 규칙에 따라 다수의 수정 정보를 병합한다. 상기 미리 설정된 규칙은, 다음과 같을 수 있다.
(1) 다수의 수정 정보들을 수정이 시작되는 라인의 순서에 따라 정렬한다.
(2) 어느 한 라인에 대한 수정 정보가 다수인 경우, 다수의 수정 정보들을 수정(Modify)-삭제(Delete)-추가(Add) 순서대로 정렬한다.
(3) 어느 한 라인에 대한 수정(Modify)하는 수정 정보가 둘 이상이면, 미리 설정된 병합 규칙에 따라 병합 수정 정보를 생성한다. 어느 한 라인에 대한 삭제(Delete)하는 수정 정보가 둘 이상이면, 가장 많은 라인을 삭제하는 수정 정보만 선택한다. 그리고, 어느 한 라인에 대한 추가(Add)하는 수정 정보가 둘 이상이면, 수정 정보 각각에 포함된 우선순위(order)에 따라 정렬한다.
(4) 어느 한 라인에 대한 수정(Modify)하는 수정 정보가 둘 이상인 경우에, 병합 수정 정보를 생성하기 위한 미리 설정된 병합 규칙은,
a) 둘 이상의 수정 정보 각각에 포함된 우선순위(order)에 따라, 둘 이상의 수정 정보을 정렬한다.
b) 어느 한 라인에 대한 소스 코드 원본과 둘 이상의 수정 정보들 각각의 최초 컬럼에 인덱서를 추가한다.
c) 추가된 모든 인덱서들이 지시하는 문자를 비교하여 병합 수정 정보를 결정하고, 모든 인덱서들의 이동을 결정한다.
여기서, 상기 c)를 좀 더 구체적으로 설명하면, 모든 인덱서가 지시하는 문자들이 동일하면, 병합 수정 정보의 최초 컬럼에 동일한 문자를 추가하고, 모든 인덱서를 다음 컬럼으로 이동시킨다.
한편, 모든 인덱서가 지시하는 문자들 중 어느 하나의 문자만 다르고 나머지들은 동일하면, 다음과 같이, 세 가지 경우로 나누어 결정된다. 어느 하나의 문자가 속한 수정 정보의 종류가 삽입(insert)이면, 병합 수정 정보의 최초 컬럼에 어느 하나의 문자를 추가하고, 어느 하나의 문자가 속한 수정 정보의 인덱서만 다음 컬럼으로 이동시킨다. 다른 한편, 어느 하나의 문자가 속한 수정 정보의 종류가 삭제(delete)이면, 병합 수정 정보에 어떠한 문자도 추가하지 않고, 어느 하나의 문자가 속한 수정 정보의 인덱서를 제외한 나머지 인덱서들을 다음 컬럼으로 이동시킨다. 또 다른 한편, 어느 하나의 문자가 속한 수정 정보의 종류가 교체(replace)이면, 병합 수정 정보의 최초 컬럼에 어느 하나의 문자를 추가하고 모든 인덱서를 다음 컬럼으로 이동시킨다.
d) 소스 코드 원본과 둘 이상의 수정 정보들 각각의 다음 컬럼부터 마지막 컬럼까지 앞서 설명한 병합 규칙에 따르고, 모든 인덱서가 끝을 가리키면, 작업을 종료하고, 병합 수정 정보를 출력한다.
수정 단계(170)는, 수정 정보 병합 단계(150)에서 병합된 수정 정보에 기초하여 소스 코드를 수정한다. 수정 단계(170)는, 수정 정보 병합 단계(150)에서 병합된 수정 정보 내에 앞서 설명한 (1) 내지 (4)의 규칙에 따라 정렬된 수정 정보들의 순서에 따라 소스 코드를 자동으로 수정한다.
그럼, 본 발명의 소스 코드 위배 수정 방법의 일 예를 첨부된 도면들을 참조하여 이하에서 구체적으로 설명하도록 한다.
도 2 내지 도 18은 도 1에 도시된 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법의 일 예를 설명하기 위한 도면들이다.
우선, 도 2에 도시된 바와 같이, 미리 결정된 소정의 <규칙>과 입력된 <소스 코드 원본>이 존재한다고 가정한다. <규칙>에는 3개의 규칙이 있다고 가정한다.
규칙 1 : 접미사 ‘l’은 대문자여야 함.
규칙 2: 상수 뒤에는 접미사 ‘u’를 붙여야 함.
규칙 3: 한 줄에는 하나의 문장만 있어야 함.
도 1에 도시된 위배 검출 단계(110)에서는, 도 2에 도시된 바와 같이, <소스 코드 원본>을 분석하여 위배 1, 위배 2 및 위배 3을 검출한다.
도 1에 도시된 수정 정보 생성 단계(130)에서는, 도 3 내지 도 5에 도시된 바와 같이, 3개의 수정 정보를 생성한다. 생성되는 3개의 수정 정보 각각은, 수정이 시작되는 라인의 번호, 수정 내용, 수정 종류, 및 우선순위(order)를 포함한다.
예를 들어, 제1 수정 정보(diff 1)는, 도 3과 같이,
"5번 줄을 ' a = 5L; b = a;'로 수정, order 5120"을 포함하고,
제2 수정 정보(diff 2)는, 도 4와 같이,
"5번 줄을 ' a = 5lu ; b = a;'으로 수정, order 5120"을 포함하고,
제3 수정 정보(diff 3)는, 도 5와 같이,
"5번 줄을 ' a = 5l;'으로 수정, order 5120,
5번 줄 다음 줄에 ' b = a;' 추가, order 5220"을 포함할 수 있다.
도 1에 도시된 수정 정보 병합 단계(150)에서는, 미리 설정된 규칙에 따라 제1 내지 제3 수정 정보(diff 1, diff 2, diff 3)를 하나의 수정 정보로 병합한다.
구체적으로, 수정 정보 병합 단계(150)에서는, 미리 설정된 규칙의 (1) 규칙에 따라, 제1 내지 제3 수정 정보(diff 1, diff 2, diff 3)를 수정이 시작되는 라인의 순서에 따라 정렬한다. 그런데, 예로 든 것은, 제1 내지 제3 수정 정보들(diff 1, diff 2, diff 3)의 수정이 시작되는 라인이 모두 5번 라인이므로, (1) 규칙에 따라 순서가 변경되지 않는다.
다음으로, 미리 설정된 규칙의 (2) 규칙에 따라, 아래와 같이, 수정-삭제-추가 순서로 정렬한다.
① 5번 줄을 ' a = 5L; b = a;'으로 수정, order 5120
② 5번 줄을 ' a = 5lu ; b = a;'으로 수정, order 5120
③ 5번 줄을 ' a = 5l;'으로 수정, order 5120
④ 5번 줄 다음에 ' b = a;' 추가, order 5220
그런데, 5번 줄(line)에 대한 수정하는 수정 정보가 둘 이상(①, ②, ③)이므로, (3) 규칙에 따라 ① 내지 ③에 대한 하나의 병합 수정 정보를 생성한다. ① 내지 ③에 대한 하나의 병합 수정 정보를 생성할 때에는, 앞서 설명한 미리 설정된 병합 규칙에 따르는데, 도 6 내지 도 16를 참조하여 구체적으로 설명한다.
먼저 도 6을 참조하면, ①(diff 1)은 원본 소스 코드의 4번 컬럼의 문자를 ‘l’에서 ‘L’로 바꾸는 것이고(수정 종류: replace), ②(diff 2)는 원본 소스 코드의 4번 컬럼 다음에 문자 ’u’를 삽입 하는 것이고(수정 종류: insert), ③(diff 3)은 원본 소스 코드의 6 내지 9번 컬럼의 문자를 삭제 하는 것이다(수정 종류: delete). 병합 수정 정보(mergedDiff)는, 3개의 수정 정보가 병합된 하나의 수정 정보이다. 그리고, 인덱서(*)가 원본 소스 코드와 수정 정보들의 최초 컬럼에 추가한다.
도 6에서, 모든 인덱서(*)가 지시하는 문자들은 ‘a’로 동일하므로, 도 7과 같이 병합 수정 정보(mergedDiff)의 최초 컬럼인, 1번 컬럼에 ‘a’를 추가하고, 모든 인덱서(*)들을 2번 컬럼으로 하나씩 이동시킨다.
도 7에서, 모든 인덱서(*)가 지시하는 문자들은 ‘=’으로 동일하므로, 도 8과 같이 병합 수정 정보(mergedDiff)의 2번 컬럼에 ‘=’을 추가하고, 모든 인덱서(*)들을 3번 컬럼으로 하나씩 이동시킨다.
도 8에서, 모든 인덱서(*)가 지시하는 문자들은 ‘5’로 동일하므로, 도 9와 같이 병합 수정 정보(mergedDiff)의 3번 컬럼에 ‘5’를 추가하고, 모든 인덱서(*)들을 4번 컬럼으로 하나씩 이동시킨다.
도 9에서, 모든 인덱서(*)가 지시하는 문자들은 ‘L’를 제외하고 모두 동일하고, ‘L’이 속한 수정 정보(diff 1)의 수정 종류가 교체(replace)이므로, 도 10와 같이 병합 수정 정보(mergedDiff)의 4번 컬럼에 ‘L’을 추가하고, 모든 인덱서(*)들을 5번 컬럼으로 이동시킨다.
도 10에서, 모든 인덱서(*)가 지시하는 문자들은 ‘u’를 제외하고 모두 동일하고, ‘u’가 속한 수정 정보(diff 2)의 수정의 종류가 삽입(insert)이므로, 도 11와 같이 병합 수정 정보(mergedDiff)의 5번 컬럼에 ‘u’을 추가하고, ‘u’가 속한 수정 정보(diff 3)의 인덱서(*)만 6번 컬럼으로 이동시킨다.
도 11에서, 모든 인덱서(*)가 지시하는 문자들은 ‘;’으로 동일하므로, 도 12와 같이 병합 수정 정보(mergedDiff)의 6번 컬럼에 ‘;’을 추가하고, 모든 인덱서(*)들을 다음 컬럼으로 이동시킨다.
도 12에서, 모든 인덱서(*)가 지시하는 문자들은 ‘_(빈 문자열)’를 제외하고 모두 동일하고, ‘_(빈 문자열)’가 속한 수정 정보(diff 3)의 수정 종류가 삭제(delete)이므로, 도 13과 같이 병합 수정 정보의 7번 컬럼에 어떠한 문자도 추가하지 않고, ‘_(빈 문자열)’가 속한 수정 정보(diff 3)의 인덱서를 제외한 나머지 인덱서(*)들을 다음 컬럼으로 이동시킨다. 도 13 내지 도 15에 도시된 경우도 마찬가지이다.
도 16에서, 모든 인덱서(*)가 끝을 가리키므로, 작업을 종료하고, 현재까지 기록된 병합 수정 정보(mergedDiff)를 출력한다.
도 16의 과정이 끝나면, 3개의 수정 정보(① 내지 ③)는, 다음과 같이 하나의 병합 수정 정보로 병합되고,
“5번 줄을 ' a = 5Lu ;' 으로 수정, order 5120”
결국, 도 1에 도시된 수정 정보 병합 단계(150)에서 생성되는 하나의 수정 정보에는, 다음과 같이 4개가 아닌, 2개의 문자열(diff)로 구성되게 된다.
5번 줄을 ' a = 5Lu ;'으로 수정, order 5120 (3개의 diff가 합쳐짐)
5번 줄 다음에 ' b = a;' 추가, order 5220
도 1에 도시된 수정 단계(170)는, 도 17 내지 도 18에 도시된 바와 같이, 수정 정보 병합 단계(150)에서 생성된 하나의 수정 정보(2개의 diff를 포함) 내의 문자열의 정렬된 순서에 따라 소스 코드를 수정한다.
먼저, 도 17에 도시된 바와 같이, 하나의 수정 정보 내의 첫 번째 문자열(5번 줄을 ' a = 5Lu ;' 으로 수정, order 5120)에 따라 좌측의 원본을 우측과 같이 수정하고, 도 18에 도시된 바와 같이, 하나의 수정 정보 내의 두 번째 문자열(5번 줄 다음에 ' b = a;' 추가, order 5220)에 따라 좌측의 원본을 우측과 같이 수정한다.
도 18의 우측의 수정된 소스 코드를 참조하면, 도 2에 도시된 소스 코드가 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법을 통해서 자동으로 수정된 것임을 확인할 수 있다.
도 19 내지 도 25는 도 1에 도시된 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법의 다른 일 예를 설명하기 위한 도면들이다.
우선, 도 19에 도시된 바와 같이, 미리 결정된 소정의 <규칙>과 입력된 <소스 코드 원본>이 존재한다고 가정한다. <규칙>에는 1개의 규칙이 있다고 가정한다.
규칙 1 : if문은 중괄호가 있어야 함.
도 1에 도시된 위배 검출 단계(110)에서는, 도 19에 도시된 바와 같이, <소스 코드 원본>을 분석하여 위배 1 및 위배 2를 검출한다.
도 1에 도시된 수정 정보 생성 단계(130)에서는, 도 20 내지 도 21에 도시된 바와 같이, 2개의 수정 정보(diff 1, diff 2)를 생성한다. 생성되는 2개의 수정 정보 각각은, 수정이 시작되는 라인의 번호, 수정 내용과 종류, 및 우선순위(order)를 포함한다.
예를 들어, 제1 수정 정보(diff 1)는, 도 20과 같이,
“5번 줄 다음 줄에 ' {' 추가, order: 520
7번 줄 다음 줄에 ' }' 추가, order: 720”을 포함하고,
제2 수정 정보(diff 2)는, 도 21과 같이,
“6번 줄 다음 줄에 ' {' 추가, order: 610
7번 줄 다음 줄에 ' }' 추가, order 710”를 포함할 수 있다.
도 1에 도시된 수정 정보 병합 단계(150)에서는, 생성된 수정 정보들(diff 1, diff 2)를 하나의 수정 정보로 병합한다.
구체적으로, 수정 정보 병합 단계(150)에서는, 미리 설정된 규칙의 (1) 규칙에 의해서 제1 및 제2 수정 정보(diff 1, diff 2)를 수정이 시작되는 라인의 순서에 따라 정렬한다. 제1 수정 정보(diff 1)에서 수정이 시작되는 라인은 5번이고, 제2 수정 정보(diff 2)에서 수정이 시작되는 라인은 6번이므로, 아래와 같이 정렬된다.
① 5번 줄 다음 줄에 ' {' 추가, order: 520
② 7번 줄 다음 줄에 ' }' 추가, order: 720
③ 6번 줄 다음 줄에 ' {' 추가, order: 610
④ 7번 줄 다음 줄에 ' }' 추가, order 710
다음으로, 미리 설정된 규칙의 (2) 규칙에 따라, 수정-삭제-추가 순서로 정렬하는데, 이번 예에서는 모두 추가이므로, 위의 정렬 순서가 변경되지 않는다.
그런데, 7번 줄(line)에 대한 추가하는 수정 정보가 둘 이상(②, ④)이므로, (3) 규칙에 의해서, 수정 정보 각각에 포함된 우선순위(order)에 따라 아래와 같이 정렬한다.
5번 줄 다음에 ' {' 추가, order : 520
6번 줄 다음에 ' {' 추가, order : 610
7번 줄 다음에 ' }' 추가, order : 710
7번 줄 다음에 ' }' 추가 , order : 720
도 1에 도시된 수정 단계(170)는, 도 22 내지 도 25에 도시된 바와 같이, 수정 정보 병합 단계(150)에서 생성된 하나의 수정 정보(4개의 diff를 포함)에 기초하여 소스 코드를 수정한다.
도 22는 하나의 수정 정보 내의 첫 번째 문자열(5번 줄 다음에 ' {' 추가, order : 520)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여주고, 도 23은 하나의 수정 정보 내의 두 번째 문자열(6번 줄 다음에 ' {' 추가, order : 610)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여준다. 그리고 도 24는 하나의 수정 정보 내의 세 번째 문자열(7번 줄 다음에 ' }' 추가, order : 710)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여주고, 도 25는 하나의 수정 정보 내의 네 번째 문자열(7번 줄 다음에 ' }' 추가, order : 720)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여준다.
도 25의 우측의 수정된 소스 코드를 참조하면, 도 19에 도시된 소스 코드가 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법을 통해서 자동으로 수정된 것임을 확인할 수 있다.
도 26 내지 도 31은 도 1에 도시된 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법의 또 다른 일 예를 설명하기 위한 도면들이다.
우선, 도 26에 도시된 바와 같이, 미리 결정된 소정의 <규칙>과 입력된 <소스 코드 원본>이 존재한다고 가정한다. <규칙>에는 2개의 규칙이 있다고 가정한다.
규칙 1 : if문은 중괄호가 있어야 함.
규칙 2 : if문은 else문이 존재해야 함.
도 1에 도시된 위배 검출 단계(110)에서는, 도 26에 도시된 바와 같이, <소스 코드 원본>을 분석하여 위배 1 및 위배 2를 검출한다.
도 1에 도시된 수정 정보 생성 단계(130)에서는, 도 27 내지 도 28에 도시된 바와 같이, 2개의 수정 정보를 생성한다. 생성되는 2개의 수정 정보 각각은, 수정이 시작되는 라인의 번호, 수정 내용과 종류, 및 우선순위(order)를 포함한다.
예를 들어, 제1 수정 정보(diff 1)는, 도 27과 같이,
“3번 줄 다음에 ' {' 추가, order 320
4번 줄 다음에 ' }' 추가, order 420”을 포함하고,
제2 수정 정보(diff 2)는, 도 28과 같이,
“4번 줄 다음에 ' else', ' {', ' }' 추가, order 421”를 포함할 수 있다.
도 1에 도시된 수정 정보 병합 단계(150)에서는, 생성된 수정 정보들(diff 1, diff 2)를 하나의 수정 정보로 병합한다.
구체적으로, 수정 정보 병합 단계(150)에서는, 미리 설정된 규칙의 (1) 규칙에 의해서 제1 및 제2 수정 정보(diff 1, diff 2)를 수정이 시작되는 라인의 순서에 따라 정렬한다. 제1 수정 정보(diff 1)에서 수정이 시작되는 라인은 3번이고, 제2 수정 정보(diff 2)에서 수정이 시작되는 라인은 4번이므로, 아래와 같이 정렬된다.
① 3번 줄 다음에 ' {' 추가, order 320
② 4번 줄 다음에 ' }' 추가, order 420
③ 4번 줄 다음에 ' else', ' {', ' }' 추가, order 421
다음으로, 미리 설정된 규칙의 (2) 규칙에 따라, 수정-삭제-추가 순서로 정렬하는데, 이번 예에서는 모두 추가이므로, 위의 정렬 순서가 변경되지 않는다.
그런데, 4번 줄(line)에 대한 추가하는 수정 정보가 둘 이상(②, ③)이므로, (3) 규칙에 의해서, 수정 정보 각각에 포함된 우선순위(order)에 따라 정렬하는데, ②가 ③보다 우선순위(order)가 높기 때문에, 위의 정렬 순서가 변경되지 않는다.
도 1에 도시된 수정 단계(170)는, 도 29 내지 도 31에 도시된 바와 같이, 수정 정보 병합 단계(150)에서 생성된 하나의 수정 정보(3개의 diff를 포함)에 기초하여 소스 코드를 수정한다.
도 29는 하나의 수정 정보 내의 첫 번째 문자열(3번 줄 다음에 ' {' 추가, order 320)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여주고, 도 30은 하나의 수정 정보 내의 두 번째 문자열(4번 줄 다음에 ' }' 추가, order 420)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여준다. 그리고, 도 31은 하나의 수정 정보 내의 세 번째 문자열(4번 줄 다음에 ' else', ' { ', ' }' 추가, order 421)에 기초하여 좌측 원본이 우측과 같이 수정된 것을 보여준다.
도 31의 우측의 수정된 소스 코드를 참조하면, 도 26에 도시된 소스 코드가 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법을 통해서 자동으로 수정된 것임을 확인할 수 있다.
도 32는 본 발명의 실시 형태에 따른 소스 코드 위배 수정 모듈의 블록도이다.
도 32를 참조하면, 본 발명의 실시 형태에 따른 소스 코드 위배 수정 모듈은, 위배 검출부(3210), 수정 정보 생성부(3230), 수정 정보 병합부(3250) 및 수정부(3270)을 포함한다.
위배 검출부(3210)는 도 1의 위배 검출 단계(110)을 수행하고, 수정 정보 생성부(3230)은 도 1의 수정 정보 생성 단계(130)을 수행하고, 수정 정보 병합부(3250)은 도 1의 수정 정보 병합 단계(150)를 수행하고, 수정부(3270)은 도 1의 수정 단계(170)를 수행할 수 있다. 따라서, 위배 검출부(3210), 수정 정보 생성부(3230), 수정 정보 병합부(3250) 및 수정부(3270) 각각에 대한 설명은 앞서 설명한 내용으로 대체한다.
도 1 내지 도 31에서 설명한 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법은 다양한 컴퓨터 구성요소를 통하여 실행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터로 판독가능한 기록매체에 기록될 수 있다. 상기 컴퓨터로 판독가능한 기록매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.
상기 컴퓨터로 판독가능한 기록매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다.
컴퓨터로 판독가능한 기록매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 실행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 실행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
도 33 내지 도 38은 도 1 내지 도 31에서 설명한 본 발명의 실시 형태에 따른 소스 코드 위배 수정 방법이 기록된 컴퓨터로 판독가능한 기록매체(소위, ‘소스 코드 위배 수정 도구’)가, 컴퓨터에 설치 및 실행되어 컴퓨터의 표시 장치에서 디스플레이되고 있는 화면의 예들이다.
도 33는 소스 코드 위배 수정 도구의 전체 화면이다.
도 34는 사용자에 의해 작성된 소스 코드 원본을 분석하기 위해서 사용자가 ‘인스펙션’을 선택하는 화면이다.
도 35는 도 34에서 사용자가 인스펙션 클릭 시, 소스 코드 위배 수정 도구가 소스 코드를 분석하여 위배를 검출하고, 수정 정보를 생성하는 모습을 보여주는 화면이다.
도 36은 자동으로 소스 코드를 수정하는 실행 화면의 일 예이다.
도 37은 도 36에서 특정 위배를 사용자가 선택할 경우에 수정된 코드와 소스 코드 원본을 비교하는 새로운 창을 보여주는 일 예이다.
도 38은 소스 코드 위배 수정 도구가 자동으로 소스 코드를 변경할 수 있는 ‘변경’ 버튼을 구비한 화면을 보여주는 일 예이다. 사용자가 상기 변경 버튼을 클릭하면, 사용자가 작성한 소스 코드 원본이 자동으로 수정된다.
이상 첨부된 도면을 참조하여 본 발명의 실시 형태를 설명하였으나 이는 단지 예시일 뿐 본 발명을 한정하는 것이 아니며, 본 발명이 속하는 분야의 통상의 지식을 가진 자라면 본 실시 형태의 본질적인 특성을 벗어나지 않는 범위에서 이상에 예시되지 않은 여러 가지의 변형과 응용이 가능함을 알 수 있을 것이다. 예를 들어, 실시 형태에 구체적으로 나타난 각 구성 요소는 변형하여 실시할 수 있는 것이다. 그리고 이러한 변형과 응용에 관계된 차이점들은 첨부된 청구범위에서 규정하는 본 발명의 범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (8)

  1. 소스 코드를 분석하여 하나 또는 다수의 위배를 검출하는, 위배 검출 단계;
    검출된 상기 위배를 수정하기 위한 다수의 수정 정보를 생성하는, 수정 정보 생성 단계;
    생성된 상기 다수의 수정 정보를 병합하는, 수정 정보 병합 단계; 및
    병합된 상기 수정 정보에 기초하여 상기 소스 코드를 수정하는, 수정 단계;를 포함하고,
    상기 수정 정보 생성 단계에서 생성된 상기 다수의 수정 정보 각각은, 우선순위(order)를 포함하고,
    상기 우선순위(order)의 맨 앞 첫번째 숫자는 라인 번호이고, 두번째 숫자는 수정 종류에 따라 미리 결정된 숫자이고, 상기 두번째 숫자 다음의 숫자들은 상기 위배가 발생한 위치의 코드 블록 깊이(code block depth)인, 소스코드의 위배 수정 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 수정 정보 병합 단계는, 상기 우선순위에 따라 상기 다수의 수정 정보의 순서를 정렬하여 상기 다수의 수정 정보를 병합하고,
    상기 수정 단계는, 상기 순서에 따라 상기 소스 코드를 수정하는, 소스 코드의 위배 수정 방법.
  4. 제 1 항에 있어서,
    상기 위배 검출 단계에서 검출된 상기 하나 또는 다수의 위배가 연속되는 둘 이상의 라인의 추가 또는 삭제이면,
    상기 수정 정보 병합 단계는, 하나의 수정 정보에 상기 연속되는 둘 이상의 라인의 추가 또는 삭제의 정보를 포함시키는, 소스 코드의 위배 수정 방법.
  5. 소스 코드를 분석하여 하나 또는 다수의 위배를 검출하는, 위배 검출 단계;
    검출된 상기 위배를 수정하기 위한 다수의 수정 정보를 생성하는, 수정 정보 생성 단계;
    생성된 상기 다수의 수정 정보를 병합하는, 수정 정보 병합 단계; 및
    병합된 상기 수정 정보에 기초하여 상기 소스 코드를 수정하는, 수정 단계;를 포함하고,
    상기 수정 정보 병합 단계는, 미리 설정된 규칙에 따라 생성된 상기 다수의 수정 정보를 병합하고,
    상기 미리 설정된 규칙은,
    상기 다수의 수정 정보들을 수정이 시작되는 라인의 순서에 따라 정렬하는 단계;
    어느 한 라인에 대한 수정 정보가 다수인 경우, 상기 다수의 수정 정보들을 수정(Modify), 삭제(Delete) 및 추가(Add) 순서대로 정렬하는 단계; 및
    상기 어느 한 라인에 대한 수정(Modify)하는 수정 정보가 둘 이상이면, 미리 설정된 병합 규칙에 따라 하나의 병합 수정 정보를 생성하고, 상기 어느 한 라인에 대한 삭제(Delete)하는 수정 정보가 둘 이상이면, 가장 많은 라인을 삭제하는 수정 정보를 선택하고, 상기 어느 한 라인에 대한 추가(Add)하는 수정 정보가 둘 이상이면, 미리 지정한 우선순위(order)에 따라 정렬하는 단계;
    를 포함하는, 소스 코드의 위배 수정 방법.
  6. 제 5 항에 있어서,
    상기 미리 설정된 병합 규칙은,
    상기 둘 이상의 수정 정보 각각에 포함된 우선순위(order)에 따라, 상기 둘 이상의 수정 정보를 정렬하는, 정렬 단계;
    인덱서를 상기 어느 한 라인에 대한 소스 코드 원본과 상기 둘 이상의 수정 정보 각각의 최초 컬럼에 추가하는, 추가 단계; 및
    추가된 모든 인덱서들이 지시하는 문자를 비교하여 상기 병합 수정 정보를 결정하고, 상기 모든 인덱서들의 이동을 결정하는, 결정 단계;
    를 포함하는, 소스 코드의 위배 수정 방법.
  7. 제 6 항에 있어서, 상기 결정 단계는,
    상기 모든 인덱서가 지시하는 문자들이 동일한 경우, 상기 병합 수정 정보의 최초 컬럼에 동일한 상기 문자를 추가하고, 상기 모든 인덱서를 다음 컬럼으로 이동시키는 단계; 및
    상기 모든 인덱서가 지시하는 문자들 중 어느 하나의 문자만 다르고 나머지들은 동일한 경우, (a), (b) 및 (c) 중 어느 하나에 따라 상기 모든 인덱서의 이동과 상기 병합 수정 정보를 결정하는 단계;
    상기 (a)는, 상기 어느 하나의 문자가 속한 수정 정보의 종류가 삽입(insert)이면, 상기 병합 수정 정보의 최초 컬럼에 상기 어느 하나의 문자를 추가하고, 상기 어느 하나의 문자가 속한 수정 정보의 인덱서만 다음 컬럼으로 이동시키고,
    상기 (b)는, 상기 어느 하나의 문자가 속한 수정 정보의 종류가 삭제(delete)이면, 상기 병합 수정 정보의 상기 최초 컬럼에 어떠한 문자도 추가하지 않고, 상기 어느 하나의 문자가 속한 수정 정보의 인덱서를 제외한 나머지 인덱서들을 상기 다음 컬럼으로 이동시키고,
    상기 (c)는, 상기 어느 하나의 문자가 속한 수정 정보의 종류가 교체(replace)이면, 상기 병합 수정 정보의 최초 컬럼에 상기 어느 하나의 문자를 추가하고, 상기 모든 인덱서를 상기 다음 컬럼으로 이동시키는 것을
    포함하는, 소스 코드의 위배 수정 방법.
  8. 제 1 항, 제 3 항 내지 제 7 항 중 어느 하나의 항에 따른 소스 코드의 위배 수정 방법을 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체.
KR1020160118171A 2016-09-13 2016-09-13 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체 KR101850303B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020160118171A KR101850303B1 (ko) 2016-09-13 2016-09-13 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
US15/632,161 US10261884B2 (en) 2016-09-13 2017-06-23 Method for correcting violation of source code and computer readable recording medium having program performing the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160118171A KR101850303B1 (ko) 2016-09-13 2016-09-13 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체

Publications (2)

Publication Number Publication Date
KR20180030349A KR20180030349A (ko) 2018-03-22
KR101850303B1 true KR101850303B1 (ko) 2018-05-31

Family

ID=61560797

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160118171A KR101850303B1 (ko) 2016-09-13 2016-09-13 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체

Country Status (2)

Country Link
US (1) US10261884B2 (ko)
KR (1) KR101850303B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220146061A (ko) 2021-04-23 2022-11-01 연세대학교 산학협력단 다중 오류 프로그램 소스 코드 자동 수정 장치 및 방법
KR102620097B1 (ko) * 2023-07-05 2024-01-02 쿠팡 주식회사 코드 테스트 지원 방법 및 전자 장치

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101850303B1 (ko) * 2016-09-13 2018-05-31 슈어소프트테크주식회사 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
KR102066868B1 (ko) * 2018-03-21 2020-01-16 (주)씽크포비엘 목표 신뢰성 지수를 만족하도록 전장용 소프트웨어 안전성을 시뮬레이션하는 방법 및 장치
KR20200121611A (ko) * 2019-04-16 2020-10-26 삼성전자주식회사 서버 및 그 제어 방법
JP7473145B2 (ja) * 2019-05-31 2024-04-23 コネクトフリー株式会社 ソフトウェア開発装置およびソフトウェア開発プログラム

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100501936B1 (ko) 2003-05-07 2005-07-18 삼성전자주식회사 소스 코드 검사 시스템 및 방법
US7707552B2 (en) * 2005-10-17 2010-04-27 International Business Machines Corporation Method and system for autonomically prioritizing software defects
KR100890546B1 (ko) * 2007-04-30 2009-03-27 슈어소프트테크주식회사 메모리 오류 검출 방법
KR101053104B1 (ko) * 2009-10-28 2011-08-02 엘에스산전 주식회사 전산기기 소프트웨어 테스트 방법 및 시스템
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
US8621441B2 (en) * 2010-12-27 2013-12-31 Avaya Inc. System and method for software immunization based on static and dynamic analysis
US20130179863A1 (en) * 2012-01-11 2013-07-11 Microsoft Corporation Bug variant detection using program analysis and pattern identification
US20130339929A1 (en) * 2012-06-14 2013-12-19 Microsoft Corporation Program repair
US9201646B2 (en) * 2013-01-05 2015-12-01 Vmware, Inc. Automatic code review and code reviewer recommendation
US9928040B2 (en) * 2013-11-12 2018-03-27 Microsoft Technology Licensing, Llc Source code generation, completion, checking, correction
KR101623174B1 (ko) 2014-08-27 2016-05-20 주식회사 파수닷컴 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체
US9792443B1 (en) * 2015-03-12 2017-10-17 Whitehat Security, Inc. Position analysis of source code vulnerabilities
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
KR101850303B1 (ko) * 2016-09-13 2018-05-31 슈어소프트테크주식회사 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220146061A (ko) 2021-04-23 2022-11-01 연세대학교 산학협력단 다중 오류 프로그램 소스 코드 자동 수정 장치 및 방법
KR102620097B1 (ko) * 2023-07-05 2024-01-02 쿠팡 주식회사 코드 테스트 지원 방법 및 전자 장치

Also Published As

Publication number Publication date
KR20180030349A (ko) 2018-03-22
US20180074939A1 (en) 2018-03-15
US10261884B2 (en) 2019-04-16

Similar Documents

Publication Publication Date Title
KR101850303B1 (ko) 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체
US7853869B2 (en) Creation of semantic objects for providing logical structure to markup language representations of documents
US8380650B2 (en) Information extraction rule making support system, information extraction rule making support method, and information extraction rule making support program
CN108762743B (zh) 一种数据表操作代码生成方法及装置
JP2006268638A (ja) 文書差分検出装置
JP5665128B2 (ja) 静的解析支援装置、静的解析支援方法、及びプログラム
US20060265646A1 (en) System, method, and computer program product for detection of potentially-problematic terminology in documents
US9218411B2 (en) Incremental dynamic document index generation
CN104809106A (zh) 一种专利方案的挖掘系统及挖掘方法
Tateosian Python For ArcGIS
JP5747698B2 (ja) 要件管理支援装置
JP7055064B2 (ja) データベースマイグレーション支援システム及びプログラム
JP2006285707A (ja) 業務仕様作成支援システム及び方法
US10216611B2 (en) Detecting mistyped identifiers and suggesting corrections using other program identifiers
CN103365640A (zh) 层叠样式表样式转换方法及装置
KR100470440B1 (ko) 법률 개정과정에서 필요한 각종 보고서의 규칙기반 자동생성 방법
JP2004157927A (ja) 帳票入力用プログラムの生成方式、生成プログラム及び生成方法
JP2006277127A (ja) 修正プログラムの比較方法
KR102474727B1 (ko) Bom 데이터 편집 시스템, 방법 및 컴퓨터 프로그램
JP5808264B2 (ja) コード生成装置及びコード生成方法及びプログラム
CN113515443A (zh) 多国语言自动核对方法、装置、计算机设备及存储介质
JP6018539B2 (ja) 情報処理装置、情報処理方法、およびプログラム
KR102029057B1 (ko) 전자문서를 편집하는 방법 및 장치
JP4777740B2 (ja) テスト支援システム
JP4953896B2 (ja) プログラムレビュー支援装置

Legal Events

Date Code Title Description
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)