C ++의 수치 응용을위한 테스트 스위트?


13

최근에는 코드를 작성할 때 더 많은 테스트를 포함하도록 그룹을 추진하고 있습니다. 우리가 적절한 시험 체제를 가지고 있지 않았기 때문에 아마도 말해야 할 것보다 잡는 데 더 오래 걸리는 몇 가지 주요 버그가있었습니다.

그러나 프로세스를 자동화하거나 능률화하는 데 적합한 도구를 갖추는 것이 확실히 도움이 될 것입니다. 반면에 C ++ 테스트 스위트의 다양한 옵션과 그 사이를 결정하는 방법을 모르겠습니다.

무엇을 찾아야하는지에 대한 지침이 있습니까? 특히 수치 적용을위한 지침이 있습니까?

답변:


11

숫자 코드를 테스트 할 때의 문제점은 (i) 정확한 결과를 항상 알 수는 없으며 나중에 비교할 수 있도록 계산 결과 만 저장할 수 있다는 것입니다. 그 결과는 반올림에 따라 기계마다 약간 씩 다를 수 있습니다.

deal.II가 어떻게 작동하는지 보려면 여기를보십시오 : http://www.dealii.org/developer/development/testsuite.html#regression_tests


단위 테스트의 한계에 대한 좋은 점. 회귀 테스트는 좋은 방법입니다 (출력을 알 수 없기 때문에 테스트하지 않는 것보다 낫습니다. 버그에 대한 경고 신호를 줄 수 있습니다). 기계 반올림 문제에 대해서는 시행 착오를 통해 적절한 공차를 선택해야합니까?
제프 옥스 베리

2
지속적인 고통입니다. 10 년이 넘는 테스트에서, 우리는 그것을 다루는 정말 좋은 전략을 찾지 못했습니다. diff 대신 numdiff를 사용하면 도움이 될 수 있지만 궁극적으로 올바른 숫자가 0.39875 일 때 다른 시스템에서 얻는 "0.3988"대신 "0.3987"을 저장하는 한 시스템을 지정해야합니다. 임계 값을 설정 한 위치에 상관없이 항상 잘못된 위치에서 다른 숫자를 차단합니다.
Wolfgang Bangerth

@WolfgangBangerth. 부동 소수점 동작을보다 결정적인 특정 컴파일러 특정 플래그가 있습니다. 예를 들어 / fp : strict | precise 및 / Qimf-arch-consistency : true (Intel 컴파일러) 또는 -fnounsafe-math-optimizations, -ffloat-store (GCC)를 사용하면 성능 비용으로 플랫폼에서 코드를보다 일관되고 재현 할 수 있습니다. . 약간의 조정으로, 이것은 특별히 "재생 가능한"빌드를 제공하며 테스트에 특별히 사용될 수 있습니다.
André

@Andre-아, 우리는이 모든 것을 시도했습니다. 그것은 여전히 어려운 :-)입니다
볼프강 Bangerth

10

나는 최근에 내가 작업하고있는 몇 개의 숫자 라이브러리를 테스트하기 위해 googletest 를 사용 하고 있으며 매우 만족합니다. 상당히 간단한 테스트를 매우 빠르게 작성하거나 데이터 초기화 등이 필요한 복잡한 테스트를 작성할 수 있습니다. 또한 비트 단위가 아닌 부동 소수점 비교를 쉽게 수행하는 방법을 제공합니다 (다른 많은 사람들이하는 것처럼).


googletest의 좋은 점은 응용 프로그램에 소스 코드를 쉽게 포함시킬 수 있으므로 종속성을 만들 필요가 없다는 것입니다.
제프 옥스 베리

4

CMake를 사용하여 코드를 작성하는 경우 ctest 메커니즘이 확실한 선택입니다. 명령을 통해 수동으로 코드를 테스트 할 수 있으며 CDashctest 를 통한 광범위한 야간 테스트도 지원합니다 .


1

계산 생물학 C ++ 라이브러리 ( Chste )에는 http://cxxtest.com/ 을 사용 합니다. 이것은 사용하기가 간단하고 잘 작동하며 assert()스타일 문으로 테스트하기위한 몇 가지 매크로를 제공합니다 . 과학 계산의 경우 일반적으로와의 간단한 직접 비교 TS_ASSERT_EQUALS(a,b)또는 와의 수치 비교입니다 TS_ASSERT_DELTA(a,b,tolerance).

이 기본 매크로를 사용하여 추가 매크로를 쉽게 작성하여 원하는 벡터 / 매트릭스를 비교할 수도 있습니다. 유용하게도 특정 상황에서 코드가 적절한 경고 및 오류 메시지를 표시하는지 확인할 수 있습니다. https://chaste.cs.ox.ac.uk/trac/browser/trunk에서test 소스 코드 의 폴더 에서 예제를 찾아 볼 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.