KR20060104505A - 종합 문자열 분석기 및 그 분석 방법 - Google Patents
종합 문자열 분석기 및 그 분석 방법 Download PDFInfo
- Publication number
- KR20060104505A KR20060104505A KR1020050026727A KR20050026727A KR20060104505A KR 20060104505 A KR20060104505 A KR 20060104505A KR 1020050026727 A KR1020050026727 A KR 1020050026727A KR 20050026727 A KR20050026727 A KR 20050026727A KR 20060104505 A KR20060104505 A KR 20060104505A
- Authority
- KR
- South Korea
- Prior art keywords
- analysis
- string
- data
- node
- data file
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
본 발명에 따른 종합 문자열 분석 방법은 임의의 프로그래밍 언어로 작성된 제 1 데이터 파일을 특정 중간 언어로 작성되는 제 2 데이터 파일로 변환하는 중간 언어 변환단계와, 제 2 데이터 파일내에 포함된 문자열로부터 실행순서에 따른 흐름 정보를 추출하고 그 흐름 정보에 따른 정적 분석을 수행하여 임의 또는 각 지점별로 예측되는 변수 정보를 분석 결과 데이터로 저장하는 분석 처리단계를 포함한다.
본 발명에 의하면, 제 1 데이터 파일내의 임의 또는 각 지점에서의 변수 정보와 객체 정보와 같은 변수 정보의 흐름 정보를 추출하여 실제 실행할 경우에 프로그램상의 모든 실행 경로를 고려하여 프로그램 내의 정보를 정적으로 예측할 수 있다.
문자열, 변수, 중간 언어, 파싱, 흐름 그래프, 정적 분석, 요약 해석방법, 프로그램 분석
Description
도 1은 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 컴퓨팅 시스템의 구성도.
도 2는 본 발명의 일실시예에 따른 종합 문자열 분석기를 설명하기 위한 기능 블록도.
도 3은 본 발명의 일실시예에 따른 종합 문자열 분석기에 입력되는 제 1 데이터 파일을 보여주는 도면.
도 4a 및 도 4b는 본 발명의 일실시예에 따른 제 1 데이터 파일을 공용 중간 언어형식으로 변환시킨 프로그램을 보여주는 도면.
도 5a 및 도 5b는 본 발명의 일실시예에 따른 흐름 그래프로 작성된 분석 대상 데이터를 보여주는 도면.
도 6은 도 2의 실시예에 따른 종합 문자열 분석기의 문자열 분석부를 설명하기 위한 기능 블록도.
도 7a 및 도 7b는 본 발명의 일실시예에 따른 분석 결과 데이터로 임의의 지점에서의 변수 정보,객체 정보를 xml형식으로 나타낸 데이터를 보여주는 도면.
도 8은 도 2의 실시예에 따른 종합 문자열 분석기의 동작 흐름도.
도 9는 도 2의 실시예에 따른 종합 문자열 분석기의 문자열 분석부가 흐름 그래프의 각 노드별로 분석하는 과정을 보여주는 동작 흐름도.
도 10은 본 발명의 다른 실시예에 따른 종합 문자열 분석기를 설명하기 위한 기능 블록도.
도 11은 본 발명의 다른 실시예에 따른 종합 문자열 분석기의 동작 흐름도.
도 12는 본 발명의 다른 실시예에 따른 종합 문자열 분석기의 동작 흐름도.
도 13은 본 발명의 다른 실시예에 따른 분석 결과 데이터에서 먼저 받은 질의어에 대한 출력 값을 보여주는 도면.
<도면의 주요부분에 대한 부호의 설명>
10 : 원격 컴퓨터 100 : 컴퓨팅 시스템
110 : 출력 주변장치 120 : 비디오 출력부
130 : 중앙 처리부 140 : 시스템 메모리
150 : 네트워크 인터페이스부 160 : 사용자 입력장치
170 : 분리형 비휘발성 메모리 180 : 비분리형 비휘발성 메모리
190 : 시스템 버스 210 : 분석 대상 프로그램
220 : 중간 언어 변환부 230 : 분석 처리부
231 : 파싱부 232 : 전처리부
233 : 문자열 분석부 310 : 분석 대상 프로그램
320 : 중간 언어 변환부 330 : 분석 처리부
331 : 파싱부 332 : 전처리부
333 : 문자열 분석부 340 : 질의어 처리부
본 발명은 프로그램 분석에 관한 것으로, 상세하게는 제 1 데이터 파일내의 임의 또는 각 지점에서의 변수 정보와 객체 정보와 같은 변수 정보의 흐름 정보를 추출하여 실제 실행할 경우에 가능한 모든 프로그램 경로를 고려하여 프로그램 내의 정보를 정적으로 예측하기 위한 종합 문자열 분석기 및 그 분석 방법에 관한 것이다.
많은 기업들이 응용프로그램이나 데이터베이스 관리시스템(DBMS)과 같은 중요한 IT(Information Technology)자산의 신규 개발 및 유지보수를 효율적으로 관리하는 데 있어 어려움을 겪고 있는데, 특히 응용프로그램과 데이터베이스 관리시스템의 변경에 따른 분석 과정과 문서 제작을 수작업에 의존할 수밖에 없어 더욱 그러하다. 또한 응용프로그램 변경 중 발생하는 잘못된 변경이 전산 장애로까지 이어지는 위험에 직면할 수 있는 것이 현실이다.
기업의 업무를 처리하는 과정에서 데이터베이스의 사용은 거의 필수적이며 데이터베이스에 관련된 수많은 응용프로그램이 존재한다. 이러한 응용프로그램은 데이터베이스 환경의 변화에 민감하게 반응하며 끊임없는 유지보수 작업을 필요로 한다.
만약 데이터베이스의 일부분을 변경하였다면 이에 영향을 받은 모든 응용프로그램을 변경해야 할 필요가 있다. 이는 시스템의 무결성(integrity)을 유지하기 위한 필수적인 요소이다.
이러한 데이터베이스의 변경에 따른 응용프로그램의 연관 관계를 아는 것은 전체 시스템을 유지 및 보수하는 관리자나 시스템 개발자의 입장에서 중요한 의미를 가진다.
그러므로 응용프로그램의 특정 지점에서 어떠한 명령어가 수행될 수 있는지, 혹은 특정한 데이터베이스에 접근하는 응용프로그램은 어떠한 것들이 있는지를 아는 것은 중요하다.
즉 응용프로그램의 특정 지점에서 수행되는 질의와 특정 데이터베이스를 변경하는 작업을 수행하는 응용프로그램은 어떤 것인지가 분석하고자 하는 대상이 된다. 이 같은 상황에서 변경 프로세스를 확립하고 자동화 솔루션을 이용한 변경 영향 분석 및 품질 관리 표준화를 통해 신규 개발과 유지보수 업무를 신속, 정확하게 수용하기위한 도구의 필요성이 대두되고 있다.
한편, 종래의 프로그램 코드로부터 프로그램을 분석하는 경우, 문법검사가 가능한 동일언어나 임베디드 언어를 내포한 경우에 한해서 코딩 패턴에 따른 사례별(Case by Case) 분석 프로그램을 작성하여 프로그램, 함수, 객체 등 정보를 분석하였다.
그러나 점차 복잡해지는 전산 시스템환경에서 파일과 파일간, 객체와 객체간, 이기종 서비스 콜(Service Call) 등의 데이터는 실행 도중 변수 값으로 존재하기 때문에 문법적 검사만을 통해서는 충분하지 못하다.
따라서, 본 발명은 이러한 필요성에 의해 안출된 것으로, 임의의 프로그램을 실행시키지 않은 상태에서 해당 프로그램을 실제 실행할 경우에 임의 또는 각 지점에서 프로그램내의 변수 정보로 올 수 있는 값을 정적으로 예측하기 위한 종합 문자열 분석기 및 그 분석 방법을 제공하는데 그 목적이 있다.
이러한 목적을 달성하기 위한 본 발명의 일측면에 의하면, 분석 대상 프로그램을 종합 문자열 분석기에 입력될 수 있도록 임의 중간 언어형식으로 변환시킨다.그리고 중간 언어로 변환된 분석 대상 프로그램은 정적 분석(static analysis)을 통하여 프로그램내의 임의 또는 각 지점에서의 변수 정보를 추출한다.
본 발명의 다른 측면에 의하면, 임의의 프로그래밍 언어로 작성된 제 1 데이터 파일을 특정 중간언어로 작성되는 제 2 데이터 파일로 변환하도록 각 프로그래밍 언어별로 설계된 중간 언어 변환부와, 제 2 데이터 파일 내에 포함된 문자열로부터 실행순서에 따른 흐름 정보를 추출하고 그 흐름 정보에 따른 정적 분석을 수행하여 임의 또는 각 지점별로 추출되는 변수 정보를 분석 결과 데이터로 저장하는 분석 처리부를 포함하는 종합 문자열 분석기를 제공한다.
본 발명의 또 다른 측면에 의하면, 임의의 프로그래밍 언어로 작성된 데이터 파일의 문자열을 어휘분석과 구문분석 과정을 통해 분석대상 프로그램의 구조를 나타내는 추상 구문 트리 데이터로 재구성하는 파싱 단계와, 파싱된 데이터로부터 흐름 정보를 뽑아 흐름 그래프를 생성하는 전처리 단계와, 전처리된 데이터를 정적으로 분석하여 생성된 흐름 그래프에 의거하여 각 지점에서 예측되는 변수 정보를 추출하여 분석 결과 데이터를 작성하는 문자열 분석 단계를 포함하는 종합 문자열 분석 방법을 제공한다.
본 발명의 또 다른 측면에 의하면, 마이크로 프로세서를 구비한 컴퓨터에서 임의의 프로그래밍 언어로 작성된 제 1 데이터 파일을 특정 중간 언어로 작성된 제 2 데이터 파일로 변환하는 중간 오언어 변환 기능과, 제 2 데이터 파일 내에 포함된 문자열로부터 실행순서에 따른 흐름 정보를 추출하고 그 흐름 정보에 따른 정적 분석을 수행하여 임의 또는 각 지점별로 추출되는 변수 정보을 분석 결과 데이터로 저장하는 분석 처리 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시 예를 설명하도록 한다.
도 1은 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 컴퓨팅 시스템의 구성도이다.
도면에서는 범용 컴퓨터를 설명하지만, 이는 일례일 뿐이며, 본 발명의 일실시예에 따른 문자열 분석은, 네트워크/버스 상호 운영성 및 상호작용을 가진 클라 이언트와 같은, 다른 컴퓨팅 장치로 구현될 수도 있다.
따라서, 본 발명의 일실시예에 따른 문자열 분석은 예를 들어, 클라이언트 장치가 어플라이언스내에 배치된 오브젝트와 같은 네트워크/버스 또는 다른 컴퓨팅 장치 및 오브젝트로의 인터페이스로서만 기능하는 네트워크 환경과 같이, 아주 적은 또는 최소의 클라이언트 리소스가 관련되는 네트워크형 호스트 서비스의 환경에 구현될 수도 있다.
본질적으로, 데이터가 저장되거나 데이터가 검색될 수 있는 곳이라면 어떤 곳이든 본 발명의 일실시예에 따른 문자열 분석을 위해 바람직하거나 적당한 환경이다.
본 발명의 일실시예에 따른 문자열 분석은 운영 체제를 통해, 장치 또는 오브젝트에 대한 서비스 개발자에 의한 사용을 위해 구현될 수 있으며, 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 애플리케이션 소프트웨어내에 포함될 수 있다.
소프트웨어는, 클라이언트 워크스테이션, 서버 또는 다른 장치와 같은 하나 이상의 컴퓨터에 의해 실행되는, 프로그램 모듈과 같은 컴퓨터-실행가능 명령의 일반적인 문맥에서 설명될 수 있다.
일반적으로, 프로그램 모듈은, 특정한 태스크를 수행하거나 특정한 추상적 데이터형을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다.
통상적으로, 프로그램 모듈들의 기능은 다양한 실시예에서의 필요에 따라 조 합되거나 분산될 수 있다. 또한, 당업자는, 본 발명의 일실시예에 따른 문자열 분석이 다른 컴퓨터 구성으로도 실행될 수 있다는 것을 알 수 있다.
본 발명의 일실시예에 따른 문자열 분석을 수행하기에 적당할 수 있는, 널리 공지되어 있는 다른 컴퓨팅 시스템, 환경, 및/또는 구성으로는 퍼스널 컴퓨터(PC), ATM(automatic teller machines), 서버 컴퓨터, 핸드-헬드 또는 랩탑 장치, 멀티-프로세서 시스템, 마이크로프로세서-기반 시스템, 프로그램가능한 상용 전자 제품, 네트워크 PC, 어플라이언스, 라이트(lights), 환경 제어 요소(environmental control elements), 미니컴퓨터, 메인프레임 컴퓨터 등을 들 수 있지만, 이에 한정되는 것은 아니다.
또한, 본 발명의 일실시예에 따른 문자열 분석은 태스크가 통신 네트워크/버스 또는 다른 데이터 전송 매체를 통해 링크되어 있는 원격 프로세싱 장치에 의해 수행되는 분산형 컴퓨팅 환경에서 실행될 수도 있다.
분산형 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치할 수 있으며, 클라이언트 노드는 차례로 서버 노드로서 동작할 수 있다.
따라서, 도 1은 본 발명의 일실시예에 따른 문자열 분석을 수행할 수 있는 적당한 컴퓨팅 시스템(100)의 일례를 도시하지만, 상술한 바와 같이, 컴퓨팅 시스템(100)은 적당한 컴퓨팅 시스템의 일례일 뿐이며 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 사용 범위 또는 기능 범위에 어떤 제한을 가하려는 것은 아니다. 컴퓨팅 시스템(100)은 예시적 동작 환경에 도시된 컴포넌트들 중 어느 하 나 또는 그 조합과 관련하여 어떤 의존성이나 요구사항을 갖는 것으로 해석되어서는 안된다.
도 1을 참조하면, 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 예시적인 시스템은 컴퓨터 시스템의 형태인 범용 컴퓨팅 장치를 포함한다.
컴퓨터 시스템(100)은 출력 주변 장치(110)와, 비디오 출력부(120)와, 중앙 처리부(130)와, 시스템 메모리(140)와, 네트워크 인터페이스부(150)와, 사용자 입력장치(160)와, 분리형 비휘발성 메모리(170)와, 비분리형 비휘발성 메모리(180)와, 시스템 버스(190)를 포함하여 구성된다.
출력 주변 장치(110)는 스피커 및 프린터 등이 해당된다.
비디오 출력부(120)는 모니터 또는 다른 유형의 디스플레이 장치가 해당된다.
중앙 처리부(130)는 컴퓨터 시스템(100)의 전체적인 동작을 제어하며, 시스템 메모리(140), 분리형 비휘발성 메모리(170), 비분리형 비휘발성 메모리(180)와 같은 컴퓨터 기억 매체 또는 통신 매체를 통해 컴퓨터 시스템(100)에 설치되어 있는 문자열 분석 프로그램을 로딩하여 문자열 분석을 수행하기 위한 기능 소프트웨어 모듈들을 활성화하여 본 발명의 일실시예에 따른 문자열 분석을 수행한다.
시스템 메모리(140), 분리형 비휘발성 메모리(170), 비분리형 비휘발성 메모리(180)는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보 저장을 위해 모든 방법과 기술로 구현되어 중앙 처리부(130)에 의해 액세스 가능한 컴퓨터 판독가능 매체이다.
여기에서, 프로그램 모듈에는 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 문자열 분석 프로그램 모듈이 포함된다. 문자열 분석 프로그램 모듈은 중앙 처리부(130)에 의해 구동되어 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 각각의 기능 소프트웨어 모듈을 활성화시키게 된다.
컴퓨터 판독가능 매체는 시스템 메모리(140), 분리형 비휘발성 메모리(170), 비분리형 비휘발성 메모리(180)와 같은 컴퓨터 기억장치 매체와 함께 통신 매체를 포함할 수 있다.
컴퓨터 기억장치 매체는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 기타 메모리 기술, CD-ROM, CDRW DVD(compact disc-rewitable digital versatile disk) 또는 기타 광 디스크 기억장치, 자기 카세트, 자기 테이프, 자기 디스크 기억장치 또는 기타 자기 기억장치, 또는 컴퓨터 시스템(100)에 의해 액세스되고 원하는 정보를 저장할 수 있는 기타 모든 매체를 포함하지만 이에 제한되는 것은 아니다.
통신 매체는 일반적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에서 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 전달 매체 정보를 포함한다.
'피변조 데이터 신호'라는 용어는, 하나 이상의 특성 셋(characteristics set)을 가지고 있는 신호 또는 신호에서 정보가 암호화되는 것과 같은 방식으로 신호가 변경된 것을 의미한다.
예로서, 통신 매체는 유선 네트워크 또는 다이렉트 유선 연결과 같은 유선 매체, 그리고 음향, RF, 적외선, 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되는 것은 아니다. 위에서 언급된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되어야 한다.
시스템 메모리(140)는 판독 전용 메모리(ROM) 및 랜덤 액세스 메모리(RAM)와 같은 휘발성 및/또는 비휘발성 메모리의 모양으로 컴퓨터 기억장치 매체를 포함한다.
시동 시 컴퓨터 시스템(100) 내의 구성요소들 사이의 정보의 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)은 일반적으로 ROM에 저장되어 있다.
RAM은 일반적으로 즉시 액세스 가능하고/가능하거나 현재 중앙 처리부(120)에 의해 동작되고 있는 데이터 및/또는 프로그램 모듈을 포함한다.
예로서, 운영 체제, 애플리케이션 프로그램, 기타 프로그램 모듈 그리고 프로그램 데이터들이 해당된다. 여기에서 기타 프로그램 모듈에는 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 프로그램 모듈이 포함된다.
분리형 비휘발성 메모리(170)는 불휘발성 자기 디스크와, CD-ROM, CDRW 또는 기타 광 매체등을 포함하는 비휘발성 광 디스크와, 자기 테이프 카세트, 플래쉬 메모리 카드, DVD, 디지털 비디오 테이프, 고체(solid state) RAM, 고체 ROM 등이 있을 수 있다.
비분리형 비휘발성 메모리(180)는 불휘발성 자기 매체로의 기록 또는 그로부터의 판독을 위한 하드 디스크를 예로 들수 있다.
하드 디스크는 운영 체제, 애플리케이션 프로그램, 기타 프로그램 모듈, 및 프로그램 데이터를 저장한다. 여기에서 하드 디스크에 저장된 컴포넌트들은 시스템 메모리(140)에 저장된 운영 체제, 애플리케이션 프로그램, 기타 프로그램 모듈, 및 프로그램 데이터와 동일할 수도 있고 다를 수도 있다.
네트워크 인터페이스부(150)는 컴퓨터 시스템(100)을 하나 이상의 원격 컴퓨터(10)로 연결하는 동작을 수행한다.
컴퓨터 시스템(100)은 네트워크 인터페이스부(150)를 통하여 하나 이상의 원격 컴퓨터(10)로의 논리적 연결을 사용하여 네트워크화 또는 분산된 환경에서 동작할 수 있다.
원격 컴퓨터(10)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 다른 공통 네트워크 노드일 수 있고, 일반적으로 컴퓨터 시스템(100)과 관련하여 위에서 설명한 엘리먼트의 대부분 또는 그 전부를 포함하여 구성될 수 있다.
논리적 연결로는 LAN 및 WAN이 있고, 또한 다른 네트워크/버스를 포함할 수 있다. 이러한 네트워킹 환경은 가정, 사무실, 회사 전체에 걸친 컴퓨터 네트워크, 인트라넷 및 인터넷에서 통상적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(100)은 네트워크 인터페이스 또는 어댑터를 통해 LAN에 연결된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터 시스템(100)은 일반적으로 인터넷과 같은 WAN상에서의 통신을 설정하기 위한 모뎀 또는 다른 수단을 포함한다.
통신 기술의 발전에 따라 퍼스널 컴퓨팅 및 인터넷을 중심으로 다양한 분산형 컴퓨팅 프레임워크가 개발되어 왔으며 개발 중에 있다. 개인 및 비즈니스 사용자를 막론하고, 애플리케이션 및 컴퓨팅 장치에 대해 심리스 상호운영이 가능한 웹-인에이블형 인터페이스가 제공되어, 컴퓨팅 활동을 차츰 웹 브라우저 또는 네트워크-지향화한다.
예를 들어, MICROSOFT..의 .NET 플랫폼은 서버, 웹-기반 데이터 저장과 같은 블록 구현 서비스 및 다운로드가능한 장치 소프트웨어를 포함한다.
여기에서는 예시적 실시예들을 컴퓨팅 장치상에 상주하는 소프트웨어와 관련하여 설명하지만, 본 발명에 대한 하나 이상의 부분들은, 본 발명에 따른 동작이 모든 .NET의 언어 및 서비스에 의해 수행되거나 지원되거나 이를 통해 액세스될 수 있도록, 운영 체제, 애플리케이션 프로그램 인터페이스(API), 또는 코프로세서, 디스플레이 장치 및 요구 오브젝트간의 '미들 맨' 오브젝트를 통해 구현될 수 있을 뿐 아니라, 다른 분산형 컴퓨팅 프레임워크에서도 구현될 수 있다.
사용자 입력 장치(160)에는 명령 및 정보를 컴퓨터 시스템(100)에 입력하기 위해 키보드, 일반적으로 마우스라고 알려진 포인팅 디바이스, 트랙볼(trackball) 또는 터치 패드 등의 사용자 입력 장치들이 연결된다.
그 외에도 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있을 수 있다. 이들 및 다른 입력 장치는 종종 시스템 버스(190)에 연결된 사용자 입력 장치(160)를 통해 중앙 처리부(130)에 접속되지만, 병렬 포트, 게임 포트, USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 연결될 수 도 있다.
시스템 버스(190)는 메모리 버스 또는 메모리 콘트롤러, 주변장치 버스 및 각종 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 포함한 몇가지 유형의 버스 구조 중 어느 것이라도 될 수 있다.
예로서, 이러한 구조는 ISA(industry standard architecture) 버스, MCA(micro channel architecture) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 그리고 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스 등을 포함하지만 이에 제한되는 것은 아니다.
도 2는 도 1에 도시된 컴퓨팅 시스템에 의해 구현되어 본 발명의 일실시예에 따른 문자열 분석을 수행하기 위한 종합 문자열 분석기의 기능 블록도이다.
도 2를 참조하면, 본 발명의 일실시예에 따른 종합 문자열 분석기는 분석하고자 하는 대상 프로그램을 임의의 중간 언어(IL : Intermediate Language)로 변환하는 중간 언어 변환부(220)와, 임의의 중간 언어로 변환된 데이터에 대한 문자열 분석과정을 수행하여 변수 정보를 추출하는 분석 처리부(230)를 포함하여 구성된다.
분석 처리부(230)는 중간 언어로 변환된 분석 대상 프로그램을 입력받아서 어휘 분석과 구문 분석 과정을 통해 추상 구문 트리(AST: Abstract Syntax Tree) 형태의 데이터로 재구성하는 파싱부(231)와, 추상 구문 트리 형태의 데이터를 흐름 정보를 알 수 있도록 흐름 그래프 형식으로 변환하는 전처리부(232)와, 흐름 그래 프 형식의 데이터를 정적 분석 기법에 의해 분석하여 분석 결과 데이터를 추출하는 문자열 분석부(233)를 포함한다.
이하에서는 편의상 본 발명이 분석하고자 하는 분석 대상 프로그램을 제 1 데이터 파일(210)이라 칭하도록 하고, 제 1 데이터 파일을 중간 언어 변환부(220)에 의해 임의의 중간 언어로 변환되는 파일은 제 2 데이터 파일이라 칭하도록 한다.
이때, 제 1 데이터 파일(210)은 JAVA, C++, C#.NET, PL/1, C0BOL, JCL, JSP, Delphi, VisualBasic, PowerBuilder, 자바 가상머신의 중간언어로 작성된 자바 바이트코드(java bytecode), 기계어로 작성된 EXE, DLL 등 각종 프로그래밍언어로 코딩될 수 있다.
도 3을 참조하면, 본 발명의 일실시예에 따른 종합 문자열 분석기의 중간 언어 변환부(220)에 입력되는 제 1 데이터 파일로 자바언어로 작성되어 있는 예를 볼 수 있다.
이와 같이 제 1 데이터 파일(210)은 각종 프로그래밍 언어로 코딩될 수 있기 때문에, 각 프로그래밍 언어에 따라 종합 문자열 분석기를 별도로 구현해야할 필요성이 있다. 따라서, 이러한 점을 피하기 위해, 중간 언어 변환부(220)를 각 프로그래밍 언어별로 구현함으로써, 종합 문자열 분석기에 입력되는 코드를 하나의 중간 언어 코드로 통일시킨다.
따라서 본 발명의 일실시예에 따른 종합 문자열 분석기에서는 중간 언어 변환부(220)에서 사용할 중간 언어로서, 각 프로그래밍 언어들의 특성을 포함하여 설 계하고자, 중간 언어의 개념에 따라 임의의 중간언어(이하, 언어라 한다)를 설계하였다.
이때, 변수는 메모리에 어떤 데이터를 저장하고 저장된 주소를 가진다. 그리고 임의 또는 각 지점에서의 변수는 분석 처리부(230)가 제 1 데이터 파일을 중간언어로 변환시킨 제 2 데이터 파일을 한 줄씩 문자열로 읽어 들이므로, 몇 번째 줄에 위치해 있는 변수를 말한다.
본 발명에서는 변수를 분석함으로써, 정적 변수, 일반 변수, 객체, 함수, 객체내의 변수와 함수, 함수내의 변수와 인자 등의 정보들을 알아낼 수 있다. 이러한 정보들을 총칭하여 변수 정보라 칭하도록 한다.
따라서 임의 또는 각 지점에서의 변수 정보는 임의 또는 각 줄에 위치해 있는 변수와 해당 변수의 데이터 값을 포함한다.
먼저 파싱부(231)는 중간 언어로 변환된 프로그램내의 문자열을 어휘 분석 과정을 통해 각각 의미 있는 토큰들의 단위로 나눈다. 그리고 구문 분석 과정을 통해 토큰들의 나열을 트리 형태의 데이터 구조로 재구성하여 추상구문트리 형태로 작성한다.
예를 들어, "if(a==1) then a=5; else a=10;"이라는 하나의 긴 문자열이 있 다.
파싱부(231)는 어휘분석 과정을 통하여, 아래와 같이 각각의 의미를 가진 토큰의 단위로 나눈다.
"if", "(", "a", "==", ")", "then", "a", "= ", "5 ", "; " ..
파싱부(231)는 문자열을 토큰 단위로 나눈 다음 구문분석 과정을 통하여, 토큰 열의 구문을 분석하여 a=1을 조건으로 하는 if문이라는 식으로 인식하고 구조를 가진 추상구문 트리 형태로 변환한다.
이와 같이 토큰들의 구조를 나타내는 추상 구문 트리는 프로그램의 전체적인 형태를 보여주지만, 실행 흐름은 알 수 없다. 따라서 파싱부(231)는 실제 실행되는 순서에 따른 흐름 정보를 추가하기 위해 추상 구문 트리를 전처리부(232)로 전달한다.
전처리부(232)는 파싱부(231)로부터 추상 구문 트리 형태의 데이터를 입력받아서 프로그램내의 개별 연산들의 의존 관계 및 선후 관계를 나타내는 흐름 정보를 추출한다. 그리고 전처리부(232)는 추출된 흐름 정보를 분석에 용이하도록 흐름 그래프(Flow graph) 형식으로 작성한 후, 문자열 분석부(233)로 보낸다. 이때 사용되는 흐름 그래프는 다음과 같이 노드(node)와 에지(edge)를 이용하여 표현할 수 있다.
그래프(Graph)는 노드와 노드 사이에 연결된 에지의 집합으로 구성된다. 그리고 노드(Node)는 자연수로 표기된 레이블(Label)과 해당 블록의 속성(Attr)으로 구성된 프로그램내의 기본 블록 집합이며, 에지(Edge)는 각 노드 사이를 잇는 흐름의 집합이다.
예를 들어, 다음과 같은 프로그램에서는
1: if(a==1)
2: then a=5;
3: else a=10;
4: print a;
실제로 실행가능한 실행순서에 따라 흐름 정보를 구성해보면, 아래와 같이 흐름그래프 형식의 데이터로 만들어 진다.
(1-2), (2-4), (1-3), (3-4)
도 5a 및 5b를 참조하면, 본 발명에서의 일실시예로 제 2 데이터파일(도 4a 및 4b에 도시됨)을 토대로 노드의 집합과 프로그램의 흐름을 표기하여 작성되는 흐름 그래프를 보여준다.
문자열 분석부(233)는 전처리부(232)로부터 흐름 그래프로 작성된 데이터를 입력받아서 각 노드별로 정적 분석(static analysis)기법을 이용하여 지점이 고정점으로 판단될 때까지의 분석과정을 수행하고, 추출된 노드의 결과 값을 분석 결과 데이터로 저장한다.
이때, 고정점이란, 분석하고자하는 변수의 값이 고정된 값으로 예측되는 지 점을 말한다. 이는 분석을 수행하는 도중에 이전 노드의 결과 환경과 현재 노드의 결과 환경이 일치하거나, 현재 노드의 위치가 분석하고자 하는 지점과 일치할 때 고정점으로 판단한다.
그리고 정적 분석이란 프로그램 수행중의 관심있는 성질을 프로그램을 실행시키지 않고 미리 조사하는 것을 말한다. 이러한 정적 분석은 그 목적에 따라 상수 전달(constant propagation), 이명 분석(aliasing analysis), 예외 상황 분석(exception analysis), 정적 분할(static slicing), 흐름 분석(control flow analysis), 요약 해석(Abstract Interpretation) 등이 있으며, 주로 프로그램의 최적화나 안정성 증명을 위하여 사용된다.
본 발명에서는 요약 해석 방법을 이용하여 각 노드별로 정적 분석을 수행함으로써, 프로그램을 실제 실행시키지 않고 분석을 통하여 변수가 가질 수 있는 값을 미리 예측한다.
이때, 요약 해석 방법이란 래티스로 표현되는 요약된 공간에서 프로그램을 수행해 봄으로써, 모든 상황의 값들을 포함하는 요약된 값을 사용하여 실제 값을 예측하는 방법을 말한다.
이 방법론에서는, 요약된 공간을 사용하고 우리가 관심을 가지는 정보가 항상 증가하므로 프로그램의 분석은 항상 유한한 시간내에 끝나게 된다. 또한 프로그램의 실제적인 의미(concrete semantics)와 요약된 의미(abstract semantics)간의 관계를 안정성 조건을 만족하는 추상화(abstraction) 및 구제화(concretization) 함수로 정의함으로써, 프로그램 분석의 정확성을 보장할 수 있다.
다음은 요약 해석 방법의 구체화를 정의하는 구체적 의미 구조(Concrete Semantics)의 구체적 도메인(Concrete Domain)을 보여준다.
Ref는 메모리 내부의 특정한 위치를 나타내는 주소 값을 의미한다. Value로는 숫자 값인 Num이나 문자열인 String, 혹은 주소 값인 Ref가 될 수 있다. Obj는 Field를 입력으로 하고 Value를 출력으로 하는 함수 형식이다. Array는 Num을 입력으로 하고 Value를 출력으로 하는 함수 형식이다. Heap은 주소 값을 입력으로 하면 Obj 함수나 Array 함수를 출력으로 하는 함수 형식이다.
LocalEnv는 지역변수를 구하는 함수 타입으로 변수를 입력으로 하면 Value를 출력으로 하는 함수 형식이다. StaticEnv함수는 Class와 Field의 튜플(tuple)을 입력으로 하면 값을 출력해준다. Env는 분석기의 환경을 저장하는 역할을 하는데 지역환경, 정적환경, Heap의 3-튜플(3-tuple) 형식이다.
ClassTbl은 클래스 테이블을 의미하는데 Class를 입력으로 하고 Obj함수를 출력으로 하는 함수 형식이다. MethodTbl은 메소드 테이블을 의미하며 Class와 Field의 튜플을 입력으로 하고 이들을 그래프로 구성해서 출력해주는 함수 형식이다. GlobalTbl은 전체 테이블을 의미하며 ClassTbl과 MethodTbl의 튜플 형식이다.
다음은 요약 해석 방법의 추상화를 정의하는 요약 의미 구조(Abstract Semantics)의 요약 도메인(Abstract Domain)을 보여준다. 아래에 정의된 도메인은 분석 결과로 얻을 수 있는 대략적인 값의 범위를 나타낸다.
먼저 은 분석 결과로 도출된 숫자 값의 멱집합이며 분석 결과로 모으는 숫자가 k개 이상이어도 계속 모을 것인지를 확인하기 위해서 제한 값인 k를 고려한다. 또한 은 알 수 없다는 의미인 도 원소로 포함한다. 은 분석 결과로 도출할 수 있는 문자열의 집합이며 표기된 문법(grammar) 로 생성할 수 있는 문자열의 집합인 언어 집합(language set)과 결과 값이 없다는 의미인 을 원소로 포함한다.
는 문자열 정규 형식(String Normal Form)을 의미한다. 이는 의 부분집합이며 을 구성하는 문법 중 를 제외한 문법으로 생성할 수 있는 모든 문자열이다. 는 자연수로 표시되는 레이블의 멱집합이다. 로는 모두 요약 값인 가 될 수 있다.
만약 의 값이 true이면 이 가리키는 레이블의 나 의 객체(concrete object)가 하나임을 의미하며 값을 변경할 필요가 있을 때 그냥 변경이 가능하다. 하지만 의 값이 false이면 이 가리키는 레이블의 나 같은 객체가 둘 이상임을 의미하여 값을 변경하지 못하며 이전에 가지고 있던 값 집합에 현재 수정하기를 원하는 값을 추가하여야 한다.
는 지역변수환경(), 정적변수환경(), 힙 ()으로 구성된다. 는 클래스()와 Method 이름()을 지정하면 해당 method 가 flow Graph형태()로 출력된다. 은 각 클래스별로 기본상태의 객체를 저장해둔 테이블이고, 이는 정적인 정보이다.
위에서 정의된 도메인으로 분석된 요약 값(abstract value)과 실제 값(concrete value)의 관계는 다음과 같다.
그리고 문자열을 요약 값으로 가질 수 있을 때, 각 문자열이 가질 수 있는 실제 값을 모두 가질 수 있다. 그리고 요약 값으로 과 를 모두 가질 수 있다면 각각의 실제 값을 조합(concatenation) 연산한 것과 같다.
도 6은 문자열 분석부(233)가 흐름 그래프를 입력받아 정적 분석을 흐름 순서에 따른 각 노드별로 수행하는 것을 보여주는 기능 블록도이다.
문자열 분석부(233)는 현재 노드와 현재 노드의 환경 값을 입력받고 현재 노드의 속성을 판별하는 노드 속성 판별부(241)와, 현재 노드를 정적으로 분석하는 노드 분석부(242)와, 현재 노드를 분석하는 지점이 고정점인지 판별하는 고정점 판 별부(243)와, 현재 노드를 분석하는 지점이 고정점일때 고정점 판별부(243)로부터 입력받은 해당 노드의 분석 결과 값을 분석 결과 데이터로 출력하는 분석 결과 처리부(244)로 구성되어 있다.
먼저 노드 속성 판별부(241)는 현재 노드와 현재 노드의 환경 값를 입력받고, 현재 노드의 속성을 판별한다.
이때, 노드의 속성은 흐름 그래프 내에 구성되어 있는 노드가 수행하는 역할에 따라 분류되어 있으며, 이는 다음과 같다.
노드 분석부(242)는 정적 분석 기법을 이용하여 현재 노드를 노드 속성 판별부(241)로부터 판별된 노드의 속성에 따른 분석과정을 수행한다.
본 발명에서는 요약 해석 방법을 이용하여 각 노드별로 정적 분석을 수행한다.
따라서 분석하고자 하는 변수의 요약 값을 추출하기 위해 요약 해석 방법을 기반으로 아래의 요약 연산(Abstract Operations)을 수행한다.
먼저 concatenation 연산은 두 개의 요약 문자열을 붙이는 과정을 수행한다.
이는 분석하고자 하는 변수의 값이 특정 값이 오는 경우(Type 1), 분석 결과 데이터에는 해당 값을 입력한다.
한편, 분석하고자 하는 변수의 값으로 *가 입력되는 경우(Type 3)와 T가 입력되는 경우(Type 4)가 각각 중복될 때, 다음과 같이 동작하여 분석 결과 데이터에 입력한다.
...* + *... = ...*...
...T + T... = ...T...
이와 같이 *와 T 중 어느 하나가 여러 번 나열되는 경우, 반복을 의미하는 *와 외부 입력 값으로 인해 알 수 없는 값을 의미하는 T에는 길이정보가 포함되어 있지 않기 때문에 하나로 표현할 수 있다.
join 연산은 분석하고자 하는 변수가 if-then-else문과 같은 조건문에 의해 문자열의 값이 두 개 이상의 값을 가능성이 있는 경우(Type 2), 입력될 가능성이 있는 모든 값을 |연산자로 구분하여 분석 결과 데이터에 입력한다.
예를 들면, a라는 변수는 if조건식에 의해 then부에서는 "abc"라는 문자열을, else부에서는 "123"이라는 문자열을 가지게 된다. 이때 if-then-else문 이후의 a는 "abc", "123" 중 어느 하나의 값을 가진다고 분석해야 하므로, 요약문자열의 값에는 입력될 가능성이 있는 값들의 합집합을 가져야 한다.
widening은 while문과 같은 반복문에 의해 문자열의 값이 반복해서 입력되는 경우(Type3), 분석 결과 데이터에는 *를 입력한다.
예를 들면, 반복문을 수행하기 전에는 변수 A의 값이 "aa"였고 수행 후의 값은 "aattt..t"가 된다면, "aa*"로 요약한다. 또한 변수 A의 값이 "aa"였고 수행 후의 값은 "att..tta"가 된다면, "a*a"로 요약하게 된다.
특히 사용되는 반복문이 무한 반복문일 경우, 입력될 가능성이 있는 값을 모두 분석하기 위한 과정이 무한히 반복되기 때문에 이를 막기 위해 분석 결과 데이터에는 *만 입력하고 반복문은 수행하지 않는다.
이와 같은 요약 연산을 통하여 추출된 요약 값은 해당 노드의 분석 결과 값이 되며, 이는 일정한 형태의 요약 문자열로 구성할 수 있다.
본 발명에서는 5가지 타입의 요약 문자열로 구성하였다.
Type 1. 일반 문자열
일반 문자열은 요약되지 않은 형태로써, 다음과 같이 변수 값을 완전히 알 수 있을 경우이다.
1: String s = "확실한 문자열";
2: function(s);
function함수의 인자인 변수s의 요약 문자열은 다음과 같이 생성된다.
(표현) Type 1 : [AbstractString]
(예) Type 1 : "확실한 문자열"
Type 2. OR 문자열
정적으로 결정될 수 없는 어떠한 조건식에 의해서, 다음과 같이 변수의 값이 두 개 이상의 값을 가질 가능성이 있는 경우에 해당된다.
1: String s = "";
2: if( condition )
3: s = "abcd";
4: else
5: s = "가나다라" ;
6: function(s);
if문의 조건식에 의해 변수 s값은 "abcd"와 "가나다라" 중 하나를 가지게 된다. 따라서 function함수의 인자인 변수 s의 요약문자열은 다음과 같이 생성된다.
(표현) Type 2 : [AbstractString] | [AbstractString]
(예) Type 2 : "(abcd|가나다라)"
Type 3. 반복 문자열
반복문(loop statement)의해, 다음과 같이 변수의 문자열 값이 계속 증가되는 경우에 해당된다.
1: String s = "머리";
2: while( condition )
3: {
4: s = s + "꼬리";
5: }
6: function(s);
function함수의 인자인 변수 s의 요약문자열 값은 "머리"로 시작되는 것은 확실하지만, while문의 조건식에 따라 "꼬리"가 몇 번 추가 될지 모르는 경우에 해당된다.
이때 어떤 문자열의 반복이 붙음을 의미하는 것은 BOTTOM이라 명칭하고 *부호를 사용하여 아래와 같이 쓴다.
(표현) Type 3 : [BOTTOM]
(예) Type 3 : "머리*"
Type 4. 알 수 없는 문자열 (Top)
어떠한 문자열의 값이, 사용자가 외부에서 입력하는 값으로 인해, 절대로 알 수 없는 경우에 해당된다.
1: String s;
2: s = user_input();
3: function(s);
3라인의 s의 요약문자열 값은 2라인의 사용자가 실행시간에 입력하는 값으로 결정되므로 알 수 없는 값이다. 따라서 모르는 값을 의미하는 것은 TOP이라 명칭하고 아래와 같이 쓴다.
(표현) Type 4 : [TOP]
(예) Type 4 : "Top"
Type 5. 요약 문자열의 반복
분석하고자 하는 변수의 값이 요약 문자열 Type 1, Type 2, Type 3, Type 4의 값으로 반복되는 경우에 해당되는 것으로, 아래와 같이 사용하여 값들을 연결할 수 있다.
(표현) Type 5 : [AbstractString], [AbstractString]
따라서 현재 노드의 분석 결과 값은 위와 같은 5가지 타입의 요약문자열로 구성되어 있다.
고정점 판별부(243)는 노드 분석부(242)로부터 현재 노드의 분석 결과 값을 입력받아 현재의 노드를 분석하는 지점이 고정점인지를 판단한다.
이때, 고정점으로 판단되는 경우는 현재 노드의 환경 값과 노드 분석부(243)로부터 추출된 현재 노드의 결과 값이 일치할 경우 또는 현재 노드의 위치가 분석하고자 하는 지점과 일치할 경우에 해당된다.
판단결과, 고정점으로 판단되면, 현재의 노드의 분석은 중단되고 분석 결과로 추출된 현재 노드의 결과 값은 분석 결과 처리부(244)로 입력된다.
판단결과, 고정점으로 판단되지 않으면, 현재 노드의 결과 값은 노드 속성 판별부(241)로 입력되어 다음 노드를 분석하는 과정에 필요한 다음 노드의 환경 값이 된다.
분석 결과 처리부(244)는 고정점 판별부(243)로부터 입력받은 현재 노드의 결과 값을 분석 결과 데이터로 저장한다.
이때, 분석 결과 데이터는 분석 목적에 따라 찾고자 하는 변수의 분석 결과 데이터만 출력할 수도 있고, 검색이 용이한 파일, 각종 데이터베이스, XML 문서 중 하나로 저장될 수도 있다.
도 7a 및 7b를 참조하면, 본 발명의 일실시예로 분석 결과 처리부(244)가 분석하고자 하는 변수의 분석 결과 데이터를 XML문서로 저장한 것을 볼 수 있다.
도 8은 도 2에 도시된 일실시예에 따른 종합 문자열 분석기의 동작 흐름도이다.
도 8을 참조하면, 중간 언어 변환부(220)는 임의의 프로그래밍 언어로 작성된 제 1 데이터 파일(210)을 특정 중간 언어로 작성된 제 2 데이터 파일로 변환한다(S1).
파싱부(231)는 중간 언어 변환부(220)로부터 입력된 제 2 데이터 파일을
어휘 분석을 통해 각각 의미 있는 토큰들의 단위로 나누고, 구문 분석을 통해 토큰들의 구조를 나타내는 추상 구문 트리 형태의 데이터로 재구성하여 전처리부(232)에 출력한다(S2).
전처리부(232)는 파싱부(231)로부터 추상 구문 트리 형태의 데이터를 입력받아서 프로그램내의 개별 연산들의 의존 관계 및 선후 관계에 맞추어 흐름 정보를 추출한다. 그리고 추출된 흐름 정보를 분석에 용이하도록 흐름 그래프로 작성하여 문자열 분석부(233)으로 입력한다(S3).
문자열 분석부(233)는 전처리부(232)로부터 입력된 흐름 그래프에 대하여 요 약 해석 방법을 이용하여 각 노드별로 정적 분석을 고정점이 판단될 때까지 수행함으로써, 흐름 그래프 형식의 데이터로부터 제 1 데이터 파일내의 임의 또는 각 지점에서의 변수 정보를 추출하여 분석 결과 데이터로 작성한다(S4).
도 9은 도 6에 도시된 일실시예에 따른 문자열 분석부(233)가 각 노드별로 분석을 수행하는 것을 보여주는 동작 흐름도이다.
도 9을 참조하면, 문자열 분석부(233)는 전처리부(232)로부터 흐름 그래프를 입력받아 흐름 정보에 따른 각 노드별로 정적 분석을 수행하는 과정을 시작한다(S11).
노드 속성 판별부(241)는 현재 노드와 현재 노드의 환경 값을 입력받고 현재 노드의 속성을 판별하여 노드 분석부로 보낸다(S12).
노드 분석부(242)는 현재 노드의 속성에 따른 정적 분석을 수행함으로써 추출된 현재 노드의 분석 결과 값을 고정점 판별부(242)로 보낸다(S13).
고정점 판별부(242)는 노드 분석부(242)로부터 입력받은 현재 노드의 분석 결과 값과 현재 노드의 환경 값이 일치하는지, 또는 분석하고자 하는 지점이 현재 노드의 지점과 일치하는지를 판단한다(S14).
판단결과, 일치하면 현재 노드의 분석 결과값은 분석 결과 처리부(244)에 의해 분석 결과 데이터로 저장된다(S15). 판단결과, 일치하지 않으면 현재 노드의 분석 결과 값은 노드 분석부(242)의 다음 노드의 환경 값으로 입력된다.
도 10는 도 1에 도시된 컴퓨팅 시스템에 의해 구현되어 본 발명의 다른 실시예에 따른 문자열 분석을 수행하고 사용자에게 질의어를 받아 원하는 정보를 도출 하기 위한 종합 문자열 분석 시스템의 기능 블록도이다.
도 10에 도시된 블록도에서 중간 언어 변환부(320)와 분석 처리부(330)는 도 2와 같은 기능을 하는 블록이며, 이미 상세히 설명되었음에 따라 질의어 처리부(340)에 대해서만 설명하도록 한다.
질의어 처리부(340)는 분석 처리부(330)에서 추출된 분석 결과 데이터를 기반으로 찾고자 하는 지점의 변수정보를 추출하기 위해 사용자로부터 질의어를 입력받는다.
질의어 처리부(340)는 분석 처리부(330)에서의 분석과정이 모두 수행한 후에 사용자로부터 질의어를 입력받는 경우, 분석 결과 데이터를 기반으로 찾고자하는 지점의 변수정보나 객체정보를 추출할 수 있다(도 11에 도시됨).
또한 질의어 처리부(340)는 사용자로부터 질의어를 입력받은 후, 분석 처리부(330)에서 분석과정을 수행하는 경우도 있다. 이때 분석 처리부(330)는 질의어와 관련 있는 부분에 한해서만 분석하고, 질의어 처리부(340)는 찾고자하는 지점의 변수정보를 추출한다(도 12에 도시됨).
도 11을 참조하면, 분석 처리부(330)에서 분석과정을 모두 수행한 후에, 사용자로부터 질의어를 입력받는 경우의 동작 흐름도이다.
이 경우, 먼저, 중간 언어 변환부(320)는 제 1 데이터 파일(310)을 중간 언어로 작성된 제 2 데이터 파일로 변환한다(S21). 이는 각종 프로그래밍 언어별로 구비되어 있는 중간 언어 변환부(320)가 각종 프로그래밍 언어로 작성될 수 있는 제 1 데이터 파일(310)을 임의의 중간 언어로 작성된 제 2 데이터 파일로 변환하여 분석 처리부(330)로 출력한다.
분석 처리부(330) 내의 파싱부(331)는 중간 언어 변환부(320)로부터 제 2 데이터 파일을 입력받아 어휘 분석을 통해 각각 의미 있는 토큰들의 단위로 나누고, 구문 분석을 통해 토큰들의 구조를 나타내는 추상 구문 트리 형태의 데이터로 재구성하여 전처리부(332)로 출력한다(S22).
전처리부(332)는 파싱부(331)로부터 추상 구문 트리 형태의 데이터를 입력받아서 프로그램내의 개별 연산들의 의존 관계 및 선후 관계에 맞추어 흐름 정보를 추출한다. 그리고 추출된 흐름 정보를 분석에 용이하도록 흐름 그래프로 작성하여 문자열 분석부(333)로 입력한다(S23).
문자열 분석부(333)는 전처리부(332)로부터 입력된 흐름 그래프에 대하여요약 해석 방법을 이용하여 정적 분석을 수행함으로써, 흐름 그래프 형식의 데이터로부터 제 1 데이터 파일내의 임의 또는 각 지점에서의 변수 정보를 추출하여 분석 결과 데이터를 작성한다(S24).
이때, 요약 해석 방법을 이용하여 변수 값으로 올 수 있는 값을 포함하는 요약된 값을 사용하여 실제 변수 값을 예측하는 정적 분석을 수행한다. 이 결과, 분석된 변수 값은 앞서 설명한 5가지 타입의 요약 문자열로 구성되고, 사용자가 질의어를 통하여 원하는 정보를 도출할 수 있도록 파일, 데이터베이스, XML문서에 저장된다.
그리고, 저장된 분석 결과 데이터를 기반으로 질의어 처리부(340)에서는 사용자로부터 질의어를 입력받아 찾고자하는 지점의 변수 정보를 추출한다. 이때, 저 장되어 있는 분석 결과 데이터는 제 1 데이터 파일의 전체를 토대로 정적으로 분석하여 각 지점에서의 모든 변수의 정보가 추출되어 있기 때문에, 질의어 처리부(340)는 질의어를 입력받아 원하는 정보를 추출하는 과정을 한 번 이상 수행할 수 있다.
도 12를 참조하면, 사용자로부터 질의어를 먼저 입력받은 후에, 분석 처리부(330)에서 질의어와 관련 있는 부분에 한해서만 분석과정을 수행하는 경우의 동작 흐름도이다.
이 경우, 먼저 질의어 처리부(340)에서 사용자로부터 질의어를 먼저 입력받는다(S31). 이후, 중간 언어 변환부(320)는 제 1 데이터 파일(310)을 임의 중간 언어로 작성된 제 2 데이터 파일로 변환한다(S32). 그리고 제 2 데이터 파일에 대한 어휘 분석과 구문 분석 과정을 통해 추상 구문 트리 형태의 데이터로 재구성하고(S33), 추상 구문 트리 형태의 데이터를 흐름 정보를 알 수 있도록 흐름 그래프로 작성한다(S34).
그 다음 문자열 분석부(330)에서는 입력받은 질의어와 관련된 부분으로 한정된 분석범위 내에서 요약 해석 방법을 이용해서 정적으로 분석한다(S35).
분석 결과, 추출된 변수의 정보는 입력된 질의어에 해당하는 정보가 된다. 따라서 질의어 처리부(340)는 추출된 변수의 정보를 출력한다(S35).
이 경우, 정적으로 분석하는 범위가 입력된 질의어와 관련된 부분으로 한정되므로, 질의어에 해당하는 정보만 분석 결과 데이터로 추출된다. 따라서 도 11의 경우보다 수행 속도 면에서 효율적이다.
다음은 몇 가지 예를 들어, 사용자가 질의어 처리부(340)로 입력하는 질의어의 예제를 기술하도록 한다.
1: SomeObject obj = new SomeObject();
2: obj.str = "hello";
3: obj.str += " world";
4: obj.exec();
위와 같이 작성된 프로그램내에서 특정 라인번호에 있는 특정 변수를 찾고자 하는경우, 다음과 같는 질의어를 표현할 수 있다.
Type1Search exam1
= new Type1Search(clFile1, 3, "obj.str");
// (파일이름, 라인번호, 해당변수)
Type2Search exam2
= new Type2Search(clFile1, 3, "obj.str");
// (파일이름, 라인번호, 해당변수)
위의 코드는 clFileName이라는 파일내의 3번째 라인의 obj객체에 구성되어있는 변수 str을 값을 얻고자 하는 질의어 예제이다. 이때 질의어 처리부(340)가 3번째 라인의 문장 실행 전의 값을 얻는 질의 타입으로 구현되어있다면(Type1Search), 변수str의 값은 "hello"이 된다. 그리고 3번째 라인의 문장 실행 후의 값을 얻는 질의 타입으로 구현되어 있다면(Type1Search), 변수str의 값은 "hello world"이 된다.
또한, 임의의 파일내의 특정 객체내의 호출하는 함수명을 가지고 변수를 찾고자 하는 경우, 다음과 같이 질의어를 표현할 수 있다.
Type3Search exam3
= new Type3Search(clFile1,"<SomeObject: void exec(String)>, "obj.str");
// (파일이름 , 해당 객체와 함수 , 해당변수)
이는 clFile1이라는 파일내의 SomeObject 객체의 exec 함수를 수행할 때, obj 객체의 변수 str의 값을 찾고자 하는 질의어 예제이다.
그리고 다음은 임의의 파일내의 특정 객체내의 함수를 호출할 때 쓰이는 인자값을 알고자 하는 경우이다.
1: String a = "abcd";
2: Target t = new Target();
3: t.testMethod(a, 100);
위의 clFileName프로그램내에서 Target객체의 testMethod함수를 호출할 때 쓰이는 인자 값중 1번째 인자 a값을 알고자 하는 질의어를 다음과 같이 표현할수 있다.
Type4Search exam4
= new Type4Search(clFile1, "<Target: void testMethod(String,int)>", 1);
// (파일이름, <해당 클래스와 함수> , 함수의 몇 번째 인자)
위와 같이 얻고자하는 정보에 따라, 다양한 형태의 질의어를 받아 분석 결과 데이터를 토대로 원하는 정보를 추출하는 질의어 처리부를 구현할 수 있다.
도 13을 참조하면, 질의어 처리부(340)가 도 3에 도시된 제 1 데이터 파일의 20번째 라인의 dbCon객체의 함수 pareStatement의 인자 sql의 값을 질의하여 결과를 도출하는 예이다. 이때 if-else 조건문으로 인하여 3가지의 값이 출력된다. 그리고 끝부분의 는 알 수 없다는 뜻으로 데이터베이스에서 입력될 부분이다.
따라서, 질의어 처리부(340)를 운용함으로써 복잡하게 상호 의존관계로 얽혀있는 각종 응용프로그램과 데이터베이스 시스템은 전제적으로 무결성을 유지하도록 관리할 수 있다.
이때, 질의어 처리부(340)를 통해 찾을 수 있는 변수는 메모리에 저장되어 그 주소를 가지는 변수의 정보로써, 프로그램내의 임의 또는 각 지점의 문자열, 데이터베이스 쿼리문, 정적 변수, 일반 변수, 객체, 함수, 객체내의 변수와 함수, 함수내의 변수와 인자값이 될 수 있다.
예를 들어, 일부 데이터베이스 테이블의 필드가 추가되거나 수정한 경우, 이를 사용하는 모든 응용프로그램을 찾아내어 적절히 수정해야 한다. 그런데 일반적으로 대규모 소프트웨어 시스템에서 이를 수동적으로 찾아내기는 쉽지 않으므로, 프로그램 분석기법을 이용하여 자동으로 찾아내면 좋다.
따라서, 이러한 경우 질의어 처리부(340)는 찾고자 하는 변수를 데이터베이스 쿼리문을 가지는 문자열로 설정하여 분석 처리부(330)에 질의하면, 분석 처리부(330)로부터 데이터베이스 쿼리문의 집합을 결과값으로 받을 수 있음에 따라 응용 프로그램과 데이터베이스 간에 상호 의존 관계를 효과적으로 알아낼 수 있다.
본 발명은 바람직한 실시 예 및 많은 구체적인 변형 실시예를 참조하여 설명되었다. 그렇지만, 구체적으로 설명된 것과는 다른 많은 기타 실시예들이 또한 본 발명의 사상 및 범위 내에 들어간다는 것을 관련 분야의 당업자들은 이해할 것이다.
예를 들어, 본 발명의 실시예들에서는 중간 언어의 개념에 따라 각 프로그래밍 언어들의 특성을 포함하여 임의의 중간언어(이하, 언어라 한다)를 설계하고, 각종 프로그래밍 언어로 코딩되어 있는 데이터 파일들을 설계된 중간언어로 변환하기 위하여 중간 언어 변환부를 각 프로그래밍 언어별로 구현함으로써, 각종 프로그래밍 언어로 코딩되어 있는 데이터 파일들을 분석해야 하는 경우, 하나의 종합 문자열 분석기에서 중간 언어로 변환된 데이터를 입력받아 정적 분석을 수행하고 있다.
그러나, 도면에는 도시되지 않았지만 본 발명의 변형예로서 각종 프로그래밍 언어로 코딩되어 있는 임의의 데이터 파일을 분석하기 위하여 중간언어를 별도로 사용하지 않고, 각 프로그래밍 언어에 따라 종합 문자열 분석기를 구현하여 해당 프로그래밍 언어에 대하여 전담하여 정적 분석을 수행하게 할 수 있다.
따라서, 분석하고자 하는 임의의 데이터 파일이 JAVA, C++, C#.NET, PL/1, C0BOL, JCL, JSP, Delphi, VisualBasic, PowerBuilder, 자바 가상머신의 중간언어로 작성된 자바 바이트코드(java bytecode), 기계어로 작성된 EXE, DLL 등 각종 프로그래밍언어로 코딩될 수 있음에 따라 종합 문자열 분석기는 해당 프로그래밍 언 어별로 구현할 수 있다.
본 발명에 의하면, 분석 대상 프로그램내의 임의 또는 각각 모두 시뮬레이션하여 정적 분석을 한다.
본 발명의 일실시예에 따른 종합 문자열 분석기는 각종 프로그래밍 언어로 작성된 제 1 데이터 파일을 입력받아, 문자열 분석 과정을 통하여 임의 또는 각 지점에서의 변수정보를 추출할 수 있다.
이는 각종 프로그래밍 언어로 작성된 데이터 파일, 자바 가상머신의 중간언어로 작성된 자바 바이트코드(java bytecode), 기계어로 작성된 EXE, DLL과 같은 프로그램을 입력받아 중간 언어 변환부가 중간 언어로 변환한다. 그리고 분석 처리부에서 파싱과정, 전처리과정, 문자열 분석과정을 통하여 임의 또는 각 지점에서의 변수 정보를 추출한다. 추출된 변수 정보는 메모리에 저장되어 그 주소를 가지는 변수의 정보로써, 프로그램내의 임의 또는 각 지점의 문자열, 데이터베이스 쿼리문, 정적 변수, 일반 변수, 객체, 함수, 객체내의 변수와 함수, 함수내의 변수와 인자값을 포함한다.
이를 토대로 인클루드 파일(Include File), 함수, DB, 객체(Object)정보 등과 같은 프로그램의 구성요소를 자동으로 추출하고, 데이터베이스내의 자원(테이블, 칼럼, View정보 등)과 상호 연관관계를 분석함으로써, 애플리케이션 개발시 변경관리, 영향분석, 품질관리 및 산출물에 대한 자동관리를 할 수 있다.
이에 따라 관리자 측면에서는 애플리케이션의 유지보수시 비용절감, 자원의 효율적 통합관리, 애플리케이션의 변경시 사전 크로스 체크(Cross check)를 통한 장애 방지, 빠른 인수인계 작업을 통한 인력의 효율적 관리 및 품질 관리에 용이하다.
또한 개발자 및 운영자 측면에서는 개발 시 현상황(As-Is) 자동화 분석, 프로그램이나 DB 변경시 영향분석, 프로그램 백업 및 애플리케이션 /DB 정보 이력관리, 개발시 단순 반복 작업제거를 통해 생산성 증대에 용이하다.
품질 관리자 측면에서는 애플리케이션의 표준화 품질 기준 설정과 정합성 검증, 변경 시 장애 방지, 품질 관련 프로세스별 산출물 자동생성 및 분석을 지원한다.
프로젝트 매니저 측면에서는 개발의 효율적 관리를 통한 프로젝트 통제력 강화, 개발 시 현상황(As-Is) 자동화 분석, 자동 산출물 생성을 통해 개발 인력및 개발기간 단축, 품질관리를 통한 고객만족 제고, 애플리케이션의 온라인 문서제공으로 쉽고 빠른 인수 인계 작업이 가능하다.
Claims (19)
- 임의의 프로그래밍 언어로 작성된 제 1 데이터 파일을 특정 중간 언어로 작성되는 제 2 데이터 파일로 변환하는 중간 언어 변환단계와,상기 제 2 데이터 파일 내에 포함된 문자열로부터 실행순서에 따른 흐름 정보를 추출하고 그 흐름 정보에 따른 정적 분석을 수행하여 임의 또는 각 지점에서의 변수 정보를 분석 결과 데이터로 저장하는 분석 처리단계를 포함하는 종합 문자열 분석 방법.
- 청구항 1에 있어서, 상기 분석 처리단계는,상기 제 2 데이터 파일의 문자열을 어휘분석과 구문분석 과정을 통해 분석대상 프로그램의 구조를 나타내는 추상 구문 트리 데이터로 재구성하는 파싱 단계와,상기 파싱된 데이터로부터 흐름 정보를 뽑아 흐름 그래프를 생성하는 전처리 단계와,상기 전처리된 데이터를 정적으로 분석하여 상기 생성된 흐름 그래프에 의거하여 각 지점에서 예측되는 변수 정보를 추출하여 상기 분석 결과 데이터를 작성하는 문자열 분석 단계를 포함하는 종합 문자열 분석 방법.
- 청구항 2에 있어서, 상기 문자열 분석 단계는,상기 제 2 데이터 파일 내에 포함된 문자열로부터 실행 순서에 따른 각 노드와 상기 노드의 환경값을 입력받고 상기 노드의 속성을 판별하는 노드 속성 판별단계와,상기 노드를 정적으로 분석하여 상기 노드의 결과 값을 출력하는 노드 분석단계와,상기 노드 분석에 의한 상기 노드의 결과값에 따라 상기 노드를 분석하는 지점이 분석하고자 하는 변수의 값이 고정된 값으로 예측되는 고정점인지를 판별하는 고정점 판별단계와,상기 고정점 판별 결과 상기 노드를 분석하는 지점이 고정점인 경우 상기 노드의 분석 결과 값을 분석 결과 데이터로 출력하는 분석 결과 처리단계를 포함하는 종합 문자열 분석 방법.
- 청구항 3에 있어서, 상기 고정점 판별단계는,분석을 수행하는 도중에 이전 노드의 결과 환경과 현재 노드의 결과 환경이 일치하거나, 또는 현재 노드의 위치가 분석하고자 하는 지점과 일치할 때 고정점으로 판단하는 종합 문자열 분석 방법.
- 청구항 1에 있어서,상기 제 1데이터 파일내의 변수 중 적어도 하나 이상의 정보를 찾기 위해 질의어를 입력받고, 상기 분석 결과 데이터로부터 상기 질의어에 해당하는 정보를 추출하는 질의어 처리 단계를 더 포함하는 종합 문자열 분석방법.
- 청구항 5에 있어서, 상기 질의어 처리 단계는,임의의 질의어가 입력되고, 상기 분석 처리 단계에 의한 분석과정이 상기 제 1데이터 파일의 전체에 대한 분석을 통해 분석된 분석 결과 데이터로부터 상기 질의어에 상응하는 정보를 추출하는 방법을 특징으로 하는 종합 문자열 분석방법.
- 청구항 5에 있어서, 상기 질의어 처리 단계는,임의의 질의어가 입력되고, 상기 분석 처리 단계에 의해 상기 질의어와 관련 있는 부분에 한해서 한정된 범위내의 분석을 통해 분석된 분석 결과 데이터로부터 상기 질의어에 상응하는 정보를 추출하는 방법을 특징으로 종합 문자열 분석방법.
- 청구항 1에 있어서, 상기 제 1 데이터파일은,JAVA, C++, C#.NET, PL/1, C0BOL, JCL, JSP, Delphi, VisualBasic, PowerBuilder 중 선택된 어느 하나의 프로그래밍 언어로 작성된 데이터 파일, 자바 가상머신의 중간언어로 작성된 자바 바이트코드(java bytecode), 기계어로 작성된 EXE, DLL 중 어느 하나인 것을 특징으로 하는 종합 문자열 분석방법.
- 청구항 1에 있어서, 상기 분석 결과 데이터는,파일, 각종 데이터베이스, XML문서 중 적어도 하나로 저장되는 것을 특징으로 하는 종합 문자열 분석방법.
- 청구항 1에 있어서, 상기 분석 결과 데이터는,상기 제 2 데이터 파일내의 임의 또는 각 지점에서의 변수 정보를 나타내는 일정한 형태의 요약 문자열로 구성되는 것을 특징으로 하는 종합 문자열 분석방법.
- 청구항 10에 있어서, 상기 일정한 형태의 요약 문자열은,정적 검사를 수행하여 하나의 값으로 추출되는 변수 값을 의미하는 제 1 요약 문자열과,정적 검사를 수행하는 도중 조건식에 의해 하나 이상의 변수 값 중 하나를 가지게 됨을 의미하고 상기 변수가 가질 수 있는 값의 집합으로 구성된 제 2 요약 문자열과,정적 검사를 수행하는 도중 반복문에 의해 변수의 문자열 값이 계속 증가됨을 의미하고 해당 변수 값으로 올 수 있는 반복된 값의 패턴으로 구성된 제 3 요약 문자열과,외부에서 입력되는 값으로 인해, 정적 검사만으로는 알 수 없음을 의미하는 제 4 요약 문자열과,변수의 문자열 값이 상기 제 1 요약 문자열 내지 제 4 요약 문자열로 요약문자열로 반복됨을 의미하는 제 5 요약 문자열을 포함하는 것을 특징으로 하는 종합 문자열 분석 방법.
- 임의의 프로그래밍 언어로 작성된 제 1 데이터 파일을 특정 중간언어로 작성되는 제 2 데이터 파일로 변환하도록 각 프로그래밍 언어별로 설계된 중간 언어 변환부와,상기 제 2 데이터 파일 내에 포함된 문자열로부터 실행순서에 따른 흐름 정보를 추출하고 그 흐름 정보에 따른 정적 분석을 수행하여 임의 또는 각 지점에서의 변수 정보를 분석 결과 데이터로 저장하는 분석 처리부를 포함하는 종합 문자열 분석기.
- 청구항 12에 있어서, 상기 분석 처리부는,상기 제 2 데이터 파일의 문자열을 어휘분석과 구문분석 과정을 통해 분석대상 프로그램의 구조를 나타내는 추상 구문 트리 데이터로 재구성하는 파싱부와,상기 파싱된 데이터로부터 흐름 정보를 뽑아 흐름 그래프를 생성하는 전처리부와,상기 전처리 된 데이터를 정적으로 분석하여 상기 생성된 흐름 그래프에 의거하여 각 지점에서 추출되는 각 변수 정보를 상기 분석 결과 데이터로 작성하는 문자열 분석부를 포함하는 종합 문자열 분석기.
- 청구항 13에 있어서, 상기 분자열 분석부는,상기 제 2 데이터 파일 내에 포함된 문자열로부터 실행 순서에 따른 각 노드와 상기 노드의 환경값을 입력받고 상기 노드의 속성을 판별하는 노드 속성 판별부와,상기 노드를 정적으로 분석하여 상기 노드의 결과 값을 출력하는 노드 분석부와,상기 노드 분석부의 결과값에 따라 상기 노드를 분석하는 지점이 분석하고자하는 변수의 값이 고정된 값으로 예측되는 고정점인지를 판별하는 고정점 판별부와,상기 고정점 판별부의 판단결과 상기 노드를 분석하는 지점이 고정점인 경우 상기 노드의 분석 결과 값을 분석 결과 데이터로 출력하는 분석 결과 처리부를 포함하는 종합 문자열 분석기.
- 청구항 14에 있어서, 상기 고정점 판별부는,분석을 수행하는 도중에 이전 노드의 결과 환경과 현재 노드의 결과 환경이 일치하거나, 또는 현재 노드의 위치가 분석하고자 하는 지점과 일치할 때 고정점으로 판단하는 종합 문자열 분석 방법.
- 임의의 프로그래밍 언어로 작성된 데이터 파일의 문자열을 어휘분석과 구문분석 과정을 통해 분석대상 프로그램의 구조를 나타내는 추상 구문 트리 데이터로 재구성하는 파싱 단계와,상기 파싱된 데이터로부터 흐름 정보를 뽑아 흐름 그래프를 생성하는 전처리 단계와,상기 전처리된 데이터를 정적으로 분석하여 상기 생성된 흐름 그래프에 의거하여 각 지점에서 예측되는 변수 정보를 추출하여 상기 분석 결과 데이터를 작성하는 문자열 분석 단계를 포함하는 종합 문자열 분석 방법.
- 청구항 16에 있어서, 상기 분석 결과 데이터는,상기 데이터 파일내의 임의 또는 각 지점에서의 변수 정보를 나타내는 일정한 형태의 요약 문자열로 구성되는 것을 특징으로 하는 종합 문자열 분석방법.
- 임의의 프로그래밍 언어로 작성된 데이터 파일의 문자열을 어휘분석과 구문분석 과정을 통해 분석대상 프로그램의 구조를 나타내는 추상 구문 트리 데이터로 재구성하는 파싱부와,상기 파싱된 데이터로부터 흐름 정보를 뽑아 흐름 그래프를 생성하는 전처리부와,상기 전처리된 데이터를 정적으로 분석하여 상기 생성된 흐름 그래프에 의거하여 각 지점에서 예측되는 변수 정보를 추출하여 상기 분석 결과 데이터를 작성하는 문자열 분석부를 포함하는 종합 문자열 분석기.
- 마이크로 프로세서를 구비한 컴퓨터에서,임의의 프로그래밍 언어로 작성된 제 1 데이터 파일을 특정 중간 언어로 작성되는 제 2 데이터 파일로 변환하는 중간 언어 변환 기능과,상기 제 2 데이터 파일 내에 포함된 문자열로부터 실행순서에 따른 흐름 정 보를 추출하고 그 흐름 정보에 따른 정적 분석을 수행하여 임의 또는 각 지점별로 추출되는 변수 정보를 분석 결과 데이터로 저장하는 분석 처리 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020050026727A KR100692172B1 (ko) | 2005-03-30 | 2005-03-30 | 종합 문자열 분석기 및 그 분석 방법 |
US11/393,362 US20060230393A1 (en) | 2005-03-30 | 2006-03-29 | Universal string analyzer and method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020050026727A KR100692172B1 (ko) | 2005-03-30 | 2005-03-30 | 종합 문자열 분석기 및 그 분석 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20060104505A true KR20060104505A (ko) | 2006-10-09 |
KR100692172B1 KR100692172B1 (ko) | 2007-03-12 |
Family
ID=37084516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020050026727A KR100692172B1 (ko) | 2005-03-30 | 2005-03-30 | 종합 문자열 분석기 및 그 분석 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20060230393A1 (ko) |
KR (1) | KR100692172B1 (ko) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101422737B1 (ko) * | 2012-11-02 | 2014-07-24 | 엄원우 | 다중 언어 코드 동시 실행 장치와 그 방법 |
KR102109854B1 (ko) * | 2019-10-29 | 2020-05-13 | 유진바이오소프트 주식회사 | 임상데이터 분석에 사용되는 데이터 전처리 자동화 시스템과 방법 |
KR102130945B1 (ko) * | 2019-11-05 | 2020-07-07 | 한국인터넷진흥원 | 바이너리 내의 변수 타입 식별 방법 및 장치 |
CN112346730A (zh) * | 2020-11-04 | 2021-02-09 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN113986739A (zh) * | 2021-10-29 | 2022-01-28 | 建信金融科技有限责任公司 | 用于网站内存泄露的监测方法、装置、存储介质及处理器 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7779396B2 (en) * | 2005-08-10 | 2010-08-17 | Microsoft Corporation | Syntactic program language translation |
KR100803947B1 (ko) * | 2006-12-01 | 2008-02-15 | 주식회사 코아로직 | 오픈 벡터그래픽 응용 프로그램 인터페이스 변환 장치와방법, 모바일 단말기, 및 그 방법이 기록된 기록매체 |
US7890943B2 (en) * | 2007-03-30 | 2011-02-15 | Intel Corporation | Code optimization based on loop structures |
JP5192168B2 (ja) * | 2007-03-30 | 2013-05-08 | シスメックス株式会社 | 設定情報管理システム、設定情報管理方法、バックアッププログラム、及び記憶媒体 |
KR101364599B1 (ko) * | 2012-03-26 | 2014-02-20 | 연세대학교 원주산학협력단 | 어플리케이션의 유해성 판단 방법 및 시스템 |
US8984495B2 (en) | 2013-01-03 | 2015-03-17 | International Business Machines Corporation | Enhanced string analysis that improves accuracy of static analysis |
US9329849B2 (en) * | 2013-08-26 | 2016-05-03 | Facebook, Inc. | Systems and methods for converting typed code |
US9811322B1 (en) * | 2016-05-31 | 2017-11-07 | Oracle International Corporation | Scalable provenance generation from points-to information |
KR102327913B1 (ko) * | 2017-04-28 | 2021-11-19 | 엔에이치엔 주식회사 | 블록 기반 데이터 분석 방법 및 시스템 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5826256A (en) * | 1991-10-22 | 1998-10-20 | Lucent Technologies Inc. | Apparatus and methods for source code discovery |
JP2755154B2 (ja) * | 1994-02-23 | 1998-05-20 | 日本電気株式会社 | プログラム変換処理装置およびプログラム変換処理方法 |
US5812853A (en) * | 1994-04-11 | 1998-09-22 | Lucent Technologies Inc. | Method and apparatus for parsing source code using prefix analysis |
JP3230467B2 (ja) * | 1997-09-25 | 2001-11-19 | 日本電気株式会社 | Gdmoトランスレータ及びgdmoトランスレーション方法並びにgdmoトランスレータプログラムを記録した記録媒体 |
KR100279731B1 (ko) | 1997-12-03 | 2001-02-01 | 이계철 | 칠 언어에 대한 제어 흐름 표시방법 |
US6292938B1 (en) | 1998-12-02 | 2001-09-18 | International Business Machines Corporation | Retargeting optimized code by matching tree patterns in directed acyclic graphs |
US6625807B1 (en) * | 1999-08-10 | 2003-09-23 | Hewlett-Packard Development Company, L.P. | Apparatus and method for efficiently obtaining and utilizing register usage information during software binary translation |
GB2366402A (en) * | 2000-08-30 | 2002-03-06 | Ibm | Syntax validation using syntax trees |
US7003764B2 (en) * | 2001-10-12 | 2006-02-21 | Sun Microsystems, Inc. | Method and apparatus for dynamic configuration of a lexical analysis parser |
JP4257096B2 (ja) | 2002-10-21 | 2009-04-22 | 株式会社日立製作所 | ソースプログラムの静的解析装置 |
JP2004171064A (ja) | 2002-11-15 | 2004-06-17 | Mitsubishi Research Institute Inc | バッファオーバーフロー静的解析方法およびプログラム |
-
2005
- 2005-03-30 KR KR1020050026727A patent/KR100692172B1/ko active IP Right Grant
-
2006
- 2006-03-29 US US11/393,362 patent/US20060230393A1/en not_active Abandoned
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101422737B1 (ko) * | 2012-11-02 | 2014-07-24 | 엄원우 | 다중 언어 코드 동시 실행 장치와 그 방법 |
KR102109854B1 (ko) * | 2019-10-29 | 2020-05-13 | 유진바이오소프트 주식회사 | 임상데이터 분석에 사용되는 데이터 전처리 자동화 시스템과 방법 |
KR102130945B1 (ko) * | 2019-11-05 | 2020-07-07 | 한국인터넷진흥원 | 바이너리 내의 변수 타입 식별 방법 및 장치 |
US11262994B2 (en) | 2019-11-05 | 2022-03-01 | Korea Internet & Security Agency | Method and device for identifying type of variable in binary |
CN112346730A (zh) * | 2020-11-04 | 2021-02-09 | 星环信息科技(上海)股份有限公司 | 一种中间表示的生成方法、计算机设备及存储介质 |
CN113986739A (zh) * | 2021-10-29 | 2022-01-28 | 建信金融科技有限责任公司 | 用于网站内存泄露的监测方法、装置、存储介质及处理器 |
Also Published As
Publication number | Publication date |
---|---|
US20060230393A1 (en) | 2006-10-12 |
KR100692172B1 (ko) | 2007-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100692172B1 (ko) | 종합 문자열 분석기 및 그 분석 방법 | |
US7937688B2 (en) | System and method for context-sensitive help in a design environment | |
US8126901B2 (en) | Method and apparatus for generating a dynamic web page | |
Maletic et al. | Supporting source code difference analysis | |
JP2022062060A (ja) | リアルタイムデータフロープログラミング言語のためのツールおよび方法 | |
McClure et al. | SQL DOM: compile time checking of dynamic SQL statements | |
US9703678B2 (en) | Debugging pipeline for debugging code | |
US8484626B2 (en) | Generic XML screen scraping | |
US8543379B1 (en) | System and method for parsing a text buffer using a graphical user interface | |
US7996816B2 (en) | Method and apparatus for dynamically binding service component implementations for specific unit test cases | |
CN110998516A (zh) | 用于异构编程数据处理系统的自动化依赖性分析器 | |
US5905892A (en) | Error correcting compiler | |
RU2395837C2 (ru) | Механизм для обеспечения расширенных функциональных возможностей для инструкций командной строки | |
US20090254881A1 (en) | Code generation techniques for administrative tasks | |
RU2367999C2 (ru) | Механизм для получения и применения ограничений к логическим структурам в интерактивной среде | |
US7240340B2 (en) | System and method for browse information parsing without compilation | |
US20070113221A1 (en) | XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas | |
KR20040111099A (ko) | 코드 세그먼트들을 생성, 관리, 및 사용하는 시스템 및방법 | |
KR20150111134A (ko) | 코드 추천 및 공유 시스템 및 방법 | |
US20150261507A1 (en) | Validating sql queries in a report | |
Fokaefs et al. | Wsdarwin: Studying the evolution of web service systems | |
US20230049741A1 (en) | Detection of api backward compatibility across software versions | |
Arya et al. | Information correspondence between types of documentation for APIs | |
US9529573B2 (en) | Graphical user interface generation through use of a binary file | |
US20050177818A1 (en) | Integration of external tools into an existing design environment |
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: 20130228 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20140129 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20150130 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20200227 Year of fee payment: 14 |