본 발명에 대해서는 다양한 변형이나 각종 형태로 실현하는 것이 가능한데, 그 일례로서, 도면에 나타내는 것과 같은 특정한 실시형태에 대해, 이하에 상세하게 설명한다. 도면 및 실시형태는, 본 발명을 여기에 개시한 특정한 형태로 한정하는 것은 아니며, 첨부된 청구범위에 명시되어 있는 범위 내에 있어서 이루어지는 모든 변형예, 균등물, 대체예를 그 대상에 포함하는 것으로 한다.
(제 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˝)에 의해 공유할 수가 있다.
본 발명의 최선의 실시형태에 대해 설명하였으나, 당업자에게는 명백한 바와 같이, 본 발명의 정신을 벗어나지 않는 범위에서 실시형태를 변형할 수 있으며, 그러한 실시형태는 본 발명의 범위에 속하는 것이다.