2011-10-27 4 views
1

자체 버그를 감지하는 코드?

다음 코드 스니 j을 고려하십시오.

int index = FindClosestIndex(frame); 
if (_data[index].Frame == frame) 
    return _data[index]; 
else 
    return interpolateData(frame, _data[index - 1], _data[index]); 

이제이 코드 블록 전에 FindClosestIndex()이 0을 리턴하지 않는지 점검해야합니다. 불가능합니다. 그러나 FindClosestIndex의 논리는 어느 정도 복잡하기 때문에 어느 누구도 예상하지 못한 버그가 아직 발견되지 않았고 코드가 맞지만 FindClosestIndex이 0을 잘못 반환 할 수도 있습니다.

0을 반환하면 _data[index - 1] 문에 ArgumentOutOfRangeException이 발생합니다. 나는 그 예외 거품을 내버려 둘 수는 있겠지만, 차라리 이렇게 할 것이다.

if (index == 0) 
    throw new ApplicationLogicException("There is a bug that caused FindClosestIndex to return an int <= 0 when it shouldn't have."); 

코드가 오류 상태를 발견하면 사용자 정의 예외를 던지는이 방법을 권장하겠습니까? 이런 상황이있을 때 당신은 무엇을합니까?

답변

1

개인적으로 개인 맞춤 예외가 있습니다. 그것은 콘돔 논쟁과 같습니다. 필요로하지 않고 그것을 필요로하지 않는 것이 낫습니다. 드문 경우이지만 사용자 정의 예외 메시지를 포함하여 발생할 경우 로직 오류를 훨씬 쉽게 추적 할 수 있지만 실행 파일은 조금만 커집니다. 그렇지 않으면 ArgumentOutOfRangeException 예외가 발생할 수 있습니다. 예외를 추가하는 데 걸리는 시간은 오류를 제외하고 오류를 추적하는 데 걸리는 시간보다 훨씬 큽니다.

관련 문제