KR100501936B1 - 소스 코드 검사 시스템 및 방법 - Google Patents

소스 코드 검사 시스템 및 방법 Download PDF

Info

Publication number
KR100501936B1
KR100501936B1 KR10-2003-0029138A KR20030029138A KR100501936B1 KR 100501936 B1 KR100501936 B1 KR 100501936B1 KR 20030029138 A KR20030029138 A KR 20030029138A KR 100501936 B1 KR100501936 B1 KR 100501936B1
Authority
KR
South Korea
Prior art keywords
source code
token
rule
file
code creation
Prior art date
Application number
KR10-2003-0029138A
Other languages
English (en)
Other versions
KR20040096259A (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 KR10-2003-0029138A priority Critical patent/KR100501936B1/ko
Publication of KR20040096259A publication Critical patent/KR20040096259A/ko
Application granted granted Critical
Publication of KR100501936B1 publication Critical patent/KR100501936B1/ko

Links

Classifications

    • 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
    • G06F8/436Semantic checking

Abstract

본 발명은, 검사 대상인 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 상기 소스 코드 파일에 대한 복사본을 생성하는 소스 코드 파일 관리부와; 상기 소스 코드 파일 검사에 사용될 소스 코드 작성 규칙을 선택받으면, 상기 선택받은 소스 코드 작성 규칙에 대한 리스트를 토큰 스캔부 및 비교부로 통보해주는 소스 코드 작성 규칙 관리부와; 상기 소스 코드 파일을 토큰 단위로 읽어 오고, 소스 코드 작성 규칙 관리부로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 상기 읽어 온 토큰 중에서 분석될 토큰을 선별하여 소정 메모리 영역에 저장하는 토큰 스캔부와; 상기 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서 구문 분석하고, 상기 구문 분석된 토큰을 상기 소스 코드 작성 규칙의 카테고리별로 저장하는 분석부와; 상기 소스 코드 작성 규칙 관리부로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 상기 소스 코드 작성 규칙 저장부에서 가져온 규칙 값과 상기 카테고리별로 저장되어 있는 토큰의 값을 비교하여 상기 소스 코드 작성 규칙에 위배되는 토큰을 규칙 위배 리스트에 저장하는 비교부와; 상기 규칙 위배 리스트에 저장된 토큰을 상기 소스 코드 작성 규칙에 맞도록 수정한 후, 상기 소스 코드 파일 관리부와 연동하여 수정된 소스 코드 파일을 생성시키고, 수정된 부분을 보고하는 배치 관리부를 포함하여 이루어진다.

Description

소스 코드 검사 시스템 및 방법{SYSTEM AND METHOD FOR SOURCE CODE CHECKING}
본 발명은 소스 코드 검사 시스템 및 방법에 관한 것으로, 더욱 상세하게는 다양한 코딩 스타일로 작성된 소스 코드를 표준화된 소스 코드 작성 규칙으로 검사하고, 표준화된 소스 코드 작성 규칙에 맞게 수정할 수 있도록 하는 소스 코드 검사 시스템 및 방법에 관한 것이다.
소프트웨어를 개발함에 있어 다수의 개발자가 참여하고, 필요에 따라 외주를 통한 개발이 진행되는 경우에, 표준화된 코딩 스타일을 정의하지 않고 개발을 진행하면, 각각의 소프트웨어 개발자는 자신의 코딩 스타일로 소스 코드를 작성하게 된다.
전술한 바와 같이, 개발자 각자가 자신의 코딩 스타일로 소스 코드를 작성하게 되면, 개발 완료된 소프트웨어는 일관성이 없게 될 뿐만 아니라, 유지 보수도 어렵게 된다.
즉, 다수의 개발자가 하나의 소프트웨어를 완성한 후, 개발자 중 일부가 이동 및 퇴사를 하게 되는 경우에, 남아있는 개발자나 후임 개발자가 해당 소프트웨어의 유지 보수를 수행하게 되는 데, 이동 및 퇴사한 개발자가 작성한 소스 코드를 읽지 못하게 되어 유지 보수가 어렵게 되는 경우가 발생하기도 한다.
전술한 바와 같이, 소프트웨어 개발 시에 개발자 각자가 자신의 코딩 스타일로 소스 코드를 작성하기 때문에, 추후 유지 보수가 어려워지게 되는 문제점이 있다.
본 발명은 전술한 문제점을 해결하기 위하여 안출된 것으로서, 다양한 코딩 스타일로 작성된 소스 코드를 표준화된 소스 코드 작성 규칙으로 검사하고, 표준화된 소스 코드 작성 규칙에 맞게 수정할 수 있도록 하는 소스 코드 검사 시스템 및 방법을 제공함에 그 목적이 있다.
전술한 목적을 달성하기 위한 본 발명의 일 실시예에 따른 소스 코드 검사 시스템은, 검사 대상인 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 상기 소스 코드 파일에 대한 복사본을 생성하는 소스 코드 파일 관리부와; 상기 소스 코드 파일 검사에 사용될 소스 코드 작성 규칙을 선택받으면, 상기 선택받은 소스 코드 작성 규칙에 대한 리스트를 토큰 스캔부 및 비교부로 통보해주는 소스 코드 작성 규칙 관리부와; 상기 소스 코드 파일을 토큰 단위로 읽어 오고, 소스 코드 작성 규칙 관리부로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 상기 읽어 온 토큰 중에서 분석될 토큰을 선별하여 소정 메모리 영역에 저장하는 토큰 스캔부와; 상기 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서 구문 분석하고, 상기 구문 분석된 토큰을 상기 소스 코드 작성 규칙의 카테고리별로 저장하는 분석부와; 상기 소스 코드 작성 규칙 관리부로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 상기 소스 코드 작성 규칙 저장부에서 가져온 규칙 값과 상기 카테고리별로 저장되어 있는 토큰의 값을 비교하여 상기 소스 코드 작성 규칙에 위배되는 토큰을 규칙 위배 리스트에 저장하는 비교부와; 상기 규칙 위배 리스트에 저장된 토큰을 상기 소스 코드 작성 규칙에 맞도록 수정한 후, 상기 소스 코드 파일 관리부와 연동하여 수정된 소스 코드 파일을 생성시키고, 수정된 부분을 보고하는 배치 관리부를 포함하여 이루어지는 것이 바람직하다.
여기서, 상기 소스 코드 작성 규칙 관리부는, 소스 코드 작성 규칙들이 저장되어 있는 소스 코드 작성 규칙 저장부에 접근하여 상기 소스 코드 작성 규칙들의 수정을 수행하고는 것이 바람직하다.
나아가, 상기 소스 코드 작성 규칙 저장부는, 별도의 데이터베이스로 구성되는 것이 바람직하다.
그리고, 상기 배치 관리부는, 별도로 구비되는 있는 컴파일러와 연동하여 상기 재생성된 소스 코드 파일에 대한 컴파일을 수행하는 것이 바람직하다.
한편, 본 발명의 일 실시예에 따른 소스 코드 검사 방법은, 검사 대상인 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 상기 읽어 온 소스 코드 파일의 복사본을 생성하는 소스 코드 파일 관리 과정과; 상기 소스 코드 파일 검사에 사용될 소스 코드 작성 규칙을 선택받고, 상기 선택받은 소스 코드 작성 규칙에 대한 리스트를 토큰 스캐너 및 비교부로 통보해주는 소스 코드 작성 규칙 관리 과정과; 상기 소스 코드 파일을 토큰 단위로 읽어 오고, 상기 소스 코드 작성 규칙 리스트에 의거하여 상기 읽어 온 토큰 중에서 분석될 토큰을 선별하여 소정 메모리 영역에 저장하는 스캔 과정과; 상기 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서 구문 분석하고, 상기 구문 분석된 토큰을 상기 소스 코드 작성 규칙의 카테고리별로 저장하는 분석 과정과; 상기 카테고리별로 저장되어 있는 토큰의 값을 소스 코드 작성 규칙의 값과 비교하여 상기 소스 코드 작성 규칙에 위배되는 토큰을 규칙 위배 리스트에 저장하는 비교 과정과; 상기 규칙 위배 리스트에 저장된 토큰을 상기 소스 코드 작성 규칙에 맞도록 수정한 후, 수정된 소스 코드 파일로 생성시키고, 수정된 부분을 보고하는 배치 관리 과정을 포함하여 이루어지는 것이 바람직하다.
여기서, 상기 토큰 스캔 과정은, 상기 소스 코드 파일을 토큰 단위로 읽어 오는 단계와; 상기 읽어 온 토큰의 내용이 소스 코드 작성 규칙 리스트에 존재하는 지를 판단하는 단계와; 상기 판단결과 상기 읽어 온 토큰의 내용이 소스 코드 작성 규칙 리스트에 존재하는 경우에는 상기 읽어 온 토큰을 소정 메모리 영역에 저장하는 단계를 포함하여 이루어지는 것이 바람직하다.
그리고, 상기 비교 과정은, 상기 소스 코드 작성 규칙 리스트에 의거하여 소스 코드 작성 규칙 저장소에서 상기 소스 코드 작성 규칙에 적용되는 값을 가져오는 단계와; 상기 카테고리별로 저장되어 있는 토큰을 읽어 오는 단계와; 상기 읽어 온 토큰을 상기 소스 코드 작성 규칙 값과 비교하여 상기 읽어 온 토큰이 상기 소스 코드 작성 규칙에 위배되는 지를 판단하는 단계와; 상기 판단결과 상기 읽어 온 토큰이 상기 소스 코드 작성 규칙에 위배되는 경우에는 상기 읽어 온 토큰을 규칙 위배 리스트에 저장하는 단계와; 상기 규칙 위배 리스트에 저장된 토큰과 관련있는 토큰을 상기 규칙 위배 리스트에 저장하는 단계를 포함하여 이루어지는 것이 바람직하다.
그리고, 상기 배치 관리 과정은, 상기 규칙 위배 리스트에 저장되어 있는 토큰을 읽어 오는 단계와; 상기 읽어 온 토큰을 상기 소스 코드 작성 규칙 값에 의거하여 상기 읽어 온 토큰의 내용을 수정하고, 상기 수정된 토큰을 수정 리스트에 저장하는 단계와; 상기 수정된 토큰의 위치 정보에 의거하여 소스 코드 파일을 수정하는 단계와; 상기 수정된 소스 코드 파일에 대한 컴파일을 수행하여 상기 수정된 소스 코드 파일을 검증하는 단계와; 상기 수정된 토큰 내역을 보고하는 단계를 더 포함하여 이루어지는 것이 바람직하다.
이하에서는 첨부한 도면을 참조하여 본 발명의 바람직한 실시예에 따른 소스 코드 검사 시스템 및 방법에 대해서 상세하게 설명한다.
도 1은 본 발명의 일 실시예에 따른 소스 코드 검사 시스템의 구성을 보인 도로, 파일 관리부(10)와, 규칙 관리부(20)와, 규칙 저장부(30)와, 토큰 스캐너(40)와, 어휘 분석부(50)와, 어휘 비교부(60)와, 배치 관리부(70)를 구비하여 이루어진다.
이와 같은 구성에 있어서, 파일 관리부(10)는 운용자에 의해 검사 대상인 소스 코드 파일이 선택되면, 선택된 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 임의의 디렉토리를 만들어 읽어 온 소스 코드 파일의 복사본을 생성하여 관리한다. 그리고, 배치 관리부(70)에서 수정된 소스 코드의 위치 정보에 의거하여 수정된 소스 코드를 해당 위치에 배치함으로써, 소스 코드 작성 규칙에 맞는 수정된 소스 코드 파일을 생성하는 기능을 수행한다.
전술한 바와 같은 기능을 수행하기 위해 파일 관리부(10)는 도 2에 도시하는 바와 같이, 디렉토리 스캔 기능을 서브 기능으로 구비하고 있는데, 디렉토리 스캔(Scan Directory), 디렉토리 정보 저장(Save Directory Information), 디렉토리에 포함된 파일 정보 저장(Save Included File Information), 파일 타입 체크(File Type Check), 파일 헤더 추적(File Header Trace), 디렉토리 생성(Make Directory), 파일 이동(Move Files) 등의 디렉토리 스캔 기능과, 파일 인덱스 설정(Set File Index), 파일 로드(Load File), 파일 저장(Save File), 읽어 온 파일을 프로젝트 파일로 등록(Register File To Project File), 프로젝트 파일로부터 파일 삭제(Delete File From Project File), 별명 파일 생성(Generate Alias File), 별명 디렉토리 생성(Generate Alias Directory), 프로젝트 로그 생성(Generate Project Log), 파일 길이 계산(Calculate File Length), 대상 파일 기록(Write Target File) 등의 파일 관리 기능을 수행한다.
한편, 규칙 관리부(20)는 운용자에 의해 소스 코드 파일 검사에 사용될 소스 코드 작성 규칙을 선택받으면, 선택받은 소스 코드 작성 규칙에 대한 리스트를 토큰 스캐너(40) 및 어휘 비교부(60)로 통보해주고, 소스 코드 작성 규칙이 저장되어 있는 규칙 저장부(30)에 접근하여 소스 코드 작성 규칙 내용을 수정한다.
전술한 바와 같은 기능을 수행하기 위해 규칙 관리부(20)는 도 3에 도시하는 바와 같이, 규칙 정의(Define Rule), 규칙 수정(Modifiy Rule), 규칙 삭제(Delete Rule), 규칙 등록(Register Rule), 규칙 선택(Select Rule), 우선 순위 관리(Rule Priority Manage), 수정 계산(Calculate Violation) 등의 기능을 수행한다.
전술한, 규칙 저장부(30)는 소스 코드 작성 규칙을 모아 놓은 저장소로, MS SQL(MicroSoft Structured Query Language)과 같은 DBMS(DataBase Management System)나, 시스템의 적소에 구비되어 있는 메모리 상에서 구현될 수 있으며, 규칙 저장부(30)에 저장된 소스 코드 작성 규칙은 규칙 관리부(20)를 통해 수정될 수 있다.
전술한 바와 같은 규칙 저장부(30)의 구조를 살펴보면 도 4에 도시하는 바와 같이, 해당 소스 코드 작성 규칙의 일련 번호를 나타내는 ID 필드(a), 해당 소스 코드 작성 규칙의 이름을 나타내는 규칙 이름 필드(b), 해당 소스 코드 작성 규칙이 속한 카테고리를 나타내는 카테고리 필드(c)와, 해당 소스 코드 작성 규칙 적용 시의 우선 순위를 나타내는 우선 순위 필드(d)와, 어휘 분석 시 사용되는 플래그를 나타내는 플래그 필드(e)를 구비하여 이루어진다.
여기서, 소스 코드 작성 규칙은 명명 규정(Naming Convention), 프로그래밍 스타일(Programming Style), 코멘트(Comment), 레이아웃(Layout)과 같이 네 개의 카테고리로 나뉘어질 수 있다.
한편, 토큰 스캐너(40)는 파일 관리부(10)에서 읽어 온 소스 코드 파일을 토큰 단위로 읽어 오고, 읽어 온 토큰이 규칙 관리부(20)로부터 통보받은 소스 코드 작성 규칙 리스트에 속해 있는 경우에는 해당 토큰을 분석하기 위해 저장한다. 여기서, 소스 코드 작성 규칙 리스트에 의해 선별된 토큰은 리스트 형식으로 소정 메모리 영역, 파일 시스템, 또는 RDBMS(Relational DataBase Management System)에 저장되며, 토큰 내용에 대한 접근은 메모리 어드레스 또는 리스트 인덱스에 의거하여 이루어진다.
전술한 바와 같은 기능을 수행하기 위해 토큰 스캐너(40)는 도 5에 도시하는 바와 같이, 토큰 읽기(Read Token), 토큰 저장(Save Token), 읽어 온 토큰과 소스 코드 작성 규칙 비교(Compare Token With Rules), 소스 코드 작성 규칙 리스트에 속하는 토큰에 플래그 설정(Set Flag On Token) 등의 기능을 수행한다.
전술한 바와 같이, 토큰 스캐너(40)는 토큰 단위로 소스 코드 파일을 읽어 오는 데, 토큰은 도 6에 도시하는 바와 같은 모습으로 구성된다.
한편, 어휘 분석부(50)는 토큰 스캐너(40)에 의해 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서 구문 분석하고, 분석된 내용을 소스 코드 작성 규칙의 카테고리별로 저장한다. 그리고, 분석된 토큰에 대한 각종 정보(예를 들어, 파일 인덱스, 파일 패스, 라인, 열, 타입, 길이, 케이스, 데이터 타입, 토큰 인덱스 등)를 소정 메모리 영역에 저장한다.
전술한 바와 같이, 읽어 온 토큰에 대한 구문 분석을 수행할 때, 어휘 분석부(50)는 각 토큰의 문법적인 검사와 함께 라인 단위, 블록 단위 포맷을 분석하고, 토큰 스타일, 타입, 카테고리를 검증하여 각 항목별로 분석 내용을 저장한다. 또한, 토큰에 따라 토큰의 유효 영역, 유니크, 케이스, 길이 등을 저장하기도 하고,읽어 온 토큰이 연산자 토큰인 경우에는 토큰의 배치나 문두 결자, 스페이스 정보를 저장하기도 하며, 규칙에 대한 우선 순위를 파악하기도 한다.
전술한 바와 같은 기능을 수행하는 어휘 분석부(50)는 도 7에 도시하는 바와 같이, 문두 결자나 공백 같은 포맷(Format), 명령어(Instruction), 코멘트(Comment), 함수/블록/글로벌 등에 대한 유효 범위(Scope), 이스케이프(Escape)나 구분기호(Punctuator) 등과 같은 문자열(String), 문(Statement), 표현(Expression), 사용자에 의해 정의되거나 예약된 데이터 타입(Type), 명칭(Identifier), 정의(Definition) 등을 분석하는 기능을 수행한다.
전술한, 어휘 분석부(50)는 소스 코드 작성 규칙이 적용되는 단위별로 구문 분석을 수행하는 데, 소스 코드 작성 규칙이 적용되는 단위는 토큰 하나일 수도 있고, 하나의 라인일 수도 있고, {}로 묶인 블록 단위 혹은 함수나 파일일 수도 있다.
그리고, 어휘 비교부(60)는 규칙 관리부(20)로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 규칙 저장부(30)에서 소스 코드 작성 규칙에 실제로 적용되는 규칙 값을 가져오고, 어휘 분석부(50)에 의해 분석되어 카테고리별로 저장되어 있는 토큰의 값을 규칙 저장부(30)에서 가져온 규칙 값과 비교하여 해당 토큰 값이 규칙 값에 위배되는 지를 판단한다. 판단결과 해당 토큰 값이 규칙 값에 위배되는 경우에는 해당 토큰에 대한 파일 인덱스 및 어드레스와 같은 토큰 정보를 규칙 위배 리스트에 저장한다. 또한, 규칙 값에 위배되는 토큰과 관련된 토큰의 존재 여부를 확인하여, 관련된 토큰이 존재하는 경우에는 확인된 토큰에 대한 정보도 규칙 위배 리스트에 저장한다.
전술한 바와 같이 읽어 온 토큰 값과 규칙 값을 비교하는 어휘 비교부(60)는 도 8에 도시하는 바와 같이, 문두 결자, 라인 길이, 파일 길이, 연산자 배치, 라인 공급 규칙 등에 대한 형식, 파일 이름이나 디렉토리 이름 등에 대한 프로젝트 레이아웃(Project Layout), 코멘트 레이아웃, 프리프로세서 레이아웃, 선언 정의 레이아웃, 함수 프로토콜 타입, 글로벌 정의 레이아웃 등에 대한 파일 레이아웃(File Layout), 유효 범위, 케이스, 길이, 유니크, 프리픽스 등에 대한 명명에 대해서 비교한다.
한편, 배치 관리부(70)는 어휘 비교부(60)에 의해 규칙 위배 리스트에 저장되어 있는 토큰을 읽어 와서 소스 코드 작성 규칙에 맞게 수정하고, 수정된 토큰의 파일 인덱스 및 위치 정보에 의거하여 수정된 토큰을 소스 코드 파일의 해당 위치에 배치한 후, 파일 관리부(10)를 통해 수정된 소스 코드 파일을 재생성시킨다. 여기서, 수정된 토큰을 수정 리스트에 저장하여 추후 운용자가 수정된 부분을 확인할 수 있도록 하고, 재생성된 소스 코드 파일에 대한 검증을 위해 외부에 별도로 구비되어 있는 컴파일러와 연동하여 재생성된 소스 코드 파일에 대한 컴파일을 수행한다.
전술한 바와 같은 기능을 수행하는 배치 관리부(70)는 도 9에 도시하는 바와 같이, 파일 생성, 수정된 토큰 배치, 수정된 블록 배치, 수정된 라인 배치, 수정된 위치 배치, 이동 토큰 체크 등에 대한 기능을 수행한다.
도 10a 및 도 10b는 본 발명의 일 실시예에 따른 소스 코드 검사 방법을 설명하기 위한 플로우챠트로, 도 11을 참조하여 설명한다.
우선, 운용자로부터 검사 대상인 소스 코드 파일을 선택받고(S10), 상기한 과정 S10에서 선택받은 소스 코드 파일의 검사에 사용될 소스 코드 작성 규칙을 선택받는다(S12).
상기한 과정 S12에서 운용자로부터 소스 코드 파일 검사에 사용될 소스 코드 작성 규칙을 선택받으면, 규칙 관리부(20)는 선택받은 소스 코드 작성 규칙에 대한 리스트를 토큰 스캐너(40) 및 어휘 비교부(60)로 통보한다(S14).
한편, 상기한 과정 S10에서 운용자로부터 검사 대상인 소스 코드 파일을 검사받으면, 파일 관리부(10)는 선택받은 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 임의의 디렉토리를 만들어 읽어 온 소스 코드 파일의 복사본을 생성한다(S16).
이후, 토큰 스캐너(40)는 소스 코드 파일의 인덱스 순서에 의거하여 소스 코드 파일을 토큰 단위로 읽어 오고(S18), 읽어 온 토큰이 분석 대상인 지를 판단한다(S20).
상기한 과정 S20에서, 상기한 과정 S18에서 읽어 온 토큰이 분석 대상인 지에 대한 판단은, 상기한 과정 S18에서 읽어 온 토큰 내용이 규칙 관리부(20)로부터 통보받은 소스 코드 작성 규칙 리스트에 존재하는 지로 판단할 수 있다. 즉, 상기한 과정 S18에서 읽어 온 토큰 내용이 소스 코드 작성 규칙 리스트에 존재하는 경우에는 상기한 과정 S18에서 읽어 온 토큰은 분석 대상이 되고, 상기한 과정 S18에서 읽어 온 토큰 내용이 소스 코드 작성 규칙 리스트에 존재하지 않는 경우에는 상기한 과정 S18에서 읽어 온 토큰은 분석 대상이 되지 않는다.
상기한 과정 S20의 판단결과 상기한 과정 S18에서 읽어 온 토큰이 분석 대상인 경우에는 해당 토큰을 분석하기 위해 소정 메모리 영역에 저장하고(S22), 상기한 과정 S18에서 읽어 온 토큰이 분석 대상이 아닌 경우에는 상기한 과정 S18로 진행하여 다음에 존재하는 토큰을 읽어 온다.
이후, 어휘 분석부(50)는 토큰 스캐너(40)에 의해 선별되어 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서, 읽어 온 토큰에 대한 구문 분석을 수행한다(S24).
상기한 과정 S24에서 각 토큰에 대한 문법적인 검사와 함께 라인 단위, 블록 단위 포맷 분석을 수행하고, 토큰 스타일, 타입, 카테고리의 검증을 통해 구문 분석을 수행한다.
상기한 과정 S24에서 읽어 온 토큰에 대한 구문 분석을 수행한 후에는, 분석 내용을 소스 코드 작성 규칙의 카테고리별로 저장하고, 분석된 토큰에 대한 각종 정보(예를 들어, 파일 인덱스, 파일 패스, 라인, 열, 타입, 길이, 케이스, 데이터 타입, 토큰 인덱스 등)를 소정 메모리 영역에 저장한다(S26, S28).
상기한 과정 S26에서, 카테고리별로 저장되는 분석 내용으로는 분석된 토큰의 예약어인지, 명칭인지, 연산자인지, 구분기호인지, 상수인지, 공백 문자인지, 설명문인지에 대한 내용이 저장되며, 분석된 토큰에 따라 토큰의 유효 영역(Scope), 유니크(Unique), 케이스(Case), 길이(Length) 등이 함께 저장되고, 분석된 토큰이 연산자 토큰인 경우에는 토큰의 배치나 문두 결자, 스페이스 정보가 저장된다.
이후, 어휘 비교부(60)는 상기한 과정 S26에서 카테고리별로 저장된 토큰을 읽어 오고, 읽어 온 토큰 값을 과정 S30을 통해 규칙 관리부(20)로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 규칙 저장부(30)에서 가져온 소스 코드 작성 규칙 값과 비교하여, 읽어 온 토큰 값이 소스 코드 작성 규칙 값에 위배되는 지를 판단한다(S32, S34).
상기한 과정 S34의 판단결과 읽어 온 토큰 값이 소스 코드 작성 규칙 값에 위배되는 경우에는, 소스 코드 작성 규칙 값에 위배되는 토큰과 해당 토큰에 대한 토큰 정보(예를 들어, 파일 인덱스 및 어드레스)를 규칙 위배 리스트에 저장하고, 해당 토큰과 관련있는 토큰이 존재하는 지를 판단한다(S36, S38).
상기한 과정 S38의 판단결과 해당 토큰과 관련있는 토큰이 존재하는 경우에는, 해당 토큰에 관련된 토큰에 대한 토큰 정보를 규칙 위배 리스트에 저장하고, 비교할 토큰이 남아 있는 지를 판단한다(S40, S42).
상기한 과정 S42의 판단결과 비교할 토큰이 남아 있는 경우에는 상기한 과정 S32로 진행하여 카테고리별로 저장되어 있는 토큰을 읽어 오고, 읽어 온 토큰 값을 소스 코드 작성 규칙 값과 비교하여, 읽어 온 토큰 값이 소스 코드 작성 규칙 값에 위배되는 지를 판단한다.
한편, 상기한 과정 S42의 판단결과 비교할 토큰이 남아 있지 않은 경우에는, 규칙 위배 리스트에 저장되어 있는 토큰 및 토큰 정보를 읽어 오고, 읽어 온 토큰을 소스 코드 작성 규칙 값을 이용하여 소스 코드 작성 규칙에 맞게 수정한다(S44, S46).
이후에는 상기한 과정 S46을 통해 수정한 토큰을 수정 리스트에 저장하고, 수정된 토큰에 대한 토큰 정보(예를 들어, 파일 인덱스 및 어드레스)에 의거하여 수정된 토큰을 소스 코드 파일의 해당 위치에 배치시키고, 추후 운용자에게 수정된 토큰 리스트를 제공하기 위해 수정된 토큰에 대한 리포트 로그를 생성시킨다(S48, S50, S52).
상기한 과정 S50에서 수정된 토큰을 소스 코드 파일의 해당 위치에 배치시킬 때, 해당 토큰을 어떻게 배치할 것인 지는 해당 토큰의 카테고리, 타입, 스타일에 따라서 결정된다.
이후에는, 규칙 위배 리스트를 검색하여 수정할 토큰이 남아 있는 지를 판단한다(S54).
상기한 과정 S54의 판단결과 수정할 토큰이 남아 있는 경우에는, 상기한 과정 S44로 진행하여 규칙 위배 리스트에 저장되어 있는 토큰 및 토큰 정보를 읽어 오고, 읽어 온 토큰을 소스 코드 작성 규칙 값을 소스 코드 작성 규칙에 맞게 수정한다.
한편, 상기한 과정 S54의 판단결과 수정할 토큰이 남아 있지 않은 경우에는, 상기한 과정 S44 내지 과정 S52를 통해 수정된 소스 코드 파일에 대해 컴파일을 수행하여 수정된 소스 코드 파일을 검증하고(S56), 상기한 과정 S52에서 생성된 리포트 로그에 의거하여 수정된 토큰에 대한 내역을 운용자에게 보고한다(S58).
이상에서 본 발명에 대하여 상세히 기술하였지만, 본 발명이 속하는 기술 분야에 있어서 통상의 지식을 가진 사람이라면, 첨부된 청구범위에 정의된 본 발명의 정신 및 범위를 벗어나지 않으면서 본 발명을 여러 가지로 변형 또는 변경하여 실시할 수 있음은 자명하며, 따라서 본 발명의 실시예에 따른 단순한 변경은 본 발명의 기술을 벗어날 수 없을 것이다.
이상에서 살펴본 바와 같은 본 발명의 소스 코드 검사 시스템 및 방법에 따르면, 다양한 코딩 스타일로 작성된 소스 코드를 표준화된 소스 코드 작성 규칙으로 검사하여 표준화된 소스 코드 작성 규칙에 맞게 수정함으로써, 표준화된 소스 코드 파일을 얻을 수 있게 되어 유지 보수가 용이지는 효과가 있다.
도 1은 본 발명의 일 실시예에 따른 소스 코드 검사 시스템의 구성을 보인 도.
도 2는 파일 관리부에서의 동작 기능을 설명하기 위한 도.
도 3은 규칙 관리부에서의 동작 기능을 설명하기 위한 도.
도 4는 규칙 저장부의 구조를 나타내는 도.
도 5는 토큰 스캐너에서의 동작 기능을 설명하기 위한 도.
도 6은 토큰의 구성을 보인 도.
도 7은 어휘 분석부에서의 동작 기능을 설명하기 위한 도.
도 8은 어휘 비교부에서의 동작 기능을 설명하기 위한 도.
도 9는 배치 관리부에서의 동작 기능을 설명하기 위한 도.
도 10a 및 도 10b은 본 발명의 일 실시예에 따른 소스 코드 검사 방법을 설명하기 위한 플로우챠트.
도 11은 본 발명의 일 실시예에 따른 소스 코드 검사 방법을 설명하기 위한 도.
*** 도면의 주요부분에 대한 부호의 설명 ***
10. 파일 관리부, 20. 규칙 관리부, 30. 규칙 저장부,
40. 토큰 스캐너, 50. 어휘 분석부, 60. 어휘 비교부,
70. 배치 관리부

Claims (15)

  1. 검사 대상인 소스 코드 파일을 표준화된 소스 코드 작성 규칙으로 분석하여 상기 소스 코드 파일이 상기 소스 코드 작성 규칙에 맞게 작성되었는지를 검사하고, 상기 소스 코드 작성 규칙에 위배되는 부분을 찾아 상기 소스 코드 작성 규칙에 맞게 수정 시키는 소스 코드 검사 수단;
    상기 검사 대상인 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 상기 소스 코드 파일에 대한 복사본을 생성하며, 상기 소스 코드 검사 수단에 의해 수정된 부분을 넘겨받아 수정된 소스 코드 파일을 생성시키는 파일 관리부; 및
    상기 소스 코드 파일 검사에 사용될 소스 코드 작성 규칙을 선택받으면, 상기 선택받은 소스 코드 작성 규칙에 대한 리스트를 상기 소스 코드 검사 수단에 통보해주는 규칙 관리부를 포함하여 이루어지는 소스 코드 검사 시스템.
  2. 삭제
  3. 삭제
  4. 제 1항에 있어서,
    상기 규칙 관리부는,
    소스 코드 작성 규칙들이 저장되어 있는 규칙 저장부에 접근하여 상기 소스 코드 작성 규칙들의 수정을 수행하는 것을 특징으로 하는 소스 코드 검사 시스템.
  5. 제 4항에 있어서,
    상기 규칙 저장부는 별도의 데이터베이스로 구성되는 것을 특징으로 하는 소스 코드 검사 시스템.
  6. 제 1항에 있어서,
    상기 소스 코드 검사 수단은,
    상기 소스 코드 파일을 토큰 단위로 읽어 오고, 상기 소스 코드 작성 규칙 관리부로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 상기 읽어 온 토큰 중에서 분석될 토큰을 선별하여 소정 메모리 영역에 저장하는 토큰 스캔부;
    상기 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서 구문 분석하고, 상기 구문 분석된 토큰을 상기 소스 코드 작성 규칙의 카테고리별로 저장하는 어휘 분석부;
    상기 규칙 관리부로부터 통보받은 소스 코드 작성 규칙 리스트에 의거하여 규칙 저장부에서 가져온 규칙 값과 상기 카테고리별로 저장되어 있는 토큰의 값을 비교하여 상기 소스 코드 작성 규칙에 위배되는 토큰을 규칙 위배 리스트에 저장하는 어휘 비교부; 및
    상기 규칙 위배 리스트에 저장된 토큰을 상기 소스 코드 작성 규칙에 맞도록 수정한 후, 상기 파일 관리부와 연동하여 수정된 소스 코드 파일을 생성시키고, 수정된 부분을 보고하는 배치 관리부를 더 포함하는 것을 특징으로 하는 소스 코드 검사 시스템.
  7. 제 1항에 있어서,
    상기 배치 관리부는 별도로 구비되는 있는 컴파일러와 연동하여 상기 재생성된 소스 코드 파일에 대한 컴파일을 수행하는 것을 특징으로 하는 소스 코드 검사 시스템.
  8. 검사 대상인 소스 코드 파일을 선택받고, 상기 선택받은 소스 코일 파일의 검사에 사용될 소스 코드 작성 규칙을 선택받는 소스 코드 작성 규칙 관리 과정;
    상기 검사 대상인 소스 코드 파일을 읽어 와서 인덱스를 설정하고, 상기 읽어온 소스 코드 파일의 복사본을 생성하는 소스 코드 파일 관리 과정;
    상기 소스 코드 파일을 토큰 단위로 읽어 오고, 상기 소스 코드 작성 규칙 리스트에 의거하여 상기 읽어 온 토큰 중에서 분석될 토큰을 선별하여 소정 메모리 영역에 저장하는 스캔 과정;
    상기 소정 메모리 영역에 저장되어 있는 토큰을 읽어 와서 구문 분석하고, 상기 구문 분석된 토큰을 상기 소스 코드 작성 규칙의 카테고리별로 저장하는 분석 과정;
    상기 카테고리별로 저장되어 있는 토큰의 값을 소스 코드 작성 규칙의 값과 비교하여 상기 소스 코드 작성 규칙에 위배되는 토큰을 규칙 위배 리스트에 저장하는 비교 과정; 및
    상기 규칙 위배 리스트에 저장된 토큰을 상기 소스 코드 작성 규칙에 맞도록 수정한 후, 수정된 소스 코드 파일로 생성시키고, 수정된 부분을 보고하는 배치 관리 과정을 포함하여 이루어지는 것을 특징으로 하는 소스 코드 검사 방법.
  9. 삭제
  10. 삭제
  11. 삭제
  12. 제 8항에 있어서, 상기 토큰 스캔 과정은,
    상기 소스 코드 파일을 토큰 단위로 읽어 오는 단계;
    상기 읽어 온 토큰의 내용이 소스 코드 작성 규칙 리스트에 존재하는 지를 판단하는 단계; 및
    상기 판단결과 상기 읽어 온 토큰의 내용이 소스 코드 작성 규칙 리스트에 존재하는 경우에는 상기 읽어 온 토큰을 소정 메모리 영역에 저장하는 단계를 포함하여 이루어지는 것을 특징으로 하는 소스 코드 검사 방법.
  13. 제 8항에 있어서, 상기 비교 과정은,
    상기 소스 코드 작성 규칙 리스트에 의거하여 소스 코드 작성 규칙 저장소에서 상기 소스 코드 작성 규칙에 적용되는 값을 가져오는 단계;
    상기 카테고리별로 저장되어 있는 토큰을 읽어 오는 단계;
    상기 읽어 온 토큰을 상기 소스 코드 작성 규칙 값과 비교하여 상기 읽어 온 토큰이 상기 소스 코드 작성 규칙에 위배되는 지를 판단하는 단계;
    상기 판단결과 상기 읽어 온 토큰이 상기 소스 코드 작성 규칙에 위배되는 경우에는 상기 읽어 온 토큰을 규칙 위배 리스트에 저장하는 단계; 및
    상기 규칙 위배 리스트에 저장된 토큰과 관련있는 토큰을 상기 규칙 위배 리스트에 저장하는 단계를 포함하여 이루어지는 것을 특징으로 하는 소스 코드 검사 방법.
  14. 제 8항에 있어서, 상기 배치 관리 과정은,
    상기 규칙 위배 리스트에 저장되어 있는 토큰을 읽어 오는 단계;
    상기 읽어 온 토큰을 상기 소스 코드 작성 규칙 값에 의거하여 상기 읽어 온 토큰의 내용을 수정하고, 상기 수정된 토큰을 수정 리스트에 저장하는 단계; 및
    상기 수정된 토큰의 위치 정보에 의거하여 소스 코드 파일을 수정하는 단계를 포함하여 이루어지는 것을 특징으로 하는 소스 코드 검사 방법.
  15. 제 14항에 있어서,
    상기 수정된 소스 코드 파일에 대한 컴파일을 수행하여 상기 수정된 소스 코드 파일을 검증하는 단계; 및
    상기 수정된 토큰 내역을 보고하는 단계를 더 포함하여 이루어지는 것을 특징으로 하는 소스 코드 검사 방법.
KR10-2003-0029138A 2003-05-07 2003-05-07 소스 코드 검사 시스템 및 방법 KR100501936B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR10-2003-0029138A KR100501936B1 (ko) 2003-05-07 2003-05-07 소스 코드 검사 시스템 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2003-0029138A KR100501936B1 (ko) 2003-05-07 2003-05-07 소스 코드 검사 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20040096259A KR20040096259A (ko) 2004-11-16
KR100501936B1 true KR100501936B1 (ko) 2005-07-18

Family

ID=37375006

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2003-0029138A KR100501936B1 (ko) 2003-05-07 2003-05-07 소스 코드 검사 시스템 및 방법

Country Status (1)

Country Link
KR (1) KR100501936B1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
WO2016032234A1 (ko) * 2014-08-27 2016-03-03 주식회사 파수닷컴 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체
US10496516B2 (en) 2014-08-27 2019-12-03 Sparrow Co., Ltd. Source code analysis device, computer program for same, and recording medium thereof
KR102057724B1 (ko) * 2018-05-25 2019-12-19 고려대학교 산학협력단 메모리 해제 오류를 자동으로 수정하는 장치 및 방법

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101470097B1 (ko) * 2012-12-17 2014-12-10 부산대학교 산학협력단 코딩 스타일에 기초한 소스코드 시각화 장치 및 방법
KR101850303B1 (ko) 2016-09-13 2018-05-31 슈어소프트테크주식회사 소스 코드 위배 수정 방법 및 이를 실행하기 위한 프로그램을 기록한 컴퓨터로 판독가능한 기록매체

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
WO2011122724A1 (ko) * 2010-03-29 2011-10-06 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
US8875110B2 (en) 2010-03-29 2014-10-28 Soft4Soft Co., Ltd. Code inspection executing system for performing a code inspection of ABAP source codes
WO2016032234A1 (ko) * 2014-08-27 2016-03-03 주식회사 파수닷컴 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체
US10496516B2 (en) 2014-08-27 2019-12-03 Sparrow Co., Ltd. Source code analysis device, computer program for same, and recording medium thereof
KR102057724B1 (ko) * 2018-05-25 2019-12-19 고려대학교 산학협력단 메모리 해제 오류를 자동으로 수정하는 장치 및 방법
US10922209B2 (en) 2018-05-25 2021-02-16 Korea University Research And Business Foundation Device and method for automatically repairing memory deallocation errors

Also Published As

Publication number Publication date
KR20040096259A (ko) 2004-11-16

Similar Documents

Publication Publication Date Title
CN111522816B (zh) 基于数据库引擎的数据处理方法、装置、终端及介质
US10698682B1 (en) Computerized software development environment with a software database containing atomic expressions
Göde et al. Studying clone evolution using incremental clone detection
JP5042315B2 (ja) ソースコード内のセキュリティ脆弱性の検出
CN109918294B (zh) 一种混源软件自主可控性检测方法及系统
Fu et al. Model checking XML manipulating software
US20020100022A1 (en) Method and apparatus for automatic verification of properties of a concurrent software system
US20050188323A1 (en) Template creation apparatus and creation method
US11294665B1 (en) Computerized software version control with a software database and a human database
Annamaa et al. An interactive tool for analyzing embedded SQL queries
Nichols et al. Syntax-based improvements to plagiarism detectors and their evaluations
CN111459500A (zh) 基于海鹰翼辉操作系统的安全编译方法及装置
CN117009231B (zh) 基于对话式大语言模型的高可靠单元测试自动生成方法及装置
CN115309451A (zh) 代码克隆检测方法、装置、设备、存储介质及程序产品
WO2021022703A1 (zh) 软件项目重构方法、装置、计算机装置及存储介质
RU2115159C1 (ru) Способ и устройство для проверки использования полей записей во время компиляции
KR100501936B1 (ko) 소스 코드 검사 시스템 및 방법
Lasser et al. CoStar: a verified ALL (*) parser
JP2002520716A (ja) 構成記述言語システム
CN116842042A (zh) 异化数据库的通用方法、装置、电子设备及存储介质
Benedikt et al. Schema-based independence analysis for XML updates
Anderson et al. Supporting analysis of SQL queries in PHP AiR
Girka et al. A mechanically checked generation of correlating programs directed by structured syntactic differences
Butler Analysing Java Identifier Names
CN117331963B (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
FPAY Annual fee payment

Payment date: 20080708

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee