기본적으로 최악의 사례 나 최상의 사례 및 다른 “가장자리”사례를 파악하기 전에 어떻게해야하는지 알아 내려면 코드를 어떻게 준비해야합니까?
답변
알고리즘의 내용에 따라 사용되는 데이터 구조 / 유형 / 구성을 식별 할 수 있습니다. 그런 다음, (가능한) 약점을 이해하려고 시도하고 그러한 경우에 실행 계획을 세워보십시오.
예를 들어, 알고리즘은 문자열과 정수를 입력으로 사용하고 문자열의 문자를 정렬합니다.
여기에 우리가 있습니다 :
알려진 특수한 경우가있는 문자열 :
- 빈 문자열
- 긴 줄
- 유니 코드 문자열 (특수 문자)
- 특정 문자 집합으로 제한되는 경우 일부 문자가 범위에 속하지 않으면 어떻게됩니까?
- 홀수 / 짝수 문자열
- 널 (인수)
- 널이 아닌 종료
알려진 특별한 경우를 가진 정수 :
- 0
- 최소 / MaxInt
- 부정적 / 긍정적
다음 경계 경우에 실패 할 수있는 정렬 알고리즘 :
- 빈 입력
- 1 요소 입력
- 매우 긴 입력 (길이 max (인덱스에 사용 된 데이터 유형) 일 수 있음)
- 컬렉션 내 쓰레기 분류
- 널 입력
- 중복 요소
- 모든 요소가 동일한 컬렉션
- 홀수 / 짝수 길이 입력
그런 다음,이 모든 경우를 고려하여 겹치는 방식을 이해하려고 긴 목록을 작성하십시오. 전의:
- 빈 문자열 케이스는 빈 컬렉션 케이스를 덮습니다.
- 널 문자열 == 널 콜렉션
- 기타
이제 테스트 케이스를 만드십시오 🙂
간단한 요약 : 경계 사례를 알고있는 기본 블록에서 알고리즘을 중단 한 다음 다시 조립하여 전역 경계 사례를 만듭니다.
답변
가장자리 조건을 결정하는 알고리즘이 없다고 생각합니다.
예 : 바이트 매개 변수의 경우 0, 127, 128, 255, 256, -1과 같은 숫자를 테스트하여 문제를 일으킬 수있는 모든 것을 테스트하려고합니다.
답변
“가장자리 (edge)”는 두 가지 의미를 지니 며, 두 가지 경우 모두에 해당합니다. 에지는 입력의 작은 변화가 출력의 큰 변화를 초래하는 영역이거나 범위의 끝입니다.
알고리즘의 가장 중요한 경우를 식별하기 위해 먼저 입력 도메인을 살펴 봅니다. 그 에지 값은 알고리즘의 에지 사례로 이어질 수 있습니다.
둘째, 출력 도메인을 살펴보고이를 생성 할 수있는 입력 값을 다시 살펴 봅니다. 이는 일반적으로 알고리즘의 문제는 아니지만 주어진 출력 도메인에 걸쳐있는 출력을 생성하도록 설계된 알고리즘에서 문제를 찾는 데 도움이됩니다. 예를 들어 난수 생성기는 모든 의도 된 출력 값을 생성 할 수 있어야합니다.
마지막으로 알고리즘을 검사하여 비슷한 입력 사례가 있지만 다른 결과를 초래하는지 확인합니다. 도메인과 입력 쌍을 모두 포함하므로 이러한 에지 사례를 찾는 것이 가장 어렵습니다.
답변
이것은 매우 일반적인 질문이므로 내가 할 수있는 것은 일반적인 모호한 아이디어를 버리는 것입니다. 🙂
경계 사례를 조사합니다. 전의. 문자열을 구문 분석하는 경우 문자열이 비어 있거나 null 인 경우 어떻게됩니까? x에서 y까지 세는 경우 x와 y에서 어떤 일이 발생합니까?
단순화되거나 건조 될 수있는 코드. 불필요한 복잡성으로 인해 문제가 발생할 수 있습니다.