KR102186050B1 - 소스 코드 번역 - Google Patents

소스 코드 번역 Download PDF

Info

Publication number
KR102186050B1
KR102186050B1 KR1020167017964A KR20167017964A KR102186050B1 KR 102186050 B1 KR102186050 B1 KR 102186050B1 KR 1020167017964 A KR1020167017964 A KR 1020167017964A KR 20167017964 A KR20167017964 A KR 20167017964A KR 102186050 B1 KR102186050 B1 KR 102186050B1
Authority
KR
South Korea
Prior art keywords
software specification
programming language
dataset
software
representation
Prior art date
Application number
KR1020167017964A
Other languages
English (en)
Other versions
KR20160096137A (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 KR20160096137A publication Critical patent/KR20160096137A/ko
Application granted granted Critical
Publication of KR102186050B1 publication Critical patent/KR102186050B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/76Adapting program code to run in a different environment; Porting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

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)
  • Devices For Executing Special Programs (AREA)

Abstract

소프트웨어 사양 번역은 제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양(228), 제2 프로그래밍 언어로 명시된 제2 소프트웨어 사양(228), 상기 제1 및 제2 프로그래밍 언어들과 상이한 제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양(226)-제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 하나 이상의 데이터 관계들을 정의함-을 수신하는 단계를 포함한다. 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현(332)이 상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어로 형성된다. 연결들이 식별된 데이터 관계들에 따라 상기 제1 소프트웨어 사양의 표현과 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 형성된다.

Description

소스 코드 번역{SOURCE CODE TRANSLATION}
본 출원은 2013년 12월 6일에 출원된 미국 출원 번호 61/912,594에 대해 우선권을 주장한다.
본 설명은 소스 코드 번역과 관련되고, 특히, 하나 이상의 다른 상이한 소프트웨어 프로그래밍 언어로의 하나 이상의 원본 소프트웨어 프로그래밍 언어로 명시된 소스 코드의 번역에 관련된다.
소프트웨어 개발 분야에서, 소프트웨어 엔지니어들은 다수의 상이한 프로그래밍 언어들 중 하나 이상으로 소프트웨어를 개발하는 것을 선택할 수 있다. 이 글을 쓰는 시점에서, 종래에 개발자들에 의해 사용되는 현대 프로그래밍 언어들 중 일부 예들은 Java, C#, 그리고 C++이다. 일반적으로, 각각의 프로그래밍 언어는 장점들과 단점들을 가지고 주어진 어플리케이션에 대한 적절한 프로그래밍 언어를 선택할 때 이러한 장점들과 단점들을 고려하는 것이 소프트웨어 엔지니어의 일이다.
수년에 걸쳐, 프로그래밍 언어의 기술 상태가 진보하였고, 특정 초기 프로그래밍 언어들이 덜 사용되고, 더 이상 지원이 안되며, 및/또는 더 이상 쓸모없게 되는 결과를 초래하였다. 이러한 초기 프로그래밍 언어들의 일부 예가 Basic과 Fortran이다. 여전히, 그 초기 프로그래밍 언어들로 작성된 소스 코드 - 종종 "레거시(legacy)" 코드라 함 - 가 그것의 적절한 성능으로 인해 일반적으로 다년간 생산 상태에 남아있다. 그러나 이러한 레거시 코드가 적절하게 기능을 중단하고 코드에 대한 변경이 필요하게 될 때, 레거시 코드를 갱신하는데 필수 기술을 가진 소프트웨어 엔지니어들을 찾는 것이 어려울 수 있다.
이러한 이유로, 입력으로 제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양을 수신하고 출력으로 제2, 상이한 프로그래밍 언어로 명시된 제2 소프트웨어 사양을 생성하는, 소스-대-소스 컴파일러가 개발되었다. 이러한 소스-대-소스 컴파일러가 레거시 코드를 현대 프로그래밍 언어들의 사용에 능숙한 소프트웨어 엔지니어들에 의해 더 쉽게 편집되는 현대 프로그래밍 언어로 번역하기 위해 사용된다.
본 발명의 목적은 소프트웨어 사양 번역을 위한 방법, 소프트웨어 사양 번역을 위해, 컴퓨터 판독가능한 매체상에 비 일시적 형태로 저장된 소프트웨어, 및 소프트웨어 사양 번역을 위한 컴퓨팅 시스템을 제공하기 위한 것이다.
해결되는 기술적 문제는 절차적 언어의 소스 코드를 포함하는 소프트웨어 사양과 절차적 프로그래밍 구조에 한정되지 않고 다른 양상을 사용하여 동작하는 언어의 소스 코드를 포함하는 소프트웨어 사양 사이의 변환을 포함한다. 예를 들어, 오로지 명시적으로 상이한 절차들 사이에서 오가는 제어에 의해 구동되는 실행 대신에, 상기 언어는 홀로 또는 명시적 제어 흐름(control flow)과 결합하여, 실행을 구동하기 위해 상이한 프로그래밍 엔티티들 사이에서 흐르는 데이터를 포함하는 양상(modality)에서 동작할 수 있다. 이러한 근본적인 차이들과 함께 언어들 사이의 소스 코드 변환은 언어들의 상이한 스타일 사이의 단순한 바꿔쓰기 이상을 포함한다. 여러 언어의 소스 코드를 가지는 시스템들에 대해, 해결되는 또 다른 기술적 문제는 이러한 여러 언어의 특징을 상이한 언어로 통합하는 새로운 시스템에 대한 소스 코드를 제공하는 것을 포함한다.
일 측면에서, 일반적으로, 소프트웨어 사양 번역을 위한 방법은 제1 프로그래밍 언어(예를 들어, COBOL)로 명시된 제1 소프트웨어 사양을 수신하는 단계; 제2 프로그래밍 언어(예를 들어, COBOL)로 명시된 제2 소프트웨어 사양을 수신하는 단계;
제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양을 수신하는 단계(일부 실시 예에서, 상기 제3 프로그래밍 언어는 상기 제1 및 제2 프로그래밍 언어들과 다름, 예를 들어, JCL) - 상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 하나 이상의 데이터 관계들을 정의함 -; 상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어(예를 들어, 데이터플로 그래프)로 상기 제1 소프트웨어 사양의 표현을 형성하는 단계; 상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하는 단계; 상기 하나 이상의 데이터 관계들을 식별하기 위해 상기 제3 소프트웨어 사양을 분석하는 단계; 및 상기 식별된 하나 이상의 데이터 관계들에 따라 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 연결들을 형성하는 단계를 포함하는 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 형성하는 단계를 포함한다.
측면들은 다음 특징들 중 하나 이상을 포함할 수 있다.
상기 제1 프로그래밍 언어는 절차적 프로그래밍 언어이다.
상기 제4 프로그래밍 언어는 소프트웨어 사양의 서로 다른 부분들 사이의 병행성을 가능하게 한다.
상기 제4 프로그래밍 언어는 소프트웨어 사양의 부분의 여러 인스턴스들이 입력 데이터 스트림의 서로 다른 부분들에서 동작하는 것을 가능하게 하는 제1 유형의 병행성; 및 소프트웨어 사양의 서로 다른 부분들이 상기 입력 데이터 스트림의 서로 다른 부분들에서 동시에 실행하는 것을 가능하게 하는 제2 유형의 병행성을 포함하는 복수의 유형의 병행성을 가능하게 한다.
상기 제2 프로그래밍 언어는 절차적 프로그래밍 언어이다.
상기 제2 프로그래밍 언어는 상기 제1 프로그래밍 언어와 동일하다.
상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 상기 하나 이상의 데이터 관계들은 제1 데이터세트로부터 데이터를 수신하는 상기 제1 소프트웨어 사양과 상기 제1 데이터세트에 데이터를 제공하는 상기 제2 소프트웨어 사양에 대응하는 적어도 하나의 데이터 관계를 포함한다.
상기 제4 프로그래밍 언어는 데이터플로 그래프 기반 프로그래밍 언어이다.
상기 제4 프로그래밍 언어의 연결들은 데이터의 흐름들을 나타내는 방향성 링크들에 대응한다.
상기 제1 소프트웨어 사양은 하나 이상의 데이터세트들-각각의 데이터세트는 상기 제1 소프트웨어 사양에서 복수의 데이터세트 유형들 중 관련된 데이터세트 유형을 가짐-과 상호작용하도록 구성되고, 상기 제2 소프트웨어 사양은 하나 이상의 데이터세트들-각각의 데이터세트는 상기 제2 소프트웨어 사양에서 복수의 데이터세트 유형들 중 관련된 데이터세트 유형을 가짐-과 상호작용하도록 구성되고, 상기 방법은 상기 제1 소프트웨어 사양을 처리하는 단계로서, 상기 제1 소프트웨어 사양의 하나 이상의 데이터세트들을 식별하고, 그리고 상기 식별된 하나 이상의 데이터세트들 각각에 대해, 상기 제1 소프트웨어 사양의 데이터세트의 관련된 유형을 결정하는 단계; 및 상기 식별된 하나 이상의 데이터세트들 각각에 대해, 상기 제4 프로그래밍 언어로 상기 데이터세트의 사양을 형성하는 단계-상기 제4 프로그래밍 언어의 상기 데이터세트의 사양은 상기 제1 프로그래밍 언어의 상기 데이터세트의 관련된 유형에 대응하는 유형을 가짐-를 포함하는, 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 단계를 포함하고, 여기서 상기 제4 프로그래밍 언어의 상기 하나 이상의 데이터세트들의 사양들 중 적어도 하나가 입력 데이터세트 유형 또는 출력 데이터세트 유형을 가지는, 상기 제1 소프트웨어 사양을 처리하는 단계; 및 상기 제2 소프트웨어 사양을 처리하는 단계로서, 상기 제2 소프트웨어 사양의 하나 이상의 데이터세트들을 식별하고, 그리고 상기 식별된 하나 이상의 데이터세트들 각각에 대해, 상기 제2 소프트웨어 사양의 상기 데이터세트의 관련된 유형을 결정하는 단계; 및 상기 식별된 하나 이상의 데이터세트들 각각에 대해, 상기 제4 프로그래밍 언어로 상기 데이터세트의 사양을 형성하는 단계-상기 제4 프로그래밍 언어의 상기 데이터세트의 사양은 상기 제1 프로그래밍 언어의 상기 데이터세트의 관련된 유형에 대응하는 유형을 가짐-를 포함하는, 상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하는 단계를 포함하고, 여기서 상기 제4 프로그래밍 언어의 상기 하나 이상의 데이터세트들의 사양 중 적어도 하나는 입력 함수 또는 출력 함수를 가능하게 하는, 상제 제2 소프트웨어 사양을 처리하는 단계를 더 포함한다.
상기 결합된 표현을 형성하는 단계는 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현과 입력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 하나 이상의 데이터세트들의 사양들 사이의 연결들을 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이의 연결들로 대체하기 위해 하나 이상의 연결들을 형성하는 단계; 또는 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 입력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 하나 이상의 데이터세트들의 사양 사이의 연결들을 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현 사이의 연결들로 대체하기 위해 하나 이상의 연결들을 형성하는 단계 중 적어도 하나를 포함한다.
상기 방법은 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현에서 출력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 하나 이상의 데이터세트들을 보존하는 단계, 또는 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현에서 출력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 적어도 하나의 데이터세트들을 보존하는 단계를 더 포함한다.
상기 제1 소프트웨어 사양은 하나 이상의 데이터 변환 동작들을 포함하고 상기 제1 소프트웨어 사양을 분석하는 단계는 상기 하나 이상의 데이터 변환 동작들 중 적어도 일부를 식별하는 단계와 상기 식별된 데이터 변환 동작들을 상기 제4 프로그래밍 언어의 대응하는 데이터 변환 유형으로 분류하는 단계를 포함하고, 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 단계는, 상기 식별된 데이터 변환 동작들 각각에 대해, 상기 제4 프로그래밍 언어로 상기 데이터 변환 동작의 사양을 형성하는 단계-상기 제4 프로그래밍 언어의 상기 데이터 변환 동작의 사양은 상기 제1 프로그래밍 언어의 상기 식별된 데이터 변환 동작의 데이터 변환 유형에 대응하는 데이터 변환 동작을 가능하게 함-를 포함한다.
상기 제4 프로그래밍 언어의 상기 하나 이상의 데이터세트들의 사양들 중 적어도 하나가 읽기 전용 랜덤 액세스 데이터세트 유형을 가진다.
상기 제1 소프트웨어 사양의 상기 데이터세트의 관련된 유형을 결정하는 단계는 데이터세트 정의들의 파라미터들과 상기 데이터세트를 액세스하는 명령들을 분석하는 단계를 포함한다.
상기 파라미터들은 상기 데이터세트와 관련된 파일 구조, 상기 데이터세트와 관련된 액세스 모드, 상기 데이터세트를 오픈하기 위해 사용되는 모드, 및 입력-출력 동작들 중 하나 이상을 포함한다.
상기 방법은 저장 매체에 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 저장하는 단계를 더 포함한다.
상기 제1 소프트웨어 사양은 하나 이상의 데이터세트들과 상호작용하는 하나 이상의 데이터 처리 동작들을 정의하고, 상기 제2 소프트웨어 사양은 하나 이상의 데이터세트들과 상호작용하는 하나 이상의 데이터 처리 동작들을 정의한다.
상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양의 하나 이상의 데이터세트들과 상기 제2 소프트웨어 사양의 하나 이상의 데이터세트들 사이의 하나 이상의 데이터 관계들을 정의한다.
또 다른 측면에서, 일반적으로 소프트웨어가 소프트웨어 사양 번역을 위해, 컴퓨터 판독가능한 매체상에 비 일시적 형태로 저장된다. 상기 소프트웨어는 컴퓨팅 시스템이 제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양을 수신하도록 하고; 제2 프로그래밍 언어로 명시된 제2 소프트웨어 사양을 수신하도록 하고; 상기 제1 및 제2 프로그래밍 언어들과 다른 제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양을 수신하도록 하고 - 상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 적어도 하나의 데이터 관계들을 정의함-; 상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하도록 하고; 상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하도록 하고; 상기 하나 이상의 데이터 관계들을 식별하기 위해 상기 제3 소프트웨어 사양을 분석하도록 하고; 그리고 상기 식별된 하나 이상의 데이터 관계들에 따라 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 연결들을 형성하는 것을 포함하는 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 형성하도록 하는 명령들을 포함한다.
또 다른 측면에서, 일반적으로 소프트웨어 사양 번역을 위한 컴퓨팅 시스템은 소프트웨어 사양들을 수신하도록 구성된 입력 디바이스 또는 포트로서, 상기 소프트웨어 사양들은 제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양; 제2 프로그래밍 언어로 명시된 제2 소프트웨어 사양; 상기 제1 및 제2 프로그래밍 언어들과 다른 제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양 - 상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 제2 소프트웨어 사양 사이의 하나 이상의 데이터 관계들을 정의함 -을 포함하는, 소프트웨어 사양들을 수신하도록 구성된 입력 디바이스 또는 포트; 및 상기 수신된 소프트웨어 사양들을 처리하도록 구성된 적어도 하나의 프로세서로서, 상기 프로세서는 상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 것; 상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하는 것; 상기 적어도 하나의 데이터 관계들을 식별하기 위해 상기 제3 소프트웨어 사양을 분석하는 것; 및 상기 식별된 하나 이상의 데이터 관계들에 따라 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 연결들을 형성하는 것을 포함하는 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 형성하는 것을 포함하는, 상기 수신된 소프트웨어 사양들을 처리하도록 구성된 적어도 하나의 프로세서를 포함한다.
측면들은 다음 장점들 중 하나 이상을 포함할 수 있다.
상이한 프로그램 사양들 사이의 특정 데이터 관계들의 식별에 기초하여 프로그램을 변환하는 것은 데이터 처리 시스템에서와 같은, 다양한 컨텍스트(context)에서 더 효율적으로 실행될 수 있는 결합된 사양의 형성을 가능하게 한다. 예를 들어, 하나 이상의 절차적 프로그래밍 언어로 작성된 프로그램을 데이터플로(dataflow) 그래프 표현으로 변환함으로써, 구성요소 병행성(parallelism), 데이터 병행성, 및 파이프라인 병행성이 가능하게 된다. 구성요소 병행성에 대해, 데이터플로 그래프는 구성요소들 사이의 데이터의 흐름(또는 "데이터플로")을 나타내는 방향성 링크들에 의해 상호 연결된 여러 구성요소를 포함하고, 상기 데이터플로 그래프의 상이한 부분들의 구성요소들은 데이터의 별개 흐름들에서 동시에 실행할 수 있다. 데이터 병행성에 대해, 데이터플로 그래프는 세그먼트들(또는 "파티션들(partitions)")로 분할된 데이터를 처리하고 구성요소의 여러 인스턴스들(instances)이 동시에 각각의 세그먼트에 동작할 수 있다. 파이프라인 병행성에 대해, 업스트림 구성요소가 데이터를 그 데이터플로에 추가하고 다운스트림 구성요소가 그 데이터플로로부터 데이터를 수신할 때 데이터플로 링크에 의해 연결되는 데이터플로 그래프의 구성요소들이 동시에 실행할 수 있다.
절차적 프로그래밍 언어로 작성된 프로그램(또는 그 프로그램의 적어도 일부 부분들의 사양들)을 그 프로그램의 데이터플로 그래프 표현으로 변환하는 것은 상이한 서버들에서 데이터플로 그래프 표현의 상이한 구성요소들의 실행을 가능하게 할 수 있다.
(그것의 비-병행 본질에 기인하여) 절차적 프로그래밍 언어로 작성된 프로그램에 의해 요구될 수 있는 중간 데이터세트들은 그 프로그램의 데이터플로 그래프 표현으로 변환하고 데이터의 흐름들로 중간 데이터세트들을 대체하는 것에 의해 데이터플로 그래프로부터 제거될 수 있다. 일부 예에서, 중간 데이터세트들은 그 데이터플로 그래프를 통해 흐르는 데이터의 경로에서 중간 데이터세트들이 나오게 되고 그 데이터세트들을 사용하는 임의의 다른 프로그램들이 여전히 그 데이터세트에 포함된 데이터를 액세스할 수 있다는 것을 확인하기 위해 보존된다. 일부 예에서, 중간 데이터세트들을 제거하는 것은 저장과 I-O 트래픽 요구사항들을 감소시킬 수 있다.
하나 이상의 절차적 프로그래밍 언어들로 작성된 프로그램을 데이터플로 그래프 표현으로 변환하는 것은 그 프로그램을 통해 데이터 계통의 시각화를 가능하게 한다.데이터플로 프로그래밍 언어는 데이터베이스 유형에 무관하다. 따라서, 절차적 프로그래밍 언어로 작성된 프로그램을 그 프로그램의 데이터플로 그래프 표현으로 변환하는 것은 절차적 프로그래밍 언어로 작성된 바와 같이 그 프로그램에 의해 원래 지원되지 않았던 데이터베이스의 유형들과 함께 그 프로그램의 사용을 가능하게 할 수 있다. 즉, 접근방법들은 그 코드(예를 들어, JCL/COBOL 코드)의 입력들과 출력들을 소스들과 싱크들(sinks)의 많은 상이한 유형들에 연결될 수 있는 흐름들로 추출할 수 있다(예를 들어, 큐들(queues), 데이터베이스 테이블들, 파일들, 등).
절차적 프로그래밍 언어로 작성된 프로그램을 그 프로그램의 데이터플로 그래프 표현으로 변환하는 것은 재사용가능한 사용자 정의 데이터 유형들의 사용을 가능하게 할 수 있다. 데이터 유형들(즉, 메타데이터)과 스토리지 할당(storage allocation) 사이의 명확한 구별을 만들 수 없으나 대신에 데이터 부(Data Division)에서 두 개를 결합하는 COBOL 같은 일부 절차적 프로그래밍 언어에 비교될 때 유리하다. 본원에서 기술된 접근방법들은 COBOL 소스 코드로부터 메타데이터를 추출하고 재사용가능한 데이터 유형들(예를 들어, DML 데이터 유형들)과 유형 정의 파일들을 생성한다. 상기 재사용가능한 데이터 유형들과 유형 정의 파일들은 포트 및 룩업 파일 레코드 정의들에 대해서뿐만 아니라 절차적 변환의 맨 위에서 스토리지 할당에 대해서 사용될 수 있다. 일부 예에서, 상기 추출된 데이터세트들(예를 들어, JCL로부터의 데이터세트 메타데이터)과 함께 상기 추출된 데이터 유형들(예를 들어, COBOL로부터의 데이터 유형 메타데이터)이 또한 그 데이터의 포괄적인 설명으로 동일한 데이터세트를 액세스하는 여러 프로그램으로부터의 데이터의 부분적 설명들(즉, 부분 메타데이터)을 통합하는 데 사용될 수 있다.
하나 이상의 절차적 프로그래밍 언어들로 작성된 프로그램을 데이터플로 그래프 표현으로 변환하는 것은 데이터플로 그래프 기반 그래픽 개발 환경을 통해 그 프로그램의 단순화된 편집을 가능하게 한다.
본 발명의 다른 특징들과 장점들이 다음 설명으로부터, 그리고 청구항들로부터 명백해질 것이다.
도 1은 소프트웨어 번역 모듈을 포함하는 시스템의 블록도이다.
도 2는 소프트웨어 사양의 개략적인 예이다.
도 3은 최고 수준 소프트웨어 번역 모듈의 블록도이다.
도 4는 소프트웨어 번역 모듈의 블록도이다.
도 5는 데이터세트 함수들과 데이터세트 구조 유형들, 액세스 모드들, 및 오픈 모드들의 관련된 조합들의 테이블이다.
도 6은 제1 절차적 변환이다.
도 7은 제2 절차적 변환이다.
도 8은 제3 절차적 변환이다.
도 9는 프로그램의 데이터플로 그래프 표현이다.
도 10은 복합 데이터플로 그래프의 생성을 도시한다.
도 11은 도 3의 최고 수준 소프트웨어 번역 모듈의 동작 예이다.
도 12는 도 4의 소프트웨어 번역 모듈의 동작 예이다.
도 13은 복합 데이터플로 그래프이다.
도 1은 프로그램들이 본원에서 설명된 소스 코드 번역 기술들을 사용하여 번역될 수 있는 데이터 처리 시스템(100)의 예를 도시한다. 번역된 프로그램들은 데이터 처리 시스템(100)의 데이터 소스(102)로부터 데이터를 처리하기 위해 실행될 수 있다. 번역 모듈(120)은 입력으로 하나 이상의 절차적 프로그래밍 언어들의 제1 소프트웨어 사양(122)을 받아들이고 데이터플로 기반 프로그래밍 언어의 상기 제1 소프트웨어 사양(122)의 복합 데이터플로 그래프 표현(332)을 생성하기 위해 상기 소프트웨어 사양(122)을 처리한다. 상기 제1 소프트웨어 사양(122)의 데이터플로 그래프 표현(332)이 개발 환경(118) 내에서 시각적으로 제공될 수 있는, 데이터 스토리지 시스템(116)에 저장된다. 개발자(120)는 상기 개발 환경(118)을 사용하여 상기 제1 소프트웨어 사양(122)의 데이터플로 그래프 표현(332)을 검증하거나 및/또는 수정할 수 있다.
상기 시스템(100)은 스토리지 디바이스들 또는 온라인 데이터 스트림들에 대한 연결들과 같은 데이터의 하나 이상의 소스들을 포함할 수 있는 데이터 소스(102)를 포함하고, 그것들 각각은 다양한 형식들(예를 들어, 데이터베이스 테이블들, 스프레드시트 파일들, 플랫 텍스트 파일들(flat text files), 또는 메인프레임에 의해 사용되는 원시 형식(native format))중 임의의 것으로 데이터를 저장하거나 제공할 수 있다. 실행 환경(104)은 로딩 모듈(106)과 실행 모듈(112)을 포함한다. 상기 실행 환경(104)은 예를 들어, UNIX 운영 시스템 버전 같은, 적절한 운영 시스템의 제어하에 하나 이상의 범용 목적 컴퓨터상에 호스팅될 수 있다. 예를 들어, 상기 실행 환경(104)은 지역(예를 들어, 대칭적 멀티 프로세싱(SMP) 컴퓨터들 같은 멀티프로세서 시스템들) 또는 지역적으로 분산된(예를 들어, 클러스터들 또는 대량 병렬 처리(MPPs) 시스템들처럼 결합된 멀티 프로세서들), 또는 원격, 또는 원격적으로 분산된(예를 들어, 지역 네트워크(LAN) 및/또는 광역 네트워크(WAN)를 통해 결합된 멀티 프로세서들) 또는 그 임의의 조합인 여러 중앙 처리 유닛들(CPUs) 또는 프로세서 코어들을 사용하는 컴퓨터 시스템들의 구성을 포함하는 다중-노드 병렬 컴퓨팅 환경을 포함할 수 있다.
상기 로딩 모듈(106)은 데이터플로 그래프 표현(332)을, 데이터 소스(102)로부터의 데이터를 처리하기 위해 실행되는, 실행 모듈(112)로 로딩한다. 상기 데이터 소스(102)를 제공하는 스토리지 디바이스들은 예를 들어, 상기 실행 환경(104)을 호스팅하는 컴퓨터에 연결된 저장 매체 (예를 들어, 하드 디스크 드라이브(108)) 상에 저장되어, 실행 환경(104)에 지역적일 수 있거나, 예를 들어, 원격 연결을 통해(예를 들어, 클라우드 컴퓨팅 인프라스트럭처에 의해 제공됨), 상기 실행 환경(104)을 호스팅하는 컴퓨터와 통신하는 원격 시스템(예를 들어, 메인프레임(110)) 상에 호스팅되어, 상기 실행 환경(103)에 원격적일 수 있다. 실행 모듈(104)에 의해 실행되는 데이터플로 그래프 표현(332)은 데이터베이스 시스템들의 상이한 형태들을 포함하는, 데이터 소스(102)를 구현할 수 있는 다양한 유형의 시스템들로부터 데이터를 수신할 수 있다. 상기 데이터는 널(null) 값들을 포함할 수 있는, 각각의 필드들("속성들" 또는 "열들"이라고도 함)에 대한 값들을 가지는 레코드들("행들"이라고도 함)로 구성될 수 있다. 데이터 소스로부터의 데이터를 처음 판독할 때, 데이터플로 그래프 표현(332)은 일반적으로 그 데이터 소스의 레코드들에 대한 일부 초기 형식 정보로 시작한다. 일부 상황에서는, 상기 데이터 소스의 레코드 구조는 초기에 알려지지 않을 수 있고 대신에 상기 데이터 소스 또는 상기 데이터의 분석 후에 결정될 수 있다. 상기 레코드들에 대한 초기 정보는 예를 들어, 고유 값을 나타내는 비트들의 수, 레코드 내 필드들의 순서, 및 상기 비트들에 의해 나타내어지는 값들의 유형(예를 들어, 문자열, 부호있는/부호없는 정수)을 포함할 수 있다.
상기 데이터플로 그래프 표현(332)은 실행 환경(104)에 액세스 가능한 데이터 소스(102) 또는 데이터 스토리지 시스템(116)에 다시 저장될 수 있는, 또는 달리 사용될 수 있는 출력 데이터를 생성하도록 구성될 수 있다. 상기 데이터 스토리지 시스템(116)은 또한, 개발 환경(118)에 액세스 가능하다. 상기 개발 환경(118)은 일부 구현에서, 정점들 사이의 방향성 링크들(작업 요소들, 즉 데이터의 흐름들을 나타내는 "흐름들(flows)"이라고도 함)에 의해 연결되는 정점들(데이터 처리 구성요소들 또는 데이터세트들을 나타냄)을 포함하는 데이터플로 그래프들로서 어플리케이션들을 개발하기 위한 시스템이다. 예를 들어, 이러한 환경이 본원에서 참조로 원용되는 "그래프 기반 어플리케이션들에 대한 파라미터들 관리(Managing Parameters for Graph-Based Applications)"라는 타이틀의 US 공보 번호 2007/0011668에서 더 상세히 설명된다. 이러한 그래프 기반 연산들을 실행하기 위한 시스템이 본원에서 참조로 원용되는 "그래프들로 표현된 연산 실행(EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS)"이라는 타이틀의 US 특허 5,966,072에서 설명된다. 이 시스템에 따라 만들어진 데이터플로 그래프들은 프로세스들 사이에 정보를 이동하기 위해 그리고 상기 프로세스들의 실행 순서를 정의하기 위해, 그래프 구성요소들에 의해 나타내어지는 개별 프로세스들로 정보를 보내고 개별 프로세스들로부터 정보를 얻기 위한 방법들을 제공한다. 이 시스템은 임의의 사용 가능한 방법들(예를 들어, 그래프의 링크들에 따른 통신 경로들은 TCP/IP 또는 UNIX 도메인 소켓들을 사용할 수 있거나, 프로세스들 사이에서 데이터를 전달하기 위해 공유 메모리를 사용할 수 있음)로부터 프로세스 간 통신 방법들을 선택하는 알고리즘들을 포함한다.
1. 소프트웨어 사양
일부 예에서, 제1 소프트웨어 사양(122)이 C, C++, Java, C#, IBM의 Job Control Language (JCL), COBOL, Fortran, Assembly, 등과 같은 하나 이상의 절차적 텍스트 기반 프로그래밍 언어들을 사용하여 명시된다. 하기 예들 중 일부에 대해, 상기 소프트웨어 사양(122)은 JCL 스크립팅 언어를 사용하여 작성된 배치 처리 스크립트(batch processing script)와 COBOL 프로그래밍 언어를 사용하여 작성된 다수의 프로그램을 포함한다. JCL 스크립트는 COBOL 프로그램들을 참조하고 실행의 의사 기반 제어 흐름을 시행한다. 상기 제1 소프트웨어 사양(122)은 JCL과 COBOL 프로그래밍 언어들의 조합에 한정되지 않고, 프로그래밍 언어들의 이 조합은 단순히 번역 모듈(120)의 일 예시적 실시 예를 설명하는데 사용된다는 것을 이해해야 한다.
도 2를 참조하면, 도 1의 소프트웨어 사양(122)의 일 예의 개략적 보기는 그 중 일부가 COBOL 프로그램들(228)을 실행하는 다수의 단계들(230)을 포함하는, JCL 스크립트(226)를 포함한다. JCL 스크립트(226)의 다른 가능한 단계들이 본 설명을 단순화하기 위해 누락된다. COBOL 프로그램을 실행하는 JCL 스크립트의 각각의 단계는 COBOL 프로그램의 명칭(예를 들어, COBOL1)과 상기 COBOL 프로그램이 동작하는 데이터세트들을 명시한다. 예를 들어, JCL 스크립트의 단계 3은 "DS1.data"와 "DS2.data" 데이터세트들에 "COBOL1"이라 불리는 COBOL 프로그램을 실행한다. JCL 스크립트(226)에서, 주어진 COBOL 프로그램과 관련된 각각의 데이터세트가 파일 핸들("DD name"이라고도 함)에 할당된다. 예를 들어, 도 2에서, "DS1.data"가 파일 핸들 "A"에 할당되고 "DS2.data"가 파일 핸들 "B"에 할당된다. COBOL 프로그램들(228) 각각은 JCL 스크립트(226)에 의해 명시된 데이터세트들에 동작하기 위해 (COBOL 프로그래밍 언어로 작성된) 소스 코드를 포함한다. 주어진 데이터세트에 대한 파일 핸들(즉, 상기 DD name)은 상기 데이터세트를 식별하기 위해 COBOL 프로그램의 코드와 JCL 스크립트(226) 둘 다에 의해 사용되는 식별자이다.
동작에 있어서, 예를 들어, IBM 메인프레임 컴퓨터상에서 실행하는 종래 작업 스케줄러는 JCL 스크립트(226)를 액세스하고 순차적으로 (즉, 한 번에 하나씩) JCL 스크립트(226)에 의해 정의된 제어 흐름에 따라 상기 스크립트의 단계들(230)을 실행한다. 일반적으로, 입력 또는 출력 데이터세트들을 액세스하는 임의의 COBOL 프로그램들은 상기 데이터세트들을 저장하는 저장 매체(예를 들어, 단순히 "디스크"라고 불리는, 하드 디스크 드라이브 같은, 데이터 소스(102)의 저장 매체 또는 데이터 스토리지 시스템(116))로부터 판독하거나 그에 기록함으로써 그렇게 한다. 일반적으로, JCL 스크립트(226)에 의해 실행되는 각각의 COBOL 프로그램은 디스크로부터 그 입력 데이터 모두를 판독하고 JCL 스크립트로 다시 제어를 넘기기 전에 디스크에 그 출력 데이터 모두를 기록한다. 따라서, 입력 데이터에 대한 이전 단계들의 출력에 의존하는 임의의 스텝들은 일반적으로 디스크로부터 입력 데이터를 판독해야만 한다.
2. 번역 모듈
도 3을 참조하면, 도 1의 번역 모듈(120)의 일 예가 입력으로 JCL 스크립트(226)와 JCL 스크립트(226)에 의해 참조되는 COBOL 프로그램들(228)을 포함하는 소프트웨어 사양(122)을 수신하고 상기 제1 소프트웨어 사양(122)과 동일한 기능을 구현하고 도 1의 실행 환경(104)에 의해 사용 가능한 복합 데이터플로 그래프(332)를 생성하기 위해 소프트웨어 사양(122)을 처리한다. 번역 모듈(120)은 COBOL에서 데이터플로 그래프로의 번역기(334)와 복합 그래프 합성기(336)를 포함한다.
매우 일반적으로, COBOL에서 데이터플로 그래프로의 번역기(334)는 입력으로 COBOL 프로그램들(228)을 수신하고 각각의 COBOL 프로그램을 COBOL 프로그램의 별도 데이터플로 그래프 표현(338)으로 변환한다. 하기에 더 상세히 설명된 바와 같이, COBOL 프로그램의 각각의 데이터플로 그래프 표현(338)은 "절차적 변환" 구성요소로 불리는 데이터플로 그래프 구성요소와 0 이상의 데이터세트들 및/또는 다른 데이터플로 그래프 구성요소들을 포함한다. 상기 절차적 변환 구성요소는 절차적 변환 구성요소를 데이터세트들 및 COBOL 프로그램의 데이터플로 그래프 표현(338)의 다른 구성요소들에 연결하기 위해 입력 포트들과 출력 포트들 같은 포트들을 포함하고 COBOL 프로그램의 기능 중 일부 또는 모두를 수행한다. 일부 예에서, COBOL 프로그램의 데이터플로 그래프 표현은 COBOL 프로그램에 존재하는 명령어들과 유사한 데이터플로 그래프 구성요소들을 포함한다. 일부 예에서, COBOL 프로그램들의 데이터플로 그래프 표현들(338)이 COBOL 프로그램들의 데이터플로 그래프 표현(338) 인스턴스들과 다른 데이터플로 그래프 구성요소들(예를 들어, 도 3의 복합 데이터플로 그래프(332)의 다른 데이터플로 그래프 구성요소들) 사이의 흐름들을 형성하기 위한 입력 포트들과 출력 포트들을 가지는 "서브-그래프들"로 구현될 수 있다.
JCL 스크립트(226)와 COBOL 프로그램들의 데이터플로 그래프 표현들(338)이 COBOL 프로그램들과 임의의 다른 구성요소들 사이의 데이터 플로 상호연결들을 결정하기 위해 JCL 스크립트(226)를 분석하는, 복합 그래프 합성기(336)에 제공된다. 그런 다음 복합 그래프 합성기(336)는 결정된 데이터플로 상호연결들에 따른 흐름들을 사용하는 COBOL 프로그램들의 데이터플로 그래프 표현들(338)의 입력/출력 포트들을 연결하여 복합 데이터플로 그래프(332)를 합성한다. 복합 그래프 합성기(336)는 JCL의 이전 단계에 의해 기재되고 JCL의 이후 단계에 의해 판독되는 "중간" 데이터세트들을 식별함으로써 COBOL 프로그램들 사이의 데이터플로 상호연결들을 결정한다. 일부 예에서, 상기 중간 데이터세트들이 복합 데이터플로 그래프(332)의 구성요소들 사이의 데이터 플로들에 의해 제거되거나 대체될 수 있다. 파이프라인 병행성에 기인하여, 상당한 성능 개선들이 디스크에 기록하거나 디스크로부터 판독하는 중간 단계들을 수행하지 않고 데이터가 구성요소들 사이에서 직접 흐르도록 하여 달성될 수 있다. 상기에서 사용된 "제거된"이라는 용어는 반드시 중간 데이터세트가 삭제되는 것을 의미하지 않는다는 것에 유의한다. 일부 예에서, 중간 데이터세트가 데이터플로 그래프를 관류하는 데이터의 경로로부터 제외되나 중간 데이터세트에 의존하는 다른 프로그램들(예를 들어, 다른 JCL 스크립트들로부터 실행되는 것들)이 계속 그 데이터를 액세스할 수 있는 것을 보장하기 위해 여전히 디스크에 기록된다. (JCL이 사용 후 중간 파일들을 삭제하기 때문에) 중간 파일들이 전체적으로 제거되는 곳에서, 데이터플로 그래프 표현이 또한 저장 역량 요건을 낮출 것이다.
일부 예에서, 복합 데이터플로 그래프(332)에서 구성요소 병행성을 산출하면서, JCL 코드의 특정 단계들의 순차적 특성은 무시될 수 있다. 다른 예에서, 한 단계의 출력이 또 다른 단계에 입력으로 제공되는 단계들에 대해, 상기 단계들의 순차적 특성이, 파이프라인 병행성을 초래하면서, 흐름을 사용하는 단계들에 대해 각각의 구성요소들을 연결하여 보존된다.
2.1 COBOL 데이터플로 그래프 번역기
도 4를 참조하면, COBOL에서 데이터플로 그래프로의 번역기(334)의 구현의 상세한 블록도는 입력으로 다수의 COBOL 프로그램들(228)을 수신하고 상기 COBOL 프로그램들의 다수의 데이터플로 그래프 표현들(338)을 생성하기 위해 COBOL 프로그램들(228)을 처리한다. COBOL에서 데이터플로 그래프로의 번역기(334)는 COBOL 파서(440), 내부 구성요소 분석기(444), 데이터세트 함수 분석기(442), 메타데이터 분석기(441), SQL 분석기(443), 절차 분할 번역기(445), 및 서브-그래프 합성기(446)를 포함한다.
각각의 COBOL 프로그램(228)은 먼저 파스 트리(parse tree)를 생성하기 위해 COBOL 프로그램(228)을 파싱하는 COBOL 파서(440)에 제공된다. COBOL 파서(440)에 의해 생성된 파스 트리는 그런 다음 내부 구성요소 분석기(444), 데이터세트 함수 분석기(442), 메타데이터 분석기(441), 및 SQL 분석기(443)로 전달된다.
내부 구성요소 분석기(444)는 데이터플로 그래프 프로그래밍 언어의 유사한 데이터플로 그래프 구성요소를 가지는 프로그램 프로세스들을 식별하기 위해 파스 트리를 분석한다(예를 들어, 내부 정렬(internal sort)). 데이터플로 그래프 구성요소들로 변환될 수 있는 COBOL 동작들의 일부 예가 "내부 정렬"과 "내부 재순환(internal recirculate)" (임시 저장) 동작들이다. 내부 정렬 동작은 하기에 더 상세히 설명된 바와 같이, 주요 구성요소에 링크된 입력 포트와 출력 포트를 가지는, 정렬되지 않은 데이터의 흐름을 수신하는 입력 포트와 정렬된 데이터의 흐름을 제공하는 출력 포트를 가지는 구성요소에 대응한다. 내부 재순환 동작은 먼저 전체적으로 순차적으로 기록되고, 그런 다음 COBOL 프로그램 내에서 전체적으로 판독되는 중간 파일에 대응한다. 데이터세트 함수 분석기(444)의 출력은 COBOL 파스 트리에서 대응하는 위치들과 함께 식별된 동작들의 목록을 포함하는 내부 구성요소 결과(448)이다.
상기는 문(statement)이나 문들 및/또는 동작들의 순서가 식별될 수 있는 임의의 절차적 언어들에 적용 가능하고, 여기서 문들 및/또는 동작들이 입력 포트에서 흐름을 수신하고 출력 포트로부터 변환된 레코드들을 제공하는 구성요소 또는 서브-그래프에 대응하는 흐름에서 일련의 레코드들에 특정 변환을 수행한다.
데이터세트 함수 분석기(442)가 COBOL 프로그램(228)에 의해 액세스되는(예를 들어, 오픈되는, 생성되는, 기록되는, 또는 판독되는) 데이터 소스들 및 싱크들(예를 들어, 데이터세트들) 모두를 식별하기 위해 파스 트리를 분석하고 상기 COBOL 프로그램에 대해 데이터세트와 관련된 유형을 결정한다. 그러기 위해서, 데이터세트 함수 분석기(442)는 데이터세트를 액세스하는 COBOL 문들(예를 들어, OPEN, READ, WRITE, DELETE, 등)을 식별하고 분석한다. 일부 예에서, 데이터세트와 관련될 수 있는 가능한 유형들은 INPUT, OUTPUT, LOOKUP, 및 UPDATABLE LOOKUP을 포함한다. COBOL 정의들은 데이터세트에 대한 핸들 또는 데이터 세트의 경로, 데이터세트의 파일 구조, 및 데이터세트에 대한 액세스 모드를, Input-Output 문들로부터 결정된 파일 오픈 모드(들) 같은 부가적인 정보와 함께, 명시한다.
가능한 데이터세트 파일 구조들은 SEQUENTIAL, INDEXED, 및 RELATIVE를 포함한다. SEQUENTIAL 구조를 가지는 데이터세트는 순차적으로(즉, 레코드들이 데이터세트에 원래 기록되었던 순서로)만 액세스될 수 있는 레코드들을 포함한다. INDEXED 구조를 가지는 데이터세트는 각각 하나 이상의 인덱스 키(들)와 관련된 레코드들을 포함한다. INDEXED 데이터세트의 레코드들은 키를 사용하여 랜덤하게, 또는 파일의 임의의 주어진 위치로부터 순차적으로 액세스될 수 있다. RELATIVE 구조를 가지는 데이터세트는 각각의 슬롯이 빈(empty) 것으로 또는 레코드를 포함하는 것으로 표시되는 것 중 하나로 표시되는, 양의 정수의 번호가 매겨진 레코드 슬롯들을 가진다. RELATIVE 구조를 가지는 파일이 순차적으로 판독될 때, 빈 슬롯들은 스킵된다(skipped). RELATIVE 파일의 레코드들이 키로 슬롯 번호를 사용하여 직접 액세스될 수 있다. '파일 위치'의 개념은 세 가지 파일 구조들에 공통적이다.
가능한 액세스 모드들은 SEQUENTIAL, RANDOM, 및 DYNAMIC을 포함한다. SEQUENTIAL 액세스 모드는 데이터세트의 레코드들이 오름, 또는 내림 키 순서로 엔트리에서 순차적으로 액세스되는 것을 나타낸다. RANDOM 액세스 모드는 데이터세트의 레코드들이 레코드 식별 키를 사용하여 액세스되는 것을 나타낸다. DYNAMIC 액세스 모드는 레코드 식별 키를 사용하여, 또는 임의의 선택된 파일 위치로부터 순차적으로 직접 액세스될 수 있는 것을 나타낸다.
가능한 오픈 모드들(open modes)은 INPUT, OUTPUT, EXTEND, 및 I-O를 포함한다. INPUT 오픈 모드는 데이터세트가 입력 데이터세트로서 오픈되는 것을 나타낸다. OUTPUT 오픈 모드는 빈 데이터세트가 출력 데이터세트로 오픈되는 것을 나타낸다. EXTEND 오픈 모드는 기존의 레코드들을 포함하는 데이터세트가 새로운 레코드들이 추가되는 출력 데이터세트로 오픈되는 것을 나타낸다. I-O 오픈 모드는 데이터세트 오픈 모드가 입력 및 출력 데이터세트 동작들 둘 다를 지원하는 것을 나타낸다(이러한 동작들이 프로그램에 존재하는지 여부에 관계 없이).
데이터세트 함수 분석기(442)는 COBOL 프로그램에 대한 데이터세트와 관련된 함수를 결정하기 위해 COBOL 데이터세트 액세스 명령어의 파일 구조, 액세스 모드, 및 오픈 모드에 대한 규칙들의 다음 세트를 적용한다.
Figure 112016064815870-pct00001
OUTPUT 데이터세트들은 SEQUENTIAL, INDEXED, 또는 RELATIVE 구조, SEQUENTIAL, RANDOM, 또는 DYNAMIC 액세스 모드, 및 OUTPUT 또는 EXTEND 오픈 모드를 가지는 데이터세트들이다
Figure 112016064815870-pct00002
INPUT 데이터세트들은 INDEXED, RELATIVE, 또는 SEQUENTIAL 구조, SEQUENTIAL 액세스 모드, 및 INPUT 오픈 모드를 가지는 데이터세트들이다.
Figure 112016064815870-pct00003
LOOKUP 데이터세트들은 INDEXED 또는 RELATIVE 구조, RANDOM 또는 DYNAMIC 액세스 모드, 및 INPUT 오픈 모드를 가지는 데이터세트들이다.
Figure 112016064815870-pct00004
UPDATEABLE LOOKUP 데이터세트들은 INDEXED 또는 RELATIVE 구조, RANDOM 또는 DYNAMIC 액세스 모드, 및 I-O 오픈 모드를 가지는 데이터세트들이다.
일부 예에서, 파일의 "효율적인 오픈 모드"가 그 파일에 대한 실제 입력 및 출력 동작들을 카운트하여 결정될 수 있다. 예를 들어, 파일이 I-O 모드로 오픈되나, WRITE 동작들만 가지고 READ 또는 START 동작들을 가지지 않는다면, 상기 "효율적인 오픈 모드"가 EXTEND로 감소될 수 있다.
도 5를 참조하면, 테이블(501)은 데이터세트 구조, 액세스 모드, 및 오픈 모드의 서로 다른 조합들을 각각의 조합들과 관련된 데이터세트 함수와 함께 목록에 올린다.
도 4를 다시 참조하면, 데이터세트 함수 분석기(442)의 출력은 COBOL 프로그램의 그것들의 관련된 함수와 함께 COBOL 프로그램에 의해 액세스되는 모든 데이터세트들의 목록을 포함하는 데이터세트 함수 결과(450)이다.
메타데이터 분석기(441)는 메타데이터를 추출하고 재사용 가능한 데이터 유형들(예를 들어, DML 데이터 유형들)과 유형 정의 파일들을 생성하기 위해 파스 트리를 분석한다. 상기 재사용 가능한 데이터 유형들은 COBOL 프로그램의 스토리지 할당과 구별된다. 상기 메타데이터 분석기(441)의 출력은 데이터 유형 결과(447)이다.
SQL 분석기(443)는 COBOL 프로그램의 임베디드 구조의 질의어(embedded structured query language)(SQL) 코드(또는 단순하게 "임베디드 SQL")를 식별하기 위해 파스 트리를 분석한다. 임의의 식별된 임베디드 SQL은 데이터베이스 인터페이스 정보(449)로 처리된다. 데이터베이스를 액세스하기 위한 데이터베이스 어플리케이션 프로그래밍 인터페이스(API)는 데이터베이스 인터페이스 정보(449) 내에서 사용될 수 있는 프리미티브들(premitives)을 제공할 수 있다. 일부 예에서, 이러한 프리미티브들의 포함은 (예를 들어, 이진 연산들을 사용하여 연산되는 이진 형태로) 임베디드 SQL의 부분들을 컴파일하기 위해 특정 스키마를 사용하여 특정 데이터베이스를 액세스할 필요를 피한다. 대신에, 이러한 컴파일에 의해 제공될 수 있는 효율성 중 일부가 데이터베이스 인터페이스 정보(449) 내에 위치된 적절한 API 프리미티브들을 사용하여 실행시 임베디드 SQL을 해석할 수 있는 유연성에 대해 트레이드 오프될 수 있으며, 필요에 따라 잠재적으로 서로 다른 데이터베이스 및/또는 스키마를 사용한다.
COBOL 프로그램에 대한 파스 트리가 그런 다음 내부 구성요소 결과(448), 데이터세트 함수 결과(450), 데이터 유형 결과(447), 및 데이터베이스 인터페이스 정보 결과(449)와 함께 절차 분할 번역기(445)에 제공된다. 상기 절차 분할 번역기(445)는 COBOL 로직(logic)을 "절차적 변환" 데이터플로 그래프 구성요소(452)로 번역하기 위해 파스 트리를 분석한다. 일반적으로, 상기 절차적 변환 데이터플로 그래프 구성요소(452)는 COBOL 프로그램과 관련된 COBOL 로직 중 일부 또는 전부를 포함하는 컨테이너 유형 구성요소이고 각각 입력 데이터를 받아들이고 그 구성요소로부터의 출력 데이터를 제공하기 위해 입력 및 출력 포트들을 가진다. COBOL 코드가 서로 다른 프로그래밍 언어로부터의 코드를 포함하는 경우에(예를 들어, SQL 코드는 SQL 분석기(443)에 의해 식별되고 데이터베이스 인터페이스 정보 결과(449)에 제공된다), 절차 분할 번역기(445)는 절차적 변환 데이터플로 그래프 구성요소(452) 내의 임베디드 코드의 적절한 표현을 생성하기 위해 데이터베이스 인터페이스 정보 결과(449)를 사용한다. 일부 예에서, 절차 분할 번역기(445)는 임베디드 코드의 적절한 표현을 생성하기 위해 데이터베이스 API를 사용한다. 다른 예에서, 임베디드 SQL 테이블들과 커서들이 입력 테이블 구성요소들로 대체되어, 그에 의해 FETCH 동작들이 파일들에 대해 수행될 때 read_record(port_number) 호출들로 대체된다.
일부 예에서, 절차 분할 번역기(445)는 COBOL 프로그램의 절차 로직을 나타내는 데이터 조작 언어(DML) 코드를 포함하는 파일을 생성할 뿐이다. 서브-그래프 합성기(446)는 절차 분할 번역기(445)에 의해 생성되는 파일을 사용하는 절차적 변환 데이터플로 구성요소를 생성한다.
도 4와 상기 설명이 내부 구성요소 분석기(444), 데이터세트 함수 분석기(442), 메타데이터 분석기(441), 및 SQL 분석기(443)의 동작의 하나의 가능한 순서에 관련된다는 것에 유의한다. 그러나 분석기들의 동작의 순서가 상기 설명된 순서에 제한되지 않으며 분석기들의 동작의 다른 순서들도 가능하다.
도 6을 참조하면, "COBOL2"라는 타이틀의 절차적 변환 구성요소(554)의 하나의 단순한 예(즉, 도 2의 JCL 스크립트(226)의 단계 5에서 실행되는 COBOL 프로그램의 번역 결과)는 "in0"이라고 표시된 입력 포트(556), "out0"이라고 표시된 출력 포트(560), 및 "lu0"이라고 표시된 룩업 포트(lookup port)(562)를 가진다. 룩업 데이터세트들은 반드시 구성 요소 상의 포트를 통해 액세스되지 않으나 대신에 룩업 데이터세트 API를 사용하여 액세스될 수 있다는 것에 유의한다. 그러나 설명의 단순화를 위해, 룩업 데이터세트들이 룩업 포트를 통해 액세스되는 것으로 설명된다.
포트들 각각은 흐름을 통해 (JCL 스크립트(226)에 의해 식별되는 바와 같이) 그것들의 각각의 데이터세트들에 연결되도록 구성된다. 일부 예에서, 개발자는 예를 들어, 구성요소 위에서 시프트 더블 클릭 또는 정보 버블(information bubble)이 나타날 때까지 구성요소 위를 맴돌고 상기 정보 버블의 "변환" 링크를 클릭하여 절차적 변환 구성요소(554)의 기초가 되는 COBOL 코드의 DML 번역을 보고 편집할 수 있다.
도 7을 참조하면, 절차적 변환 구성요소(664)의 또 다른 예는 "COBOL1"이라는 타이틀의 COBOL 프로그램(즉, 도 2의 JCL 스크립트(226)의 단계 3에서 실행되는 COBOL 프로그램)이 정렬(sort) 명령어를 그 코드에 포함하는 상황을 도시한다. 이 상황에서, 내부 구성요소 분석기(448)는 정렬 명령어를 식별하고 상기 정렬 명령어와 관련된 정보를 절차 분할 번역기(445)로 전달한다. 상기 절차 분할 번역기(445)는 절차적 변환(664)과 관련된 코드의 상기 정렬 명령어를 전문화된 내부 정렬 서브-그래프에 대한 인터페이스로 대체하기 위해 내부 구성요소 분석기(448)로부터의 정보를 사용한다. 상기 서브-그래프 합성기(446)는 448에 의해 생성된 정렬 정보를 사용하고, 내부 정렬 데이터플로 서브-그래프 구성요소(666)로 정렬될 데이터를 제공하기 위해 절차적 변환(664)으로부터 출력 포트, out1과 내부 정렬 데이터플로 서브-그래프 구성요소(666)로부터 정렬된 데이터를 수신하기 위한 입력, in1을 생성한다.
도 8을 참조하면, 정렬 명령어를 포함하는 절차적 변환의 또 다른 유사한 예가 도시된다. 이 예에서는, 정렬될 데이터를 제공하기 위한 출력과 상기 정렬된 데이터를 수신하기 위한 입력을 가지는 단일 절차적 변환을 생성하기보다, 두 개의 절차적 변환들이 생성된다. 상기 두 개의 절차적 변환들 중 제1 절차적 변환(768)은 정렬될 데이터를 제공하기 위한 출력을 가지고 상기 두 개의 절차적 변환들 중 제2 절차적 변환(770)은 상기 정렬된 데이터를 수신하기 위한 입력을 가진다. 도시된 바와 같이, 일부 예에서 정렬 데이터플로 구성요소(766)는 서브-그래프 합성기(446)에 의해 두 개의 절차적 변환들(768,770) 사이에 자동으로 연결될 수 있다. 다른 예에서, 정렬 데이터플로 구성요소(766)는 두 개의 절차적 변환들(768,770) 사이에 수동으로 연결될 수 있다.
2.2 서브-그래프 합성기
도 4를 다시 참조하면, COBOL 프로그램에 대한 절차적 변환(452)이 내부 구성요소 결과(448), 데이터 함수 결과(450), 데이터 유형 결과(447), 및 데이터베이스 인터페이스 정보 결과(449)와 함께 서브-그래프 합성기(446)로 전달된다. 서브-그래프 합성기(446)는 COBOL 프로그램(228)에 대한 데이터플로 그래프 표현(338)을 생성하기 위해 입력들을 사용한다. 매우 일반적으로, 각각의 COBOL 프로그램(228)에 대해, 서브-그래프 합성기(446)는 COBOL 프로그램(228)에 대한 절차적 변환, COBOL 프로그램(228)과 관련된 데이터세트들, 및 내부 구성요소들 분석기(444)에 의해 식별되는 임의의 내부 구성요소들을 포함하는 데이터플로 그래프를 생성한다. 서브-그래프 합성기(446)는 그런 다음 데이터세트들, 내부 구성요소들, 및 절차적 변환(452) 사이의 흐름들을 적절하게 연결하기 위해 내부 구성요소 결과(448)와 데이터세트 함수 결과(450)를 사용한다. 서브-그래프 합성기(446)는 구성요소 포트들을 통해 흐르는 데이터를 설명하기 위해 데이터 유형 결과(447)를 사용한다. 도 9를 참조하면, COBOL1이라는 타이틀의 예시 COBOL 프로그램에 대한 데이터플로 그래프 표현(838)의 일 예는 데이터세트 DS1.data와 관련된 파일 핸들 "A"를 가지는 입력 파일로 흐름에 의해 연결된 in0으로 표시된 입력 포트, 데이터세트 DS2.data와 관련된 파일 핸들 "B"를 가지는 출력 파일로 흐름에 의해 연결되는 out0으로 표시된 출력 포트, 그리고 내부 정렬 구성요소(866)로 흐름들에 의해 연결된 출력 및 입력 포트들, out1 및 in1을 가지는 절차적 변환(864)을 포함한다.
2.3 복합 그래프 합성기
도 3을 다시 참조하면, COBOL 프로그램들의 데이터플로 그래프 표현(338)이 그런 다음 JCL 스크립트(226)와 함께 복합 그래프 합성기(336)로 전달된다. COBOL 프로그램들과 관련된 데이터세트들의 함수들과 함께 JCL 스크립트(226)의 COBOL 프로그램들의 실행 순서를 분석하여, 복합 그래프 합성기(336)는 COBOL코드의 데이터플로 그래프 표현들을 단일 복합 데이터플로 그래프(332)로 연결한다.
예를 들어, 도 10을 참조하면, COBOL2라는 타이틀의 COBOL 프로그램의 데이터플로 그래프 표현은 in0로 표시된 입력 포트에서 데이터세트 DS2.data와 관련된 입력 파일 "C"로부터 판독하고, lu0로 표시된 룩업 포트에서 DS3.data와 관련된 룩업 파일 "D"를 액세스하여 데이터를 강화하고, out0으로 표시된 출력 포트에서 데이터세트 DS4.data와 관련된 출력 파일 "E"에 기록한다. COBOL3라는 타이틀의 COBOL 프로그램의 데이터플로 그래프 표현은 두 개의 입력 데이터세트들 - in0으로 표시된 입력 포트에서 DS4.data와 관련된 "F" 및 in1으로 표시된 입력 포트에서 DS5.data와 관련된 "G" - 로부터 판독하고 out0로 표시된 출력 포트에서 DS6.data와 관련된 출력 데이터세트 "H"에 기록한다. 복합 그래프 합성기(336)는 COBOL2가 COBOL3 전에 실행되고, DS4.data가 COBOL2에 의해 출력되고 COBOL3에 의해 입력되어, COBOL2의 out0으로 표시된 출력 포트가 흐름에 의해 COBOL3의 in0라고 표시된 입력 포트로 연결될 수 있으며, 그에 의해 COBOL3가 디스크로부터 데이터세트 DS4.data를 판독할 필요를 제거하는 것을 결정하기 위해 JCL 스크립트(226) 정보를 COBOL 프로그램들의 번역에 의해 도출된 정보와 병합한다. 도 10은 복제 구성요소(933)를 통해 in0이라 표시된 COBOL3의 입력 포트와 out0이라고 표시된 COBOL2의 출력 포트를 연결하는 흐름과 함께 예시 복합 데이터플로 그래프(932)를 도시한다. 복제 구성요소(933)는 디스크의 DS4.data로 데이터를 기록하나 또한 데이터를 흐름을 통해 in0이라 표시된 COBOL3의 입력 포트로 직접 전달한다. 이런 방식으로, COBOL3는 디스크에 기록될 데이터세트 DS4.data를 기다릴 필요없이 COBOL2로부터의 나오는 데이터를 판독할 수 있고, JCL 스크립트(226)에 의해 삭제되지 않은, DS4.data에 저장된 데이터가 다른 프로세스들에 유용할 수 있다.
일부 예에서, JCL 절차가 그것이 생성된 후에 중간 데이터세트(예를 들어, 파일)를 삭제하지 않는다면, 상기 데이터세트가 실행 환경에서 실행되는 일부 다른 프로세스에 의해 사용되는 것이 가능하다. 이 경우의 예에서, 상기 중간 데이터세트가 (예를 들어, 상기 설명된 바와 같이 복제 구성요소를 사용하여) JCL 절차의 데이터플로 그래프 표현에 보존된다. 일부 예에서, JCL 절차가 그것이 생성된 후에 중간 데이터세트를 삭제한다면, 중간 데이터세트는 JCL 절차의 데이터플로 그래프 표현에서 완전히 제거되고 어떠한 복제 구성요소도 그에 대해 필요로 되지 않는다.
일부 예에서, 제1 소프트웨어 사양들이 동일한 데이터세트에 대해 대체 정의들을 사용했기 때문에, COBOL2 및 COBOL3 데이터플로 그래프들에 대해 상기 설명된 바와 같이, 흐름에 의해 연결된 포트들의 메타데이터는 동일하지 않을 수 있다. 복합 그래프 합성기(336)는 그런 다음 형식 재정의(Redefine Format) 구성요소를 상기 연결 흐름에 삽입할 수 있다. 이러한 형식 재정의 구성요소들의 존재가 후에 데이터세트 메타데이터를 통합하는데 사용될 수 있다. 메타데이터 정보가 각각의 데이터플로 그래프(338)에 대해 메타데이터 분석기(441)에 의해 도출된다.
3. 예시 동작
도 11을 참조하면, 번역 모듈(120)의 단순 동작 예가 입력으로 도 2의 JCL 스크립트(226)와 네 개의 COBOL 프로그램들(228)을 수신하고 복합 데이터플로 그래프(332)를 생성하도록 입력들을 처리한다.
번역 프로세스의 제1 단계에서, COBOL 프로그램들(228)은 COBOL 프로그램의 데이터플로 그래프 표현(338a-d)을 생성하도록 COBOL 프로그램들 각각을 처리하는, COBOL에서 데이터플로 그래프로의 번역기(334)에 제공된다. 제2 단계에서, JCL 스크립트(226)와 COBOL 프로그램들의 데이터플로 그래프 표현들(338a-d)이 복합 데이터플로 그래프(332)를 생성하도록 JCL 스크립트(226)와 COBOL 프로그램들의 데이터플로 그래프 표현들(338a-d)을 처리하는, 복합 그래프 합성기(336)에 제공된다.
도 12를 참조하면, COBOL에서 데이터플로 그래프로의 번역기(334)는 COBOL 파서(440), 내부 구성요소 분석기(444), 데이터세트 함수 분석기(442), 메타데이터 분석기(441), 및 SQL 분석기(443)를 사용하여 COBOL 프로그램들(228) 각각을 처리한다. COBOL 파서(440), 내부 구성요소 분석기(444), 데이터세트 함수 분석기(442), 메타데이터 분석기(441), 및 SQL 분석기(443)에 의해 생성되는 출력들이 COBOL 프로그램들 각각에 대한 데이터플로 그래프 표현들(338a-d)을 생성하는 서브-그래프 합성기(446)로의 그 출력과 함께, 절차 분할 번역기(445)로 제공된다.
JCL 스크립트(226)의 단계 3에서 실행되는 COBOL1 프로그램에 대해, 내부 구성요소 분석기(444)가 상기 프로그램이 내부 정렬 구성요소를 포함하는 것을 식별했다. 데이터세트 함수 분석기(442)는 COBOL1 프로그램이 하나의 입력 데이터세트 "A"와 하나의 출력 데이터세트 "B"를 액세스한 것을 식별했다. 식별된 내부 정렬 구성요소, 데이터세트들, 및 COBOL1 프로그램에 대한 절차적 변환에 대한 그것들의 관계들이 COBOL1 프로그램의 데이터플로 그래프 표현(338a)에 반영된다.
JCL 스크립트(226)의 단계 5에서 실행된 COBOL2 프로그램에 대해, 내부 구성요소 분석기(444)는 임의의 내부 구성요소들을 식별하지 않았고 SQL 분석기(443)는 임의의 임베디드 SQL 코드를 식별하지 않았다. 데이터세트 함수 분석기(442)는 COBOL2 프로그램이 하나의 데이터세트 "C"를 입력 데이터세트로, 또 다른 데이터세트 "E"를 출력 데이터세트로, 그리고 또 다른 데이터세트 "D"를 룩업 데이터세트로 액세스하는 것을 식별했다. 식별된 데이터세트들 및 COBOL2 프로그램에 대한 절차적 변환에 대한 그것들의 관계들이 COBOL2 프로그램의 데이터플로 그래프 표현(338b)에 반영된다.
JCL 스크립트(226)의 단계 6에서 실행된 COBOL3 프로그램에 대해, 내부 구성요소 분석기(444)는 임의의 내부 구성요소들을 식별하지 않았고 SQL 분석기(443)는 임의의 임베디드 SQL 코드를 식별하지 않았다. 데이터세트 함수 분석기(442)는 COBOL3 프로그램이 두 개의 데이터세트 "F" 및 "G"를 입력 데이터세트들로 그리고 하나의 데이터세트 "H"를 출력 데이터세트로 액세스하는 것을 식별했다. 식별된 데이터세트들 및 COBOL3 프로그램에 대한 절차적 변환에 대한 그것들의 관계들이 COBOL3 프로그램의 데이터플로 그래프 표현(338c)에 반영된다.
JCL 스크립트(226)의 단계 10에서 실행된 COBOL4 프로그램에 대해, 내부 구성요소 분석기(444)는 임의의 내부 구성요소들을 식별하지 않았고 SQL 분석기(443)는 임의의 임베디드 SQL 코드를 식별하지 않았다. 데이터 함수 분석기(442)는 COBOL4 프로그램이 하나의 데이터세트 "I"를 입력 데이터세트로 그리고 또 다른 데이터세트 "J"를 출력 데이터세트로 액세스하는 것을 식별했다. 식별된 데이터세트들 및 COBOL4 프로그램에 대한 절차적 변환에 대한 그것들의 관계들이 COBOL4 프로그램의 데이터플로 그래프 표현(338d)에 반영된다.
도 11을 다시 참조하면, JCL 스크립트(226)와 네 개의 COBOL 프로그램들의 데이터플로 그래프 표현들(338a-d)이 데이터플로 그래프 표현들(338a-d)을 단일 복합 그래프(332)로 연결하기 위해 JCL 스크립트(226)와 데이터플로 그래프 표현들(338a-d)를 분석하는 복합 그래프 합성기(336)에 제공된다. 도 13을 참조하면, 도 2의 JCL 스크립트(226) 및 네 개의 COBOL 프로그램들(228)에 대한 복합 그래프는 흐름들에 의해 상호 연결된 네 개의 절차적 변환들 COBOL1(452a), COBOL2(452b), COBOL3(452c), 및 COBOL4(452d)를 포함한다. 복제 구성요소들(933)은 다수의 중간 데이터세트들(즉, DS2.data, DS4.data, 및 DS5.data)을 따로 떼어 두는데(즉, 출력 데이터세트들로 기록함) 사용되며, 흐름들을 사용하여 구성요소들을 직접 연결한다.
4. 대안들
상기 설명이 단지 데이터플로 그래프 구성요소들로 번역되는 절차적 프로그래밍 언어로 작성된 프로그램의 동작들과 요소들의 제한된 수를 설명하는 한편, 일부 예에서, 원본 프로그램들(예를 들어, COBOL 프로그램들)의 소스 코드 모두가 데이터플로 그래프 표현으로 번역된다.
상기 설명된 시스템은 하나 이상의 절차적 프로그래밍 언어들의 임의의 조합을 포함하는 소프트웨어 사양을 상기 소프트웨어 사양의 데이터플로 그래프 표현으로 번역하는데 사용될 수 있다.
일부 예에서, 상기 설명된 번역 모듈이 처리할 준비가 되지 않은 번역 작업들을 접할 수 있다. 일부 예에서, 번역 모듈은 개발자가 수동으로 번역을 복구하기 위해 판독할 수 있고 사용할 수 있는 불완전한 번역 작업들의 목록을 출력한다.
상기 설명이 병렬로 실행될 때 COBOL에서 데이터플로 그래프로의 번역기(334)의 특정 모듈들을 설명하는 한편, 반드시 이와 같을 필요는 없다. 일부 예에서, 메타데이터 분석기(441)는 먼저 COBOL 파서(440)로부터 파스 트리를 수신한다. 메타데이터 분석기(441)는 파스 트리를 강화하고/하거나 단순화하고 그것을 데이터세트 함수 분석기(442)에 제공한다. 데이터 함수 분석기(442)는 파스 트리를 강화하고/하거나 단순화하고 그것을 SQL 분석기(443)에 제공한다. SQL 분석기(443)는 파스 트리를 강화하고/하거나 단순화하고 그것을 내부 구성요소 분석기(444)에 제공한다. 내부 구성요소 분석기(444)는 파스 트리를 강화하고/하거나 단순화하고 그것을 절차 분할 번역기(445)에 제공한다. 즉, 구성요소들이 연속적으로 파스 트리에서 작동한다.
5. 구현들
상기 설명된 소스 코드 번역 접근 방법은 예를 들어, 적절한 소프트웨어 명령들을 실행하는 프로그래머블 컴퓨팅 시스템을 사용하여 구현될 수 있거나 필드 프로그래머블 게이트 어레이(FPGA) 같은 적절한 하드웨어 또는 일부 하이브리드 형태로 구현될 수 있다. 예를 들어, 프로그램된 접근법에서 소프트웨어는 각각이 적어도 하나의 프로세서, 적어도 하나의 데이터 스토리지 시스템(휘발성 및/또는 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 사용자 인터페이스(적어도 하나의 입력 디바이스 또는 포트를 사용하여 입력을 수신하기 위한, 그리고 적어도 하나의 출력 디바이스 또는 포트를 사용하여 출력을 제공하기 위한)를 포함하는 하나 이상의 프로그램된 또는 프로그래머블 컴퓨팅 시스템(분산, 클라이언트/서버, 또는 그리드 같은 다양한 구조가 될 수 있음) 상에서 실행하는 하나 이상의 컴퓨터 프로그램들의 절차들을 포함할 수 있다. 소프트웨어는 예를 들어, 데이터플로 그래프의 디자인, 구성, 및 실행과 관련된 서비스들을 제공하는 더 큰 프로그램의 하나 이상의 모듈들을 포함할 수 있다. 상기 프로그램의 모듈들(예를 들어, 데이터플로 그래프의 요소들)은 데이터 저장소에 저장된 데이터 모델을 따르는 데이터 구조들 또는 다른 체계화된 데이터로 구현될 수 있다.
상기 소프트웨어는 (예를 들어 범용 또는 특별 목적 컴퓨팅 시스템 또는 디바이스에 의해 판독 가능한) CD-ROM 또는 다른 컴퓨터 판독 가능 매체 같은 유형의, 비 일시적인 매체상에 제공될 수 있거나 또는 그것이 실행되는 컴퓨팅 시스템의 유형의, 비 일시적 매체에 네트워크 통신 매체를 통해 (예를 들어, 전파 신호에 인코딩되어) 전달될 수 있다. 상기 처리의 일부 또는 전부는 특별 목적 컴퓨터상에서 또는 코프로세서(coprocessors) 또는 필드 프로그래머블 게이트 어레이(field-programmable gate array, FPGA), 또는 전용, 주문형 반도체(dedicated, application-specific integrated circuit, ASIC) 같은 특별 목적 하드웨어를 사용하여 수행될 수 있다. 상기 처리는 소프트웨어에 의해 명시된 계산의 다른 부분들이 다른 컴퓨팅 요소들에 의해 수행되는 분산 방식으로 실행될 수 있다. 각각의 이러한 컴퓨터 프로그램은 저장 장치 매체가 본원에서 기술된 처리를 수행하도록 컴퓨터에 의해 판독될 때 컴퓨터를 구성하고 작동하기 위해, 바람직하게는 범용 또는 특별 목적 프로그래머블 컴퓨터에 의해 액세스 가능한 저장 장치의 컴퓨터 판독 가능 저장 매체(예를 들어, 솔리드 스테이트 메모리(solid state memory) 또는 매체, 또는 자기 또는 광 매체)에 저장되거나 다운로드 된다. 본 발명 시스템은 또한 컴퓨터 프로그램으로 구성되는, 유형의, 비 일시적 매체로서 구현될 수 있고, 그렇게 구성된 매체는 컴퓨터가 본원에서 기술된 처리 단계들 중 하나 이상을 수행하도록 구체적이고 미리 정의된 방식으로 동작하게 한다.
본 발명의 다수의 실시 예가 기술되었다. 그럼에도 불구하고, 전술한 설명은 예시를 위한 것이며 다음의 청구항들의 범위에 의해 정의되는 본 발명의 범위를 한정하는 것이 아닌 것으로 이해되어야 한다. 따라서 다른 실시 예들이 또한 다음 청구항들의 범위 내에 있다. 예를 들어, 다양한 변형이 본 발명의 범위를 벗어남 없이 만들어질 수 있다. 부가적으로, 전술된 단계들의 일부는 순서 독립적이므로 기술된 것과 다른 순서로 수행될 수 있다.

Claims (21)

  1. 소프트웨어 사양 번역을 위한 방법에 있어서, 상기 방법은
    제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양을 수신하는 단계;
    제2 프로그래밍 언어로 명시된 제2 소프트웨어 사양을 수신하는 단계;
    상기 제1 및 제2 프로그래밍 언어들과 다른 제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양을 수신하는 단계 - 상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 적어도 하나의 데이터 관계들을 정의함 -;
    상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 단계;
    상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하는 단계;
    상기 적어도 하나의 데이터 관계들을 식별하기 위해 상기 제3 소프트웨어 사양을 분석하는 단계; 및
    상기 식별된 적어도 하나의 데이터 관계들에 따라 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 연결들을 형성하는 단계를 포함하는 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 형성하는 단계를 포함하는, 소프트웨어 사양 번역을 위한 방법.
  2. 제1항에 있어서,
    상기 제1 프로그래밍 언어는 절차적 프로그래밍 언어인, 소프트웨어 사양 번역을 위한 방법.
  3. 제2항에 있어서,
    상기 제4 프로그래밍 언어는 소프트웨어 사양의 서로 다른 부분들 사이의 병행성을 가능하게 하는, 소프트웨어 사양 번역을 위한 방법.
  4. 제3항에 있어서,
    상기 제4 프로그래밍 언어는
    소프트웨어 사양의 부분의 여러 인스턴스들이 입력 데이터 스트림의 서로 다른 부분들에서 동작하는 것을 가능하게 하는 제1 유형의 병행성; 및
    소프트웨어 사양의 서로 다른 부분들이 상기 입력 데이터 스트림의 서로 다른 부분들에서 동시에 실행하는 것을 가능하게 하는 제2 유형의 병행성을 포함하는 복수의 유형의 병행성을 가능하게 하는, 소프트웨어 사양 번역을 위한 방법.
  5. 제2항에 있어서,
    상기 제2 프로그래밍 언어는 절차적 프로그래밍 언어인, 소프트웨어 사양 번역을 위한 방법.
  6. 제2항에 있어서,
    상기 제2 프로그래밍 언어는 상기 제1 프로그래밍 언어와 동일한, 소프트웨어 사양 번역을 위한 방법.
  7. 제1항에 있어서,
    상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 상기 적어도 하나의 데이터 관계들은 제1 데이터세트로부터 데이터를 수신하는 상기 제1 소프트웨어 사양과 상기 제1 데이터세트에 데이터를 제공하는 상기 제2 소프트웨어 사양에 대응하는 적어도 하나의 데이터 관계를 포함하는, 소프트웨어 사양 번역을 위한 방법.
  8. 제1항에 있어서,
    상기 제4 프로그래밍 언어는 데이터플로 그래프 기반 프로그래밍 언어인, 소프트웨어 사양 번역을 위한 방법.
  9. 제8항에 있어서,
    상기 제4 프로그래밍 언어의 연결들은 데이터의 흐름들을 나타내는 방향성 링크들에 대응하는, 소프트웨어 사양 번역을 위한 방법.
  10. 제1항에 있어서,
    상기 제1 소프트웨어 사양은 적어도 하나의 데이터세트들 - 각각의 데이터세트는 상기 제1 소프트웨어 사양에서 복수의 데이터세트 유형들 중 관련된 데이터세트 유형을 가짐-과 상호작용하도록 구성되고, 상기 제2 소프트웨어 사양은 적어도 하나의 데이터세트들-각각의 데이터세트는 상기 제2 소프트웨어 사양에서 상기 복수의 데이터세트 유형들 중 관련된 데이터세트 유형을 가짐-과 상호작용하도록 구성되고, 상기 방법은
    상기 제1 소프트웨어 사양을 처리하는 단계로서,
    상기 제1 소프트웨어 사양의 적어도 하나의 데이터세트들을 식별하고, 그리고 상기 식별된 적어도 하나의 데이터세트들 각각에 대해, 상기 제1 소프트웨어 사양의 데이터세트의 관련된 유형을 결정하는 단계; 및
    상기 식별된 적어도 하나의 데이터세트들 각각에 대해, 상기 제4 프로그래밍 언어로 상기 데이터세트의 사양을 형성하는 단계-상기 제4 프로그래밍 언어의 상기 데이터세트의 사양은 상기 제1 프로그래밍 언어의 상기 데이터세트의 관련된 유형에 대응하는 유형을 가짐-를 포함하는, 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 단계를 포함하고,
    여기서 상기 제4 프로그래밍 언어의 상기 적어도 하나의 데이터세트들의 사양들 중 적어도 하나가 입력 데이터세트 유형 또는 출력 데이터세트 유형을 가지는, 상기 제1 소프트웨어 사양을 처리하는 단계; 및
    상기 제2 소프트웨어 사양을 처리하는 단계로서,
    상기 제2 소프트웨어 사양의 적어도 하나의 데이터세트들을 식별하고, 그리고 상기 식별된 적어도 하나의 데이터세트들 각각에 대해, 상기 제2 소프트웨어 사양의 상기 데이터세트의 관련된 유형을 결정하는 단계; 및
    상기 식별된 적어도 하나의 데이터세트들 각각에 대해, 상기 제4 프로그래밍 언어로 상기 데이터세트의 사양을 형성하는 단계-상기 제4 프로그래밍 언어의 상기 데이터세트의 사양은 상기 제1 프로그래밍 언어의 상기 데이터세트의 관련된 유형에 대응하는 유형을 가짐-를 포함하는, 상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하는 단계를 포함하고,
    여기서 상기 제4 프로그래밍 언어의 상기 적어도 하나의 데이터세트들의 사양 중 적어도 하나는 입력 함수 또는 출력 함수를 가능하게 하는, 상기 제2 소프트웨어 사양을 처리하는 단계를 더 포함하는, 소프트웨어 사양 번역을 위한 방법.
  11. 제10항에 있어서,
    상기 결합된 표현을 형성하는 단계는
    상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현과 입력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 적어도 하나의 데이터세트들의 사양들 사이의 연결들을 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이의 연결들로 대체하기 위해 적어도 하나의 연결들을 형성하는 단계; 또는
    상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 입력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 적어도 하나의 데이터세트들의 사양 사이의 연결들을 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현 사이의 연결들로 대체하기 위해 적어도 하나의 연결들을 형성하는 단계 중 적어도 하나를 포함하는, 소프트웨어 사양 번역을 위한 방법.
  12. 제11항에 있어서,
    상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현에서 출력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 적어도 하나의 데이터세트들을 보존하는 단계, 또는
    상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현에서 출력 함수들을 가능하게 하는 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 적어도 하나의 데이터세트들을 보존하는 단계를 더 포함하는, 소프트웨어 사양 번역을 위한 방법.
  13. 제10항에 있어서,
    상기 제1 소프트웨어 사양은 적어도 하나의 데이터 변환 동작들을 포함하고 상기 제1 소프트웨어 사양을 분석하는 단계는 상기 적어도 하나의 데이터 변환 동작들 중 적어도 일부를 식별하는 단계와 상기 식별된 데이터 변환 동작들을 상기 제4 프로그래밍 언어의 대응하는 데이터 변환 유형으로 분류하는 단계를 포함하고,
    상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 단계는, 상기 식별된 데이터 변환 동작들 각각에 대해, 상기 제4 프로그래밍 언어로 상기 데이터 변환 동작의 사양을 형성하는 단계-상기 제4 프로그래밍 언어의 상기 데이터 변환 동작의 사양은 상기 제1 프로그래밍 언어의 상기 식별된 데이터 변환 동작의 데이터 변환 유형에 대응하는 데이터 변환 동작을 가능하게 함-를 포함하는, 소프트웨어 사양 번역을 위한 방법.
  14. 제10항에 있어서,
    상기 제4 프로그래밍 언어의 상기 적어도 하나의 데이터세트들의 사양들 중 적어도 하나가 읽기 전용 랜덤 액세스 데이터세트 유형을 가지는, 소프트웨어 사양 번역을 위한 방법.
  15. 제10항에 있어서,
    상기 제1 소프트웨어 사양의 상기 데이터세트의 관련된 유형을 결정하는 단계는 데이터세트 정의들의 파라미터들과 상기 데이터세트를 액세스하는 명령들을 분석하는 단계를 포함하는, 소프트웨어 사양 번역을 위한 방법.
  16. 제15항에 있어서,
    상기 파라미터들은 상기 데이터세트와 관련된 파일 구조, 상기 데이터세트와 관련된 액세스 모드, 상기 데이터세트를 오픈하기 위해 사용되는 모드, 및 입력-출력 동작들 중 적어도 하나를 포함하는, 소프트웨어 사양 번역을 위한 방법.
  17. 제1항에 있어서,
    저장 매체에 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 저장하는 단계를 더 포함하는, 소프트웨어 사양 번역을 위한 방법.
  18. 제1항에 있어서,
    상기 제1 소프트웨어 사양은 적어도 하나의 데이터세트들과 상호작용하는 적어도 하나의 데이터 처리 동작들을 정의하고, 상기 제2 소프트웨어 사양은 적어도 하나의 데이터세트들과 상호작용하는 적어도 하나의 데이터 처리 동작들을 정의하는, 소프트웨어 사양 번역을 위한 방법.
  19. 제18항에 있어서,
    상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양의 적어도 하나의 데이터세트들과 상기 제2 소프트웨어 사양의 적어도 하나의 데이터세트들 사이의 적어도 하나의 데이터 관계들을 정의하는, 소프트웨어 사양 번역을 위한 방법.
  20. 소프트웨어 사양 번역을 위해, 컴퓨터 판독가능한 매체상에 비 일시적 형태로 저장된 소프트웨어에 있어서, 상기 소프트웨어는 컴퓨팅 시스템이
    제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양을 수신하도록 하고;
    제2 프로그래밍 언어로 명시된 제2 소프트웨어 사양을 수신하도록 하고;
    상기 제1 및 제2 프로그래밍 언어들과 다른 제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양을 수신하도록 하고 - 상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양 사이의 적어도 하나의 데이터 관계들을 정의함-;
    상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하도록 하고;
    상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하도록 하고;
    상기 적어도 하나의 데이터 관계들을 식별하기 위해 상기 제3 소프트웨어 사양을 분석하도록 하고; 그리고
    상기 식별된 적어도 하나의 데이터 관계들에 따라 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 연결들을 형성하는 것을 포함하는 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 형성하도록 하는 명령들을 포함하는, 컴퓨터 판독가능한 매체 상에 비 일시적 형태로 저장된 소프트웨어.
  21. 소프트웨어 사양 번역을 위한 컴퓨팅 시스템에 있어서, 상기 컴퓨팅 시스템은
    소프트웨어 사양들을 수신하도록 구성된 입력 디바이스 또는 포트로서, 상기 소프트웨어 사양들은
    제1 프로그래밍 언어로 명시된 제1 소프트웨어 사양;
    제2 프로그래밍 언어로 명시된 제2 소프트웨어 사양;
    상기 제1 및 제2 프로그래밍 언어들과 다른 제3 프로그래밍 언어로 명시된 제3 소프트웨어 사양 - 상기 제3 소프트웨어 사양은 상기 제1 소프트웨어 사양과 제2 소프트웨어 사양 사이의 적어도 하나의 데이터 관계들을 정의함 -을 포함하는, 소프트웨어 사양들을 수신하도록 구성된 입력 디바이스 또는 포트; 및
    상기 수신된 소프트웨어 사양들을 처리하도록 구성된 적어도 하나의 프로세서로서, 상기 프로세서는
    상기 제1, 제2, 및 제3 프로그래밍 언어들과 다른 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양의 표현을 형성하는 것;
    상기 제4 프로그래밍 언어로 상기 제2 소프트웨어 사양의 표현을 형성하는 것;
    상기 적어도 하나의 데이터 관계들을 식별하기 위해 상기 제3 소프트웨어 사양을 분석하는 것; 및
    상기 식별된 적어도 하나의 데이터 관계들에 따라 상기 제4 프로그래밍 언어의 상기 제1 소프트웨어 사양의 표현과 상기 제4 프로그래밍 언어의 상기 제2 소프트웨어 사양의 표현 사이에서 상기 제4 프로그래밍 언어로 연결들을 형성하는 것을 포함하는 상기 제4 프로그래밍 언어로 상기 제1 소프트웨어 사양과 상기 제2 소프트웨어 사양의 결합된 표현을 형성하는 것을 포함하는, 상기 수신된 소프트웨어 사양들을 처리하도록 구성된 적어도 하나의 프로세서를 포함하는 소프트웨어 사양 번역을 위한 컴퓨팅 시스템.
KR1020167017964A 2013-12-06 2014-12-08 소스 코드 번역 KR102186050B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361912594P 2013-12-06 2013-12-06
US61/912,594 2013-12-06
PCT/US2014/069027 WO2015085291A1 (en) 2013-12-06 2014-12-08 Source code translation

Publications (2)

Publication Number Publication Date
KR20160096137A KR20160096137A (ko) 2016-08-12
KR102186050B1 true KR102186050B1 (ko) 2020-12-03

Family

ID=52146763

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167017964A KR102186050B1 (ko) 2013-12-06 2014-12-08 소스 코드 번역

Country Status (8)

Country Link
US (4) US9891901B2 (ko)
EP (3) EP3373134B1 (ko)
JP (1) JP6454706B2 (ko)
KR (1) KR102186050B1 (ko)
CN (1) CN105793818B (ko)
AU (3) AU2014360106B2 (ko)
CA (2) CA3092699C (ko)
WO (1) WO2015085291A1 (ko)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108431766B (zh) * 2015-12-02 2022-05-17 速度公司 用于访问数据库的方法和系统
US10650046B2 (en) 2016-02-05 2020-05-12 Sas Institute Inc. Many task computing with distributed file system
US10795935B2 (en) 2016-02-05 2020-10-06 Sas Institute Inc. Automated generation of job flow definitions
US10642896B2 (en) 2016-02-05 2020-05-05 Sas Institute Inc. Handling of data sets during execution of task routines of multiple languages
CN107229616B (zh) * 2016-03-25 2020-10-16 阿里巴巴集团控股有限公司 语言识别方法、装置及系统
USD898059S1 (en) 2017-02-06 2020-10-06 Sas Institute Inc. Display screen or portion thereof with graphical user interface
WO2018165420A1 (en) * 2017-03-09 2018-09-13 Walmart Apollo, Llc Enterprise integration processing for mainframe cobol programs
US10534640B2 (en) * 2017-03-24 2020-01-14 Oracle International Corporation System and method for providing a native job control language execution engine in a rehosting platform
US10379825B2 (en) * 2017-05-22 2019-08-13 Ab Initio Technology Llc Automated dependency analyzer for heterogeneously programmed data processing system
USD898060S1 (en) 2017-06-05 2020-10-06 Sas Institute Inc. Display screen or portion thereof with graphical user interface
US10210240B2 (en) 2017-06-30 2019-02-19 Capital One Services, Llc Systems and methods for code parsing and lineage detection
US10223086B2 (en) * 2017-06-30 2019-03-05 Capital One Services, Llc Systems and methods for code parsing and lineage detection
CN107632833A (zh) * 2017-07-31 2018-01-26 广州神马移动信息科技有限公司 轻应用的生成方法、设备及电子设备
US10503498B2 (en) 2017-11-16 2019-12-10 Sas Institute Inc. Scalable cloud-based time series analysis
US10423396B1 (en) 2018-05-04 2019-09-24 Salesforce.Com, Inc. Transforming non-apex code to apex code
US10725745B2 (en) * 2018-05-24 2020-07-28 Walmart Apollo, Llc Systems and methods for polyglot analysis
CN110806877B (zh) * 2018-08-06 2024-04-16 北京京东尚科信息技术有限公司 编程文件结构化的方法、装置、介质及电子设备
US11093223B2 (en) * 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
US11068244B2 (en) * 2019-10-01 2021-07-20 Salesforce.Com, Inc. Optimized transpilation
US11440190B1 (en) * 2020-02-26 2022-09-13 Trend Micro Incorporated Detecting unsecure data flow in automation task programs
KR102326490B1 (ko) * 2020-03-25 2021-11-15 주식회사 티맥스 소프트 스텝 입출력 데이터 셋 파이프라이닝
TWI760880B (zh) * 2020-10-07 2022-04-11 瑞昱半導體股份有限公司 與儲存裝置相關的傳輸控制電路、資料傳輸系統及操作資料傳輸系統的方法
CN113157257B (zh) * 2021-04-12 2024-03-29 山东省城市商业银行合作联盟有限公司 针对银行系统的快速开发装置
US20230418566A1 (en) * 2022-06-22 2023-12-28 Amazon Technologies, Inc. Programmatically generating evaluation data sets for code generation models

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110276789A1 (en) 2010-05-04 2011-11-10 Google Inc. Parallel processing of data

Family Cites Families (143)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US521030A (en) 1894-06-05 de laval
US4586137A (en) * 1982-10-18 1986-04-29 Dresser Industries, Inc. Method for generating variable well logging data composites
JPH01108638A (ja) 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JP2738692B2 (ja) 1988-01-29 1998-04-08 株式会社日立製作所 並列化コンパイル方法
EP0347162A3 (en) * 1988-06-14 1990-09-12 Tektronix, Inc. Apparatus and methods for controlling data flow processes by generated instruction sequences
US5072371A (en) 1989-03-01 1991-12-10 The United States Of America As Represented By The United States Department Of Energy Method for simultaneous overlapped communications between neighboring processors in a multiple
US5121494A (en) 1989-10-05 1992-06-09 Ibm Corporation Joining two database relations on a common field in a parallel relational database field
US5257366A (en) * 1990-03-27 1993-10-26 International Business Machines Corporation Query language execution on heterogeneous database servers using a bind-file bridge between application and database languages
US5367619A (en) 1990-04-27 1994-11-22 Eaton Corporation Electronic data entry system employing an expert system to facilitate generation of electronic data forms with complex interrelationships between fields and subforms
US5347639A (en) 1991-07-15 1994-09-13 International Business Machines Corporation Self-parallelizing computer system and method
US5632022A (en) 1991-11-13 1997-05-20 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Encyclopedia of software components
US5313584A (en) 1991-11-25 1994-05-17 Unisys Corporation Multiple I/O processor system
JPH05257709A (ja) 1992-03-16 1993-10-08 Hitachi Ltd 並列化判別方法およびそれを用いた並列化支援方法
US5432940A (en) 1992-11-02 1995-07-11 Borland International, Inc. System and methods for improved computer-based training
US5574898A (en) 1993-01-08 1996-11-12 Atria Software, Inc. Dynamic software version auditor which monitors a process to provide a list of objects that are accessed
US5446915A (en) 1993-05-25 1995-08-29 Intel Corporation Parallel processing system virtual connection method and apparatus with protection and flow control
US5475842A (en) 1993-08-11 1995-12-12 Xerox Corporation Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution
US5600833A (en) 1993-09-17 1997-02-04 Digital Equipment Corp. Attribute portion based document retrieval system with system query language interface
JP4050339B2 (ja) 1994-04-28 2008-02-20 株式会社東芝 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
US5588150A (en) 1994-09-29 1996-12-24 International Business Machines Corporation Push down optimization in a distributed, multi-database system
US5768564A (en) 1994-10-07 1998-06-16 Tandem Computers Incorporated Method and apparatus for translating source code from one high-level computer language to another
FI98690C (fi) 1994-10-18 1997-07-25 Nokia Telecommunications Oy Menetelmä alueryhmäpuhelun muodostamiseksi matkaviestinjärjestelmässä ja matkaviestinjärjestelmä
US5734886A (en) 1994-11-16 1998-03-31 Lucent Technologies Inc. Database dependency resolution method and system for identifying related data files
FI98973C (fi) 1994-11-22 1997-09-10 Nokia Telecommunications Oy Menetelmä ryhmätietojen ylläpitämiseksi matkaviestinjärjestelmässä ja matkaviestinjärjestelmä
US5619692A (en) 1995-02-17 1997-04-08 International Business Machines Corporation Semantic optimization of query order requirements using order detection by normalization in a query compiler system
US5546576A (en) 1995-02-17 1996-08-13 International Business Machines Corporation Query optimizer system that detects and prevents mutating table violations of database integrity in a query before execution plan generation
FI100215B (fi) 1995-03-17 1997-10-15 Nokia Telecommunications Oy Matkaviestijärjestelmän tilaajatietojen päivittäminen
US5706509A (en) 1995-04-28 1998-01-06 Intel Corporation Application independent record level synchronization
US5678044A (en) * 1995-06-02 1997-10-14 Electronic Data Systems Corporation System and method for improved rehosting of software systems
US5682537A (en) 1995-08-31 1997-10-28 Unisys Corporation Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system
US5712971A (en) 1995-12-11 1998-01-27 Ab Initio Software Corporation Methods and systems for reconstructing the state of a computation
US5819021A (en) 1995-12-11 1998-10-06 Ab Initio Software Corporation Overpartitioning system and method for increasing checkpoints in component-based parallel applications
KR100200095B1 (ko) 1995-12-30 1999-06-15 윤종용 디지탈 컨버젼스를 이용한 화면 이펙트 방법 및회로
US5909681A (en) 1996-03-25 1999-06-01 Torrent Systems, Inc. Computer system and computerized method for partitioning data for parallel processing
US6311265B1 (en) 1996-03-25 2001-10-30 Torrent Systems, Inc. Apparatuses and methods for programming parallel computers
US5799149A (en) 1996-06-17 1998-08-25 International Business Machines Corporation System partitioning for massively parallel processors
US5870743A (en) 1996-06-24 1999-02-09 Oracle Corporation Method and apparatus for parallelizing operations that create a table
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
JPH10232875A (ja) 1997-02-19 1998-09-02 Hitachi Ltd データベース管理方法および並列データベース管理システム
US6330008B1 (en) 1997-02-24 2001-12-11 Torrent Systems, Inc. Apparatuses and methods for monitoring performance of parallel computing
US5999729A (en) 1997-03-06 1999-12-07 Continuum Software, Inc. System and method for developing computer programs for execution on parallel processing systems
US5956074A (en) 1997-03-11 1999-09-21 Sclafani; Peter J. Cable television return display unit
JP3155991B2 (ja) 1997-04-09 2001-04-16 日本アイ・ビー・エム株式会社 集約演算実行方法及びコンピュータ・システム
US6092062A (en) 1997-06-30 2000-07-18 International Business Machines Corporation Relational database query optimization to perform query evaluation plan, pruning based on the partition properties
US6077313A (en) 1997-10-22 2000-06-20 Microsoft Corporation Type partitioned dataflow analyses
US6295518B1 (en) 1997-12-09 2001-09-25 Mci Communications Corporation System and method for emulating telecommunications network devices
US6266804B1 (en) 1997-12-23 2001-07-24 Ab Initio Software Corporation Method for analyzing capacity of parallel processing systems
JPH11327884A (ja) * 1998-05-12 1999-11-30 Hitachi Ltd 既存システム処理情報を再構成し利用するシステム
US6625593B1 (en) 1998-06-29 2003-09-23 International Business Machines Corporation Parallel query optimization strategies for replicated and partitioned tables
US6205465B1 (en) 1998-07-22 2001-03-20 Cisco Technology, Inc. Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information
US6453464B1 (en) 1998-09-03 2002-09-17 Legacyj. Corp., Inc. Method and apparatus for converting COBOL to Java
US6378126B2 (en) 1998-09-29 2002-04-23 International Business Machines Corporation Compilation of embedded language statements in a source code program
JP2000148699A (ja) 1998-11-06 2000-05-30 Nec Corp ネットワークマネージメントシステム
JP4406944B2 (ja) 1998-11-11 2010-02-03 株式会社日立製作所 計算機システム及び問合せに対する処理分散システム
US7047232B1 (en) 1999-01-13 2006-05-16 Ab Initio Software Corporation Parallelizing applications of script-driven tools
US7080062B1 (en) 1999-05-18 2006-07-18 International Business Machines Corporation Optimizing database queries using query execution plans derived from automatic summary table determining cost based queries
US6560593B1 (en) 1999-07-20 2003-05-06 Computer Associates Think, Inc. Method and apparatus for viewing the effect of changes to an index for a database table on an optimization plan for a database query
JP4552242B2 (ja) 1999-10-06 2010-09-29 株式会社日立製作所 仮想表インタフェースと該インタフェースを用いた問合せ処理システム及び方法
US6615203B1 (en) 1999-12-17 2003-09-02 International Business Machines Corporation Method, computer program product, and system for pushdown analysis during query plan generation
US6947934B1 (en) 2000-02-16 2005-09-20 International Business Machines Corporation Aggregate predicates and search in a database management system
US6836883B1 (en) 2000-06-21 2004-12-28 Microsoft Corporation Method and system for compiling multiple languages
US7164422B1 (en) 2000-07-28 2007-01-16 Ab Initio Software Corporation Parameterized graphs with conditional components
US7225444B1 (en) * 2000-09-29 2007-05-29 Ncr Corp. Method and apparatus for performing parallel data operations
US6785668B1 (en) 2000-11-28 2004-08-31 Sas Institute Inc. System and method for data flow analysis of complex data filters
US7000213B2 (en) * 2001-01-26 2006-02-14 Northwestern University Method and apparatus for automatically generating hardware from algorithms described in MATLAB
US8412746B2 (en) 2001-05-25 2013-04-02 International Business Machines Corporation Method and system for federated querying of data sources
US6877000B2 (en) 2001-08-22 2005-04-05 International Business Machines Corporation Tool for converting SQL queries into portable ODBC
JP4791660B2 (ja) * 2001-08-23 2011-10-12 日立公共システムエンジニアリング株式会社 データフロー自動生成装置とデータフロー自動生成方法およびコンピュータ読み取り可能な記録媒体
US6725212B2 (en) 2001-08-31 2004-04-20 International Business Machines Corporation Platform-independent method and system for graphically presenting the evaluation of a query in a database management system
JP2003099441A (ja) 2001-09-21 2003-04-04 Hitachi Ltd データ検索手順探索方法
US6915290B2 (en) 2001-12-11 2005-07-05 International Business Machines Corporation Database query optimization apparatus and method that represents queries as graphs
US7409474B2 (en) 2002-06-27 2008-08-05 Broadcom Corporation Method and system for rate adaptation
US7167850B2 (en) 2002-10-10 2007-01-23 Ab Initio Software Corporation Startup and control of graph-based computation
US7076772B2 (en) 2003-02-26 2006-07-11 Bea Systems, Inc. System and method for multi-language extensible compiler framework
US7953891B2 (en) 2003-03-18 2011-05-31 Microsoft Corporation Systems and methods for scheduling data flow execution based on an arbitrary graph describing the desired data flow
CA2429910A1 (en) 2003-05-27 2004-11-27 Cognos Incorporated System and method of query transformation
US7249120B2 (en) 2003-06-27 2007-07-24 Microsoft Corporation Method and apparatus for selecting candidate statistics to estimate the selectivity value of the conditional selectivity expression in optimize queries based on a set of predicates that each reference a set of relational database tables
US20050038788A1 (en) 2003-08-14 2005-02-17 International Business Machines Corporation Annotation security to prevent the divulgence of sensitive information
US20050177557A1 (en) 2003-09-06 2005-08-11 Oracle International Corporation Automatic prevention of run-away query execution
US7702610B2 (en) 2003-09-19 2010-04-20 Netezza Corporation Performing sequence analysis as a multipart plan storing intermediate results as a relation
US7133861B2 (en) 2003-12-04 2006-11-07 International Business Machines Corporation Query access plan rebuilds
US7930432B2 (en) 2004-05-24 2011-04-19 Microsoft Corporation Systems and methods for distributing a workplan for data flow execution based on an arbitrary graph describing the desired data flow
US7899833B2 (en) 2004-11-02 2011-03-01 Ab Initio Technology Llc Managing related data objects
US7461052B2 (en) 2004-12-06 2008-12-02 International Business Machines Corporation Abstract query plan
US7890532B2 (en) 2004-12-15 2011-02-15 Microsoft Corporation Complex data access
US7359922B2 (en) 2004-12-22 2008-04-15 Ianywhere Solutions, Inc. Database system and methodology for generalized order optimization
USD521030S1 (en) 2005-04-29 2006-05-16 Hussman Corporation Canopy for a refrigerated display case
US20060265362A1 (en) 2005-05-18 2006-11-23 Content Analyst Company, Llc Federated queries and combined text and relational data
US7856523B2 (en) 2005-06-01 2010-12-21 Microsoft Corporation Random Access Memory (RAM) based Content Addressable Memory (CAM) management
US7584205B2 (en) 2005-06-27 2009-09-01 Ab Initio Technology Llc Aggregating data with complex operations
US7877350B2 (en) 2005-06-27 2011-01-25 Ab Initio Technology Llc Managing metadata for graph-based computations
US7716630B2 (en) 2005-06-27 2010-05-11 Ab Initio Technology Llc Managing parameters for graph-based computations
US20070067274A1 (en) 2005-09-16 2007-03-22 International Business Machines Corporation Hybrid push-down/pull-up of unions with expensive operations in a federated query processor
WO2007061430A1 (en) 2005-11-22 2007-05-31 Bea Systems, Inc. System and method for translating sql queries into xml query language
US20070214179A1 (en) 2006-03-10 2007-09-13 Khanh Hoang Searching, filtering, creating, displaying, and managing entity relationships across multiple data hierarchies through a user interface
US7464084B2 (en) 2006-01-30 2008-12-09 International Business Machines Corporation Method for performing an inexact query transformation in a heterogeneous environment
US7945562B2 (en) 2006-03-15 2011-05-17 Oracle International Corporation Join predicate push-down optimizations
EP2016489A4 (en) 2006-03-30 2009-05-06 Atostek Oy METHOD FOR GENERATING PARALLEL PROGRAMS
US7870556B2 (en) 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
EP2527983A3 (en) 2006-08-10 2013-06-12 Ab Initio Technology LLC Distributing services in graph-based computations
JP4872529B2 (ja) * 2006-08-22 2012-02-08 株式会社日立製作所 リバースエンジニアリング支援方法
JP2008158664A (ja) * 2006-12-21 2008-07-10 Sony Corp 通信システム、サーバ、通信端末及び通信方法
US7983897B2 (en) 2007-02-14 2011-07-19 Google Inc. Machine translation feedback
US8069129B2 (en) 2007-04-10 2011-11-29 Ab Initio Technology Llc Editing and compiling business rules
US8122088B2 (en) 2007-06-28 2012-02-21 International Business Machines Corporation Adding personal note capabilities to text exchange clients
US20100005077A1 (en) 2008-07-07 2010-01-07 Kickfire, Inc. Methods and systems for generating query plans that are compatible for execution in hardware
US9424315B2 (en) 2007-08-27 2016-08-23 Teradata Us, Inc. Methods and systems for run-time scheduling database operations that are executed in hardware
CA2698265C (en) 2007-09-20 2017-08-29 Craig W. Stanfill Managing data flows in graph-based computations
US8495602B2 (en) * 2007-09-28 2013-07-23 Qualcomm Incorporated Shader compile system and method
US8527976B2 (en) 2007-11-14 2013-09-03 Nec Laboratories America, Inc. System and method for generating error traces for concurrency bugs
CN101436192B (zh) 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
EP2235627A1 (en) * 2007-12-07 2010-10-06 Krass, Maren Using function calls as compiler directives
US20090198703A1 (en) 2008-01-31 2009-08-06 Hewlett-Packard Development Company, L.P. Intelligent data storage system
US7933916B2 (en) 2008-02-28 2011-04-26 Microsoft Corporation Querying nonSQL data stores with a SQL-style language
US8537160B2 (en) 2008-03-05 2013-09-17 Microsoft Corporation Generating distributed dataflow graphs
JP2009217405A (ja) 2008-03-07 2009-09-24 Nec Corp ジョブネットワーク自動生成方式及びプログラム
US8538985B2 (en) 2008-03-11 2013-09-17 International Business Machines Corporation Efficient processing of queries in federated database systems
US20100295833A1 (en) 2008-04-11 2010-11-25 Masaaki Nishio Display device and method of driving display device
US7974967B2 (en) 2008-04-15 2011-07-05 Sap Ag Hybrid database system using runtime reconfigurable hardware
US20100057695A1 (en) 2008-08-28 2010-03-04 Microsoft Corporation Post-processing search results on a client computer
US7917463B2 (en) 2008-10-10 2011-03-29 Business.Com, Inc. System and method for data warehousing and analytics on a distributed file system
US20100121868A1 (en) 2008-11-07 2010-05-13 Yann Le Biannic Converting a database query to a multi-dimensional expression query
CA2750279C (en) 2009-02-13 2019-03-26 Ab Initio Technology Llc Managing task execution
US8392398B2 (en) 2009-07-29 2013-03-05 International Business Machines Corporation Query optimization over graph data streams
CN101645074A (zh) * 2009-09-07 2010-02-10 浪潮集团山东通用软件有限公司 一种访问不同类型关系型数据库的方法
EP2478433A4 (en) * 2009-09-16 2016-09-21 Ab Initio Technology Llc MAPPING DATA SET ELEMENTS
US9064047B2 (en) * 2009-09-24 2015-06-23 International Business Machines Corporation Parallel processing of ETL jobs involving extensible markup language documents
US8620903B2 (en) 2009-11-04 2013-12-31 Nec Laboratories America, Inc. Database distribution system and methods for scale-out applications
US9665620B2 (en) 2010-01-15 2017-05-30 Ab Initio Technology Llc Managing data queries
EP3287896B1 (en) * 2010-06-15 2023-04-26 Ab Initio Technology LLC Dynamically loading graph-based computations
US8326821B2 (en) 2010-08-25 2012-12-04 International Business Machines Corporation Transforming relational queries into stream processing
US8782619B2 (en) 2010-10-26 2014-07-15 Oracle International Corporation Extending programming language semantics while maintaining standard syntax through aliasing
US8850574B1 (en) * 2011-02-28 2014-09-30 Google Inc. Safe self-modifying code
US8640112B2 (en) * 2011-03-30 2014-01-28 National Instruments Corporation Vectorizing combinations of program operations
KR101088834B1 (ko) 2011-04-12 2011-12-06 디에스알 주식회사 크레인용 합성섬유 로프 및 이의 제조방법
US8782081B2 (en) 2011-05-11 2014-07-15 Google Inc. Query template definition and transformation
US9449030B2 (en) 2011-06-30 2016-09-20 International Business Machines Corporation Method for native program to inherit same transaction content when invoked by primary program running in separate environment
US9317551B1 (en) 2012-03-23 2016-04-19 The Mathworks, Inc. Transforming a search query into a format understood by a technical computing environment (TCE)-based search engine
US9182957B2 (en) * 2012-07-10 2015-11-10 Loring Craymer Method and system for automated improvement of parallelism in program compilation
EP2877943B1 (en) * 2012-07-24 2021-03-03 AB Initio Technology LLC Mapping entities in data models
US9135301B2 (en) 2013-03-14 2015-09-15 Oracle International Corporation Pushdown of sorting and set operations (union, intersection, minus) to a large number of low-power cores in a heterogeneous system
US9292373B2 (en) * 2013-03-15 2016-03-22 International Business Machines Corporation Query rewrites for data-intensive applications in presence of run-time errors
US9633104B2 (en) 2013-05-03 2017-04-25 Sas Institute Inc. Methods and systems to operate on group-by sets with high cardinality

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110276789A1 (en) 2010-05-04 2011-11-10 Google Inc. Parallel processing of data

Also Published As

Publication number Publication date
AU2014360106B2 (en) 2019-05-23
AU2019213447A1 (en) 2019-09-05
US20180165078A1 (en) 2018-06-14
CN105793818A (zh) 2016-07-20
US20150160934A1 (en) 2015-06-11
KR20160096137A (ko) 2016-08-12
WO2015085291A1 (en) 2015-06-11
EP3077904B1 (en) 2018-04-11
US11106440B2 (en) 2021-08-31
JP2017502385A (ja) 2017-01-19
US9891901B2 (en) 2018-02-13
US10282181B2 (en) 2019-05-07
EP3373134B1 (en) 2020-07-22
AU2019213447B2 (en) 2020-05-14
EP3726375A1 (en) 2020-10-21
EP3077904A1 (en) 2016-10-12
EP3373134A1 (en) 2018-09-12
CA2929716C (en) 2021-08-31
US20180165077A1 (en) 2018-06-14
JP6454706B2 (ja) 2019-01-16
AU2014360106A1 (en) 2016-05-26
AU2020203491A1 (en) 2020-06-18
CN105793818B (zh) 2019-09-17
EP3726375B1 (en) 2023-02-01
US10289396B2 (en) 2019-05-14
US20200073645A1 (en) 2020-03-05
CA3092699C (en) 2023-07-25
CA3092699A1 (en) 2015-06-11
CA2929716A1 (en) 2015-06-11
AU2020203491B2 (en) 2021-11-04

Similar Documents

Publication Publication Date Title
KR102186050B1 (ko) 소스 코드 번역
US10521427B2 (en) Managing data queries
US11593369B2 (en) Managing data queries
CA2966541C (en) Impact analysis
US10671669B2 (en) Sub-graph interface generation
US20120102029A1 (en) Managing data set objects
US20100175049A1 (en) Scope: a structured computations optimized for parallel execution script language
Jayalath et al. Efficient Geo-distributed data processing with rout

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right