저는 과학 컴퓨팅의 테스트 중심 개발을 대변하는 사람입니다. 실제로 유틸리티는 놀랍습니다. 코드 개발자가 알고있는 고전적인 문제를 실제로 완화합니다. 그러나 일반적인 프로그래밍에서는 발생하지 않는 과학 코드를 테스트하는 데 고유 한 어려움이 있으므로 TDD 텍스트는 자습서로 그리 유용하지 않습니다. 예를 들면 다음과 같습니다.
일반적으로 주어진 복잡한 문제에 대한 정확한 답을 선험적으로 알지 못하므로 어떻게 시험을 작성할 수 있습니까?
병렬 처리 수준이 변경됩니다. 최근에 3의 배수로 MPI 작업을 사용하는 것이 실패하지만 2의 배수가 작동하는 버그가 발생했습니다. 또한 일반적인 테스트 프레임 워크는 MPI의 특성으로 인해 MPI에 적합하지 않은 것으로 보입니다. 작업 수를 변경하려면 테스트 바이너리를 다시 실행해야합니다.
과학 코드는 종종 밀접하게 결합되고 상호 의존적이며 상호 교환 가능한 부품이 많이 있습니다. 우리는 모두 레거시 코드를 보았고, 좋은 디자인을 포기하고 전역 변수를 사용하려는 유혹을 알고 있습니다.
수치적인 방법은 종종 "실험"일 수도 있고, 코더가 어떻게 작동하는지 완전히 이해하지 못하고 이해하려고하기 때문에 결과를 예측하는 것은 불가능합니다.
과학 코드를 위해 작성한 테스트의 예 :
시간 적분기의 경우 정확한 솔루션과 함께 간단한 ODE를 사용하고 적분기가 주어진 정확도 내에서이를 해결하는지 테스트하고 다양한 단계 크기로 테스트하여 정확도 순서가 올바른지 확인하십시오.
제로 안정성 테스트 : 경계 / 초기 조건이 0 인 방법이 0으로 유지되는지 확인하십시오.
보간 테스트 : 선형 함수가 주어지면 보간이 올바른지 확인합니다.
레거시 유효성 검사 : 올바른 것으로 알려진 레거시 응용 프로그램에서 코드 청크를 격리하고 테스트에 사용할 일부 불연속 값을 가져옵니다.
수동 시행 착오를 제외하고 주어진 코드 덩어리를 올바르게 테스트하는 방법을 알 수없는 경우가 종종 있습니다. 숫자 코드로 작성하는 테스트 및 / 또는 과학 소프트웨어 테스트를위한 일반적인 전략의 예를 제공 할 수 있습니까?