경계값 예제를 몇 개 추가해도 버그가 계속 나옵니다. property-based testing은 어떤 성질을 검증하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
구체적인 입력·정답 쌍만 나열하기보다 여러 입력에서 항상 지켜야 할 불변식과 관계를 정의하고 생성된 사례로 검사합니다. 실패 입력을 작게 줄이는 shrinking이 원인 이해와 회귀 테스트에 도움이 됩니다.
동작 원리와 전제
정렬 함수라면 결과가 정렬되어 있고 입력 원소의 다중집합을 보존한다는 성질을 검사할 수 있습니다. 이것만으로 안정성까지 보장하지는 않으므로 필요한 계약을 추가합니다. 기준 구현과 결과 비교나 왕복 변환 성질도 사용할 수 있습니다.
선택과 실패 처리
생성기가 유효한 입력만 만들면 잘못된 입력 처리와 보안 경계를 놓칠 수 있습니다. 정상·오류 입력을 나누고 크기·분포·희귀 조건을 설계합니다. random seed와 최소 반례를 저장해 재현하지만 통과가 모든 입력의 수학적 증명은 아닙니다.
구체적인 사례와 검증
셔플 테스트에서는 결과 길이와 원소 집합 보존, 중복 부재, 현재 문항 제외 같은 결정적인 성질을 검사할 수 있습니다. 무작위 분포가 충분히 균등한지는 별도 통계·알고리즘 근거가 필요하므로 두 검증을 섞지 않습니다. 실패 seed를 보존하면 재현할 수 있지만 generator가 항상 작은 정수만 만들면 overflow는 못 찾습니다. 유효 범위의 끝과 비정상 입력을 의도적으로 포함합니다. shrinking은 실패를 유지하는 작은 입력을 찾는 도구이며 최소 반례가 실제 운영에서 자주 일어나는 입력이라는 뜻은 아닙니다. 예제 테스트와 생성 테스트를 함께 유지하면 이해하기 쉬운 회귀와 넓은 탐색을 조합할 수 있습니다.
메타모픽 테스트로 입력을 변환했을 때 결과가 가져야 할 관계를 검사할 수 있습니다. 시간·네트워크·동시성은 제어 가능한 환경과 결합합니다. 생성 횟수보다 실제로 어떤 불변식과 입력 공간을 다뤘는지 설명하겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 핵심 구분: 구체적인 입력·정답 쌍만 나열하기보다 여러 입력에서 항상 지켜야 할 불변식과 관계를 정의하고 생성된 사례로 검사합니다.
- 선택 조건: 생성기가 유효한 입력만 만들면 잘못된 입력 처리와 보안 경계를 놓칠 수 있습니다.
- 검증 기준: 메타모픽 테스트로 입력을 변환했을 때 결과가 가져야 할 관계를 검사할 수 있습니다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 무작위 입력을 많이 통과하면 모든 입력의 정확성이 수학적으로 증명됐다고 한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 읽기·쓰기·취소가 만나는 순서를 고정해 어떤 반례를 반복 재현하나요?
- 새 검증이 실제 잘못된 구현을 잡는지 어떤 실패 확인과 회귀로 증명하나요?
- 한 주기 중복 없는 순열을 만들 때 각 교환의 난수 범위는 어떻게 줄어드나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.