KR20000038106A - 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법 - Google Patents

프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법 Download PDF

Info

Publication number
KR20000038106A
KR20000038106A KR1019980052968A KR19980052968A KR20000038106A KR 20000038106 A KR20000038106 A KR 20000038106A KR 1019980052968 A KR1019980052968 A KR 1019980052968A KR 19980052968 A KR19980052968 A KR 19980052968A KR 20000038106 A KR20000038106 A KR 20000038106A
Authority
KR
South Korea
Prior art keywords
rule
programming
pattern
code
program
Prior art date
Application number
KR1019980052968A
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 KR1019980052968A priority Critical patent/KR20000038106A/ko
Publication of KR20000038106A publication Critical patent/KR20000038106A/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 프로그래밍 언어의 구문규칙에 속하지 않고, 프로그램 소스 코드를 작성할 때 지켜야 하는 규칙을 검사하여 프로그램 개발상의 논리적인 오류를 검출하기 위한 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법을 제공하는 데 그 목적이 있다.
본 발명에 따르면, 프로그래밍 규칙 정의 언어로 작성된 규칙 데이터베이스; 및 상기 규칙 데이터베이스에서 프로그래밍 규칙을 읽어와 외부로부터 입력된 구문트리의 규칙 검사를 수행하기 위한 규칙 검사 수단을 포함하여 이루어진 규칙 검사 장치가 제공된다.

Description

프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법 (Detection device of logical error by programming rule in a program and logical error detect compiling method)
본 발명은 프로그래밍 언어의 구문규칙에 속하지 않고, 프로그램 소스 코드를 작성할 때 지켜야 하는 규칙을 검사하여 프로그램 개발상의 논리적인 오류를 검출하기 위한 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법에 관한 것이다.
종래 기술에는 프로그램의 소스코드에 대하여 문법적인 오류를 검사하는 컴파일러의 기술이 있다. 컴파일러는 현재 언어의 정의에 의한 문법(syntax)을 검사하여 문법적인 오류가 없을 경우에 목적코드를 생성하는 수단으로 이용된다.
도면에서, 도 1은 종래 기술에 따른 프로그램 오류 검사 방법의 흐름도이다. 도면에 도시된 바와 같이, 종래 기술에 따른 프로그램 오류 검사 방법은,어휘를 분석하고(101), 구문을 분석하여(102), 중간 코드를 생성한 후에(103), 코드를 최적화하여(104), 목적 코드를 생성한다(105).
그러나 상기 종래 기술은 단지 소스코드가 언어의 문법에 맞게 작성되었는가를 검사할 수 있을 뿐이며, 프로그래밍의 논리적인 규칙을 검사할 수 없다는 문제점이 있었다.
본 발명은 앞서 설명한 바와 같은 종래 기술의 문제점을 해결하기 위하여 안출된 것으로서, 프로그램상의 일정한 규칙을 준수하지 않는 프로그래밍상의 논리적인 오류를 검사하여 프로그램의 논리적인 오류를 줄임으로써 프로그램 개발 기간을 단축할 수 있는 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법을 제공하는 데 그 목적이 있다.
도 1은 종래 기술에 따른 프로그램 오류 검사 방법의 흐름도이고,
도 2는 본 발명의 일실시예에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치의 구성도이고,
도 3은 본 발명의 일실시예에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치를 이용한 컴파일링 방법의 흐름도.
♠ 도면의 주요부분에 대한 부호의 설명 ♠
210 : 규칙 검사기 220 : 규칙 데이터베이스
앞서 설명한 바와 같은 목적을 달성하기 위한 본 발명에 따르면, 프로그래밍 규칙 정의 언어로 작성된 규칙 데이터베이스; 및 상기 규칙 데이터베이스에서 프로그래밍 규칙을 읽어와 외부로부터 입력된 구문트리의 규칙 검사를 수행하기 위한 규칙 검사 수단을 포함하여 이루어진 규칙 검사 장치가 제공된다.
또한, 본 발명에 따르면, 컴파일링 시스템에 적용되는 컴파일링 방법에 있어서, 프로그램 소스 코드를 입력받아 어휘를 분석한 후에, 구문을 분석하는 제 1 단계; 규칙 검사를 수행하는 제 2 단계; 및 규칙 검사가 완료한 구문 트리로부터 중간 코드를 생성하여, 코드를 최적화한 후에, 목적코드를 생성하는 제 3 단계를 포함하여 이루어진 컴파일링 방법이 제공된다.
또한, 본 발명에 따르면, 컴퓨터에, 컴파일링 시스템에 적용되는 컴파일링 방법에 있어서, 프로그램 소스 코드를 입력받아 어휘를 분석한 후에, 구문을 분석하는 제 1 단계; 규칙 검사를 수행하는 제 2 단계; 및 규칙 검사가 완료한 구문 트리로부터 중간 코드를 생성하여, 코드를 최적화한 후에, 목적코드를 생성하는 제 3 단계를 실행시키기 위한 프로그램을 기록하고 있는 컴퓨터로 읽을 수 있는 기록매체가 제공된다.
아래에서, 본 발명에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법의 양호한 실시예를 첨부한 도면을 참조로 하여 상세히 설명하겠다.
본 발명은 프로그램의 소스코드를 분석하여 프로그램의 논리적인 규칙에 관한 오류를 검사하는 방법에 관한 것으로 프로그래밍 규칙이라 함은 의미규칙(semantic rule)의 일부로서 특정 언어의 문법에 속하지 않으면서 라이브러리나 클래스들의 특성에 따라 프로그램의 작성 방법에 관한 규칙을 따라야 하는 경우를 말한다.
그 일예로서 자연어로 기술된 프로그래밍 규칙으로서 다음이 있다.
규칙1:
"프로그램 소스코드의 한 블록(block)에서 getDC()함수를 이용하여 자원을 할당한 다음에는 반드시 releaseDC() 함수를 이용하여 자원을 되돌려 주어야 한다"
이러한 규칙은 언어의 정의에 속하지 않으면서 지키지 않았을 경우에는 치명적인 프로그램상의 오류를 유발한다. 컴파일러는 규칙1에 대한 오류를 검사할 수 없다. 현재, 이러한 규칙은 프로그래머가 역량과 능력에 의해 감지하여 수정될 수밖에 없다. 따라서, 프로그래밍 규칙을 위반하는 소스코드도 성공적으로 컴파일되어 목적코드와 실행코드를 생성하게 된다.
프로그래밍 규칙을 위반하는 소스코드를 살펴보면 다음과 같다.
프로그래밍 규칙을 위반하는 소스코드:
{
hDC d = getDC();
d->draw(...);
}
프로그래밍 규칙을 위반하는 소스코드는 성공적으로 컴파일되어 목적코드와 실행코드를 생성하게 된다.
생성된 실행코드는 오류가 있음에도 불구하고 쉽게 동작상의 오류를 발생시키지 않으며 따라서 검출하기 어려운 프로그램의 오류로 남는다.
다음은 프로그램 규칙을 준수하도록 수정된 소스코드를 보여준다.
프로그래밍 규칙을 준수하도록 수정된 소스코드:
{
hDC d = getDC();
d->draw(...);
releaseDC(d);
}
프로그래밍 규칙을 준수하도록 수정된 코드는 프로그램 동작에서 아무런 오류를 갖지 않으며 잘 작성된 소스코드이다.
본 발명은 프로그래밍의 규칙을 정의하는 언어로 작성된 규칙 데이터베이스를 구축하고, 프로그램 소스코드를 입력으로 받아서 프로그래밍 언어의 문법에 맞게 작성되었는지를 검사하고, 문법적인 오류가 없는 소스코드에 대하여 프로그래밍 규칙을 준수하여 작성하였는지를 패턴인식기법과 구문분석 기법을 이용하여 검사한다.
도면에서, 도 2는 본 발명의 일실시예에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치의 구성도이다.
도면에 도시된 바와 같이, 본 발명의 일실시예에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치는, 규칙 검사기(210)와 규칙 데이터베이스(220)을 구비하고 있다.
상기 규칙 검사기(210)는 구문 트리 또는 소스 코드를 입력받아 프로그래밍 규칙 정의 언어로 작성된 규칙 데이터베이스(220)를 참조하여 구문검사를 수행한 구문 트리 또는 프로그래밍 오류 지적 사항을 출력한다.
그리고, 상기 규칙 검사기(210)은 컴파일러에 추가되어 프로그램의 오류를 사전에 검출하는 목적으로 활용된다.
프로그래밍의 규칙을 정의하는 언어는 일반적인 프로그래밍 언어(Context Free Language)를 정의하는데 이용되는 BNF표기법을 이용할 수 없다.
이러한 규칙을 정의하기 위하여 프로그래밍 규칙정의언어를 이용한다.
프로그래밍 규칙은 "[선행 패턴]=>[후행패턴]"의 형식으로 기술된다.
규칙1의 자연어로 기술된 규칙은 다음과 같이 규칙정의언어로 바꿀 수 있다.
규칙정의언어로 기술된 규칙1:
[alpha = f()] => [f-1(alpha)], f=GetDC, f-1=ReleaseDC.
프로그래밍의 규칙은 각 분야의 전문가에 의하여 자연어로 서술된 문장을 규칙정의언어로 변환하여 데이터베이스(220)에 저장하여 규칙 데이터베이스(220)를 구축한다.
이러한 규칙데이터베이스(220)를 이용하여 프로그램 소스코드에서 규칙을 위반하는 부분을 찾아내어 대안을 제시하는 방법은 다음과 같다.
프로그램 소스코드에서 각 규칙의 선행 패턴을 찾아내어 후행 패턴이 존재하는지를 검사한다. 만약 후행 패턴이 없을 경우 후행 패턴을 대안으로 제시한다.
규칙의 후행 패턴에 대해서 선행 패턴이 없는 경우, 선행 패턴을 대안으로 제시한다.
도면에서, 도 3은 본 발명의 일실시예에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치를 이용한 컴파일링 방법의 흐름도이다.
도면에 도시된 바와 같이, 본 발명의 일실시예에 따른 프로그래밍 규칙에 의한 프로그램 오류 검사 장치를 이용한 컴파일링 방법은, 프로그램 소스 코드를 입력받아 어휘를 분석하고(301), 구문을 분석한 후에(302), 규칙 검사를 수행한다(303).
이후에, 규칙 검사가 완료한 구문 트리로부터 중간 코드를 생성하여(304), 코드를 최적화한 후에(305), 목적코드를 생성한다(306).
앞서 상세히 설명한 바와 같이 본 발명의 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법은 프로그램상의 일정한 규칙을 준수하지 않는 프로그래밍상의 논리적인 오류를 검사하여 프로그램의 논리적인 오류를 줄임으로써 프로그램 개발 기간을 단축하게 되는 효과가 있다.
또한, 본 발명의 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법은 프로그램 소스의 올바름을 전문가에 의지하지 않고 자동으로 검사하여 프로그램의 품질을 향상하시키게 되는 효과가 있다.
이상에서 본 발명의 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법에 대한 기술사상을 첨부도면과 함께 서술하였지만 이는 본 발명의 가장 양호한 실시예를 예시적으로 설명한 것이지 본 발명을 한정하는 것은 아니다. 또한, 이 기술분야의 통상의 지식을 가진 자이면 누구나 본 발명의 기술사상의 범주를 이탈하지 않는 범위내에서 다양한 변형 및 모방이 가능함은 명백한 사실이다.

Claims (5)

  1. 프로그래밍 규칙 정의 언어로 작성된 규칙 데이터베이스; 및
    상기 규칙 데이터베이스에서 프로그래밍 규칙을 읽어와 외부로부터 입력된 구문트리의 규칙 검사를 수행하기 위한 규칙 검사 수단을 포함하여 이루어진 규칙 검사 장치.
  2. 제 1 항에 있어서,
    상기 규칙 검사 수단은,
    규칙 위반 부분을 찾아내어 프로그램 소스코드에서 각 규칙의 선행 패턴을 찾아내어 후행 패턴이 존재하는지를 검사하여, 후행 패턴이 없을 경우 후행 패턴을 대안으로 제시하고, 규칙의 후행 패턴에 대하여 선행 패턴이 없는 경우에는 선행 패턴을 대안으로 제시하는 것을 특징으로 하는 규칙 검사 장치.
  3. 컴파일링 시스템에 적용되는 컴파일링 방법에 있어서,
    프로그램 소스 코드를 입력받아 어휘를 분석한 후에, 구문을 분석하는 제 1 단계;
    규칙 검사를 수행하는 제 2 단계; 및
    규칙 검사가 완료한 구문 트리로부터 중간 코드를 생성하여, 코드를 최적화한 후에, 목적코드를 생성하는 제 3 단계를 포함하여 이루어진 컴파일링 방법.
  4. 제 3 항에 있어서,
    상기 제 2 단계는,
    규칙 데이터베이스에서 프로그래밍 규칙을 읽어와 외부로부터 입력된 구문트리의 규칙 검사를 수행하는 제 4 단계;
    규칙 위반 부분을 있는 지를 판단하는 제 5 단계;
    상기 제 5 단계의 판단 결과, 규칙 위반이 있는 경우에는 프로그래밍 소스코드에서 규칙의 선행 패턴을 찾아내어 후행 패턴이 존재하는지를 검사하는 제 6 단계;
    상기 제 6 단계의 검사 결과, 후행 패턴이 없을 경우 후행 패턴을 대안으로 제시하는 제 7 단계;
    규칙의 후행 패턴에 대하여 선행 패턴이 있는지를 판단하는 제 8 단계; 및
    상기 제 8 단계의 판단 결과, 후행 패턴이 없는 경우에는 선행 패턴을 대안으로 제시하는 제 9 단계를 포함하여 이루어진 컴파일링 방법.
  5. 컴퓨터에,
    컴파일링 시스템에 적용되는 컴파일링 방법에 있어서,
    프로그램 소스 코드를 입력받아 어휘를 분석한 후에, 구문을 분석하는 제 1 단계;
    규칙 검사를 수행하는 제 2 단계; 및
    규칙 검사가 완료한 구문 트리로부터 중간 코드를 생성하여, 코드를 최적화한 후에, 목적코드를 생성하는 제 3 단계를 실행시키기 위한 프로그램을 기록하고 있는 컴퓨터로 읽을 수 있는 기록매체.
KR1019980052968A 1998-12-03 1998-12-03 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법 KR20000038106A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019980052968A KR20000038106A (ko) 1998-12-03 1998-12-03 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019980052968A KR20000038106A (ko) 1998-12-03 1998-12-03 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법

Publications (1)

Publication Number Publication Date
KR20000038106A true KR20000038106A (ko) 2000-07-05

Family

ID=19561307

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980052968A KR20000038106A (ko) 1998-12-03 1998-12-03 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법

Country Status (1)

Country Link
KR (1) KR20000038106A (ko)

Cited By (1)

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

Cited By (1)

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

Similar Documents

Publication Publication Date Title
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
US8875110B2 (en) Code inspection executing system for performing a code inspection of ABAP source codes
US8539475B2 (en) API backward compatibility checking
US10423518B2 (en) Systems and methods for analyzing violations of coding rules
Annamaa et al. An interactive tool for analyzing embedded SQL queries
CN103257919A (zh) 脚本程序检查方法和装置
CN110286912B (zh) 代码检测方法、装置及电子设备
CN116089302A (zh) 一种针对Rust编程语言中UNSAFE代码片段缺陷的检测方法
JPH0748182B2 (ja) プログラム・エラー検出方法
KR102546424B1 (ko) 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
CN112631944A (zh) 基于抽象语法树的源码检测方法及装置、计算机存储介质
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
CN107967213B (zh) 一种航天软件临界资源访问冲突检测方法
KR20000038106A (ko) 프로그래밍 규칙에 의한 프로그램 오류 검사 장치 및 그를 이용한 컴파일링 방법
US11119740B2 (en) Parsability of code snippets
JP5464031B2 (ja) プログラム検証装置、方法及びプログラム
EP2535813B1 (en) Method and device for generating an alert during an analysis of performance of a computer application
CN115145575A (zh) 一种高级语言的解析方法、设备和计算机可读存储介质
CN113946339A (zh) 应用工程文件的处理方法、装置、电子设备及可读介质
CN113434385A (zh) 一种针对软件模型检查工具的测试用例自动生成方法和系统
JP2002342129A (ja) コーディングチェック方式
CN114791878B (zh) 一种基于可控断言突变的Simulink软件测试方法
CN116932073A (zh) 一种基于Clang的AUTOSAR符合性检测方法及装置
CN112084786A (zh) 基于dsl的网络配置文件测试方法
Savitskii et al. Fast analysis of source code in C and C++

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application