KR101705254B1 - 장치 및 프로그램 - Google Patents

장치 및 프로그램 Download PDF

Info

Publication number
KR101705254B1
KR101705254B1 KR1020167002657A KR20167002657A KR101705254B1 KR 101705254 B1 KR101705254 B1 KR 101705254B1 KR 1020167002657 A KR1020167002657 A KR 1020167002657A KR 20167002657 A KR20167002657 A KR 20167002657A KR 101705254 B1 KR101705254 B1 KR 101705254B1
Authority
KR
South Korea
Prior art keywords
module
statement
sentence
hierarchical structure
row
Prior art date
Application number
KR1020167002657A
Other languages
English (en)
Other versions
KR20160027124A (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 신이치 이시다
Publication of KR20160027124A publication Critical patent/KR20160027124A/ko
Application granted granted Critical
Publication of KR101705254B1 publication Critical patent/KR101705254B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명의 장치는, 기억 수단과 비교 수단을 구비하고 있다. 기억 수단에는, 2 이상의 모듈이 기억되어 있다. 비교 수단은, 기억 수단에 기억된 모듈 중의 제 1 모듈과 제 2 모듈을 기억 수단으로부터 취득한다. 또, 비교 수단은, 제 1 모듈의 계층구조가 제 2 모듈의 계층구조와 일치하고 있는지 여부를 나타내는 메시지를 작성한다.

Description

장치 및 프로그램{APPARATUS AND PROGRAM}
본 발명은, 프로그램 언어에 의해 기술(記述)된 1 이상의 문장(文)으로 각각 이루어지는 2개의 모듈(소스 프로그램)을 비교하는 장치에 관한 것이다.
일반적으로, 프로그램은, 반복적으로 유지 관리하면서 장기간에 걸쳐 사용되는 경우가 많다. 프로그램의 유지 관리는, 대부분의 경우, 프로그램의 기능을 변경하기 위해 행해진다. 단, 프로그램은, 프로그램이 사용되는 환경, 예컨대, 프로그램의 플랫폼(platform)인 하드웨어나, OS(Operation System)나, 미들웨어(middleware)의 변경에 대응하기 위해 유지 관리되는 경우도 있다. 또한, 프로그램은, 프로그램을 기술하고 있는 프로그램 언어를 변경하기 위해 유지 관리되는 경우도 있다. 즉, 프로그램의 기능의 변경을 목적으로 하지 않는 유지 관리(이하, 이러한 유지 관리를 「컨버전(conversion)」이라 함)가 행해지는 경우도 있다.
프로그램을 컨버전하는 경우, 프로그램의 모든 문장에 대해 변경이 필요한지 여부를 조사하여, 변경이 필요한 문장만을 변경할 필요가 있다. 그러나, 프로그램의 합계 행(行) 수가 100만 행을 넘는 것과 같은 큰 시스템도 다수 존재한다. 이러한 시스템에 있어서, 적절히 컨버전을 행하는 것은 용이하지 않다. 또한, 컨버전이 적절히 행해졌는지 여부를 검증하는 것도 용이하지 않다. 또, 컨버전으로 한하지 않고, 또한 시스템의 크기로 한하지 않고, 프로그램의 유지 관리가 적절히 행해졌는지 여부를 검증하는 것은 용이하지가 않다.
일반적으로, 프로그램의 유지 관리가 적절히 행해졌는지 여부를 검증하기 위하여, 유지 관리 전후의 프로그램을 비교하여 다른 개소(箇所)를 찾아내는 것과 같은 작업이 행해지고 있다. 예컨대, 특허문헌 1에는, 유지 관리 전후의 프로그램의 각각으로부터 추출한 토큰(token)의 정렬 순서를 비교함으로써, 유지 관리 전후의 프로그램이 다른 개소를 찾아내는 프로그램 차분(差分) 검출 장치가 개시되어 있다. 특허문헌 1의 토큰은, 예약어나 문자 정수(定數) 등으로 구성된다. 특허문헌 1에 의하면, 프로그램 차분 검출 장치는, 이러한 토큰의 정렬 순서에 따라 프로그램이 다른 개소를 찾아내기 때문에, 문장의 개시(開始) 컬럼의 차이 등의 형식적인 차이가 아닌, 의미적인 차이에 따라 다른 개소를 찾아낼 수가 있다.
일본 특허공개공보 제2009-176108호
그러나, 예컨대, 프로그램 언어를 변경하는 경우, 프로그램 언어의 예약어(reserved word)(즉, 토큰)도 바뀌는 경우가 많다. 또, OS나 미들웨어의 변경에 대응하기 위해 프로그램을 변경하는 경우, 프로그램 중에 기술된 함수명(즉, 토큰)이 바뀌는 경우가 있다. 이러한 경우, 특허문헌 1에 개시된 기술을 사용하면, 의미상으로 같은 개소가 다른 개소로서 찾아내어진다. 즉, 특허문헌 1에 개시된 기술은, 컨버전에 있어서 사용하기가 어렵다.
이에, 본 발명은, 프로그램 언어에 의해 기술된 1 이상의 문장으로 각각 이루어지는 2개의 모듈을 비교하는 장치로서, 컨버전에 있어서도 적용 가능한 새로운 방법에 의해 2개의 모듈을 비교하는 장치를 제공하는 것을 목적으로 한다.
본 발명의 일 측면은, 프로그램 언어에 의해 기술된 1 이상의 문장으로 각각 이루어지는 2개의 모듈을 비교하는 장치를 제공한다. 상기 모듈에는, 상기 문장의 하나인 조건문을 기술할 수가 있다. 상기 조건문은, 성립시 실행문 및/또는 불성립시 실행문을 포함하고 있다. 상기 성립시 실행문은, 상기 조건문의 조건식이 성립하는 경우에 실행되는 상기 문장이다. 상기 불성립시 실행문은, 상기 조건식이 성립하지 않는 경우에 실행되는 상기 문장이다. 상기 조건문 중의 적어도 하나는, 상기 성립시 실행문 및/또는 상기 불성립시 실행문으로서 상기 조건문을 더 포함할 수 있으며, 이로써 상기 조건문에 의한 상기 문장의 계층화가 가능하다. 또, 상기 문장의 상기 계층화에 의한 상기 모듈의 계층구조를 특정하는 것이 가능하다. 상기 장치는, 기억 수단과 비교 수단을 구비하고 있다. 상기 기억 수단에는, 2 이상의 상기 모듈이 기억되어 있다. 상기 비교 수단은, 상기 기억 수단에 기억된 상기 모듈 중의 제 1 모듈과 제 2 모듈을 상기 기억 수단으로부터 취득한다. 상기 비교 수단은, 상기 제 1 모듈의 상기 계층구조가 상기 제 2 모듈의 상기 계층구조와 일치하고 있는지 여부를 나타내는 메시지를 작성한다.
또, 본 발명의 다른 측면에 의하면, 컴퓨터를, 상기 장치로서 기능시키기 위한 프로그램이 얻어진다.
본 발명에 의하면, 2개의 모듈의 계층구조가 서로 일치하고 있는지 여부를 나타내는 메시지가 작성된다. 2개의 모듈의 계층구조가 서로 일치하고 있지 않은 경우, 2개의 모듈은 의미상으로 다른 개소를 가지고 있을 가능성이 높다. 따라서, 메시지에 의해, 2개의 모듈이 의미상으로 다른 개소를 가지고 있는지 여부를 알 수가 있다.
첨부의 도면을 참조하면서 하기의 최선의 실시형태의 설명을 검토함으로써, 본 발명의 목적이 올바르게 이해될 것이며, 또한 그 구성에 대해 보다 완전하게 이해될 것이다.
도 1은 본 발명의 제 1 실시형태에 의한 비교 장치(장치)를 나타내는 블록 구성도이다.
도 2는 도 1의 장치의 기억장치에 기억되어 있는 모듈의 데이터 구성을 모식적으로 나타내는 도면이다.
도 3은 도 1의 기억장치에 기억되어 있는 계층구조의 데이터 구성을 모식적으로 나타내는 도면이다.
도 4는 도 3의 데이터 구성의 변형예를 나타내는 도면이다.
도 5는 도 1의 장치의 비교 수단의 기능을 나타내는 플로우 차트이다.
도 6은 도 1의 기억장치에 기억되어 있는 모듈(제 1 모듈)의 일례와, 예시한 제 1 모듈의 계층구조를 나타내는 도면이다.
도 7은 도 1의 기억장치에 기억되어 있는 다른 모듈(제 2 모듈)의 일례와, 예시한 제 2 모듈의 계층구조를 나타내는 도면이다.
도 8은 도 6에 나타낸 제 1 모듈의 변형예와, 변형예의 계층구조를 나타내는 도면이다.
도 9는 도 6 및 도 7의 각각의 계층구조의 변형예를 나타내는 도면이다.
도 10은 본 발명의 제 2 실시형태에 의한 비교 장치(장치)를 나타내는 블록 구성도이다.
도 11은 도 10의 기억장치에 기억되어 있는 모듈의 일례를 나타내는 도면이다.
도 12는 도 10의 기억장치에 기억되어 있는 이차적 모듈의 데이터 구성을 모식적으로 나타내는 도면이다.
도 13은 도 10의 장치의 변환 수단의 기능을 나타내는 플로우 차트이다.
도 14는 도 13의 변환 수단의 기능의 일부를 보다 상세하게 나타내는 플로우 차트이다.
도 15는 도 10의 장치의 가공 수단의 기능을 나타내는 플로우 차트이다.
도 16은 도 10의 장치의 비교 수단의 기능을 나타내는 플로우 차트이다.
도 17은 도 10의 기억장치에 기억되어 있는 이차적 모듈 중의 2개의 모듈(제 1 모듈 및 제 2 모듈)의 각각의 예를 나타내는 도면이다.
도 18은 본 발명의 제 3 실시형태에 의한 비교 장치(장치)를 나타내는 시스템 구성도이다.
본 발명에 대해서는 다양한 변형이나 각종 형태로 실현하는 것이 가능한데, 그 일례로서, 도면에 나타내는 것과 같은 특정한 실시형태에 대해, 이하에 상세하게 설명한다. 도면 및 실시형태는, 본 발명을 여기에 개시한 특정한 형태로 한정하는 것은 아니며, 첨부된 청구범위에 명시되어 있는 범위 내에 있어서 이루어지는 모든 변형예, 균등물, 대체예를 그 대상에 포함하는 것으로 한다.
(제 1 실시형태)
도 1에 도시된 바와 같이, 본 발명의 제 1 실시형태에 의한 비교 장치(장치; 10)는, 장치 본체(20)와, 기억장치(기억 수단; 30)와, 입력장치(40)와, 표시장치(50)를 구비하고 있다. 비교 장치(10)는, 프로그램 언어에 의해 기술된 1 이상의 문장으로 각각 이루어지는 2개의 모듈(소스 프로그램)을 비교하는 것이다.
본 실시형태에 의한 프로그램 언어는 COBOL이다. 그러나, 본 발명은 COBOL 이외의 프로그램 언어에도 적용 가능하다.
본 실시형태에 의한 모듈은, 문자, 숫자, 기호 등을 조합한 모듈명(名)에 의해 특정할 수 있다.
모듈에는, 1 이상의 문장으로 구성되는 처리 단위를 기술할 수 있다. 본 실시형태에 의한 처리 단위는, COBOL에 있어서의 섹션이다. 섹션의 각각은, 섹션명(처리 단위명)에 의해 특정할 수 있다. 단, 처리 단위는, 섹션이 아니어도 무방하다. 예컨대 프로그램 언어가 JAVA(상표)인 경우, 처리 단위는, 함수명(처리 단위명)에 의해 특정 가능한 함수여도 무방하다.
모듈은, 다른 모듈 또는 상기 모듈 자신을 호출할 수 있다. 또, 모듈의 섹션은, 다른 섹션 또는 상기 섹션 자신을 실행할 수 있다. 보다 구체적으로는, 모듈에는, 문장으로서, 섹션을 섹션명에 의해 특정하여 실행하기 위한 처리 단위 실행문과, 모듈의 하나를 모듈명에 의해 특정하여 실행하기 위한 모듈 호출문을 기술할 수 있다. 본 실시형태에 의하면, 처리 단위 실행문은 PERFORM 문이며, 모듈 호출문은 CALL 문이다. 다른 프로그램 언어에 있어서의 처리 단위 실행문 및 모듈 호출문의 각각은, 예컨대 함수명을 지정한 문장이다. 모듈 호출문이 함수명을 지정한 문장인 경우, 모듈 호출문에 의해, 모듈 중의 지정된 함수 부분(즉, 모듈의 일부)이 실행된다. 이 경우, 모듈 호출문에 있어서 모듈명이 명시적으로 기술되지 않는 경우가 있을 수 있다. 즉, 함수명에 의해 모듈명이 간접적으로 특정되는 경우가 있을 수 있다.
또한, 모듈에는, 문장의 하나인 조건문을 기술할 수 있다. 조건문은, 조건식을 구비하고 있으며, 조건문 중에 성립시 실행문 및/또는 불성립시 실행문을 기술할 수가 있다. 환언하면, 조건문은, 성립시 실행문 및/또는 불성립시 실행문을 포함할 수 있다. 성립시 실행문은, 조건문의 조건식이 성립하는 경우에 실행되는 문장이다. 불성립시 실행문은, 조건식이 성립하지 않는 경우에 실행되는 문장이다. 본 실시형태에 의한 조건문은, IF 문 및 EVALUATE 문이다. IF 문에 있어서는, 성립시 실행문은 THEN 구(句)로 기술되는 문장이며, 불성립시 실행문은, ELSE 구로 기술되는 문장이다. 마찬가지로, EVALUATE 문에 있어서는, 성립시 실행문은 WHEN 구로 기술되는 문장이다.
본 실시형태에 의한 조건문 중의 적어도 하나는, 성립시 실행문 및/또는 불성립시 실행문으로서 조건문을 더 포함할 수 있으며, 이로써 조건문에 의한 문장의 계층화가 가능하다. 예컨대, IF 문의 성립시 실행문으로서, IF 문을 더 기술할 수가 있다. 환언하면, 모듈은, 조건문에 의해 계층화 가능한 1 이상의 문장으로 이루어지며, 이로써 소정의 계층구조(즉, 조건문에 의한 계층구조)를 가지고 있다. 용이하게 이해되는 바와 같이, 모듈의 문장을 해석함으로써, 계층화에 의한 모듈의 계층구조를 특정할 수가 있다.
도 1에 도시된 바와 같이, 기억장치(30)는, 예컨대 자기 디스크 장치이다. 기억장치(30)는, 예컨대 폴더(도시 생략)에 의해 계층화된 다양한 파일을 기억할 수 있다. 기억장치(30)는, 장치 본체(20)와 통신 가능하게 접속되어 있으며, 장치 본체(20)로부터의 지시에 따라 파일의 읽어들임(취득)이나 기입(기억)을 행할 수가 있다. 본 실시형태에 의한 기억장치(30)에는, 2 이상의 모듈(31)이 기억되어 있다. 또, 기억장치(30)에는, 계층구조(36)를 기억할 수가 있다.
모듈(31)은, 예컨대 프로그래밍 툴(programming tool)(도시 생략)을 사용하여 작성된다. 모듈(31)의 각각이 하나의 파일이어도 무방하다. 복수의 모듈(31)이 하나의 파일로서 기억되어 있어도 무방하다. 계층구조(36)는, 모듈(31)의 계층구조를 기억하는 것이다. 본 실시형태에 의하면, 모듈(31)의 각각에 대해, 계층구조(36)가 작성된다.
입력장치(40)는, 예컨대 키보드나 마우스이다. 입력장치(40)는, 장치 본체(20)와 통신 가능하게 접속되어 있으며, 키보드로부터 입력된 문자나 마우스에 의해 지시된 위치를 장치 본체(20)에 통지할 수 있다.
표시장치(50)는, 예컨대 디스플레이나 프린터이다. 표시장치(50)는, 장치 본체(20)와 통신 가능하게 접속되어 있으며, 장치 본체(20)로부터 전송된 데이터(예컨대, 문자나 도형)를 표시 또는 인쇄할 수 있다.
장치 본체(20)는, 예컨대 PC(Personal Computer)의 본체이다. 장치 본체(20)는, CPU(Central Processing Unit), 주(主)기억장치 등을 구비하고 있다(도시 생략). 기억장치(30)에는 각종 프로그램의 실행 형식 파일이 기억되어 있다(도시 생략). CPU는, 실행 형식 파일을 주기억장치에 로딩하고, 실행 형식 파일 내의 명령어를 실행함으로써 다양한 기능을 실현한다. CPU가 명령어를 실행하는 과정에 있어서, 기억장치(30)에 기억된 소정의 파일이, 주기억장치 내의 버퍼 영역을 경유하여 프로그램의 변수 영역에 읽어들여진다. 프로그램의 변수 영역에 읽어들여진 파일의 내용은, 필요에 따라 주기억장치 내의 버퍼 영역을 경유하여 기억장치(30)에 기입된다. 상기의 설명으로부터 이해되는 바와 같이, 기억장치(30) 및 주기억장치의 각각은, 본 실시형태에 있어서의 읽어들임 및 기입이 가능한 기억 수단으로서 기능한다. 환언하면, 본 실시형태에 의한 기억 수단은, 기억장치(30) 및 주기억장치의 일방(一方)이어도 무방하고, 쌍방(雙方)이어도 무방하다. 이후의 설명에 있어서는, 기억 수단으로서 기억장치(30)를 사용한다.
본 실시형태에 의한 기억장치(30)에는, 비교 프로그램 등의 각종 프로그램이 기억되어 있다(도시 생략). 상기의 프로그램은, 주기억장치에 로딩되어, CPU에 의해 실행되며, 이로써 컴퓨터는, 다양한 수단으로서(즉, 장치로서) 기능한다. 예컨대, 비교 프로그램은, 컴퓨터를, 기억장치(30)에 기억된 모듈(31) 중의 제 1 모듈(31)과 제 2 모듈(31)을 비교하는 비교수단(23)(비교 장치(10))으로서 기능시킨다. 환언하면, 본 실시형태에 의한 장치(10)의 장치 본체(20)는, 비교수단(23)을 구비하고 있다.
도 2에 도시된 바와 같이, 본 실시형태에 의한 모듈(31)은, n 개(n≥1)의 행(310)으로 구성된다. 본 실시형태에 의한 모듈(31)은, 텍스트 파일이다. 단, 모듈(31)은, 예컨대, MICROSOFT EXCEL(상표)의 워크시트여도 무방하다. 모듈(31)이 워크시트인 경우, 비교수단(23)은, 예컨대 EXCEL 매크로에 의해 실현할 수 있다. 본 실시형태에 의한 행(310)은, 일련번호(행 식별; 311)와 문장(312)으로 구성된다. 일련번호(311)는, 행(310)을 특정하는 동시에, 행(310)의 정렬 순서를 판단하기 위한 것이다. 일련번호(311)는, 숫자뿐만 아니라 문자나 기호를 포함하고 있어도 무방하다. 문장(312)에는, 문장(예컨대, 데이터 정의문, 실행문, 코멘트 문)이 기술되어 있다. 문장(312)에는, 하나의 완결된 문장 전체가 기술되어 있어도 무방하다. 문장(312)에는, 하나의 문장의 일부가 기술되어 있어도 무방하다. 예컨대, MOVE문이 2개의 행(310)의 문장(312)으로 나누어 기술되어 있어도 무방하다.
도 3에 도시된 바와 같이, 본 실시형태에 의한 계층구조(36)는, m 개(m≥1)의 행(360)으로 구성된다. 본 실시형태에 의한 계층구조(36)는, MICROSOFT EXCEL(상표)의 워크시트이다. 단, 계층구조(36)는, 예컨대 텍스트 파일이어도 무방하다. 계층구조(36)는, 비교수단(23)이 모듈(31)의 계층구조를 해석함으로써 작성되며, 모듈(31)과 관련지어 기억된다. 구체적으로는, 예컨대, 계층구조(36)의 파일명은, 대응하는 모듈(31)의 파일명과 동일하다. 혹은, 서로 대응하는 모듈(31) 및 계층구조(36)는, 동일한 워크북의 다른 워크시트여도 무방하다.
본 실시형태에 의한 행(360)은, 일련번호(행 식별; 361)와, 계층의 깊이(362)로 구성된다. 일련번호(361)에는, 대응하는 모듈(31)의 행(310)의 일련번호(311)가 설정된다. 계층의 깊이(362)에는, 일련번호(361)(즉, 일련번호(311))에 대응하는 문장(312)의 계층의 깊이가 설정된다. 즉, 계층구조(36)는, 문장(312)의 계층화에 의한 계층의 깊이(362)를 가지고 있다.
예컨대, 도 6에 예시된 모듈(31)을 참조하면, 일련번호(311)가 “0001”인 ACCEPT 문으로부터 일련번호(311)가 “0004”인 ACCEPT 문까지의 문장(312)의 계층의 깊이는 1이다. 일련번호(311)가 “0005”인 IF 문의 계층의 깊이도 1이다. 일련번호(311)가 “0006”인 THEN 구의 계층의 깊이는 2이다. 이상의 설명으로부터 이해되는 바와 같이, 모듈(31)의 선두의 문장(312)의 계층의 깊이(362)는 1이다. 또, 문장(312)을 순차적으로 참조했을 때, THEN 구가 출현할 때마다 계층의 깊이(362)는 인크리먼트(increment)(+1)된다. 또, 일련번호(311)가 “0014”, “0017”, “0020”인 문장(312)의 계층의 깊이(362)로부터 이해되는 바와 같이, END-IF가 출현할 때마다 계층의 깊이(362)는 디크리먼트(decrement)(-1)된다.
위에서 설명한 바와 같이, 본 실시형태에 의하면, 계층의 깊이(362)는 수치(數値)이다. 그러나, 계층의 깊이(362)는, 계층구조에 있어서의 계층의 깊이를 비교할 수 있는 한, 수치가 아니어도 무방하다. 또한, THEN 구의 검출에 의해 갱신된 계층의 깊이(362)가, 대응하는 END-IF의 검출에 의해 갱신 전의 값으로 돌아가도록 설계되어 있으면 충분하다. 계층의 깊이는, 실행문이 기술된 행에 대해서만 부여하여도 무방하다. 또한, 계층의 깊이는, IF 문의 선두 행 및 종료 행과, THEN 구 또는 ELSE 구가 기술된 행에만 부여하여도 무방하다.
이하, 본 실시형태에 의한 장치(10)의 기능 및 동작에 대하여, 도 6 내지 도 8에 도시된 예를 참조하면서, 도 5를 사용하여 상세하게 설명한다. 우선, 조건문으로서 IF 문만이 모듈(31)에 포함되는 경우(도 6 및 도 7 참조)를 예로 하여 설명한다. 다음으로, 모듈(31)에 IF 문 이외의 조건문이 포함되는 예(도 8 참조)에 대해 설명한다.
도 5에 도시된 바와 같이, 본 실시형태에 의한 비교수단(23)은, 예컨대 입력장치(40)로부터 입력된 기동 지시에 의해 기동된 후, 모듈(31) 중의 제 1 모듈(31)을 특정하기 위한 제 1 모듈명, 및 제 2 모듈(31)을 특정하기 위한 제 2 모듈명을 취득한다(S500). 예컨대, 제 2 모듈(31)은, 제 1 모듈(31)을 유지 관리한 것이다. 제 1 모듈명 및 제 2 모듈명의 각각은, 예컨대 기동 파라미터의 일부로서 입력하면 된다.
다음으로, 비교수단(23)은, 취득한 제 1 모듈명에 의해 특정되는 제 1 모듈(31)을 기억장치(30)로부터 읽어들인다(S502). 이 때, 예컨대 소정의 폴더에 기억된 모듈(31)만이 읽어들임 대상이어도 무방하다. 제 1 모듈(31)이 기억장치(30)에 기억되어 있지 않은 경우, 비교수단(23)은 처리를 종료한다(도시 생략).
다음으로, 비교수단(23)은, 제 1 모듈(31)의 각 문장(312)의 계층의 깊이를 얻어, 제 1 계층구조(36)를 작성한다(S504). 구체적으로는, 비교수단(23)은, 제 1 모듈(31)의 행(310)을 1행째부터 최종 행까지 순차적으로 취득하여, 행(310)의 각각에 계층의 깊이를 부여한다. 이 때, 비교수단(23)은, 1행째의 계층의 깊이를 1로 하고, IF 문의 THEN 구를 검출할 때마다 계층의 깊이를 인크리먼트(increment)한다. 한편, 비교수단(23)은, IF 문의 END-IF(즉, IF 문의 종료)를 검출할 때마다 계층의 깊이를 디크리먼트(decrement)한다. THEN 구나 END-IF의 기술을 생략할 수 있는 경우에는, IF 문에 있어서의 문장의 정렬 등을 해석하여 계층의 깊이를 설정하면 된다. 비교수단(23)은, 행(310)의 일련번호(311)와 위에서 설명한 바와 같이 하여 얻은 계층의 깊이를 조합하여, 계층구조(36)를 작성한다.
도 6의 예를 참조하면, 비교수단(23)은, 제 1 모듈(31)의 선두의 실행문(즉, 일련번호(311)가 “0001”인 문장(312))으로부터 최후의 실행문(즉, 일련번호(311)가 “0020”인 문장(312))까지의 문장(312)에 대하여 계층의 깊이(362)를 부여하고 있다. 비교수단(23)은, 일련번호(311)와 계층의 깊이(362)를 조합하여 제 1 계층구조(36)를 작성하고 있다.
다음으로, 도 5에 도시된 바와 같이, 비교수단(23)은, 취득한 제 2 모듈명에 의해 특정되는 제 2 모듈(31)을, 제 1 모듈(31)과 마찬가지로, 기억장치(30)로부터 읽어들인다(S506).
다음으로, 비교수단(23)은, 제 1 모듈(31)과 마찬가지로, 제 2 모듈(31)의 각 문장(312)의 계층의 깊이를 얻어, 제 2 계층구조(36)를 작성한다(S508).
도 7의 예를 참조하면, 비교수단(23)은, 제 2 모듈(31)의 선두의 실행문(즉, 일련번호(311)가 “0001”인 문장(312))으로부터 최후의 실행문까지의 문장(312)(즉, 일련번호(311)가 “0014”인 문장(312))에 대하여 계층의 깊이(362)를 부여하고 있다. 비교수단(23)은, 일련번호(311)와 계층의 깊이(362)를 조합하여 제 2 계층구조(36)를 작성하고 있다.
도 5에 도시된 바와 같이, 본 실시형태에 의한 비교수단(23)은, 작성한 제 1 계층구조(36) 및 제 2 계층구조(36)를, 기억장치(30)에 기입한다(S510). 단, 제 1 계층구조(36) 및 제 2 계층구조(36)는, 장치 본체(20)의 주기억장치(도시 생략)에만 기억되어 있어도 무방하다. 환언하면, 계층구조(36)는, 기억장치(30)가 아닌 주기억장치(도시 생략)에 기억되어 있어도 무방하다.
다음으로, 비교수단(23)은, 제 1 계층구조(36)와 제 2 계층구조(36)를 비교한다(S512). 예컨대, 비교수단(23)은, 제 1 계층구조(36)의 계층의 깊이(362)와 제 2 계층구조(36)의 계층의 깊이(362)를 1행째부터 순차적으로 비교하여, 계층의 깊이(362)의 변화가 일치하는지 여부를 판정한다.
도 6 및 도 7에 예시하는 제 1 계층구조(36) 및 제 2 계층구조(36)를 참조하면, 제 1 계층구조(36)(도 6 참조)에 있어서의 계층의 깊이(362)는, 변화되어 있지 않은 개소를 제외하고, 1, 2, 3, 4, 3, 2, 1의 순으로 변화되어 있다. 한편, 제 2 계층구조(36)(도 7 참조)에 있어서의 계층의 깊이(362)는, 변화되어 있지 않은 개소를 제외하고, 1, 2, 3, 2, 1의 순으로 변화되어 있다. 따라서, 제 1 계층구조(36)의 계층의 깊이(362)의 변화는, 제 2 계층구조(36)의 계층의 깊이(362)의 변화와 일치하지 않는다. 이 경우, 비교수단(23)은, 제 1 모듈(31)의 제 1 계층구조(36)가 제 2 모듈(31)의 제 2 계층구조(36)와 일치하고 있지 않음을 나타내는 메시지를 작성한다. 한편, 만일 제 2 계층구조(36)의 계층의 깊이(362)가, 1, 2, 3, 4, 3, 2, 1의 순으로 변화되어 있는 경우, 제 1 계층구조(36)의 계층의 깊이(362)의 변화는, 제 2 계층구조(36)의 계층의 깊이(362)의 변화와 일치한다. 이 경우, 비교수단(23)은, 제 1 모듈(31)의 제 1 계층구조(36)가 제 2 모듈(31)의 제 2 계층구조(36)와 일치하고 있음을 나타내는 메시지를 작성한다.
즉, 비교수단(23)은, 제 1 계층구조(36)와 제 2 계층구조(36)의 비교 결과(메시지)를 작성한다(도 5의 S512). 본 실시형태에 의한 비교수단(23)은, 작성한 메시지를 표시장치(50)에 표시한다(S512).
제 1 계층구조(36) 및 제 2 계층구조(36)는, 본 실시형태와 다른 방법으로 비교하여도 무방하다. 예컨대, 도 6 및 도 7로부터 이해되는 바와 같이, IF 문, THEN 구, ELSE 구 및 END-IF에 대해서만, 일련번호(361) 및 계층의 깊이(362)를 작성하여도 무방하다(도 6 및 도 7에 있어서 계층의 깊이(362)를 동그라미로 표시한 개소 참조). 이 경우, 제 1 계층구조(36)의 계층의 깊이(362)를, 제 2 계층구조(36)의 계층의 깊이(362)와 1행째부터 순차적으로 비교함으로써, 제 1 계층구조(36)와 제 2 계층구조(36)를 비교할 수가 있다.
또, 도 8로부터 이해되는 바와 같이, 제 1 모듈(31) 및 제 2 모듈(31) 중의 적어도 일방에 IF 문 이외의 조건문이 포함되어 있어도 무방하다. 예컨대, EVALUATE 문이 포함되어 있는 경우, 비교수단(23)은, EVALUATE 문의 최초의 WHEN 구를 검출했을 때에 계층의 깊이를 갱신하고, EVALUATE 문에 대응하는 END-EVALUATE를 검출했을 때에 계층의 깊이를 갱신 전으로 되돌리면 된다. IF 문, EVALUATE 문 이외의 조건문에 대해서도 마찬가지로 처리할 수 있다. 용이하게 이해되는 바와 같이, 계층구조(36)(제 1 계층구조(36) 및 제 2 계층구조(36))를 작성한 후의 비교수단(23)의 기능·동작은, 모듈(31)에 조건문으로서 IF 문만이 포함되어 있는 경우와 같다.
위에서 설명한 바와 같이, 본 실시형태에 의한 비교수단(23)은, 제 1 계층구조(36)가 제 2 계층구조(36)와 일치하고 있지 않은 경우뿐만 아니라, 일치하고 있는 경우에도 메시지를 작성한다. 그러나, 비교수단(23)은, 제 1 계층구조(36)가 제 2 계층구조(36)와 일치하고 있는 경우 및 일치하고 있지 않은 경우 중의 일방의 경우에만 메시지를 작성하여도 무방하다. 또, 비교수단(23)이 작성하는 메시지는, 제 1 모듈(31)의 제 1 계층구조(36)가 제 2 모듈(31)의 제 2 계층구조(36)와 일치하고 있는지 여부를 나타낼 뿐만 아니라, 제 1 계층구조(36)와 제 2 계층구조(36)의 상위(相違) 개소를 나타내어도 무방하다. 이 경우, 이하에 설명하는 바와 같이, 비교수단(23)은, 계층구조(36) 대신에, 계층구조(36a)(도 4 참조)를 작성하여도 무방하다.
도 4에 도시된 바와 같이, 계층구조(36a)는, ma 개(ma≥1)의 행(360a)으로 구성된다. 계층구조(36a)는, 계층구조(36)와 마찬가지로, 비교수단(23)이 모듈(31)의 계층구조를 해석함으로써 작성되며, 모듈(31)과 관련지어 기억된다.
계층구조(36a)의 행(360a)은, 대응하는 모듈(31)의 조건문에 대응하여 각각 작성된다. 예컨대, 도 6의 예를 참조하면, 제 1 모듈(31)의 조건문(IF 문)은, 일련번호(311)가 “0005”, “0007” 및 “0009”인 3개의 행(310)에 기술되어 있다. 이 때문에, 도 9의 상단(上段)에 나타낸 바와 같이, 제 1 모듈(31)의 제 1 계층구조(36a)는, 3개의 행(360a)을 갖는다. 한편, 도 7의 예를 참조하면, 제 2 모듈(31)의 조건문(IF 문)은, 일련번호(311)가 “0004” 및 “0006”인 2개의 행(310)에 기술되어 있다. 이 때문에, 도 9의 하단(下段)에 나타낸 바와 같이, 제 2 모듈(31)의 제 2 계층구조(36a)는, 2개의 행(360a)을 갖는다.
도 4에 도시된 바와 같이, 행(360a)은, 일련번호(행 식별)(361)와, 계층 패턴(363)과, 종료 행(일련번호)(364)으로 구성된다. 일련번호(361)에는, 대응하는 모듈(31)의 일련번호(311)가 설정된다. 종료 행(364)에는, 일련번호(361)(일련번호(311))의 행(310)에 기재된 조건문의 종료 개소(예컨대, IF 문에 대응하는 END-IF가 기술된 행(310))의 일련번호(311)가 설정된다. 계층 패턴(363)에는, 이하에 설명하는 바와 같이, 일련번호(361)로부터 종료 행(364)까지의 범위에 대한 계층구조를 특정할 수 있는 데이터가 설정된다.
예컨대, 도 6의 예 및 도 9의 상단의 예를 참조하면, 일련번호(311)가 “0005”인 행(310)에 기술된 최초의 IF 문은, 일련번호(311)가 “0020”인 행(310)에서 종료된다. 따라서, 제 1 계층구조(36a)의 1행째의 일련번호(361) 및 종료 행(364)에는, “0005” 및 “0020”이, 각각 설정된다. 또, 이 경우, 비교수단(23)은, 일련번호(311)가 “0005”인 행(310)으로부터 일련번호(311)가 “0020”인 행(310)의 사이에 기술된 IF 문, THEN 구, ELSE 구 및 END-IF의 계층의 깊이를 연결하여, 압축 전의 계층 패턴(“1 2 2 3 3 4 4 3 3 2 2 1”)을 작성한다. 다음으로, 비교수단(23)은, 압축 전의 계층 패턴 내의 연속하는 동일한 계층의 깊이를 하나로 압축하여, 압축 후의 계층 패턴(363)(“1 2 3 4 3 2 1”)을 작성한다. 비교수단(23)은, 일련번호(311)가 “0007”인 행(310)에 기술된 IF 문, 및 일련번호(311)가 “0009”인 행(310)에 기술된 IF 문에 대해서도, 마찬가지로 압축 후의 계층 패턴(363)을 작성한다. 이상의 설명으로부터 이해되는 바와 같이, 비교수단(23)은, 제 1 모듈(31)의 조건문의 각각의 일련번호(361), 종료 행(364) 및 계층 패턴(363)을 얻어, 제 1 계층구조(36a)를 작성한다(도 5의 S504 참조).
마찬가지로, 도 7의 예 및 도 9의 하단의 예로부터 이해되는 바와 같이, 비교수단(23)은, 제 2 모듈(31)의 조건문의 각각의 일련번호(361), 종료 행(364) 및 계층 패턴(363)을 얻어, 제 2 계층구조(36a)를 작성한다(도 5의 S508 참조).
본 변형예에 의한 비교수단(23)은, 위에서 설명한 바와 같이 작성한 제 1 계층구조(36a)와 제 2 계층구조(36a)를 비교하여, 비교 결과를 표시한다(도 5의 S512). 예컨대, 비교수단(23)은, 제 1 계층구조(36a)의 계층 패턴(363)과, 제 2 계층구조(36a)의 계층 패턴(363)을 순차적으로 비교한다. 이 때, 비교수단(23)은, 계층의 깊이가 1로 시작되는 계층 패턴(363)만을 비교하여도 무방하다. 예컨대, 도 9의 예를 참조하면, 제 1 계층구조(36a) 중 일련번호(361)가 “0005”인 계층 패턴(363)과, 제 2 계층구조(36a) 중 일련번호(361)가 “0004”인 계층 패턴(363)을 비교하면 된다.
상술한 변형예에 의하면, 제 1 계층구조(36a)(즉, 제 1 모듈(31))의 계층 패턴(363)이 제 2 계층구조(36a)(즉, 제 2 모듈(31))의 계층 패턴(363)과 일치하지 않는 경우, 일치하지 않음을 나타내는 메시지와 함께, 일치하지 않는 개소를 표시장치(50)에 표시할 수 있다. 구체적으로는, 예컨대, 불일치의 계층 패턴(363)의 각각에 대응하는 일련번호(311) 및 종료 행(364)을 표시장치(50)에 표시하면 된다.
비교수단(23)은, 계층의 깊이가 1로 시작되는 계층 패턴(363)뿐만 아니라, 모든 계층 패턴(363)을 비교하여도 무방하다. 이 경우, 제 1 모듈(31)과 제 2 모듈(31) 간의 일치하지 않는 개소를 보다 좁은 범위로 특정할 수 있다.
위에서 설명한 바와 같이, 본 실시형태(변형예를 포함한다)에 의한 비교수단(23)은, 메시지를 표시장치(50)에 표시한다. 단, 비교수단(23)은, 메시지를 표시장치(50)에 표시하는 동시에, 기억 수단(30)에 기억하여도 무방하다. 또한, 비교수단(23)은, 메시지를 표시장치(50)에 표시하지 않고, 기억 수단(30)에 기억하여도 무방하다. 또한, 비교수단(23)은, 메시지를 다른 장치나 수단에 송신하여도 무방하다.
본 실시형태에 의한 비교수단(23)은, 상술한 변형예에 추가하여, 이하에 설명하는 바와 같이, 각종 변형이 가능하다.
예컨대, 제 1 모듈(31) 및 제 2 모듈(31) 중의 적어도 일방은, 복수의 모듈(31)을 연결한 것이어도 무방하다. 예컨대, 복수의 모듈(31)을, 각각의 개시 행으로부터 종료 행까지 단순하게 순서대로 연결하여, 제 1 모듈(31) 또는 제 2 모듈(31)로 하여도 무방하다. 이와 같이 함으로써, 복수의 모듈(31)로 이루어지는 하나의 프로그램 전체를 통합하여 비교할 수가 있다. 복수의 모듈(31)은, 이하에 설명하는 제 2 실시형태와 같이 연결할 수도 있다.
(제 2 실시형태)
도 10에 도시된 바와 같이, 본 발명의 제 2 실시형태에 의한 비교 장치(장치; 10´)는, 장치 본체(20´)와, 기억장치(기억 수단; 30´)와, 입력장치(40)와, 표시장치(50)를 구비하고 있다. 장치(10´)는, 제 1 실시형태에 의한 장치(10)와 마찬가지로, 프로그램 언어에 의해 기술된 1 이상의 문장으로 각각 이루어지는 2개의 모듈(소스 프로그램)을 비교하는 것이다. 제 2 실시형태에 의한 프로그램 언어, 모듈, 입력장치(40) 및 표시장치(50)는, 제 1 실시형태와 마찬가지로 각각 구성되어 있다.
도 10에 도시된 바와 같이, 기억장치(30´)는, 기억장치(30)와 마찬가지인 자기 디스크장치이다. 기억장치(30´)에는, 제 1 실시형태와 마찬가지로, 2 이상의 모듈(31)이 기억되어 있다. 또, 기억장치(30´)에는, 2 이상의 이차적 모듈(모듈; 32)이 기억된다. 본 실시형태에 의한 이차적 모듈(32)은, 1개의 모듈(31)을 변환하여 작성되거나, 또는 2 이상의 모듈(31)을 연결해 변환하여 작성된다.
장치 본체(20´)는, 장치 본체(20)와 마찬가지로, 예컨대 PC의 본체이다. 장치 본체(20´)는, CPU, 주기억장치 등을 구비하고 있다(도시 생략). 제 1 실시형태와 마찬가지로, 기억장치(30´)와 주기억장치는, 본 실시형태에 있어서의 읽어들임 및 기입이 가능한 기억 수단으로서 각각 기능한다. 이후의 설명에 있어서의 기억 수단으로서는 기억장치(30´)를 예시한다.
본 실시형태에 의한 기억장치(30´)에는, 변환 프로그램과, 가공 프로그램과, 비교 프로그램이 기억되어 있다(도시 생략). 상기의 프로그램은, 주기억장치에 로딩되어, CPU에 의해 실행되며, 이로써 컴퓨터는, 변환 수단(21), 가공 수단(22), 및 비교 수단(23´)으로서 각각 기능한다. 즉, 상기의 프로그램은, 컴퓨터를 프로그램 언어에 의해 기술된 1 이상의 문장으로 각각 이루어지는 2개의 모듈을 비교하는 장치(10´)로서 기능시키기 위한 것이다. 환언하면, 본 실시형태에 의한 장치(10´)의 장치 본체(20´)는, 변환 수단(21)과, 가공 수단(22)과, 비교 수단(23´)을 구비하고 있다.
본 실시형태에 의한 변환 수단(21)은, 기억장치(30´)에 기억된 모듈(31) 중의 소정의 모듈(31)을 이차적 모듈(32)로 변환하여 기억장치(30´)에 기억한다. 가공 수단(22)은, 기억장치(30´)에 기억된 이차적 모듈(32)(제 1 모듈(32) 및/또는 제 2 모듈(32))을 가공한다. 비교 수단(23´)은, 제 1 실시형태의 비교수단(23)과 마찬가지로, 기억장치(30´)에 기억된 제 1 모듈(32)과 제 2 모듈(32)을 비교한다. 단, 본 실시형태에 의한 비교 수단(23´)은, 2개의 모듈(31)을 비교하는 것이 아니라, 2개의 모듈(31)로부터 각각 작성된 2개의 이차적 모듈(32)(제 1 모듈(32) 및 제 2 모듈(32))을 비교한다.
도 11에 예시된 바와 같이, 기억장치(30´)에는, 예컨대 모듈명이 XXX인 모듈(31)(XXX 모듈)과, 모듈명이 AAA인 모듈(31)(AAA 모듈)과, 모듈명이 BBB인 모듈(31)(BBB 모듈)과, 모듈명이 CCC인 모듈(31)(CCC 모듈)이 기억되어 있다. 모듈(31)의 각각은, 일련번호(311)와 문장(312)으로 이루어지는 복수의 행(310)으로 구성되어 있다. 이하, 본 예를 참조하면서, 모듈(31)의 구조를 보다 구체적으로 설명한다.
XXX 모듈은, 메인 모듈(즉, 처리의 기점(起點)이 되는 모듈)이다. XXX 모듈은, AAA 모듈과 BBB 모듈을 모듈명에 의해 특정하여 호출하기 위한 CALL 문이 각각 기술된 행(310)을 가지고 있다. AAA 모듈은, CCC 모듈을 호출하는 CALL 문이 기술된 행(310)을 가지고 있다.
도 11에 예시된 모듈(31)의 각각은, 1 이상의 섹션으로 구성되어 있다. 예컨대, XXX 모듈은, 메인 섹션(즉, 모듈에 있어서의 처리의 기점이 되는 주(主)가 되는 처리 단위)과, 종(從)이 되는 섹션(종(從)이 되는 처리 단위)을 가지고 있다. 메인 섹션은, “PROCEDURE DIVISION.”이 기술된 행(310)의 다음의 행(310)으로부터, “STOP RUN.”이 기술된 행(310)까지의 행(310)으로 구성되어 있다. 종이 되는 섹션(서브 섹션) 중의 하나는, “AAA-SUB SECTION.”이 기술된 행(310)으로부터, “EXIT.”가 기술된 행(310)까지의 행(310)으로 구성되어 있다. 상술한 서브 섹션의 섹션명(처리 단위명)은 AAA-SUB이다. 메인 섹션은, AAA-SUB 섹션을 섹션명에 의해 특정하여 실행하는 행(310)을 가지고 있다. 보다 구체적으로는, 메인 섹션은, “PERFORM AAA-SUB.”이 기술된 행(310)을 가지고 있다.
도 11에 예시된 섹션 중의 몇 개는, 조건문이 기술된 행(310)을 구비하고 있다. 예컨대, XXX 모듈의 메인 섹션은, 5개의 WHEN 구를 갖는 EVALUATE 문이 기술된 행(310)과, THEN 및 ELSE를 갖는 IF 문이 기술된 행(310)을 구비하고 있다. CCC 모듈의 메인 섹션은, IF 문의 ELSE에 있어서 IF 문이 추가로 기술된 행(310)을 구비하고 있으며, 이로써 조건문에 의한 문장(312)의 계층화가 행해져 있다.
도 12에 도시된 바와 같이, 본 실시형태에 의한 이차적 모듈(32)은, 복수의 이차적 행(행; 320)으로 구성된다. 본 실시형태에 의한 이차적 모듈(32)은, MICROSOFT EXCEL(상표)의 워크시트이다. 단, 이차적 모듈(32)은, 예컨대 텍스트 파일(text file)이어도 무방하다. 본 실시형태에 의한 행(320)은, 모듈 식별(321)과, 행 번호(322)와, 계층구조(323)와, 일련번호(행 식별; 326)와, 이차적 문장(327)으로 구성된다.
이차적 모듈(32)의 각각은, 1 이상의 모듈(31)로부터 실행문 등이 기술된 행(310)을 모아 가공함으로써 생성되어 있다. 본 실시형태에 의한 이차적 모듈(32)은, 변환 수단(21)에 의해 생성되어, 가공 수단(22)에 의해 가공된다. 가공된 이차적 모듈(32)은, 비교 수단(23´)에 의해 참조된다.
도 12에 예시된 바와 같이, 본 실시형태에 의한 이차적 모듈(32)은, 예컨대, XXX 모듈, AAA 모듈, BBB 모듈 및 CCC 모듈의 PROCEDURE DIVISION의 행(310)을 모아 가공한 것이다.
도 11 및 도 12로부터 이해되는 바와 같이, 행(310)의 문장(312)에 기술되어 있는 PERFORM 문(예컨대, 도 11의 “PERFORM PGMAAAP-PROC”)은, 행(320)의 이차적 문장(327)에 있어서 코멘트화되어 있다. 또, PERFORM 문에 의해 실행되는 PGMAAAP-PROC 섹션의 문장(312)이, 행(320)의 이차적 문장(327)으로서 전개되어 있다. 행(320)의 이차적 문장(327)에 있어서, 행(310)의 문장(312)에 기술되어 있는 CALL 문은 코멘트화되어 있다(즉, 코멘트 문으로 변경되어 있다). CALL 문에 의해 호출되는 AAA 모듈의 PROCEDURE DIVISION의 문장(312)은, 행(320)의 이차적 문장(327)으로서 전개되어 있다(즉, 전개되어, 행(320)의 이차적 문장(327)이 생성되어 있다). 또한, AAA 모듈로부터 CALL 문에 의해 호출되는 CCC 모듈의 PROCEDURE DIVISION의 문장(312)은, 행(320)의 이차적 문장(327)으로서 전개되어 있다.
또, 문장(312)에 기술된 조건문 중 IF 문 이외의 조건문(본 실시형태에 있어서는 EVALUATE 문)은, 이차적 문장(327)에 있어서 IF 문으로 변환되어 있다. 예컨대, “EVALUATE WK-A-O”, “WHEN CS-1”, “MOVE CS-1 TO WK-B-I”가 각각 기술된 3개의 문장(312)은, “*#E EVALUATE WK-A-O”(코멘트 문), “*#E WHEN CS-1”(코멘트 문), “IF ( WK-A-O = CS-1 )”, “THEN”, “MOVE CS-1 TO WK-B-I”가 각각 기술된 5개의 이차적 문장(327)으로 변환되어 있다(도 12의 파선(破線)(A)으로 표시한 개소 참조). 본 실시형태에 의하면, 상기의 변환에 추가하여, IF 문에 있어서의 THEN, ELSE 및 END IF의 결락(缺落)을 보완하기 위한 이차적 문장(327)이 생성된다. 또, 부정의 조건식은 긍정의 조건식으로 변환된다. 또한, AND나 OR로 연결된 조건식을 갖는 IF 문은 복수의 IF 문으로 분해되어, 2개의 평가 대상 오퍼랜드(operand) 간의 관계를 1개의 논리 연산자에 의해서만 평가하는 단순한 이차적 조건식을 갖는 IF 문으로 변환된다. 단, 상기의 변환의 일부(예컨대, AND나 OR로 연결된 조건식의 분해)는 행하지 않아도 무방하다.
또한, 복수의 문장(312)으로 띄어쓰기 되어 있는 실행문(예컨대, MOVE 문)은, 1개의 이차적 문장(327)으로 통합된다. 즉, 이차적 모듈(32)의 행(320)의 각각은, 모듈(31)의 행(310)에 근거하여 생성되어 있다. 보다 구체적으로는, 이차적 문장(327)은, 문장(312)을 그대로 복사한 것이거나, 또는 문장(312)을 가공 및/또는 전개함으로써 생성된 것이다.
본 실시형태에 의한 모듈 식별(321)은, 각각의 행(320)이 어느 모듈(31)에 근거하는 것인지를 나타내는 것이다. 보다 구체적으로는, 모듈 식별(321)에는, 모듈명(예컨대, XXX)이 설정된다. 단, 모듈명 대신에, 모듈(31)을 일의적으로 식별할 수 있는 번호 등을 설정하여도 무방하다.
일련번호(326)에는, 이차적 문장(327)이 문장(312)의 복사(copy)인 행(320)에 있어서는, 복사원(複寫元)인 행(310)의 일련번호(311)가 설정된다. 환언하면, 행(310)과 1대 1로 대응하는 행(320)(예컨대, 문장(312)을 코멘트화한 이차적 문장(327)의 행(320))에 대해서는, 일련번호(326)에는, 대응하는 행(310)의 일련번호(311)가 설정된다. 한편, 생성된(추가된) 행(320)의 일련번호(326)에는, 생성된 행(320)임을 식별할 수 있는 식별자(예컨대, 기호의 조합)가 설정된다. 이와 같이 함으로써, 행(320)과 행(310)을 용이하게 대응지을 수가 있다.
본 실시형태에 의한 행 번호(322)에는, 1로부터 시작되는 시리얼 넘버(serial number, 通番)가 행(320)의 정렬 순서에 따라 설정되어 있다. 단, 행 번호(322)는, 행 번호(322)의 대소(大小) 관계를 비교할 수 있는 한, 시리얼 넘버가 아니어도 무방하다. 예컨대, 행 번호(322)는 문자나 기호의 조합이어도 무방하다.
본 실시형태에 의한 계층구조(323)는, 분기(分岐) 계층(324)과, 계층의 깊이(325)로 구성되어 있다. 분기 계층(324)은, 조건문에 의한 계층을 식별하기 위해 사용된다. 본 실시형태에 의한 분기 계층(324)은, 1행째의 행(320)에 있어서의 출발 값으로서 1을 사용함으로써 설정된다. 환언하면, 1행째의 행(320)의 분기 계층(324)은 1이다. 분기 계층(324)은, IF 문의 THEN이 기술된 행(320)에 있어서 1.1로 변경되며, ELSE가 기술된 행(320)에 있어서 1.2로 변경된다. 분기 계층(324)은, IF 문의 END IF가 기술된 행(320)의 다음의 행부터 1로 되돌아온다. 일반화하면, THEN이 기술된 행(320)에 있어서는, 직전(直前)의 행(320)의 분기 계층(324)의 말미(末尾)에 「.1」이 더해지고, ELSE가 기술된 행(320)에 있어서는, 직전의 행(320)의 분기 계층(324)의 말미 「.1」이 「.2」로 변경되며, END IF가 기술된 행(320)의 다음의 행에 있어서는, END IF가 기술된 행(320)의 분기 계층(324)의 말미 「.2」가 삭제된다. 상기의 경우를 제외하고, 분기 계층(324)에는, 직전의 행(320)과 동일한 값이 설정된다.
본 실시형태에 의한 계층의 깊이(325)는, 분기 계층(324)과 마찬가지로, 1행째의 행(320)에 있어서의 출발 값으로서 1을 사용함으로써 설정된다. 환언하면, 1행째의 행(320)의 계층의 깊이(325)는, 1이다. 계층의 깊이(325)는, IF 문의 THEN이 기술된 행(320)에 있어서 1.1로 변경되고, END IF가 기술된 행(320)의 다음의 행부터 1로 되돌아온다. 또한, 그 후의 IF 문의 THEN이 기술된 행(320)에 있어서 1.2로 변경되며, END IF가 기술된 행(320)의 다음의 행부터 1로 되돌아온다. 일반화하면, 계층의 깊이(325)는, 1을 출발 값으로 하고 있으며, THEN이 기술된 행(320)에 있어서 말미에 「.q」(q는 1 이상의 정수(整數))의 자릿수가 더해지고, END IF가 기술된 행(320)의 다음의 행에 있어서 말미의 「.q」의 자릿수가 삭제된다. 「.q」에 있어서의 q의 값은, 자릿수의 각각에 대하여 1을 출발 값으로 하고 있다. 자세하게는, 한자릿수째의 「.q」(예컨대 1.2의 「.2」)에 있어서의 q의 값은, 1을 출발 값으로 하고 있으며, 부가될 때마다 인크리먼트(increment)된다. 한편, 두자릿수째 이후의 「.q」(예컨대 1.2.1의 「.1」)에 있어서의 q의 값은, 상기 자릿수를 제외한 계층의 깊이(325)가 동일 값인 행(320)이 연속하는 범위에 있어서 1을 출발 값으로 하고 있으며, 상기 연속하는 범위에 있어서 부가될 때마다 인크리먼트(increment)된다.
행(320)은, 이상으로 설명한 항목에 추가하여 다양한 항목을 구비할 수 있다. 예컨대, 행(320)이, 대응하는 행(310)의 섹션명을 구비하는 경우, 행(320)과 행(310)의 대응을, 보다 용이하게 파악할 수가 있다.
이하, 본 실시형태에 의한 장치(10´)의 기능 및 동작에 대해 상세하게 설명한다.
도 13으로부터 이해되는 바와 같이, 본 실시형태에 의한 변환 수단(21)은, 제어 파라미터 취득 기능(S1300)과, 읽어들임 기능(S1302, S1304)과, 변환기능(S1306~S1312)과, 기입 기능(S1314)을 가지고 있다. 제어 파라미터 취득 기능은, 전개 제어 파라미터를 취득하는 기능이다. 읽어들임 기능은, 모듈(31) 중 처리 대상으로 하는 대상 모듈(31)을 기억장치(30´)로부터 읽어들이는 기능이다. 변환 기능은, 대상 모듈(31)을 이차적 모듈(32)로 변환하는 기능이다. 기입 기능은, 이차적 모듈(32)을 기억장치(30´)에 기억하는 기능이다.
보다 구체적으로는, 도 13에 도시된 바와 같이, 변환 수단(21)은, 예컨대 입력장치(40)로부터 입력된 기동 지시에 의해 기동되면, 예컨대 기동 지시의 일부로서 입력된 전개 제어 파라미터를 취득한다(S1300). 본 실시형태에 의한 전개 제어 파라미터에는, 전개 지시를 포함시킬 수 있다. 전개 지시는, 실행 대상인 섹션 또는 호출 대상인 모듈(31)의 문장(312)에 기술되어 있는 문장의 전개를 첫 회로만 제한할 것을 지시하는 것이다.
다음으로, 변환 수단(21)은, 대상 모듈(31)을 특정하기 위한 대상 모듈명을 취득한다(S1302). 대상 모듈명은, 전개 제어 파라미터와 마찬가지의 방법으로 입력할 수 있다. 변환 수단(21)은, 취득한 대상 모듈명에 의해 특정되는 대상 모듈(31)을 기억장치(30´)로부터 읽어들인다(S1304). 이 때, 예컨대 소정의 폴더에 기억된 모듈(31)만이 읽어들임 대상이어도 무방하다. 대상 모듈(31)이 기억장치(30´)에 기억되어 있지 않은 경우, 변환 수단(21)은, 처리를 종료한다(도시 생략).
다음으로, 변환 수단(21)은, 대상 모듈(31)의 처리 개시 개소의 문장(312)을 취득한다(S1306). 본 실시형태에 의한 처리 개시 개소는, 메인 섹션의 선두이다. 변환 수단(21)은, 취득한 문장(312)에 대해 이차적 문장 출력 처리를 행한다(S1308). 다음으로, 변환 수단(21)은, 처리 종료 개소의 문장(312)을 처리 완료하였는지 판정한다(S1310). 본 실시형태에 의한 처리 종료 개소는, 메인 섹션의 말미이다. 처리가 종료되어 있는 경우(S1310에 있어서 YES인 경우), 변환 수단(21)은, 작성한 이차적 모듈(32)을 기억장치(30´)에 기입하고(S1314), 처리를 종료한다. 한편, 처리가 종료되어 있지 않은 경우(S1310에 있어서 NO인 경우), 변환 수단(21)은, 다음에 처리할 문장(312)(후속하는 행(310)의 문장(312))을 취득하고(S1312), 취득한 문장(312)에 대해 이차적 문장 출력 처리를 행한다(S1308).
도 14는, 도 13에 나타낸 변환 수단(21)의 처리(기능) 중, 이차적 문장 출력 처리(S1308)를 보다 상세하게 나타내는 플로우 차트이다. 도 14에 도시된 바와 같이, 변환 수단(21)은, 이차적 문장 출력 처리에 있어서 문장(312)을 이차적 문장(327)으로서 출력한다(S1400). 보다 구체적으로는, 본 실시형태에 의하면, 문장(312)에 기술되어 있는 실행문 등을 워크시트의 소정의 행·열에 복사한다. 이 때, 위에서 설명한 바와 같이, PERFORM 문을 코멘트 문으로 하는 등의 가공이 행해진다. 또한, 변환 수단(21)은, 모듈 식별(321)과, 행 번호(322)와, 일련번호(326)에 위에서 설명한 바와 같은 값을 설정한다.
다음으로, 변환 수단(21)은, 문장(312)에 조건문이 기술되어 있는지 판정한다(S1402). 문장(312)에 기술되어 있는 실행문이 조건문인 경우(S1402에서 YES인 경우), 변환 수단(21)은, 위에서 설명한 바와 같이 IF 문 이외의 조건문을 IF 문으로 변환하는 등의 처리를 행한다. 보다 구체적으로는, 변환 수단(21)은, 조건문의 조건식에 근거하여, 이차적 문장의 하나인 이차적 조건문(IF 문)이 기술된 이차적 문장(327)을 생성하고, 이차적 조건문에 의해 이차적 문장(327)을 계층화하여 이차적 모듈에 출력하고(S1404), 이차적 문장 출력 처리를 종료한다.
문장(312)에 기술되어 있는 실행문(즉, 대상 문장)이 조건문이 아닌 경우(S1402에서 NO인 경우), 변환 수단(21)은, 대상 문장이 처리 단위 실행문(PERFORM 문)인지 판정한다(S1406). 대상 문장이 처리 단위 실행문인 경우(S1406에서 YES인 경우), 변환 수단(21)은, 실행 대상인 처리 단위의 처리 개시 개소의 문장(312)을 취득한다. 본 실시형태에 있어서는, 처리 단위의 처리 개시 개소는 섹션의 선두이다.
대상 문장이 처리 단위 실행문이 아닌 경우(S1406에서 NO인 경우), 변환 수단(21)은, 대상 문장이 모듈 호출문(본 실시형태에 의하면, CALL 문)인지 판정한다(S1410). 대상 문장이 모듈 호출문인 경우(S1410에서 YES인 경우), 변환 수단(21)은, CALL 문에 의해 특정되는 호출 대상인 모듈(31)을 기억장치(30´)로부터 읽어들이며(S1412), 호출 대상인 모듈(31)의 처리 개시 개소의 문장(312)을 취득한다(S1414). 본 실시형태에 의하면, 호출 대상인 모듈(31)의 처리 개시 개소는, 상기 모듈(31)의 메인 섹션의 선두이다. 대상 문장이 모듈 호출문이 아닌 경우(S1410에서 NO인 경우), 변환 수단(21)은 이차적 문장 출력 처리를 종료한다.
변환 수단(21)은, 실행 대상인 섹션의 문장(312) 또는 호출 대상인 모듈(31)의 문장(312)에 대해, 재귀적(再歸的)으로 이차적 문장 출력 처리를 행한다(S1416). 다음으로, 변환 수단(21)은, 처리 종료 개소의 문장(312)을 처리 완료하였는지 판정한다(S1418). 본 실시형태에 의한 처리 종료 개소는, 실행 대상인 섹션에 대해서는 상기 섹션의 말미이며, 호출 대상인 모듈(31)에 대해서는 메인 섹션의 말미이다. 처리가 종료되어 있는 경우(S1418에 있어서 YES인 경우), 변환 수단(21)은, 이차적 문장 출력 처리를 종료한다. 한편, 처리가 종료되어 있지 않은 경우(S1418에 있어서 NO인 경우), 변환 수단(21)은, 다음에 처리할 문장(312)(후속하는 행(310)의 문장(312))을 취득하고(S1420), 취득한 문장(312)에 대해 재귀적으로 이차적 문장 출력 처리를 행한다(S1416).
변환 수단(21)은, 재귀적인(자기 자신을 실행하는) PERFORM 문에 대해서는, 실행 대상인 섹션의 문장(312)의 전개를 행하지 않는다. 마찬가지로, 변환 수단(21)은, 재귀적인(자기 자신을 호출하는) CALL 문에 대해서는, 호출 대상인 모듈(31)의 문장(312)의 전개를 행하지 않는다. 또한, 변환 수단(21)은, 전개 제어 파라미터에 전개 지시가 지정되어 있는 경우, 이미 이차적 문장 출력 처리를 행한 섹션과 섹션명이 동일한 섹션을 실행하는 PERFORM 문에 대해서는, 이차적 문장 출력 처리를 행하지 않는다(S1406). 마찬가지로, 변환 수단(21)은, 전개 제어 파라미터에 전개 지시가 지정되어 있는 경우, 이미 이차적 문장 출력 처리를 행한 모듈(31)과 모듈명이 동일한 모듈(31)을 호출하는 CALL 문에 대해서는, 이차적 문장 출력 처리를 행하지 않는다(S1410).
이상의 설명으로부터 이해되는 바와 같이, 변환 수단(21)의 변환 기능은, 대상 모듈(31)의 소정의 처리 개시 개소로부터 소정의 처리 종료 개소까지 기술된 문장(312)의 각각을 이차적 문장(327)으로서 이차적 모듈에 순차적으로 출력한다. 또한, 변환 수단(21)의 변환 기능은, 문장(312)이 처리 단위 실행문 또는 모듈 호출문인 경우, 실행 대상인 처리 단위 또는 호출 대상인 모듈(31)에 기술되어 있는 문장(312)을 전개함으로써 이차적 문장(327)을 생성하여 이차적 모듈(32)에 출력한다. 또한, 변환 수단(21)의 변환 기능은, 전개되는 문장(312)에 있어서의 처리 단위 실행문 또는 모듈 호출문에 대해서도 전개를 더욱 행한다(즉, 재귀적으로 전개한다). 따라서, 다수의 처리 단위나 모듈(31)에 분산된 기능을, 대상 모듈(31)의 메인 섹션으로 끌어오도록 하여 모을 수가 있다. 환언하면, 1개의 프로그램의 기능을 1개의 이차적 모듈(32)에 모을 수가 있다.
이상의 설명으로부터 이해되는 바와 같이, 본 실시형태에 의한 변환 수단(21)의 변환 기능은, 전개 제어 파라미터에 전개 지시가 지정되어 있는 경우, 동일한 처리 단위에 대해서는, 실행 대상인 처리 단위에 기술되어 있는 문장(312)의 전개를 첫 회의 1회만 행하고(즉, 동일한 처리 단위를 1회만 전개하고), 동일한 모듈(31)에 대해서는, 호출 대상인 모듈(31)에 기술되어 있는 문장(312)의 전개를 첫 회의 1회만 행한다(즉, 동일한 모듈(31)을 1회만 전개한다). 단, 변환 수단(21)의 변환 기능은, 전개 지시가 지정되어 있지 않은 경우에, 동일한 처리 단위나 동일한 모듈(31)을 1회만 전개하여도 무방하다. 또, 변환 수단(21)의 변환 기능은, 전개 지시가 지정되어 있는지 여부에 관계없이, 동일한 처리 단위나 동일한 모듈(31)을 1회만 전개하여도 무방하다. 또한, 변환 수단(21)의 변환 기능은, 전개 지시가 지정되어 있는지 여부에 관계없이, 동일한 처리 단위나 동일한 모듈(31)을 반복하여 전개하여도 무방하다.
이상으로 설명한 바와 같이, 변환 수단(21)에 의해, 이차적 문장(327)으로 이루어지는 이차적 모듈(32)이 기억장치(30´)에 기억된다.
도 15로부터 이해되는 바와 같이, 본 실시형태에 의한 가공 수단(22)은, 읽어들임 기능(S1500, S1502)과, 계층구조 부가기능(S1506)과, 기입 기능(S1510)을 가지고 있다. 읽어들임 기능은, 처리 대상인 이차적 모듈(32)을 기억장치(30´)로부터 읽어들이는 기능이다. 계층구조 부가기능은, 이차적 모듈(32)의 이차적 문장(327)의 적어도 일부에 대해 계층구조(323)를 부가하는 기능이다. 기입 기능은, 계층구조(323)가 부가된 이차적 문장(327)으로 이루어지는 이차적 모듈(32)을 기억장치(30´)에 기억하는 기능이다.
보다 구체적으로는, 도 15에 도시된 바와 같이, 가공 수단(22)은, 예컨대 변환 수단(21)과 마찬가지로 기동되면, 처리 대상인 이차적 모듈(32)을 특정하기 위한 이차적 모듈명을 취득한다(S1500). 가공 수단(22)은, 취득한 이차적 모듈명에 의해 특정되는 이차적 모듈(32)을 기억장치(30´)로부터 읽어들인다(S1502). 처리 대상인 이차적 모듈(32)이 기억장치(30)에 기억되어 있지 않은 경우, 가공 수단(22)은, 처리를 종료한다(도시 생략).
다음으로, 가공 수단(22)은, 처리 대상인 이차적 모듈(32)의 처리 개시 개소의 이차적 문장(327)을 취득한다(S1504). 본 실시형태에 의한 처리 개시 개소는, 이차적 모듈(32)의 선두이다.
가공 수단(22)은, 취득한 이차적 문장(327)에 대해 계층구조(323)를 부가한다(S1506). 보다 구체적으로는, 본 실시형태에 의한 가공 수단(22)은, 처리 대상인 이차적 모듈(32)이 기록된 워크시트(즉, 대상 워크시트)에 있어서 행(320)의 계층구조(323)와 대응하는 행·열에, 위에서 설명한 바와 같은 분기 계층(324)과 계층의 깊이(325)를 설정한다.
다음으로, 가공 수단(22)은, 처리 종료 개소의 이차적 문장(327)을 처리 완료하였는지 판정한다(S1508). 본 실시형태에 의한 처리 종료 개소는, 이차적 모듈(32)의 말미이다. 처리가 종료되어 있는 경우(S1508에 있어서 YES인 경우), 가공 수단(22)은, 가공한 이차적 모듈(32)을 기억장치(30´)에 기입하고(S1510), 처리를 종료한다. 한편, 처리가 종료되어 있지 않은 경우(S1508에 있어서 NO인 경우), 가공 수단(22)은, 다음에 처리할 이차적 문장(327)(후속하는 행(320)의 이차적 문장(327))을 취득하고(S1512), 취득한 이차적 문장(327)에 대해 계층구조(323)의 부가를 행한다(S1506).
이상으로 설명한 바와 같이, 가공 수단(22)에 의해, 계층구조(323)가 부가된 이차적 문장(327)으로 이루어지는 이차적 모듈(32)이 기억장치(30´)에 기억된다. 이상의 설명으로부터 이해되는 바와 같이, 변환 수단(21)에, 가공 수단(22)의 기능을 구비할 수도 있다. 이 경우, 장치 본체(20´)는, 가공 수단(22)을 구비하고 있지 않아도 무방하다.
본 실시형태에 의한 비교 수단(23´)은, 제 1 실시형태에 의한 비교수단(23)과 마찬가지의 기능을 구비하고 있다. 이하, 비교수단(23)과 다른 기능을 중심으로, 도 17에 도시된 예를 참조하면서, 도 16을 사용하여 설명한다.
비교 수단(23´)은, 비교수단(23)과 마찬가지로 기동되면, 이차적 모듈(32) 중의 제 1 모듈(32)을 특정하기 위한 제 1 모듈명, 및 제 2 모듈(32)을 특정하기 위한 제 2 모듈명을 취득한다(S1600). 예컨대, 제 1 모듈(32)은, 소정 프로그램의 유지 관리하기 전의 모듈(31)을 연결한 이차적 모듈(32)이며, 제 2 모듈(32)은, 소정 프로그램의 유지 관리된 후의 모듈(31)을 연결한 이차적 모듈(32)이다.
다음으로, 비교 수단(23´)은, 취득한 제 1 모듈명 및 제 2 모듈명에 의해 각각 특정되는 제 1 모듈(32) 및 제 2 모듈(32)을 기억장치(30)로부터 읽어들인다(S1602, S1604).
도 12(파선 A로 표시한 개소 참조) 및 도 17의 상단(上段)에 예시된 바와 같이, 유지 관리 전의 XXX 모듈에는, 5개의 WHEN 구를 포함하는 EVALUATE 문이 기술되어 있다. 이 때문에, 유지 관리 전의 제 1 모듈(32)은, 상기 EVALUATE 문으로부터 생성된 4개의 IF문을 포함하고 있다(도 17의 상단 참조).
도 17로부터 이해되는 바와 같이, 유지 관리에 의해, 유지 관리 전의 XXX 모듈의 5개의 WHEN 구 중, 5번째의 WHEN 구가 삭제되어 있다. 이 때문에, 유지 관리 후의 제 2 모듈(32)은, 상기 EVALUATE 문으로부터 생성된 3개의 IF 문을 포함하고 있다(도 17의 하단 참조).
도 16에 도시된 바와 같이, 비교 수단(23´)은, 제 1 모듈(32) 및 제 2 모듈(32)을 읽어들인 후, 제 1 모듈(32)의 계층구조(323)와 제 2 모듈(32)의 계층구조(323)를 비교한다(S1606). 본 실시형태에 의하면, 비교 수단(23´)은, 제 1 모듈(32)의 계층의 깊이(325)와 제 2 모듈(32)의 계층의 깊이(325)를 1행째부터 순차적으로 비교하여, 계층의 깊이(325)의 변화가 일치하는지 여부를 판정한다.
도 17에 예시하는 제 1 모듈(32) 및 제 2 모듈(32)을 참조하면, 제 2 모듈(32)에 있어서의 계층의 깊이(325)는, 행 번호(322)가 “60”인 행(320)까지는, 제 1 모듈(32)에 있어서의 계층의 깊이(325)와 같다. 한편, 제 2 모듈(32)의 행 번호(322)가 “61”인 행(320)의 계층의 깊이(325)(“1.2.1.1”)는, 제 1 모듈(32)의 행 번호(322)가 “61”인 행(320)의 계층의 깊이(325)(“1.2.1.1.1”)와 다르다. 이 때문에, 비교 수단(23´)은, 제 1 모듈(32)의 계층구조(323)가 제 2 모듈(32)의 계층구조(323)와 일치하고 있지 않음을 나타내는 메시지를 작성한다. 즉, 비교 수단(23´)은, 비교수단(23)과 마찬가지로, 제 1 모듈(32)의 계층구조(323)와 제 2 모듈(32)의 계층구조(323) 간의 비교 결과(메시지)를 작성한다. 본 실시형태에 의한 비교 수단(23´)은, 작성한 메시지를 표시장치(50)에 표시한다.
이상의 설명으로부터 이해되는 바와 같이, 본 실시형태에 의한 비교 수단(23´)은, 제 1 실시형태에 의한 비교수단(23)과 마찬가지로 2개의 모듈(제 1 모듈(32) 및 제 2 모듈(32))의 계층구조를 비교할 수 있다. 또한, 본 실시형태에 의하면, 제 1 모듈(32) 및 제 2 모듈(32)의 각각에는, 관련된 복수의 모듈(31)이 처리 순으로 연결되어 있다. 따라서, 유지 관리 전후의 프로그램 전체를, 통합하여 비교할 수가 있다.
예컨대, 런타임 시스템(runtime system) 등의 소프트웨어의 버전 업(version up)에 수반하여 모듈을 유지 관리하는 경우, 기본적으로는 모듈의 계층구조는 변하지 않는다. 또, 이러한 컨버전에 있어서는, 컨버전 툴(conversion tool)을 사용하여 모듈을 유지 관리하는 경우가 있다. 그러나, 일반적으로 컨버전 툴은, 모듈을 완전하게 적절히 유지 관리할 수가 없다. 이러한 경우, 유지 관리 전후의 모듈로부터 각각 작성한 제 1 모듈(32) 및 제 2 모듈(32)의 계층구조(323)를 비교함으로써, 유지 관리가 적절히 행해졌는지 여부를 알 수가 있다.
본 실시형태에 있어서의 계층구조(323)의 비교 방법은, 제 1 실시형태와 마찬가지로, 다양하게 변형할 수 있다. 예컨대, 제 1 모듈(32)의 계층구조(323)와 제 2 모듈(32)의 계층구조(323)가 일치하지 않는 개소를 표시장치(50)에 표시함으로써, 유지 관리가 적절히 행해지지 않은 개소를 용이하게 알 수가 있다.
(제 3 실시형태)
도 18에 도시된 바와 같이, 본 발명의 제 3 실시형태에 의한 비교 장치(장치; 10˝)는, 장치 본체(20˝)와, 기억장치(기억 수단; 30˝)와, 입력장치(40)와, 표시장치(50)를 구비하고 있다. 본 실시형태에 의한 기억장치(30˝)는, 장치 본체(20˝)의 주(主)기억장치이다. 장치 본체(20˝)는, 제 2 실시형태에 의한 장치 본체(20´)와 마찬가지로, 변환 수단(21)과, 가공 수단(22)과, 비교 수단(23´)을 구비하고 있다.
장치(10˝)는, 통신회선(80)을 경유하여, 파일 서버(60)와 통신 가능하게 접속되어 있다. 통신회선(80)은, 예컨대 LAN(Local Area Network)이어도 무방하고, 인터넷이어도 무방하다. 파일 서버(60)는, 변환 수단(21), 가공 수단(22) 및 비교 수단(23´) 중의 적어도 하나를 구비하고 있어도 무방하다. 또, 파일 서버(60)는, 기억장치(기억 수단; 70)를 구비하고 있다. 기억장치(70)는, 모듈(31)과, 이차적 모듈(32)을 기억할 수 있다. 따라서, 장치(10˝)는, 기억장치(70)로부터 모듈(31) 등을 읽어들이고, 기억장치(70)에 모듈(31) 등을 기입할 수가 있다.
용이하게 이해되는 바와 같이, 본 실시형태에 의하면, 제 1 및 제 2 실시형태와 마찬가지로, 이차적 모듈(32) 중의 2개의 모듈(제 1 모듈(32) 및 제 2 모듈(32))을 비교할 수 있다. 또, 비교 결과를, 복수의 장치(10˝)에 의해 공유할 수가 있다.
본 발명의 최선의 실시형태에 대해 설명하였으나, 당업자에게는 명백한 바와 같이, 본 발명의 정신을 벗어나지 않는 범위에서 실시형태를 변형할 수 있으며, 그러한 실시형태는 본 발명의 범위에 속하는 것이다.
10, 10´, 10˝; 비교 장치(장치)
20, 20´, 20˝; 장치 본체
21; 변환 수단
22; 가공 수단
23, 23´; 비교 수단
30, 30´, 30˝; 기억장치(기억 수단)
31; 모듈(소스 프로그램)
310; 행
311; 일련번호(행 식별)
312; 문장(文, statement)
32; 이차적 모듈(모듈)
320; 이차적 행(행)
321; 모듈 식별
322; 행 번호
323; 계층구조
324; 분기 계층
325; 계층의 깊이
326; 일련번호(행 식별)
327; 이차적 문장(文, statement)
36, 36a; 계층구조
360, 360a; 행
361; 일련번호(행 식별)
362; 계층의 깊이
363; 계층 패턴
364; 종료 행(일련번호)
40; 입력장치
50; 표시장치
60; 파일 서버
70; 기억장치(기억 수단)
80; 통신회선

Claims (5)

  1. 프로그램 언어에 의해 기술된 1 이상의 문장(文)으로 각각 이루어지는 2개의 모듈을 비교하는 장치로서,
    상기 모듈에는, 상기 문장(文)의 하나인 조건문을 기술할 수 있고, 상기 조건문은, 성립시 실행문 및 불성립시 실행문 중 일방 또는 양방을 포함하고 있으며, 상기 성립시 실행문은, 상기 조건문의 조건식이 성립하는 경우에 실행되는 상기 문장이고, 상기 불성립시 실행문은, 상기 조건식이 성립하지 않는 경우에 실행되는 상기 문장이며, 상기 조건문 중의 적어도 하나는, 상기 성립시 실행문 및 상기 불성립시 실행문 중 일방 또는 양방에 상기 조건문을 더 포함할 수 있고, 이로써 상기 조건문에 의한 상기 문장의 계층화가 가능하며, 상기 문장의 상기 계층화에 의한 상기 모듈의 계층구조를 특정할 수 있고,
    상기 장치는, 기억 수단과 비교 수단을 구비하고 있으며,
    상기 기억 수단에는, 2 이상의 상기 모듈이 기억되어 있고,
    상기 비교 수단은, 상기 기억 수단에 기억된 상기 모듈 중의 제 1 모듈과 제 2 모듈을 상기 기억 수단으로부터 취득하여, 상기 제 1 모듈의 상기 계층구조가 상기 제 2 모듈의 상기 계층구조와 일치하고 있는지 여부를 나타내는 메시지를 작성하는
    장치.
  2. 제 1항에 있어서,
    상기 계층구조는, 상기 문장의 상기 계층화에 의한 계층의 깊이를 가지고 있는
    장치.
  3. 제 1항에 있어서,
    상기 제 1 모듈 및 상기 제 2 모듈 중의 적어도 일방(一方)은, 복수의 상기 모듈을 연결한 것인
    장치.
  4. 제 1항에 있어서,
    표시장치를 더 구비하고 있으며,
    상기 비교 수단은, 상기 메시지를 상기 표시장치에 표시하는
    장치.
  5. 컴퓨터를, 제 1항 내지 제 4항 중 어느 한 항에 기재된 장치로서 기능시키기 위한 프로그램을 기록한 기록매체.
KR1020167002657A 2013-08-01 2013-08-01 장치 및 프로그램 KR101705254B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/070927 WO2015015622A1 (ja) 2013-08-01 2013-08-01 装置及びプログラム

Publications (2)

Publication Number Publication Date
KR20160027124A KR20160027124A (ko) 2016-03-09
KR101705254B1 true KR101705254B1 (ko) 2017-02-09

Family

ID=52431194

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167002657A KR101705254B1 (ko) 2013-08-01 2013-08-01 장치 및 프로그램

Country Status (5)

Country Link
US (1) US9792197B2 (ko)
JP (1) JP6008456B2 (ko)
KR (1) KR101705254B1 (ko)
CN (1) CN105431817B (ko)
WO (1) WO2015015622A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10440537B1 (en) * 2018-12-11 2019-10-08 Vmware, Inc. Defining automations for enrolled user devices

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009086922A (ja) 2007-09-28 2009-04-23 Toshiba Mitsubishi-Electric Industrial System Corp プログラム編集装置
JP2013025716A (ja) 2011-07-25 2013-02-04 Shinichi Ishida モジュールの構造解析を支援する装置及びプログラム

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04165425A (ja) * 1990-10-29 1992-06-11 Nippon Telegr & Teleph Corp <Ntt> 記号列中の入れ子関係抽出方法及びその装置
JPH04299459A (ja) * 1991-03-27 1992-10-22 Nec Corp データベースアクセスシステム
JPH05143351A (ja) * 1991-11-22 1993-06-11 Nec Corp 原始プログラム比較方式
AUPM519694A0 (en) * 1994-04-19 1994-05-12 Griffith University Method for testing and debugging computer programs
JP3262493B2 (ja) * 1996-04-12 2002-03-04 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムのデータ構造を表示する方法、及びデータ構造表示装置
JP2000112747A (ja) * 1998-10-01 2000-04-21 Fujitsu Ltd プログラム資産における非実行文の等価性検証装置
US20080320054A1 (en) * 2003-04-09 2008-12-25 Cindy Howard Database and Software Conversion System and Method
US7503035B2 (en) * 2003-11-25 2009-03-10 Software Analysis And Forensic Engineering Corp. Software tool for detecting plagiarism in computer source code
JP2005301859A (ja) 2004-04-15 2005-10-27 Fujitsu Ltd コード検索プログラム及びコード検索装置
JP2006018693A (ja) 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2007122207A (ja) * 2005-10-26 2007-05-17 Fujitsu Ltd プログラム分析プログラム、プログラム分析装置、プログラム分析方法
US8127277B2 (en) * 2007-05-21 2012-02-28 International Business Machines Corporation Framework for conditionally executing code in an application using conditions in the framework and in the application
KR20100106409A (ko) * 2007-11-20 2010-10-01 내셔널 아이씨티 오스트레일리아 리미티드 다중 언어 소프트웨어 코드 분석
JP2009176108A (ja) 2008-01-25 2009-08-06 Nec Corp プログラムソース差分検出装置、プログラムソース差分検出方法及びプログラムソース差分検出プログラム
CN101261602A (zh) * 2008-04-08 2008-09-10 杭州电子科技大学 一种基于语法树的程序正确性验证方法
US8307010B2 (en) * 2008-09-26 2012-11-06 Microsoft Corporation Data feature tracking through hierarchical node sets
CN101398758B (zh) * 2008-10-30 2012-04-25 北京航空航天大学 一种代码抄袭的检测方法
JP4839424B2 (ja) * 2008-12-15 2011-12-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの解析を支援するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
KR20120058455A (ko) * 2009-04-28 2012-06-07 인터내셔널 비지네스 머신즈 코포레이션 멀티 스레드 상에서 동작하는 프로그램의 프로그램 코드를 록 충돌이 적은 프로그램 코드로 변환하기 위한 방법, 및 그 컴퓨터 프로그램 및 컴퓨터 시스템
US8578342B2 (en) * 2009-07-14 2013-11-05 International Business Machines Corporation Fault detection and localization in dynamic software applications requiring user inputs and persistent states
JPWO2011118048A1 (ja) * 2010-03-25 2013-07-04 株式会社日立製作所 プログラム実行方法、計算機システム及びプログラム実行制御プログラム
TWI467481B (zh) * 2010-05-31 2015-01-01 Ibm 層級式程式源碼管理方法、系統及電腦程式產品
CN101894236B (zh) * 2010-07-28 2012-01-11 北京华夏信安科技有限公司 基于摘要语法树和语义匹配的软件同源性检测方法及装置
US9015680B1 (en) * 2012-02-24 2015-04-21 Google Inc. Differential analysis of translation of software for the detection of flaws
US8899343B2 (en) * 2012-09-12 2014-12-02 International Business Machines Corporation Replacing contiguous breakpoints with control words
US9043757B2 (en) * 2012-12-13 2015-05-26 Oracle International Corporation Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009086922A (ja) 2007-09-28 2009-04-23 Toshiba Mitsubishi-Electric Industrial System Corp プログラム編集装置
JP2013025716A (ja) 2011-07-25 2013-02-04 Shinichi Ishida モジュールの構造解析を支援する装置及びプログラム

Also Published As

Publication number Publication date
KR20160027124A (ko) 2016-03-09
CN105431817B (zh) 2019-01-04
JPWO2015015622A1 (ja) 2017-03-02
WO2015015622A1 (ja) 2015-02-05
US20160162384A1 (en) 2016-06-09
US9792197B2 (en) 2017-10-17
CN105431817A (zh) 2016-03-23
JP6008456B2 (ja) 2016-10-19

Similar Documents

Publication Publication Date Title
Schulte et al. A multi-language computing environment for literate programming and reproducible research
CN108027721B (zh) 用于使用控件来配置通用程序的技术
NZ589831A (en) Code Transformation
US20170154019A1 (en) Template-driven transformation systems and methods
US8650532B2 (en) Change notification and information update based on uncompiled software development project
US9880815B2 (en) SQL visualizer
US9613089B2 (en) Form template refactoring
CN114503073A (zh) 将用过程编程语言编写的程序自动转换为数据流图及相关系统和方法
KR101705254B1 (ko) 장치 및 프로그램
KR101578119B1 (ko) 구조 해석 장치 및 프로그램
WO2007052680A1 (ja) 文書処理装置及び文書処理方法
AU2012201466B2 (en) Code Transformation
JP5399601B2 (ja) 実装コード開発システム、及び実装コード開発プログラム
US9128807B2 (en) Module structural analysis supporting device and program
JP2018514843A (ja) スタイルのための宣言型カスケード再順序付け
JP6753190B2 (ja) 文書検索装置及びプログラム
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
JP5359446B2 (ja) 情報処理システム、アクセスパス決定方法及びアクセスパス決定プログラム
WO2022107228A1 (ja) 操作支援装置、操作支援方法および操作支援プログラム
JP2007094453A (ja) プログラム開発支援システム、プログラム開発支援方法およびプログラム
RU2379748C2 (ru) Способ управления данными в сформированном компьютерном документе и машиночитаемый носитель с записанной на нем программой
US10255050B2 (en) Method for code disambiguation
JP2002055852A (ja) オブジェクトの生成・消滅情報管理方式
JP2004252890A (ja) テキストデータ作成方法、テキストデータ作成装置及びコンピュータプログラム
JP2007004627A (ja) 文書処理装置

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20200115

Year of fee payment: 4