에지 케이스, 코너 케이스,베이스 케이스 및 경계 케이스의 차이점은 무엇입니까?


86

저는 영어 원어민이 아닙니다. 내 모국어에서는 재귀를 중지하기 위해 검사 한 조건과 극단적이거나 가능성이 높지 않거나 매우 간단한 경우를 확인하는 조건을 나타내는 데 사용되는 일부 용어를 알고 있습니다. 영어에서는 "가장자리 사례", "코너 사례", "경계 사례"및 "기본 사례"라는 용어가 발견되었지만 차이점을 파악할 수 없으며 그 의미를 파악하는 데 사용됩니다. 나는 그들 사이의 차이점을 요약하고 싶습니다.

특히 누군가가 다음 코드 샘플에서 행에 주석을 제공 할 수 있다면 매우 기쁠 것입니다.

    int transmogrify(int n) {
1.      assert(n <= 1000000);
2.      if (n < 0) return -1;
3.      if (n == 1000000) return PRE_CALC;
4.      if (n == 0) return n+1;            // For stopping the recursion
5.      if (n == 1251) return 3077;
        return transmogrify(n-1);
    }

나는 그것이 생각 합니다 :

  1. 위생 검사
  2. 입력 확인
  3. 경계 사건? 가장자리 사건? 코너 케이스?
  4. 기본 케이스? 경계 사건?
  5. 코너 케이스? 가장자리 사건?

4
나는 가장자리와 경계가 일반적으로 같다고 생각합니다. 그러나 코드에서 조건을 확인하는 것이 아니라 테스트를 말합니다.
Richard

@Richard 테스트 코드가 아닙니까? 그건 내 이해가 아닙니다.이 용어가 코드에 적용되지 않는다고 생각한다는 사실을 뒷받침하는 참조 자료가 있습니까?
브래드 토마스

답변:


94

나는 영어 원어민도 아닙니다. 그러나 Wikipedia에 따르면 :

  • 에지 케이스 는 극단적 (최대 또는 최소) 작동 매개 변수에서 발생합니다 .
  • 코너 케이스 발생 정상 동작 파라미터의 외부 즉, 다수의 환경 조건 또는 변수가 각 변수는 그 변수의 지정된 범위 내에있는 경우에도, 극도의 수준을 동시에하는 경우 . ( "정상 작동 매개 변수 외부"는 명백히 "허용 된 작동 매개 변수 외부"가 아니라 "일반 작동 매개 변수의 외부 조합"과 같은 것을 의미합니다. 즉, 여전히 유효한 매개 변수 공간 내에 있지만 모퉁이 근처에 있습니다.)
  • 경계 경우 는 입력 중 하나가 최대 또는 최소 한계를 초과하거나 그 이상일 때 발생합니다 .
  • 기본 사례재귀가 끝나는 곳 입니다.

따라서 코너 케이스는 가장자리 및 경계 케이스와 약간 다른 의미 (값의 조합)를 의미하지만 분명히 동의어 인 것처럼 완전히 혼동되는 것처럼 보입니다. 에지, 코너 및 경계 케이스는 일반적인 연설에서 동일하다고 말할 수 있습니다. 누군가는 각자 다른 말을 할 수는 있지만 일반적인 합의는 거의 없습니다.

귀하의 1)과 2)는 귀하가 작성한 것입니다. 3) 우위 / 경계 사건, 4)는 기본 사건, 5)는 특별한 경우입니다.


이것은 각 기술 단어의 개념을 이해하는 데 매우 유용한 답변입니다.
Jignesh Fadadu

25

단어의 차이점에 관계없이 테스트를 설명하는 데 사용하는 것은 정확한 코드가 아니라 테스트 의 의미 (의미)에 따라 다릅니다 . 예제에서 각 테스트의 의미가 명확하지 않은 경우. 옆으로, 내가 그들을 이해하는 방법은 다음과 같습니다.

  • 위생 검사 = 이것은 의미가 있습니까? 예를 들어, 응용 프로그램이 정수만 출력 sqrt(-1)하고 log(-1)정의되지 않은 경우.
  • 입력 확인 = 일부 내부 데이터 구조 또는 함수 출력 과 달리 사용자 입력을 테스트합니다 . 예를 들어, Bash [ $# -gt 0 ]에서 적어도 하나의 입력 매개 변수가 있는지 확인합니다.이 매개 변수는 findor 와 같은 명령에 대한 온 전성 검사일 수도 있습니다 mail.
  • Edge / Boundary check = 올바른 출력을 생성 할 것으로 예상되는 최대 또는 최소 입력 . 예를 들어, 숫자에 1을 더하는 함수는 <MIN_INT>에서 <MAX_INT>-1까지의 작동 범위를 갖습니다. <MIN_INT>보다 작은 입력은 사용자가 제공 할 수없고 <MAX_INT>보다 큰 출력이 가능하기 때문입니다 유용하지 않습니다.
  • 코너 케이스 체크 = 계산에서 <MIN_INT>와 <MAX_INT>를 결합하는 것과 같이보다 복잡한 경계 체크 (코너는 2 차원 경계)입니다.
  • 특수 사례 검사 = 예를 들어, 명확하지 않은 비 경계 특수 값log(1 + the smallest floating point number) 입니다.

정교하지 않은 니트 : logₑ-1은 iπ입니다. 파이썬에서,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.