2008-08-19 6 views
7

숫자 분석 코드를 작성하는 테스트 루틴을 작성하고 유지 관리하며 생각하는 방법에 대한 온라인 리소스가 있습니까?수치 해석 루틴을 테스트하는 방법은 무엇입니까?

매트릭스 곱셈과 같은 테스트에서 볼 수있는 제한 중 하나는 명확한 테스트 (하나의 매트릭스를 ID로 갖는 것)가 코드의 기능을 완전히 테스트하지 못할 수 있다는 것입니다.

또한 대용량 데이터 구조도 다루고 있습니다. 누구든지이 접근법에 대한 좋은 아이디어가 있습니까? 아니면 좋은 곳을 가리키는 포인터가 있습니까?

답변

3

소리가 난다 :

  1. 일부 수치 방법은 몇 가지 메타 생각 허용합니다. 예를 들어, 가역 연산을 사용하면 테스트 케이스를 설정하여 결과가 원본의 허용 오차 범위 내에 있는지 확인할 수 있습니다. 예를 들어, 행렬 M- 배 행렬 M *는 임의의 벡터 V는 일부 오류 허용 가능한 측정 내로 다시 V초래한다.
    이 예제는 행렬 역행렬, 행렬 곱셈 및 행렬 - 벡터 곱셈을 수행합니다. 나는 당신이 꽤 많은 무작위 테스트 케이스를 생성 할 수 있고 수동으로 작성해야하는 통계적 적용 범위를 얻을 수 있기 때문에 이러한 체인을 좋아합니다. 그들은 단독으로 단일 작업을 수행하지 않습니다.

  2. 일부 수치 방법은 닫힌 형태로 오류가 표시됩니다. 알려진 솔루션으로 상황을 설정할 수있는 경우 솔루션과 계산 된 결과의 차이를 비교하여 이러한 알려진 경계를 초과하는 차이를 찾습니다.

기본적으로이 질문은 복잡한 방법을 테스트 할 때 상당히 많은 도메인 지식이 필요하다는 문제점을 보여줍니다. 특정 참조는 테스트중인 내용에 대한 좀 더 구체적인 정보를 필요로합니다. 나는 적어도 당신이 적어도 Steve Yegge's recommended book list을 가지고 있다고 권하고 싶습니다.

1

David GriesThe Science of Programming이라는 책을 확인하십시오. 그것은 프로그램의 정확성을 증명하는 것입니다. 당신의 프로그램이 정확하다는 것을 확신하고 싶다면 (정확성을 증명할 때까지),이 책은 시작하기 좋은 곳입니다.

아마 정확하게 당신이 찾고있는 것은 아니지만 소프트웨어 엔지니어링 질문에 대한 컴퓨터 과학 대답입니다. 당신은 적어도 두 가지 방법으로 테스트에 대해 생각할 필요가있는 것처럼

2

행렬 계산을 수행하려면 LAPACK을 사용하십시오. 이것은 매우 잘 테스트 된 코드입니다. 매우 영리한 사람들은 수십 년 동안 그것을 연구 해 왔습니다. 그들은 초창기 사람들이 결코 생각하지 않을 문제에 대해 깊이 생각해 왔습니다.

일반적으로 체계적인 테스트와 무작위 테스트의 두 가지 테스트를 권장합니다. 체계적으로 말하자면 모서리 케이스 등을 탐색하는 것입니다. 소스 코드를 읽을 수 있다면 도움이됩니다. 종종 알고리즘에는 분기점이 있습니다.이 범위의 숫자에 대해서는이 방법을 계산하고, 다른 범위의 숫자에 대해서는 다른 방법으로 계산하십시오. 근사값 오류가 종종 가장 높기 때문에 양측의 분기점에 가까운 값을 테스트하십시오.

임의 입력 값 역시 중요합니다. 합리적으로 모든 테스트 케이스를 선택하면 체계적으로 문제가 있음을 인식하지 못하는 것을 피할 수 있습니다.때로는 테스트 할 값이 정확하지 않은 경우에도 무작위 입력 값을 잘 활용할 수 있습니다. 예를 들어 함수와 역수를 계산하는 코드가 있다면 1000 개의 임의 값을 생성하고 함수와 역수를 적용하여 시작한 곳과 가까운 곳에 다시 놓을 수 있는지 확인할 수 있습니다.

관련 문제