복잡한뇌구조마냥

[CS] 테스트 오라클(Test Oracle) 정리 본문

공통/CS

[CS] 테스트 오라클(Test Oracle) 정리

지금해냥 2025. 10. 31. 00:44

📘 1. 테스트 오라클(Test Oracle)이란?

**테스트 오라클(Test Oracle)**이란
테스트 결과가 **정상인지(=올바른 동작인지)**를 판단할 기준(기준 장치) 을 의미한다.

즉, 테스트의 기댓값(Expected Result) 역할을 하는 것 👇

🗣️ “입력값을 넣었을 때 결과가 맞는지 틀린지를 판단할 수 있게 해주는 기준이 오라클이다.”


🧩 2. 테스트 오라클의 필요성

  • 테스트 자동화에서는 프로그램이 스스로 올바른 결과를 판단해야 함
  • 단순히 실행만으로는 “정상 동작” 여부를 판단할 수 없으므로,
    → 비교 기준이 되는 오라클(Oracle) 이 필요함

📍 예시

 
int result = add(2, 3);
assertEquals(5, result); // ← 5가 바로 오라클(기준)

🧱 3. 테스트 오라클의 종류

이름 설명 예시
참(True) 오라클 모든 입력값에 대해 정확한 기대 결과를 알려줌 수학 공식, 이미 검증된 프로그램 등
샘플(샘플링) 오라클
(Sampling Oracle)
일부 선택된 입력값에 대해서만 올바른 결과를 제공 예: 특정 테스트 케이스만 수동 검증
휴리스틱(Heuristic) 오라클
(추정 오라클)
모든 입력에 대해 근사값 혹은 추정값을 사용하여 판단 예: 결과 범위가 적절한지만 확인
일관성 검사(Consistent) 오라클 프로그램 수정 전후의 출력 일관성을 기준으로 판단 예: 리팩토링 전후 결과가 같으면 OK

🧠 4. 각 오라클의 특징 요약

오라클 유형 정확도 적용 범위 구현 난이도 대표 상황
True Oracle ★★★★★ 모든 입력 ★★★★★ 수학 계산, 표준 알고리즘 검증
Sampling Oracle ★★★☆☆ 일부 입력 ★★☆☆☆ 테스트 케이스 일부만 수동 확인
Heuristic Oracle ★★☆☆☆ 광범위 ★★☆☆☆ 결과 범위 추정, 근사값 검증
Consistent Oracle ★★★★☆ 변경된 버전 ★★★☆☆ 회귀 테스트(Regression Test)

💬 5. 테스트 오라클 vs 테스트 오라클 문제(Test Oracle Problem)

구분 설명
테스트 오라클 결과의 옳고 그름을 판단하는 기준
테스트 오라클 문제 (Oracle Problem) "무엇을 기준으로 옳고 그름을 판단할 것인가?"에 대한 어려움
→ 특히 비정형 문제(예: AI, UI, 추천 시스템 등)에서 자주 발생

예를 들어,

"AI가 생성한 답변이 ‘좋다’는 걸 어떻게 정의하지?"
이럴 때가 바로 오라클 문제.


⚙️ 6. 오라클의 구현 예시

✅ 단위 테스트에서의 오라클

@Test
void addTest() {
    int result = calculator.add(2, 3);
    assertEquals(5, result); // True Oracle
}

✅ 회귀 테스트에서의 오라클

# 기존 버전과 새 버전의 결과 비교
diff old_output.txt new_output.txt

✅ 휴리스틱 오라클 예시

 
assert 0 <= temperature <= 100  # 허용 범위 내면 통과

🧾 7. 정리 요약

항목 내용
정의 테스트 결과의 옳고 그름을 판단하는 기준
목적 자동화된 테스트에서 신뢰성 있는 검증 수행
종류 True / Sampling / Heuristic / Consistent
오라클 문제 명확한 정답 기준이 존재하지 않는 상황

💡 요약:

  • 테스트 오라클은 **'정답'**을 판별하는 **'기준'**이다.
  • 오라클이 없으면 테스트는 무의미하다. (결과가 맞는지 알 수 없으므로)
  • 실제 현업에서는 휴리스틱 오라클일관성 오라클이 가장 많이 활용되며, 참 오라클은 이상적이지만 비현실적이다.

 

LIST