많은 계산 과학 프로그래밍에 표준 테스트 프레임 워크에서 다루지 않는 테스트 요구 사항이 있음을 발견했습니다.
계산 시간 테스트
- 알고리즘이 느려지지 않도록합니다. 나는 무언가를 할 수는
assureSmallerEqual(RuntimeWrapper(algorithm),53)
있지만 알고리즘을 작업하면서 53 초 임계 값을 지속적으로 줄이려고합니다.assureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance')
- 알고리즘이 느려지지 않도록합니다. 나는 무언가를 할 수는
성능 시험
- 이전에 분석 솔루션에 대한 근사치를 찾은 알고리즘이 여전히 적어도 우수하거나 더 나은 솔루션을 찾습니다. 다시 말하지만 이것은 표준 통합 테스트로 에뮬레이트 될 수 있지만 알고리즘이 점점 좋아질수록 허용 오차가 지속적으로 줄어들고 싶습니다. 교체의 생각
assureAlmostEqual(foo(),1,places=3)
에 의해assureAlmostEqual(foo(),1,places='previousbest')
- 이전에 분석 솔루션에 대한 근사치를 찾은 알고리즘이 여전히 적어도 우수하거나 더 나은 솔루션을 찾습니다. 다시 말하지만 이것은 표준 통합 테스트로 에뮬레이트 될 수 있지만 알고리즘이 점점 좋아질수록 허용 오차가 지속적으로 줄어들고 싶습니다. 교체의 생각
물리적 요구 사항 테스트
- 알고리즘에 갑자기 더 많은 메모리 / 하드 디스크 공간이 필요하지 않도록합니다. 1과 매우 유사합니다.
추상 요구 사항 테스트
- 2 차 근사법으로 잘 수행 된 알고리즘에 입방 근사법이 갑자기 필요하지 않거나 시간 단계 0.1로 정교하게 수행 된 알고리즘에 안정성을 위해 0.01이 필요하지 않도록합니다. 다시, 이것들은 표준 통합 테스트에 의해 모방 될 수 있지만, 목표는 특정 목표를 달성 한 가장 작은 요구 사항 매개 변수가 무엇인지 기억하는 것이므로 많은 수동 업데이트가 필요합니다. 예를 들어,
foo(10)
이전에 예외가 발생하지 않았다면 프레임 워크에서foo(10)
여전히 작동 하는지 확인 하고foo(9)
지금 작동 하는지 확인하십시오 (이 경우 모든 향후 테스트에서foo(9)
여전히 작동 하는지 확인 ).
- 2 차 근사법으로 잘 수행 된 알고리즘에 입방 근사법이 갑자기 필요하지 않거나 시간 단계 0.1로 정교하게 수행 된 알고리즘에 안정성을 위해 0.01이 필요하지 않도록합니다. 다시, 이것들은 표준 통합 테스트에 의해 모방 될 수 있지만, 목표는 특정 목표를 달성 한 가장 작은 요구 사항 매개 변수가 무엇인지 기억하는 것이므로 많은 수동 업데이트가 필요합니다. 예를 들어,
예를 들어 런타임 향상은 다른 개선 사항에 대한 대가로 수용 가능할 수 있기 때문에 내가 요구하는 것은 단위 / 통합 테스트의 의미에서 테스트를 설명하지 않는다고 주장 할 수 있습니다.
그러나 실제로 위의 테스트 기능이 있다면 많은 디버깅 시간을 절약 할 수 있다는 것을 알고 있습니다. 95 %의 사례에서 내가 소개 한 버그로 인해 요구 사항과 성능이 떨어졌기 때문입니다. 실제로, 외부 수치 소프트웨어 라이브러리에서 발견 한 많은 버그 (내 코드를 확인하는 데 많은 시간이 소요 된 후)가 위의 테스트가 엄격하게 적용되면 사소하게 피할 수 있다는 사실을 알고 있습니다.
추신
비슷한 이름의 질문 /programming/34982863/framework-for-regression-testing-of-numerical-code 는 표준 회귀 테스트 프레임 워크로보다 쉽게 달성 할 수있는 기능을 설명하므로 중복되지 않습니다.
질문의 단위 테스트와 테스트 주도 개발을위한 전략 을 구현하는 데 도움이 프레임 워크 (그리고 답변에서 제공하는 내 의견으로는, 여기에서 설명하는 것보다 다른있다 / 대한이 묻는 전략)에 반대 전략을 요청합니다.