KR101528225B1 - 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치 - Google Patents

테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치 Download PDF

Info

Publication number
KR101528225B1
KR101528225B1 KR1020130139808A KR20130139808A KR101528225B1 KR 101528225 B1 KR101528225 B1 KR 101528225B1 KR 1020130139808 A KR1020130139808 A KR 1020130139808A KR 20130139808 A KR20130139808 A KR 20130139808A KR 101528225 B1 KR101528225 B1 KR 101528225B1
Authority
KR
South Korea
Prior art keywords
module
output
input
test
determining whether
Prior art date
Application number
KR1020130139808A
Other languages
English (en)
Other versions
KR20150057025A (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 재단법인 한국형수치예보모델개발사업단
Priority to KR1020130139808A priority Critical patent/KR101528225B1/ko
Publication of KR20150057025A publication Critical patent/KR20150057025A/ko
Application granted granted Critical
Publication of KR101528225B1 publication Critical patent/KR101528225B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법은, 복수의 계산유닛을 포함하는 계산부 및 상기 계산부와 전기적으로 연결되는 메모리를 포함하는 하드웨어 장치가, NetCDF 입력 모듈, 병렬 입출력입력 모듈, 모델 주입력 모듈 및 모델 전체격자 입력 모듈을 포함하는 수치일기예보모델의 입력 모듈을 검증하는 방법에 있어서, 상기 수치일기예보모델의 입력 모듈 코드를 제공받는다. 상기 입력 모듈 코드가 상기 병렬 입출력입력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단한다. 상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성한다. 상기 입력 모듈 코드가 상기 NetCDF 입력 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단한다. 상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성한다. 상기 입력 모듈 코드가 상기 모델 주입력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단한다. 상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성한다. 상기 입력 모듈 코드가 상기 모델 전체격자 입력 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단한다. 상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성한다. 상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고 및 제4 결과 보고를 포함하는 최종 결과 보고서를 생성한다.

Description

테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치{AUTOMATED INPUT-OUTPUT MODULE VERIFICATION METHOD OF NUMERICAL WEATHER PREDICTION MODEL BASED ON TEST-DRIVEN DEVELOPMENT METHOD AND HARDWARE DEVICE PERFORMING THE SAME}
본 발명은 수치일기예보모델의 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치에 관한 것으로, 보다 상세하게는 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치에 관한 것이다.
수치일기예보모델(numerical weather prediction model)은 현재 또는 과거의 일기 조건으로부터 미래의 날씨를 예측하기 위해 대기 및 해양의 역학 방정식, 물리 모수화식 등을 계산하는 수학적 모델이다. 수치일기예보모델의 중요한 구성요소인 역학 코어(dynamic core)부는, 대기 중의 바람, 온도, 기압, 습도, 엔트로피 등의 물리량들을 다수의 편미분 관계식을 포함한 지배 방정식으로 기술(describe)하며, 상기 지배 방정식의 해를 수치적으로 풀이하는 부분이다.
상기 수치일기예보모델은 초기 일기자료 또는 관측 자료 등을 입력받아 소정의 기간에 대한 수치 적분(integration)을 수행하여, 특정한 시각에서의 일기장을 산출할 수 있다. 이를 위해, 상기 수치일기예보모델은 복수의 프로그래밍 모듈(이하, 모듈 이라 한다)을 포함할 수 있는데, 예를 들어, 상기 역학 코어부로 기능하는 역학 코어 모듈과, 상기 초기 일기자료 등에 관련된 자료동화 모듈과, 상기 역학 코어부에 대한 파라미터들을 제공하는 물리 모수화 모듈과, 상기 자료동화 모듈 및 물리 모수화 모듈 등에 대한 입출력과 관련되는 입출력 모듈 등을 포함할 수 있다. 상기 수치일기예보모델 및 이에 포함된 상기 입출력 모듈은, 제공되는 데이터의 자료구조 및 포맷에 따라 원하는 기능을 수행하기 위한 계층적인 구조를 갖는 복수의 세부 모듈들을 포함할 수 있다.
이와 같이, 상기 수치일기예보모델은 다수의 복잡한 모듈들이 조합되어 최종적으로 원하는 일기장 데이터를 산출하므로, 상기 모듈들 중 어느 하나의 모듈이 오류를 포함하는 경우, 상기 오류가 어느 모듈의 어느 부분에서 발생했는지 구체적으로 탐색하는데 많은 시간과 노력이 소요되는 문제가 있다.
이에 본 발명의 기술적 과제는 이러한 점에서 착안된 것으로, 본 발명의 목적은 계층적 구조를 갖는 수치일기예보모델의 입출력 모듈에 포함되는 복수의 세부 모듈들이 각각 정상적으로 동작하는지 테스트 주도 개발법에 기초하여 검증할 수 있는, 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 제공하는 것이다.
또한, 본 발명의 다른 목적은, 상기 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 수행하는 하드웨어 장치를 제공하는 것이다.
상기한 본 발명의 목적을 실현하기 위한 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법은, 복수의 계산유닛을 포함하는 계산부 및 상기 계산부와 전기적으로 연결되는 메모리를 포함하는 하드웨어 장치가, NetCDF 입력 모듈, 병렬 입출력입력 모듈, 모델 주입력 모듈 및 모델 전체격자 입력 모듈을 포함하는 수치일기예보모델의 입력 모듈을 검증하는 방법에 있어서, 상기 수치일기예보모델의 입력 모듈 코드를 제공받는다. 상기 입력 모듈 코드가 상기 병렬 입출력입력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단한다. 상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성한다. 상기 입력 모듈 코드가 상기 NetCDF 입력 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단한다. 상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성한다. 상기 입력 모듈 코드가 상기 모델 주입력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단한다. 상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성한다. 상기 입력 모듈 코드가 상기 모델 전체격자 입력 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단한다. 상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성한다. 상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고 및 제4 결과 보고를 포함하는 최종 결과 보고서를 생성한다.
본 발명의 일 실시예에 있어서, 상기 제1 모듈 테스트는, 병렬 입출력 라이브러리의 입력을 위해 상기 입력 모듈 코드의 병렬 입출력입력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 초기화된 병렬 입출력입력 모듈부에 포함되는, 미리 설정된 경로의 제1 입력 파일이 열리는지를 판단하는 제2 단위 테스트; 병렬 조건 하에서 상기 제1 입력 파일에 데이터 분할 정보가 설정되는지를 판단하는 제3 단위 테스트; 상기 제1 입력 파일의 변수가 독출되는지를 판단하는 제4 단위 테스트; 상기 제1 입력 파일이 닫히는지를 판단하는 제5 단위 테스트; 및 상기 병렬 입출력 라이브러리가 종료되는지를 판단하는 제6 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제2 모듈 테스트는, 상기 입력 모듈 코드의 NetCDF 입력 모듈부에 포함된, 미리 설정된 경로의 NetCDF 포맷의 제2 입력 파일이 열리는지를 판단하는 제1 단위 테스트; 상기 제2 입력 파일의 헤더 정보가 로드되는지를 판단하는 제2 단위 테스트; 상기 제2 입력 파일의 변수가 독출되는지를 판단하는 제3 단위 테스트; 및 상기 제2 입력 파일이 닫히는지를 판단하는 제4 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제3 모듈 테스트는, 상기 입력 모듈 코드의 모델 주입력 모듈부에 따라 병렬 입출력-입력 형식의 제3 입력 파일이 입력되는지를 판단하는 제1 단위 테스트; 상기 입력 모듈 코드의 모델 주입력 모듈부에 따라 NetCDF 포맷의 제4 입력 파일이 입력되는지를 판단하는 제2 단위 테스트; 및 병렬 조건 하에서, 상기 제3 입력 파일 또는 제4 입력 파일에 포함된, 미리 설정된 변수에 대한 고유 입출력(unique I/O) 방식의 읽기(read) 또는 배포(broadcast) 방식의 읽기가 선택적으로 수행되는지를 판단하는 제3 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제4 모듈 테스트는, 상기 입력 모듈 코드의 모델 전체격자 입력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 입력 모듈 코드의 모델 전체격자 입력 모듈부에 따라, 육면체구 좌표계의 격자를 사용하는 제5 입력 파일이 열리는지를 판단하는 제2 단위 테스트; 상기 제5 입력 파일의 변수가 독출되는지를 판단하는 제3 단위 테스트; 및 상기 입력 모듈 코드의 모델 전체격자 입력 모듈이 종료되는지를 판단하는 제4 단위 테스트를 포함할 수 있다.
상기한 본 발명의 목적을 실현하기 위한 다른 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법은, 복수의 계산유닛을 포함하는 계산부 및 상기 계산부와 전기적으로 연결되는 메모리를 포함하는 하드웨어 장치가, 병렬 입출력출력 모듈, 모델 출력변수 저장 모듈, 모델 주출력 모듈, 모델 격자 출력 메타데이터 관리 모듈, 모델 전체격자 출력 모듈 및 모델 격자 주출력 모듈을 포함하는 수치일기예보모델의 출력 모듈을 검증하는 방법에 있어서, 상기 수치일기예보모델의 출력 모듈 코드를 제공받는다. 상기 출력 모듈 코드가 상기 병렬 입출력출력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단한다. 상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성한다. 상기 출력 모듈 코드가 상기 모델 출력변수 저장 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단한다. 상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성한다. 상기 출력 모듈 코드가 상기 모델 주출력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단한다. 상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성한다. 상기 출력 모듈 코드가 상기 모델 격자 출력 메타데이터 관리 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단한다. 상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성한다. 상기 출력 모듈 코드가 상기 모델 전체격자 출력 모듈의 설계를 위한 제5 모듈 테스트를 통과하는지 판단한다. 상기 제5 모듈 테스트에 대한 제5 결과 보고를 생성한다. 상기 출력 모듈 코드가 상기 모델 격자 주출력 모듈의 설계를 위한 제6 모듈 테스트를 통과하는지 판단한다. 상기 제6 모듈 테스트에 대한 제6 결과 보고를 생성한다. 상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고, 제4 결과 보고, 제5 결과 보고 및 제6 결과 보고를 포함하는 최종 결과 보고서를 생성한다.
본 발명의 일 실시예에 있어서, 상기 제1 모듈 테스트는, 병렬 입출력 라이브러리의 출력을 위해 상기 출력 모듈 코드의 병렬 입출력출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 초기화된 병렬 입출력출력 모듈부에 포함되는 미리 설정된 경로에, 제1 출력 파일이 생성되는지를 판단하는 제2 단위 테스트; 상기 제1 출력 파일이 열리는지를 판단하는 제3 단위 테스트; 병렬 조건 하에서 상기 제1 출력 파일에 제1 데이터 분할 정보가 설정되는지를 판단하는 제4 단위 테스트; 미리 설정된 제1 차원 정보가 상기 제1 출력 파일에 생성되는지를 판단하는 제5 단위 테스트; 미리 설정된 제1 변수 정보가 상기 제1 출력 파일에 생성되는지를 판단하는 제6 단위 테스트; 상기 제1 변수 정보에 포함되는 제1 변수가 상기 제1 출력 파일에서 출력되는지를 판단하는 제7 단위 테스트; 상기 제1 출력 파일이 닫히는지를 판단하는 제8 단위 테스트; 및 상기 병렬 입출력 라이브러리가 종료되는지를 판단하는 제9 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제2 모듈 테스트는, 상기 출력 모듈 코드의 모델 출력변수 저장 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 초기화된 모델 출력변수 저장 모듈부에 따라 미리 설정된 변수 등록소(repository)에 제2 변수가 추가되는지를 판단하는 제2 단위 테스트; 상기 변수 등록소에서 상기 제2 변수가 삭제되는지를 판단하는 제3 단위 테스트; 상기 변수 등록소에 등록(register)된 변수 목록에 따라 상기 변수 등록소가 소정의 메모리 영역에 설정되는지를 판단하는 제4 단위 테스트; 상기 메모리 영역에 설정된 변수 등록소가 상기 메모리 영역에서 해제되는지를 판단하는 제5 단위 테스트; 및 상기 출력 모듈 코드의 모델 출력변수 저장 모듈부가 종료되는지를 판단하는 제6 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제3 모듈 테스트는, 상기 출력 모듈 코드의 모델 주출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 모델 주출력 모듈부에 따라 제2 출력 파일이 생성되는지를 판단하는 제2 단위 테스트; 상기 제2 출력 파일이 열리는지를 판단하는 제3 단위 테스트; 상기 제1 출력 파일의 제1 차원 정보 및 제1 변수 정보가, 상기 제2 출력 파일의 제2 차원 정보 및 제2 변수 정보에 대응되는지를 판단하는 제4 단위 테스트; 미리 설정된 제3 차원 정보가 상기 제2 출력 파일에 생성되는지를 판단하는 제5 단위 테스트; 미리 설정된 제3 변수 정보가 상기 제2 출력 파일에 생성되는지를 판단하는 제6 단위 테스트; 병렬 조건 하에서 상기 제2 출력 파일에 제2 데이터 분할 정보가 설정되는지를 판단하는 제7 단위 테스트; 미리 설정된 제4 변수의 값이 상기 제2 출력 파일에 출력되는지를 판단하는 제8 단위 테스트; 상기 제2 출력 파일이 닫히는지를 판단하는 제9 단위 테스트; 및 상기 모델 주출력 모듈부가 종료되는지를 판단하는 제10 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제4 모듈 테스트는, 상기 출력 모듈 코드의 출력 변수 메타데이터 저장부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 출력 변수 메타데이터 저장부에 미리 설정된 제1 출력 변수가 등록되는지를 판단하는 제2 단위 테스트; 미리 설정된 제2 출력 변수의 정보가 상기 출력 변수 메타데이터 저장부로부터 제공되는지를 판단하는 제3 단위 테스트; 및 상기 출력 변수 메타데이터 저장부가 종료되는지를 판단하는 제4 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제5 모듈 테스트는, 육면체구 좌표계의 격자 출력을 위해, 상기 출력 모듈 코드의 모델 전체격자 출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 육면체구 좌표계의 격자를 사용하는 제3 출력 파일이 생성되는지를 판단하는 제2 단위 테스트; 상기 제3 출력 파일이 열리는지를 판단하는 제3 단위 테스트; 상기 육면체구 좌표계의 좌표 정보가 상기 제3 출력 파일에 생성되는지를 판단하는 제4 단위 테스트; 병렬 조건 하에서 상기 제3 출력 파일에 상기 육면체구 좌표계 상의 제3 데이터 분할 정보가 설정되는지를 판단하는 제5 단위 테스트; 미리 설정된 제5 변수의 값이 상기 제3 출력 파일에 출력되는지를 판단하는 제6 단위 테스트; 및 상기 모델 전체격자 출력 모듈부가 종료되는지를 판단하는 제7 단위 테스트를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 제6 모듈 테스트는, 상기 출력 모듈 코드의 모델 격자 주출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트; 상기 모델 격자 주출력 모듈부에 따라, 상기 수치일기예보모델의 역학 코어부의 출력을 위한, 설정 파일을 포함한 복수의 출력 파일들에 대한 정보가 설정되는지를 판단하는 제2 단위 테스트; 미리 설정된 시간 정보에 따라 상기 출력 파일들에 대한 파일명 및 레코드 번호가 생성되는지를 판단하는 제3 단위 테스트; 상기 설정 파일에 따라, 미리 설정된 복수의 출력 변수들이 상기 출력 파일들에 출력되는지를 판단하는 제4 단위 테스트; 및 상기 모델 격자 주출력 모듈부가 종료되는지를 판단하는 제5 단위 테스트를 포함할 수 있다.
상기한 본 발명의 다른 목적을 실현하기 위한 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 수행하는 하드웨어 장치는, NetCDF 입력 모듈, 병렬 입출력입력 모듈, 모델 주입력 모듈 및 모델 전체격자 입력 모듈을 포함하는 수치일기예보모델의 입력 모듈을 검증하기 위하여, 상기 수치일기예보모델의 입력 모듈 코드를 제공받는 메모리; 및 상기 제공된 입력 모듈 코드에 대하여, 상기 입력 모듈 코드가 상기 병렬 입출력입력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단하여, 상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성하고, 상기 입력 모듈 코드가 상기 NetCDF 입력 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단하여, 상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성하며, 상기 입력 모듈 코드가 상기 모델 주입력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단하여, 상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성하고, 상기 입력 모듈 코드가 상기 모델 전체격자 입력 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단하여, 상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성하며, 상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고 및 제4 결과 보고를 포함하는 최종 결과 보고서를 생성하는 계산부를 포함한다.
본 발명의 일 실시예에 있어서, 상기 NetCDF 입력 모듈, 상기 병렬 입출력입력 모듈, 상기 모델 주입력 모듈 및 상기 모델 전체격자 입력 모듈은, 상기 모델 주입력 모듈이 상기 NetCDF 입력 모듈 및 상기 병렬 입출력-입력 모듈을 참조하고, 상기 모델 전체격자 입력 모듈이 상기 모델 주입력 모듈을 참조하는 계층 구조를 가질 수 있다.
상기한 본 발명의 다른 목적을 실현하기 위한 다른 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 수행하는 하드웨어 장치는, 병렬 입출력출력 모듈, 모델 출력변수 저장 모듈, 모델 주출력 모듈, 모델 격자 출력 메타데이터 관리 모듈, 모델 전체격자 출력 모듈 및 모델 격자 주출력 모듈을 포함하는 수치일기예보모델의 출력 모듈을 검증하기 위하여, 상기 수치일기예보모델의 출력 모듈 코드를 제공받는 메모리; 및 상기 제공된 출력 모듈 코드에 대하여, 상기 출력 모듈 코드가 상기 병렬 입출력출력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단하여, 상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성하고, 상기 출력 모듈 코드가 상기 모델 출력변수 저장 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단하여, 상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성하고, 상기 출력 모듈 코드가 상기 모델 주출력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단하여, 상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성하고, 상기 출력 모듈 코드가 상기 모델 격자 출력 메타데이터 관리 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단하여, 상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성하고, 상기 출력 모듈 코드가 상기 모델 전체격자 출력 모듈의 설계를 위한 제5 모듈 테스트를 통과하는지 판단하여, 상기 제5 모듈 테스트에 대한 제5 결과 보고를 생성하고, 상기 출력 모듈 코드가 상기 모델 격자 주출력 모듈의 설계를 위한 제6 모듈 테스트를 통과하는지 판단하여, 상기 제6 모듈 테스트에 대한 제6 결과 보고를 생성하며, 상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고, 제4 결과 보고, 제5 결과 보고 및 제6 결과 보고를 포함하는 최종 결과 보고서를 생성하는 계산부를 포함한다.
본 발명의 일 실시예에 있어서, 상기 병렬 입출력출력 모듈, 상기 모델 출력변수 저장 모듈, 상기 모델 주출력 모듈, 상기 모델 격자 출력 메타데이터 관리 모듈, 상기 모델 전체격자 출력 모듈 및 상기 모델 격자 주출력 모듈은, 상기 모델 주출력 모듈이 상기 병렬 입출력-출력 모듈을 참조하고, 상기 모델 전체격자 출력 모듈이 상기 모델 주출력 모듈을 참조하며, 상기 모델 격자 주출력 모듈이 상기 모델 전체격자 출력 모듈, 상기 모델 격자 출력 메타데이터 관리 모듈 및 상기 모델 출력변수 저장 모듈을 참조하는 계층 구조를 가질 수 있다.
본 발명의 실시예들에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치에 따르면, 계층적 구조를 갖는 수치일기예보모델의 입출력 모듈에 포함되는 복수의 세부 모듈들이 각각 정상적으로 동작하는지 판단하는 복수의 단위 테스트들을 상기 계층적 구조에 따라 순차적으로 수행함으로써, 수치일기예보모델의 입출력 모듈이 실행될 때 발생할 수 있는 오류의 원인을 용이하게 확인할 수 있다.
도 1은 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 수행하는 하드웨어 장치를 도시한 블록도이다.
도 2는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법이 적용될 수 있는 수치일기예보모델의 입력 모듈의 블록도이다.
도 3은 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법이 적용될 수 있는 수치일기예보모델의 출력 모듈의 블록도이다.
도 4는 종래의 수치일기예보모델의 입출력 모듈을 검증하는 방법을 도시한 순서도이다.
도 5는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법에 사용될 수 있는, 테스트 주도 개발법을 개념적으로 도시한 순서도이다.
도 6은 도 5의 테스트 주도 개발법에 기초하여 도 3에 도시된 수치일기예보모델의 출력 모듈을 구성하는 부분 순서도이다.
도 7a 및 도 7b는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입력 모듈 검증 방법을 도시한 순서도들이다.
도 8a 및 도 8b는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 출력 모듈 검증 방법을 도시한 순서도들이다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제 1, 제 2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로 사용될 수 있다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제 1 구성요소는 제 2 구성요소로 명명될 수 있고, 유사하게 제 2 구성요소도 제 1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미이다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미인 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 도면들을 참조하여 본 발명의 바람직한 실시예들을 보다 상세하게 설명하기로 한다.
도 1은 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 수행하는 하드웨어 장치를 도시한 블록도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법을 수행하는 하드웨어 장치(100)는, 메모리(110) 및 계산부(130)를 포함한다. 예를 들어, 상기 하드웨어 장치(100)는, 메모리(110) 및 계산부(130)를 포함하는 서버일 수 있다. 상기 계산부(130)는 수치일기예보모델에 포함된 복수의 편미분 방정식들을 수치적으로 계산할 수 있다. 예를 들어, 상기 계산부(130)에 포함된 복수의 CPU는 대기-해양 역학 방정식들을 계산하여 특정한 시각에서의 물리량(예컨대, 기온, 바람, 습도, 엔트로피 등)의 값을 생성할 수 있다. 상기 메모리(110)는 상기 계산부(130)에 전기적으로 연결되어, 관측 데이터 또는 상기 수치일기예보모델에서 산출된 모델 데이터를 저장할 수 있다. 상기 관측 데이터는 자동일기관측 시스템(automatic weather system; AWS), 라디오존데(radiosonde), 레이더(Radar), 라이다(Lidar), 대기해양 위성 등으로부터 관측되는 일기 데이터를 포함할 수 있다. 상기 모델 데이터 또는 관측 데이터는 지구 상의 어느 위치(위도, 경도, 고도)에서의 물리량일 수 있다.
도 2는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법이 적용될 수 있는 수치일기예보모델의 입력 모듈의 블록도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 수치일기예보모델의 입력 모듈(300)은 모델 입출력 공용 모듈(390), NetCDF 입력 모듈(311), 병렬 입출력-입력 모듈(313), 모델 주입력 모듈(310), 모델 전체격자 입력 모듈(330), 모델 격자 초기화 입력 모듈(331), 모델 초기조건 입력 모듈(337) 및 모델 물리과정 초기화 모듈(335)을 포함할 수 있다. 도 2에서 각각의 모듈 또는 라이브러리의 연결 관계를 도시한 화살표는, 각각의 화살표가 도착하는 모듈/라이브러리가 하부 계층에 배치되고, 각각의 화살표가 출발하는 모듈이 상부 계층에 배치되는 구조를 나타낸다. 예를 들어, 상기 모델 주입력 모듈(310)은 상기 NetCDF 입력 모듈(311)보다 상위 계층에 배치될 수 있다. 한편, 상기 모델 입출력 공용 모듈(390)은 상기 수치일기예보모델의 입력 모듈(300)과, 후술할 도 3에 도시된 수치일기예보모델의 출력 모듈(500)에 공통으로 사용되는 모듈로서, 도 2 및 도 3에서는 상기 입력 모듈(300) 및 출력 모듈(500)에 포함된 모듈들 간의 계층 구조에서 차지하는 위치가 생략되었다.
상기 모델 입출력 공용 모듈(390)은 상기 수치일기예보모델의 입출력에 관련된 공용 변수 및 상수를 저장하는 모듈일 수 있다. 예를 들어, 상기 모델 입출력 공용 모듈(390)은 입출력에 관련된 변수의 최대 개수, 차원(dimension)의 최대 수 등에 대한 공용 상수들을 설정할 수 있고, 입출력에 관련된 오류 코드들과 미리 선언된 변수형 코드들을 포함할 수 있다. 또한, 상기 모델 입출력 공용 모듈(390)은 입출력 파일, 변수, 차원을 각각 처리하기 위한 유도 타입의 기술자(descriptor)를 포함할 수 있다.
상기 NetCDF 입력 모듈(311)은 미국 대기과학 대학조합(university corportation for atmospheric research; UCAR)에서 개발된 네트워크 공용 데이터 포맷(network common data form; NetCDF)의 라이브러리(201)로부터 데이터를 직렬 방식으로 참조/독출할 수 있다. 예를 들어, 상기 NetCDF 입력 모듈(311)은 다중 인스턴스(multi-instance)를 사용하기 위한 참조(reference)를 사용자 정의하고, NetCDF 입력에 관련된 여러 상태 정보들을 저장할 수 있다. 상기 NetCDF 입력 모듈(311)은 예를 들어, NetCDF 포맷의 입력 파일을 열기(open), NetCDF 포맷의 입력 파일의 기본 헤더 정보를 로드(load)하기, NetCDF 포맷의 입력 파일의 차원(dimension) 정보를 독출(read)하기, 변수를 읽거나, 변수의 ID, 차원의 ID를 가져오기(get), NetCDF 포맷의 입력 파일을 닫기(close) 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 병렬 입출력-입력 모듈(313)은 플랫 바이너리(flat binary), NetCDF3, NetCDF4 등의 포맷들에 대한 병렬 입출력(parallel input/output; 이하 PIO 라 한다) 방식의 라이브러리(203)의 입력에 관련된 래퍼(wrapper) 모듈로서, 병렬 입출력(PIO)의 유도 타입의 입출력 기술자를 포함하고, 다중 인스턴스 사용을 위한 참조 유도 타입(reference derived type)을 포함할 수 있다. 상기 다중 인스턴스 사용을 위한 참조 유도 타입은 병렬 입출력(PIO)의 입력에 관련된 여러 상태 정보를 저장할 수 있다. 상기 병렬 입출력-입력 모듈(313)은 예를 들어, 병렬 입출력(PIO) 시스템을 초기화(initiation)하기, 입력 파일을 열기(open), 입력 변수의 병렬 분할 정보를 설정하기(decomposition), 입력 변수를 독출하기(read), 속성(attribute) 정보를 독출하기, 입력 파일을 닫기(close), 병렬 입출력(PIO) 시스템을 닫기(close) 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 주입력 모듈(310)은 상기 병렬 입출력(PIO)-입력 모듈(313)로부터 제공되는 파일과, 상기 NetCDF 입력 모듈(311)로부터 제공되는 파일을 참조/독출하는 모듈이다. 상기 모델 주입력 모듈(310)은 예를 들어, 병렬 입출력(PIO) 시스템을 초기화(initiation)하기, 병렬 입출력(PIO) 형식의 입력 파일 열기(open), 병렬 입출력(PIO) 형식의 병렬 도메인 분할 정보를 설정하기(domain decomposition), 병렬 입출력(PIO) 형식의 변수를 독출하기(read), 병렬 입출력(PIO) 형식의 입력 파일을 닫기(close), 병렬 입출력(PIO) 시스템을 종료하기(finish), NetCDF 포맷의 입력 파일을 병렬 조건에서 열기, NetCDF 포맷의 입력 파일로부터 차원 정보를 독출하기, NetCDF 포맷의 입력 파일로부터 변수를 독출하기, NetCDF 포맷의 입력 파일을 닫기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 전체격자 입력 모듈(330)은 육면체구 좌표계(cubed-sphere grid system) 상의 전체 격자점에 대한 데이터의 병렬적 입력 모듈로서, 상기 병렬 입출력-입력 모듈(313)에서 처리되는 데이터를 참조/독출할 수 있다. 상기 모델 전체격자 입력 모듈(330)은 예를 들어, 상기 육면체구 좌표계에 관련된 격자 입력 모듈을 설정하기(set), 상기 격자 입력 모듈을 초기화하기, 상기 격자 입력 모듈을 종료하기, 상기 격자 입력 모듈에 대하여 제공되는 입력 파일을 열기, 상기 격자 입력 모듈에 대하여 제공되는 입력 파일을 닫기, 상기 입력 파일로부터 변수를 독출하기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 초기조건 입력 모듈(337)은 상기 육면체구 좌표계 상의 초기조건 등의 상태 입력을 위한 모듈로서, 상기 모델 전체격자 입력 모듈(330)로부터 제공되는 데이터를 참조/독출할 수 있다. 상기 모델 초기조건 입력 모듈(337)은 예를 들어, 지형정보(topography)를 입력하기, 역학 초기상태(dynamics initial state)를 입력하기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 격자 초기화 입력 모듈(331)은 상기 모델 전체격자 입력 모듈(330)로부터 제공되는 데이터를 참조/독출할 수 있다.
상기 모델 물리과정 초기화 모듈(335)은 상기 모델 전체격자 입력 모듈(330)로부터 제공되는 데이터를 참조/독출할 수 있다.
한편, 상기 수치일기예보모델의 입력 모듈(300)에 포함되는 상기 모델 주입력 모듈(310) 및 상기 모델 전체격자 입력 모듈(330)의 데이터는, 자료동화 모듈(710) 또는 물리 모수화 모듈(730)에 참조되거나 독출될 수 있다. 예를 들어, 상기 자료동화 모듈(710)은 상기 모델 주입력 모듈(310)의 데이터와, 상기 모델 전체격자 입력 모듈(330)의 데이터를 참조/독출할 수 있다. 또한, 상기 물리 모수화 모듈(730)은 상기 모델 전체격자 입력 모듈(330)의 데이터를 참조/독출할 수 있다.
도 3은 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법이 적용될 수 있는 수치일기예보모델의 출력 모듈의 블록도이다.
도 3을 참조하면, 본 발명의 일 실시예에 따른 수치일기예보모델의 출력 모듈(500)은 모델 입출력 공용 모듈(390), 병렬 입출력출력 모듈(513), 모델 주출력 모듈(510), 모델 전체격자 출력 모듈(530), 모델 고유 격자 출력 모듈(533), 모델 위경도 격자 출력 모듈(535), 모델 격자 초기화 출력 모듈(531), 모델 출력변수 저장 모듈(553), 모델 격자 출력 메타데이터 관리 모듈(573), 모델 격자 주출력 모듈(570), 모델 물리과정 출력 모듈(551) 및 모델 격자 역학코어 출력 모듈(571)을 포함할 수 있다. 도 3에서 각각의 모듈 또는 라이브러리의 연결 관계를 도시한 화살표는, 각각의 화살표가 도착하는 모듈/라이브러리가 하부 계층에 배치되고, 각각의 화살표가 출발하는 모듈이 상부 계층에 배치되는 구조를 나타낸다. 예를 들어, 상기 모델 주출력 모듈(510)은 상기 병렬 입출력-출력 모듈(513)보다 상위 계층에 배치될 수 있다.
상기 병렬 입출력-출력 모듈(513)은 플랫 바이너리(flat binary), NetCDF3, NetCDF4 등의 포맷들에 대한 병렬 입출력(parallel input/output; 이하 PIO 라 한다) 방식의 라이브러리(203)의 출력에 관련된 래퍼(wrapper) 모듈로서, 병렬 입출력(PIO)의 유도 타입의 입출력 기술자를 포함하고, 다중 인스턴스 사용을 위한 참조 유도 타입(reference derived type)을 포함할 수 있다. 상기 다중 인스턴스 사용을 위한 참조 유도 타입은 병렬 입출력(PIO)의 출력에 관련된 여러 상태 정보를 저장할 수 있다. 상기 병렬 입출력출력 모듈(513)은 예를 들어, 병렬 입출력(PIO) 시스템을 초기화(initiation)하기, 병렬 입출력(PIO) 가용 형식의 출력 파일을 생성하기(create), 병렬 입출력(PIO) 가용 형식의 출력 파일을 열기, 병렬 입출력(PIO) 가용 형식의 출력 파일을 닫기, 출력 모듈의 상태 정보를 초기화하기, 출력 모듈의 상태 정보를 종료하기, 출력 파일의 차원(dimension)을 정의하기(define), 출력 파일의 변수를 정의하기, 출력 파일의 작성 상태를 변경하기(change), 출력 파일의 차원 정보를 요청하기(inquire), 출력 파일의 변수 정보를 요청하기, 출력 파일의 상태 정보를 요청하기, 출력 파일의 변수에 속성(attribute)을 부여하기(put), 출력 파일에 전역 속성을 부여하기, 출력 파일의 변수 병렬 분할 정보를 설정하기(decomposition), 출력 파일의 변수를 쓰기(write), 병렬 입출력-출력 시스템을 종료하기, 출력 파일의 레코드 타입 변수 값을 설정하기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 주출력 모듈(510)은 상기 수치일기예보모델의 프레임워크에서 입출력 모듈 중 하위 계층에 포함되는 메인(main) 출력 모듈로서, 다중 인스턴스(multi-instance)를 사용하기 위한 상기 병렬 입출력-출력 모듈(513)의 참조(reference)를 사용자 정의할 수 있다. 상기 모델 주출력 모듈(510)은 예를 들어, 출력 시스템을 초기화하기, 출력 상태 정보를 초기화하기, 출력 파일을 생성하기, 출력 파일을 열기, 출력 파일을 닫기, 차원 및 변수 정보를 초기화하기, 출력 모듈의 차원 및 변수 정보에 우선하여 출력 파일을 동기화하기(rejoin), 출력 파일에 우선하여 출력 모듈의 차원 및 변수 정보를 동기화하기(rescan), 출력 파일의 정보를 요청하기(get), 출력 파일에 차원을 정의하기, 출력 모듈의 출력 파일 작성 상태를 변경하기, 출력 모듈의 차원 정보를 요청하기, 출력 파일에 변수를 정의하기, 출력 모듈의 변수 정보를 요청하기, 출력 변수의 병렬 분할 정보를 설정하기, 출력 파일에 변수를 쓰기, 레코드형 변수의 레코드 번호를 설정하기, 출력 모듈의 정보 상태를 종료하기, 출력 모듈을 종료하기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 출력변수 저장 모듈(553)은 출력 변수들의 상태를 저장하는 모듈로서, 역학 코어부 및 물리 모수화부 등에 포함되는 각각의 변수의 상태를 저장할 수 있다. 상기 모델 출력변수 저장 모듈(553)은 변수 타입에 대한 공용 변수들, 변수 저장 방식에 대한 공용 변수들, 저장변수들 및 저장변수 정보에 대한 사용자 정의 타입을 포함할 수 있다. 상기 모델 출력변수 저장 모듈(553)은 예를 들어, 출력 변수 등록소(registry)를 초기화하기, 출력 변수를 등록하기(register), 출력 변수의 정보를 요청하기, 출력 변수 등록소에 등록되는 출력 변수들에 따라 상태 저장소(repository)의 메모리를 할당하기, 상태 저장소의 메모리를 해제하기, 상태 저장소에 변수 상태를 저장하기, 상태 저장소에서 변수 상태를 획득하기, 변수명으로 중복가능한 출력 변수들의 ID를 획득하기, 상태 저장소의 현재 상태를 출력하기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 격자 출력 메타데이터 관리 모듈(573)은 역학 코어부에서 출력되는 격자 타입(grid type)과, 변수들의 정보, 차원 정보 등에 대한 메타데이터를 관리하는 모듈로서, 출력 격자 타입에 대한 공용 변수들, 출력 격자 타입에서 사용하는 차원에 대한 공용 변수들, 출력 변수의 컴포넌트 정보에 대한 공용 변수들, 미리 정의된 출력 격자 타입에 따른 차원의 배열 변수들, 출력 변수의 기본 정보 및 메타데이터를 보관하는 사용자 정의 타입을 포함할 수 있다. 상기 모델 격자 출력 메타데이터 관리 모듈(573)은 예를 들어, 메타데이터 관리 모듈을 초기화하기, 출력 변수 정보를 추가하기, 현재 관리 중인 출력 변수의 상태를 출력하기, 현재 관리 중인 총 출력 변수의 개수를 요청하기, 현재 관리 중인 전체 출력 변수의 명칭을 요청하기, 변수 ID에 대한 출력 변수 명칭을 요청하기, 변수 ID에 대한 출력 변수의 타입을 요청하기, 변수 명칭에 대한 변수 ID를 요청하기, 변수 ID에 대한 변수의 상세 명칭을 요청하기, 변수 ID에 대한 변수의 단위(unit)를 요청하기, 변수 ID에 대한 변수의 차원 개수를 요청하기, 차원 ID에 대한 차원 정보를 획득하기, 변수 ID에 대한 각각의 차원 ID를 획득하기, 변수 ID에 대한 모든 차원 정보를 획득하기, 지정한 우선순위에 따른 변수 목록을 획득하기 등과 같은 프로세스를 수행하는 복수의 서브루틴 또는 함수를 포함할 수 있다.
상기 모델 전체격자 출력 모듈(530)은 육면체구 좌표계 상의 전체 격자점에 대한 데이터의 병렬적 출력 모듈로서, 상기 모델 주출력 모듈(510)에서 처리되는 데이터를 참조/독출할 수 있다. 상기 모델 전체격자 출력 모듈(530)은 예를 들어, 상기 육면체구 좌표계에 관련된 격자 출력 모듈을 설정하기(set), 상기 격자 출력 모듈을 초기화하기, 상기 격자 출력 모듈을 종료하기, 상기 육면체구 좌표계 상의 전체 격자점을 사용하는 출력 파일을 생성하기, 상기 육면체구 좌표계 상의 전체 격자점을 사용하는 출력 파일을 닫기, 상기 육면체구 좌표계 상의 전체 격자점을 사용하는 출력 파일을 열기, 출력 모듈의 차원 및 변수 정보에 우선하여 출력 파일을 동기화하기, 출력 파일에 차원 정보를 쓰기(write), 출력 파일에 좌표 정보를 쓰기, 출력 파일에 변수 정보를 정의하기, 레코드 변수의 현재 레코드 번호를 지정하기, 출력 파일에 변수를 쓰기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 고유 격자 출력 모듈(533)은 육면체구 좌표계 상의 고유 격자점(unique grid point)을 사용하는 데이터의 병렬 출력 모듈로서, 상기 모델 주출력 모듈(510)에서 처리되는 데이터를 참조/독출할 수 있다. 상기 모델 고유 격자 출력 모듈(533)은 예를 들어, 상기 모델 고유 격자 출력 모듈의 초기 정보를 설정하기, 상기 모델 고유 격자 출력 모듈을 초기화하기, 상기 모델 고유 격자 출력 모듈을 종료하기, 상기 육면체구 좌표계 상의 고유 격자점을 사용하는 출력 파일을 생성하기, 상기 육면체구 좌표계 상의 고유 격자점을 사용하는 출력 파일을 닫기, 상기 육면체구 좌표계 상의 고유 격자점을 사용하는 출력 파일을 열기, 출력 모듈의 차원 및 변수 정보에 우선하여 출력 파일을 동기화하기, 출력 파일에 차원 정보를 쓰기, 출력 파일에 좌표 정보를 쓰기, 출력 파일에 변수 정보를 정의하기, 레코드 변수의 현재 레코드 번호를 지정하기, 출력 파일에 변수를 쓰기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 위경도 격자 출력 모듈(535)은 위도-경도 좌표계(latitude-longitude grid system)로 데이터를 출력하기 위한 병렬 출력 모듈로서, 모델 주출력 모듈(510)의 데이터를 참조/독출할 수 있다. 상기 위경도 격자 출력 모듈(535)은 예를 들어, 상기 위경도 격자 출력 모듈을 설정하기, 상기 위경도 격자 출력 모듈을 초기화하기, 상기 위경도 격자 출력 모듈을 종료하기, 위경도 격자의 출력 파일을 생성하기, 위경도 격자의 출력 파일을 열기, 출력 모듈의 차원 및 변수 정보에 우선하여 출력 파일을 동기화하기, 출력 파일에 차원 정보를 쓰기, 출력 파일에 좌표 정보를 쓰기, 출력 파일에 변수 정보를 정의하기, 레코드 변수의 현재 레코드 번호를 지정하기, 출력 파일에 변수를 쓰기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 격자 주출력 모듈(570)은 상기 수치일기예보모델의 출력 모듈(500)의 상위 계층에 포함되는 메인(main) 출력 모듈로서, 상기 모델 전체격자 출력 모듈(530), 상기 모델 고유 격자 출력 모듈(533), 상기 위경도 격자 출력 모듈(535), 상기 모델 격자 출력 메타데이터 관리 모듈(573) 또는 상기 모델 출력변수 저장 모듈(553)의 데이터를 참조/독출할 수 있다. 상기 모델 격자 주출력 모듈(570)은 출력 파일의 개수, 격자 타입, 출력 주기 등과 같은 출력 파일에 대한 정보와, 다중 인스턴스 사용을 위한 참조 사용자 타입을 정의하고, 출력에 관련된 다양한 상태 정보를 저장할 수 있다. 상기 모델 격자 주출력 모듈(570)은 예를 들어, 상기 모델 격자 주출력 모듈의 파라미터를 설정하기, 상기 모델 격자 주출력 모듈을 초기화하기, 현재의 파일 생성 주기에 따른 파일명 및 레코드 번호를 생성하기, 출력 파일에 현재 상태를 쓰기, 상기 모델 격자 주출력 모듈을 종료하기 등과 같은 프로세스를 수행하는 복수의 서브루틴을 포함할 수 있다.
상기 모델 격자 초기화 출력 모듈(531)은 상기 모델 주출력 모듈(510)의 데이터를 참조/독출할 수 있다.
상기 모델 물리과정 출력 모듈(551) 및 상기 모델 격자 역학코어 출력 모듈(571)은 각각, 상기 모델 격자 출력 메타데이터 관리 모듈(573), 상기 모델 출력변수 저장 모듈(553) 또는 상기 모델 주출력 모듈(510)의 데이터를 참조하거나 독출할 수 있다. 예를 들어, 상기 모델 격자 역학코어 출력 모듈(571)은 상기 모델 격자 출력 메타데이터 관리 모듈(573) 및 모델 출력변수 저장 모듈(553)의 데이터를 참조/독출할 수 있다. 또한, 상기 모델 물리과정 출력 모듈(551)은 상기 모델 주출력 모듈(510), 상기 모델 격자 출력 메타데이터 관리 모듈(573) 및 상기 모델 출력변수 저장 모듈(553)의 데이터를 참조/독출할 수 있다.
한편, 상기 수치일기예보모델의 출력 모듈(500)에 포함되는 상기 모델 전체격자 출력 모듈(530)의 데이터는, 자료동화 모듈(710) 또는 물리 모수화 모듈(730)에 참조되거나 독출될 수 있다.
도 4는 종래의 수치일기예보모델의 입출력 모듈을 검증하는 방법을 도시한 순서도이다.
도 4를 참조하면, 종래의 수치일기예보모델의 입출력 모듈을 검증하는 방법은, 요구사항을 확인하는 단계(S110), 상기 요구사항에 부합되도록 코드를 설계하는 단계(S120), 상기 설계된 코드를 컴파일하는 단계(S130), 상기 컴파일된 코드를 실행하는 단계(S140) 및 상기 실행된 코드를 테스트하는 단계(S150)를 포함한다. 이 경우, 도 2 및 도 3에 도시된 바와 같이, 상기 수치일기예보모델의 입력 모듈(300) 및 출력 모듈(500)이 복수의 세부 모듈들을 포함하는 경우, 상기 단계 S120에서, 상기 세부 모듈들을 모두 코딩한 다음, 상기 단계 S130 내지 S150에서 상기 입력 모듈(300) 및 출력 모듈(500)에 대해 전체적으로 실행 후 테스트할 때, 최종적인 입력 결과 또는 출력 결과에 오류가 발생하더라도, 상기 오류가 상기 입력 모듈(300) 및 출력 모듈(500)의 세부 모듈들 중 어느 모듈의 어느 부분에서 발생한 것인지 확인하기 어려운 문제가 있다. 그에 따라, 상기 수치일기예보모델의 입력 모듈(300) 및 출력 모듈(500)이 온전히 기능하도록 디버깅하는 데에 많은 시간과 노력이 소요될 수 있다.
도 5는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법에 사용될 수 있는, 테스트 주도 개발법을 개념적으로 도시한 순서도이다.
도 5를 참조하면, 본 발명의 일 실시예에 따른 테스트 주도 개발법(test-driven development; TDD)에서는 통상적인 소프트웨어 개발 단계와 달리, 도 4의 단계 S150에 대응하는 테스트 코드를 먼저 설계한다(단계 S210). 이 경우, 상기 테스트 코드는 완성된 소스 코드가 아닌, 현재 개발 중인 소스 코드를 실행(run)시키므로, 상기 소스 코드의 미완성된 부분에서 오류가 발생할 수 밖에 없다(fail). 그에 따라, 오류가 발생된 테스트 코드에 해당하는 소스 코드의 부분을 더 설계하고(단계 S220), 이렇게 부분적으로 완성되어 가는 소스 코드를 정리(refractor)할 수 있다(단계 S230).
한편, 상기 테스트 코드는, 상기 소스 코드의 복잡한 기능들을 세분화하여, 하나 또는 소수의 기능만을 구현하도록 설계되는 부분들에 대하여 검증하도록 설계될 수 있다. 예를 들어, 상기 테스트 코드는, 상기 소스 코드의 다수의 기능을 하나의 기능 단위로 세분화한 부분들에 대하여 검증하기 위한 단위 테스트(unit test) 코드일 수 있다. 이 경우, 상기 단위 테스트들을 각각 통과하는 소스 코드의 부분들에 대하여, 상기 단계 S210 내지 S230을 반복함으로써, 전체적인 소스 코드를 완성시킬 수 있다.
도 6은 도 5의 테스트 주도 개발법에 기초하여 도 3에 도시된 수치일기예보모델의 출력 모듈을 구성하는 부분 순서도이다.
도 3, 도 5 및 도 6을 참조하면, 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 출력 모듈(500)은, 도 3에 도시된 계층적 구조에 따라 하위 계층의 모듈로부터 상위 계층의 모듈에 이르기까지, 순차적으로, 상기 도 5의 단계 S210 내지 단계 S230을 적용함으로써 구성될 수 있다. 예를 들어, 상기 수치일기예보모델의 출력 모듈(500)을 구성하는 방법은, 병렬 입출력-출력 모듈(513)에 대한 제1 단위 테스트 및 상기 제1 단위 테스트를 실행하기 위한 제1 테스팅 모듈을 설계하는 단계(S310), 상기 제1 단위 테스트를 통과(pass)하도록 병렬 입출력-출력 모듈(513)을 설계하는 단계(S320), 상기 설계된 병렬 입출력-출력 모듈(513)을 정리(refractor)하는 단계(S330), 상기 병렬 입출력-출력 모듈(513)의 데이터를 참조/독출하는 모델 주출력 모듈(510)에 대한 제2 단위 테스트 및 상기 제2 단위 테스트를 실행하기 위한 제2 테스팅 모듈을 설계하는 단계(S340), 상기 제2 단위 테스트를 통과하도록 모델 주출력 모듈(510)을 설계하는 단계(S350) 및 상기 설계된 모델 주출력 모듈(510)을 정리하는 단계(S360)를 포함할 수 있다.
도 6에서는 생략되었으나, 상기 단계 S360 이후에, 상기 모델 주출력 모듈(510)의 데이터를 참조/독출하는 모델 전체격자 출력 모듈(530), 모델 고유 격자 출력 모듈(533), 모델 위경도 격자 출력 모듈(535) 등을 순차적으로 검증 설계하기 위한 단계들이 수행될 수 있다.
한편, 상기 단계 S310 내지 단계 S360에서는, 수치일기예보모델의 입출력 모듈에 포함되는 계층적 구조의 세부 모듈들을 테스트하기 위한 제1 단위 테스트 및 제1 테스팅 모듈과, 제2 단위 테스트 및 제2 테스팅 모듈의 설계가 순차적으로 진행되는 것으로 도시되었으나, 이는 예시적인 것으로서, 상기 수치일기예보모델의 입출력 모듈에 포함되는 계층적 구조의 세부 모듈들을 테스트하기 위한 복수의 테스트 모듈들이 전체적으로 먼저 설계되고, 상기 수치일기예보모델의 입력 모듈 또는 출력 모듈이 바로 상기 복수의 테스트 모듈들에 제공될 수 있다.
실제적으로, 상기 수치일기예보모델의 입출력 모듈에 포함되는 세부 모듈들은 여러 명의 개발 인원을 포함하는 복수의 개발 팀에 의하여 병행 개발될 수 있는데, 예를 들어, 제1 개발 팀에서 병렬 입출력-출력 모듈(513)을 개발하는 동안, 제2 개발 팀에서 모델 전체격자 출력 모듈(530)을 개발할 수 있다. 이 경우, 상기 제1 개발 팀 및 제2 개발 팀에서 병행하여 구현하는 상기 병렬 입출력출력 모듈(513) 및 모델 전체격자 출력 모듈(530)에 대하여 일괄하여 테스팅할 필요가 있다.
도 7a 및 도 7b는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입력 모듈 검증 방법을 도시한 순서도들이다.
도 2, 도 7a 및 도 7b를 참조하면, 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입력 모듈 검증 방법은, 제1 입력 모듈 코드를 제공받는 단계(S410), 상기 제1 입력 모듈 코드에 포함된 프레임워크(framework) 모듈 부분이, 프레임워크 모듈 설계를 위한 제1 모듈 테스트를 통과하는지 판단하는 단계(S420), 상기 제1 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S421/S423), 상기 제1 입력 모듈 코드에 포함된 병렬 입출력-입력 모듈 부분이, 병렬 입출력-입력 모듈(313) 설계를 위한 제2 모듈 테스트를 통과하는지 판단하는 단계(S430), 상기 제2 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S431/S433), 상기 제1 입력 모듈 코드에 포함된 NetCDF 입력 모듈 부분이, NetCDF 입력 모듈(311) 설계를 위한 제3 모듈 테스트를 통과하는지 판단하는 단계(S440), 상기 제3 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S441/S443), 상기 제1 입력 모듈 코드에 포함된 모델 주입력 모듈 부분이, 모델 주입력 모듈(310) 설계를 위한 제4 모듈 테스트를 통과하는지 판단하는 단계(S450), 상기 제4 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S451/S453), 상기 제1 입력 모듈 코드에 포함된 모델 전체격자 입력 모듈 부분이, 모델 전체격자 입력 모듈(330) 설계를 위한 제5 모듈 테스트를 통과하는지 판단하는 단계(S460), 상기 제5 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S461/S463), 및 상기 제1 내지 제5 모듈 테스트에 대한 결과 보고서를 생성하는 단계(S470)를 포함할 수 있다. 상기 실패 보고서들은, 상기 통과 보고서들에 비해 보다 구체적인 오류 보고를 포함할 수 있다. 예를 들어, 상기 실패 보고서들은 상기 제1 입력 모듈 코드가 상기 제1 모듈 테스트 내지 제5 모듈 테스트의 어느 단위 테스트 단계에서 실패하는지에 대한 로그(log) 보고를 포함할 수 있다.
상기 단계 S420에서 수행되는 상기 제1 모듈 테스트는 예를 들어, 외부 설정 파일이 정상적으로 열리는지(open), 병렬 환경에서 상기 외부 설정 파일의 설정 값들이 타입과 종류에 따라 정상적으로(normally) 로드 또는 독출되는지, 상기 외부 설정 파일이 정상적으로 닫히는지(close) 등을 검증할 수 있다.
상기 단계 S430에서 수행되는 상기 제2 모듈 테스트는 예를 들어, 병렬 입출력(PIO) 라이브러리(203)의 입력을 위한 초기화가 정상적으로 수행되는지, 지정된 경로의 입력 파일이 정상적으로 열리는지, 병렬 환경에서의 데이터 분할 정보가 정상적으로 설정되는지, 지정된 변수가 정상적으로 독출(read)되는지, 입력 파일이 정상적으로 닫히는지, 병렬 입출력(PIO) 라이브러리(203)가 정상적으로 종료되는지 등을 검증할 수 있다.
상기 단계 S440에서 수행되는 상기 제3 모듈 테스트는 예를 들어, 지정된 경로의 NetCDF 포맷의 입력 파일이 정상적으로 열리는지, NetCDF 포맷의 입력 파일의 헤더(header) 정보들이 정상적으로 불러지는지(load), NetCDF 포맷의 입력 파일의 변수들이 정상적으로 독출되는지, 입력 파일이 정상적으로 닫히는지 등을 검증할 수 있다.
상기 단계 S450에서 수행되는 상기 제4 모듈 테스트는 예를 들어, 병렬 입출력(PIO)-입력 형식의 입력 파일의 입력 기능들이 정상적으로 수행되는지, NetCDF 포맷의 입력 파일의 입력 기능들이 정상적으로 수행되는지, 병렬 환경에서 지정된 변수에 대한 고유 입출력(unique I/O), 배포(broadcast) 방식의 읽기가 선택적으로 정상 수행되는지 등을 검증할 수 있다.
상기 단계 S460에서 수행되는 상기 제5 모듈 테스트는 예를 들어, 상기 모델 전체격자 입력 모듈(330)의 초기화가 정상적으로 수행되는지, 육면체구 좌표계의 격자를 사용하는 입력 파일이 정상적으로 열리는지, 육면체구 좌표계의 격자를 사용하는 입력 파일에서 변수가 정상적으로 독출되는지, 상기 모델 전체격자 입력 모듈(330)의 종료가 정상적으로 수행되는지 등을 검증할 수 있다.
이와 같이, 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입력 모듈 검증 방법에 따르면, 계층적 구조를 갖는 수치일기예보모델의 입력 모듈에 포함되는 복수의 세부 모듈들이 각각 정상적으로 동작하는지 판단하는 복수의 단위 테스트들을 상기 계층적 구조에 따라 순차적으로 수행함으로써, 수치일기예보모델의 입력 모듈이 실행될 때 발생할 수 있는 오류의 원인을 용이하게 확인할 수 있다.
도 8a 및 도 8b는 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 출력 모듈 검증 방법을 도시한 순서도이다.
도 3, 도 8a 및 도 8b를 참조하면, 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 출력 모듈 검증 방법은, 제1 출력 모듈 코드를 제공받는 단계(S510), 상기 제1 출력 모듈 코드에 포함된 병렬 입출력-출력 모듈 부분이, 병렬 입출력-출력 모듈(513) 설계를 위한 제6 모듈 테스트를 통과하는지 판단하는 단계(S520), 상기 제6 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S521/S523), 상기 제1 출력 모듈 코드에 포함된 모델 출력변수 저장 모듈 부분이, 모델 출력변수 저장 모듈(553) 설계를 위한 제7 모듈 테스트를 통과하는지 판단하는 단계(S530), 상기 제7 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S531/S533), 상기 제1 출력 모듈 코드에 포함된 모델 주출력 모듈 부분이, 모델 주출력 모듈(510) 설계를 위한 제8 모듈 테스트를 통과하는지 판단하는 단계(S540), 상기 제8 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S541/S543), 상기 제1 출력 모듈 코드에 포함된 모델 격자 출력 메타데이터 관리 모듈 부분이, 모델 격자 출력 메타데이터 관리 모듈(573) 설계를 위한 제9 모듈 테스트를 통과하는지 판단하는 단계(S550), 상기 제9 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S551/S553), 상기 제1 출력 모듈 코드에 포함된 모델 전체격자 출력 모듈 부분이, 모델 전체격자 출력 모듈(530) 설계를 위한 제10 모듈 테스트를 통과하는지 판단하는 단계(S560), 상기 제10 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S561/S563), 상기 제1 출력 모듈 코드에 포함된 모델 격자 주출력 모듈 부분이, 모델 격자 주출력 모듈(570) 설계를 위한 제11 모듈 테스트를 통과하는지 판단하는 단계(S570), 상기 제11 모듈 테스트에 대한 통과 보고서/실패 보고서를 생성하는 단계(S571/S573), 및 상기 제6 내지 제11 모듈 테스트에 대한 결과 보고서를 생성하는 단계(S580)를 포함할 수 있다. 상기 실패 보고서들은, 상기 통과 보고서들에 비해 보다 구체적인 오류 보고를 포함할 수 있다. 예를 들어, 상기 실패 보고서들은 상기 제1 입력 모듈 코드가 상기 제6 모듈 테스트 내지 제11 모듈 테스트의 어느 단위 테스트 단계에서 실패하는지에 대한 로그(log) 보고를 포함할 수 있다.
상기 단계 S520에서 수행되는 상기 제6 모듈 테스트는 예를 들어, 병렬 입출력(PIO) 라이브러리(203)의 출력을 위한 초기화가 정상적으로 수행되는지, 지정된 경로의 출력 파일이 정상적으로 생성되는지, 지정된 경로의 출력 파일이 정상적으로 열리는지(open), 병렬 환경에서의 데이터 분할 정보가 정상적으로 설정되는지, 지정된 차원 정보가 정상적으로 출력 파일에 생성되는지, 지정된 변수 정보가 정상적으로 출력 파일에 생성되는지, 지정된 변수가 정상적으로 출력 파일에 출력되는지, 출력 파일이 정상적으로 닫히는지(close), 병렬 입출력(PIO) 라이브러리(203)가 정상적으로 종료되는지 등을 검증할 수 있다.
상기 단계 S530에서 수행되는 상기 제7 모듈 테스트는 예를 들어, 모델 출력변수 저장 모듈(553)의 변수 등록소(repository)의 초기화가 정상적으로 수행되는지, 상기 변수 등록소에 변수가 추가되는지, 상기 변수 등록소에서 변수가 삭제되는지, 등록된 변수 목록에 따라 등록소가 정상적으로 메모리 영역에 생성되는지, 상기 메모리 영역에 설정된 등록소가 메모리 영역에서 정상적으로 해제되는지, 상기 모델 출력변수 저장 모듈(553)이 정상적으로 종료되는지 등을 검증할 수 있다.
상기 단계 S540에서 수행되는 상기 제8 모듈 테스트는 예를 들어, 모델 주출력 모듈(510)의 초기화가 정상적으로 수행되는지, 출력 파일이 정상적으로 생성되는지, 출력 파일이 정상적으로 열리는지(open), 기존의 차원 및 변수 정보들과 출력 파일 상의 차원 및 변수 정보들이 정상적으로 연결되는지, 출력 파일에 차원이 정상적으로 생성되는지, 출력 파일에 변수가 정상적으로 생성되는지, 병렬 환경에서의 데이터 분할 정보가 정상적으로 설정되는지, 지정된 변수 값이 정상적으로 출력 파일에 출력되는지, 출력 파일이 정상적으로 닫히는지, 상기 모델 주출력 모듈(510)이 정상적으로 종료되는지 등을 검증할 수 있다.
상기 단계 S550에서 수행되는 상기 제9 모듈 테스트는 예를 들어, 출력 변수 메타데이터 저장소가 정상적으로 초기화되는지, 상기 출력 변수 메타데이터 저장소에 출력 변수가 정상적으로 등록되는지, 상기 출력 변수 메타데이터 저장소에서 요청한 출력 변수의 정보가 정상적으로 제공되는지, 상기 출력 변수 메타데이터 저장소가 정상적으로 종료되는지 등을 검증할 수 있다.
상기 단계 S560에서 수행되는 상기 제10 모듈 테스트는 예를 들어, 육면체구 좌표계의 격자 출력을 위한 초기화가 정상적으로 수행되는지, 육면체구 격자의 출력 파일이 정상적으로 생성되는지, 육면체구 격자의 출력 파일이 정상적으로 열리는지, 육면체구 격자의 차원 및 좌표 정보가 정상적으로 출력 파일에 생성되는지, 병렬 환경에서 육면체구 격자 상의 데이터 분할 정보가 정상적으로 등록되는지, 지정된 변수의 값이 정상적으로 출력되는지, 모델 전체격자 출력 모듈(530)이 정상적으로 종료되는지 등을 검증할 수 있다.
상기 단계 S570에서 수행되는 상기 제11 모듈 테스트는 예를 들어, 역학 코어에 참조되기 위한 모델 격자 주출력 모듈(570)의 초기화가 정상적으로 수행되는지, 출력 파일에 대한 정보가 설정 파일에서부터 정상적으로 설정되는지, 주어진 시간 정보에 따라 파일명 및 레코드 번호가 정상적으로 계산되는지, 등록된 설정에 따라 지정된 출력 변수들이 정상적으로 출력되는지, 상기 모델 격자 주출력 모듈(570)이 정상적으로 종료되는지 등을 검증할 수 있다.
이와 같이, 본 발명의 일 실시예에 따른 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 출력 모듈 검증 방법에 따르면, 계층적 구조를 갖는 수치일기예보모델의 출력 모듈에 포함되는 복수의 세부 모듈들이 각각 정상적으로 동작하는지 판단하는 복수의 단위 테스트들을 상기 계층적 구조에 따라 순차적으로 수행함으로써, 수치일기예보모델의 출력 모듈이 실행될 때 발생할 수 있는 오류의 원인을 용이하게 확인할 수 있다.
이상 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
100: 하드웨어 장치 110: 메모리
130: 계산부 201: NetCDF 라이브러리
203: 병렬 입출력 라이브러리 300: 입력 모듈
310: 모델 주입력 모듈 311: NetCDF 입력 모듈
313: 병렬 입출력-입력 모듈 330: 모델 전체격자 입력 모듈
331: 모델 격자 초기화 입력 모듈 335: 모델 물리과정 초기화 모듈
337: 모델 초기조건 입력 모듈 390: 모델 입출력 공용 모듈
500: 출력 모듈 510: 모델 주출력 모듈
513: 병렬 입출력-출력 모듈 530: 모델 전체격자 출력 모듈
531: 모델 격자 초기화 출력 모듈 533: 모델 고유 격자 출력 모듈
535: 모델 위경도 격자 출력 모듈 551: 모델 물리과정 출력 모듈
553: 모델 출력변수 저장 모듈 570: 모델 격자 주출력 모듈
571: 모델 격자 역학코어 출력 모듈
573: 모델 격자 출력 메타데이터 관리 모듈
710: 자료동화 모듈 730: 물리 모수화 모듈

Claims (16)

  1. 복수의 계산유닛을 포함하는 계산부 및 상기 계산부와 전기적으로 연결되는 메모리를 포함하는 하드웨어 장치가, NetCDF 입력 모듈, 병렬 입출력입력 모듈, 모델 주입력 모듈 및 모델 전체격자 입력 모듈을 포함하는 수치일기예보모델의 입력 모듈을 검증하는 방법에 있어서,
    상기 수치일기예보모델의 입력 모듈 코드를 제공받는 단계;
    상기 입력 모듈 코드가 상기 병렬 입출력입력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성하는 단계;
    상기 입력 모듈 코드가 상기 NetCDF 입력 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성하는 단계;
    상기 입력 모듈 코드가 상기 모델 주입력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성하는 단계;
    상기 입력 모듈 코드가 상기 모델 전체격자 입력 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성하는 단계; 및
    상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고 및 제4 결과 보고를 포함하는 최종 결과 보고서를 생성하는 단계를 포함하되,
    상기 제1 모듈 테스트는,
    병렬 입출력 라이브러리의 입력을 위해 상기 입력 모듈 코드의 병렬 입출력입력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 초기화된 병렬 입출력입력 모듈부에 포함되는, 미리 설정된 경로의 제1 입력 파일이 열리는지를 판단하는 제2 단위 테스트;
    병렬 조건 하에서 상기 제1 입력 파일에 데이터 분할 정보가 설정되는지를 판단하는 제3 단위 테스트;
    상기 제1 입력 파일의 변수가 독출되는지를 판단하는 제4 단위 테스트;
    상기 제1 입력 파일이 닫히는지를 판단하는 제5 단위 테스트; 및
    상기 병렬 입출력 라이브러리가 종료되는지를 판단하는 제6 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  2. 삭제
  3. 제1항에 있어서, 상기 제2 모듈 테스트는,
    상기 입력 모듈 코드의 NetCDF 입력 모듈부에 포함된, 미리 설정된 경로의 NetCDF 포맷의 제2 입력 파일이 열리는지를 판단하는 제1 단위 테스트;
    상기 제2 입력 파일의 헤더 정보가 로드되는지를 판단하는 제2 단위 테스트;
    상기 제2 입력 파일의 변수가 독출되는지를 판단하는 제3 단위 테스트; 및
    상기 제2 입력 파일이 닫히는지를 판단하는 제4 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  4. 제1항에 있어서, 상기 제3 모듈 테스트는,
    상기 입력 모듈 코드의 모델 주입력 모듈부에 따라 병렬 입출력-입력 형식의 제3 입력 파일이 입력되는지를 판단하는 제1 단위 테스트;
    상기 입력 모듈 코드의 모델 주입력 모듈부에 따라 NetCDF 포맷의 제4 입력 파일이 입력되는지를 판단하는 제2 단위 테스트; 및
    병렬 조건 하에서, 상기 제3 입력 파일 또는 제4 입력 파일에 포함된, 미리 설정된 변수에 대한 고유 입출력(unique I/O) 방식의 읽기(read) 또는 배포(broadcast) 방식의 읽기가 선택적으로 수행되는지를 판단하는 제3 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  5. 제1항에 있어서, 상기 제4 모듈 테스트는,
    상기 입력 모듈 코드의 모델 전체격자 입력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 입력 모듈 코드의 모델 전체격자 입력 모듈부에 따라, 육면체구 좌표계의 격자를 사용하는 제5 입력 파일이 열리는지를 판단하는 제2 단위 테스트;
    상기 제5 입력 파일의 변수가 독출되는지를 판단하는 제3 단위 테스트; 및
    상기 입력 모듈 코드의 모델 전체격자 입력 모듈이 종료되는지를 판단하는 제4 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  6. 복수의 계산유닛을 포함하는 계산부 및 상기 계산부와 전기적으로 연결되는 메모리를 포함하는 하드웨어 장치가, 병렬 입출력출력 모듈, 모델 출력변수 저장 모듈, 모델 주출력 모듈, 모델 격자 출력 메타데이터 관리 모듈, 모델 전체격자 출력 모듈 및 모델 격자 주출력 모듈을 포함하는 수치일기예보모델의 출력 모듈을 검증하는 방법에 있어서,
    상기 수치일기예보모델의 출력 모듈 코드를 제공받는 단계;
    상기 출력 모듈 코드가 상기 병렬 입출력출력 모듈의 설계를 위한 제1 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제1 모듈 테스트에 대한 제1 결과 보고를 생성하는 단계;
    상기 출력 모듈 코드가 상기 모델 출력변수 저장 모듈의 설계를 위한 제2 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제2 모듈 테스트에 대한 제2 결과 보고를 생성하는 단계;
    상기 출력 모듈 코드가 상기 모델 주출력 모듈의 설계를 위한 제3 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제3 모듈 테스트에 대한 제3 결과 보고를 생성하는 단계;
    상기 출력 모듈 코드가 상기 모델 격자 출력 메타데이터 관리 모듈의 설계를 위한 제4 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제4 모듈 테스트에 대한 제4 결과 보고를 생성하는 단계;
    상기 출력 모듈 코드가 상기 모델 전체격자 출력 모듈의 설계를 위한 제5 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제5 모듈 테스트에 대한 제5 결과 보고를 생성하는 단계;
    상기 출력 모듈 코드가 상기 모델 격자 주출력 모듈의 설계를 위한 제6 모듈 테스트를 통과하는지 판단하는 단계;
    상기 제6 모듈 테스트에 대한 제6 결과 보고를 생성하는 단계; 및
    상기 제1 결과 보고, 제2 결과 보고, 제3 결과 보고, 제4 결과 보고, 제5 결과 보고 및 제6 결과 보고를 포함하는 최종 결과 보고서를 생성하는 단계를 포함하되,
    상기 제1 모듈 테스트는,
    병렬 입출력 라이브러리의 출력을 위해 상기 출력 모듈 코드의 병렬 입출력출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 초기화된 병렬 입출력출력 모듈부에 포함되는 미리 설정된 경로에, 제1 출력 파일이 생성되는지를 판단하는 제2 단위 테스트;
    상기 제1 출력 파일이 열리는지를 판단하는 제3 단위 테스트;
    병렬 조건 하에서 상기 제1 출력 파일에 제1 데이터 분할 정보가 설정되는지를 판단하는 제4 단위 테스트;
    미리 설정된 제1 차원 정보가 상기 제1 출력 파일에 생성되는지를 판단하는 제5 단위 테스트;
    미리 설정된 제1 변수 정보가 상기 제1 출력 파일에 생성되는지를 판단하는 제6 단위 테스트;
    상기 제1 변수 정보에 포함되는 제1 변수가 상기 제1 출력 파일에서 출력되는지를 판단하는 제7 단위 테스트;
    상기 제1 출력 파일이 닫히는지를 판단하는 제8 단위 테스트; 및
    상기 병렬 입출력 라이브러리가 종료되는지를 판단하는 제9 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  7. 삭제
  8. 제6항에 있어서, 상기 제2 모듈 테스트는,
    상기 출력 모듈 코드의 모델 출력변수 저장 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 초기화된 모델 출력변수 저장 모듈부에 따라 미리 설정된 변수 등록소(repository)에 제2 변수가 추가되는지를 판단하는 제2 단위 테스트;
    상기 변수 등록소에서 상기 제2 변수가 삭제되는지를 판단하는 제3 단위 테스트;
    상기 변수 등록소에 등록(register)된 변수 목록에 따라 상기 변수 등록소가 소정의 메모리 영역에 설정되는지를 판단하는 제4 단위 테스트;
    상기 메모리 영역에 설정된 변수 등록소가 상기 메모리 영역에서 해제되는지를 판단하는 제5 단위 테스트; 및
    상기 출력 모듈 코드의 모델 출력변수 저장 모듈부가 종료되는지를 판단하는 제6 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  9. 제6항에 있어서, 상기 제3 모듈 테스트는,
    상기 출력 모듈 코드의 모델 주출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 모델 주출력 모듈부에 따라 제2 출력 파일이 생성되는지를 판단하는 제2 단위 테스트;
    상기 제2 출력 파일이 열리는지를 판단하는 제3 단위 테스트;
    상기 제1 출력 파일의 제1 차원 정보 및 제1 변수 정보가, 상기 제2 출력 파일의 제2 차원 정보 및 제2 변수 정보에 대응되는지를 판단하는 제4 단위 테스트;
    미리 설정된 제3 차원 정보가 상기 제2 출력 파일에 생성되는지를 판단하는 제5 단위 테스트;
    미리 설정된 제3 변수 정보가 상기 제2 출력 파일에 생성되는지를 판단하는 제6 단위 테스트;
    병렬 조건 하에서 상기 제2 출력 파일에 제2 데이터 분할 정보가 설정되는지를 판단하는 제7 단위 테스트;
    미리 설정된 제4 변수의 값이 상기 제2 출력 파일에 출력되는지를 판단하는 제8 단위 테스트;
    상기 제2 출력 파일이 닫히는지를 판단하는 제9 단위 테스트; 및
    상기 모델 주출력 모듈부가 종료되는지를 판단하는 제10 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  10. 제6항에 있어서, 상기 제4 모듈 테스트는,
    상기 출력 모듈 코드의 출력 변수 메타데이터 저장부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 출력 변수 메타데이터 저장부에 미리 설정된 제1 출력 변수가 등록되는지를 판단하는 제2 단위 테스트;
    미리 설정된 제2 출력 변수의 정보가 상기 출력 변수 메타데이터 저장부로부터 제공되는지를 판단하는 제3 단위 테스트; 및
    상기 출력 변수 메타데이터 저장부가 종료되는지를 판단하는 제4 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  11. 제6항에 있어서, 상기 제5 모듈 테스트는,
    육면체구 좌표계의 격자 출력을 위해, 상기 출력 모듈 코드의 모델 전체격자 출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 육면체구 좌표계의 격자를 사용하는 제3 출력 파일이 생성되는지를 판단하는 제2 단위 테스트;
    상기 제3 출력 파일이 열리는지를 판단하는 제3 단위 테스트;
    상기 육면체구 좌표계의 좌표 정보가 상기 제3 출력 파일에 생성되는지를 판단하는 제4 단위 테스트;
    병렬 조건 하에서 상기 제3 출력 파일에 상기 육면체구 좌표계 상의 제3 데이터 분할 정보가 설정되는지를 판단하는 제5 단위 테스트;
    미리 설정된 제5 변수의 값이 상기 제3 출력 파일에 출력되는지를 판단하는 제6 단위 테스트; 및
    상기 모델 전체격자 출력 모듈부가 종료되는지를 판단하는 제7 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  12. 제6항에 있어서, 상기 제6 모듈 테스트는,
    상기 출력 모듈 코드의 모델 격자 주출력 모듈부가 초기화되는지를 판단하는 제1 단위 테스트;
    상기 모델 격자 주출력 모듈부에 따라, 상기 수치일기예보모델의 역학 코어부의 출력을 위한, 설정 파일을 포함한 복수의 출력 파일들에 대한 정보가 설정되는지를 판단하는 제2 단위 테스트;
    미리 설정된 시간 정보에 따라 상기 출력 파일들에 대한 파일명 및 레코드 번호가 생성되는지를 판단하는 제3 단위 테스트;
    상기 설정 파일에 따라, 미리 설정된 복수의 출력 변수들이 상기 출력 파일들에 출력되는지를 판단하는 제4 단위 테스트; 및
    상기 모델 격자 주출력 모듈부가 종료되는지를 판단하는 제5 단위 테스트를 포함하는 것을 특징으로 하는, 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법.
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
KR1020130139808A 2013-11-18 2013-11-18 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치 KR101528225B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130139808A KR101528225B1 (ko) 2013-11-18 2013-11-18 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130139808A KR101528225B1 (ko) 2013-11-18 2013-11-18 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치

Publications (2)

Publication Number Publication Date
KR20150057025A KR20150057025A (ko) 2015-05-28
KR101528225B1 true KR101528225B1 (ko) 2015-06-12

Family

ID=53391976

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130139808A KR101528225B1 (ko) 2013-11-18 2013-11-18 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치

Country Status (1)

Country Link
KR (1) KR101528225B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110555616B (zh) * 2019-09-05 2021-12-14 中国气象局广州热带海洋气象研究所 一种数值天气模式同化系统的稠密观测资料优化调度方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06289106A (ja) * 1993-04-06 1994-10-18 Sony Corp 集積回路装置及び集積回路装置の製造方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06289106A (ja) * 1993-04-06 1994-10-18 Sony Corp 集積回路装置及び集積回路装置の製造方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
김희진 외 2인, "테스트 주도 개발(TDD)에서의 모바일 응용 소프트웨어 성능 테스트 방안", 2007년도 한국정보과학회 가을 학술발표논문집 Vol.34, No.2(B), pp.143-146 (2007) *
김희진 외 2인, "테스트 주도 개발(TDD)에서의 모바일 응용 소프트웨어 성능 테스트 방안", 2007년도 한국정보과학회 가을 학술발표논문집 Vol.34, No.2(B), pp.143-146 (2007)*

Also Published As

Publication number Publication date
KR20150057025A (ko) 2015-05-28

Similar Documents

Publication Publication Date Title
Montanari et al. Modeling and mitigating natural hazards: Stationarity is immortal!
WO2006044760A2 (en) Method and systems for anomaly detection
Ben Miled et al. Towards a reasoning framework for digital clones using the digital thread
US11106569B1 (en) Requirements to test system and method
US10133803B2 (en) Coverage data interchange
Tyralis et al. On the prediction of persistent processes using the output of deterministic models
Moreira et al. Discrete event system identification with the aim of fault detection
Parker The significance of robust climate projections
US11556837B2 (en) Cross-domain featuring engineering
Rizvi et al. From data to insight, enhancing structural health monitoring using physics-informed machine learning and advanced data collection methods
KR101528225B1 (ko) 테스트 주도 개발법에 기반한 수치일기예보모델의 자동화된 입출력 모듈 검증 방법 및 이를 수행하는 하드웨어 장치
CN110489379A (zh) 飞行器试飞综合显示及数据分析评估平台
Jørgensen et al. Digital Twins: Benefits, Applications and Development Process
Prosvirnova et al. Handling consistency between safety and system models
US20150363513A1 (en) Method and system for designing products
Lopes et al. Synthetic data generation for digital twins: enabling production systems analysis in the absence of data
Fuchs et al. TorchClim v1. 0: A deep-learning framework for climate model physics
de Souza et al. PROWIS: A Visual Approach for Building, Managing, and Analyzing Weather Simulation Ensembles at Runtime
Cauffriez et al. Systemic modeling of integrated systems for decision making early on in the design process
Silhavy et al. Requirements gathering methods in system engineering
An et al. Sandpile-simulation-based graph data model for MVD generative design of shield tunnel lining using information entropy
Roychoudhury et al. Distilling the verification process for prognostics algorithms
Bogaerts et al. A fast inverse approach for the quantification of set-theoretical uncertainty
de la Pena et al. Feedback min-max model predictive control based on a quadratic cost function
KR102132659B1 (ko) 인공지능 기반 역공학을 이용한 공장 자동화용 제어기의 분석 방법

Legal Events

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

Payment date: 20180420

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190513

Year of fee payment: 5