437. 참 오라클 (True Oracle)
⚠️ 이 문서는 소프트웨어 테스팅에서 사용자가 넣을 수 있는 무한대에 가까운 모든 입력값(All Inputs)에 대해 단 하나의 예외도 없이 100% 완벽한 정답(Expected Result)을 미리 알고 제공할 수 있는 궁극적이고 이상적인 판정 기준인 **'참 오라클(True Oracle)'**을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 참 오라클(True Oracle)은 수학의 절대 공식처럼, 시스템에 어떤 미친 값을 집어넣더라도 "그거 결과는 무조건 3.14159야!"라고 정확하게 대답해 주는 완벽한 테스트 정답지다.
- 한계: 입력 변수가 3개만 넘어가도 조합의 수가 수억 개를 돌파하기 때문에(Combinatorial Explosion), 현실의 거대한 비즈니스 시스템에서 참 오라클을 엑셀이나 코드로 전부 만들어 두는 것은 불가능에 가깝다.
- 적용 분야: 비용이 천문학적으로 들더라도 단 1%의 오차도 허락할 수 없는 우주선 궤도 계산, 원자력 발전소 제어, 금융 코어 뱅킹 등 미션 크리티컬(Mission Critical) 시스템의 핵심 모듈에서만 제한적으로 구현된다.
Ⅰ. 개요: 완벽한 채점자의 딜레마 (Context & Necessity)
우리가 두_숫자_더하기(a, b)라는 아주 작은 함수를 만들었다.
이 함수의 테스트 오라클을 만드는 건 쉽다. a가 1이고 b가 2면, 오라클(정답지)은 3이다. 수학적으로 너무 명백하므로, 모든 경우의 수에 대해 100% 참 오라클을 세울 수 있다.
하지만 구글 지도의 최적_경로_찾기(출발, 도착, 현재교통상황) 함수의 참 오라클을 만들 수 있을까?
출발지와 도착지 조합만 수조 개이고, 날씨, 사고, 신호등 등 변수가 무한대다. 테스터가 "음... 이 상황에서는 강변북로로 가는 게 100% 정답이야!"라고 수학적으로 증명해 놓은 정답지를 미리 만들어 둘 수가 없다. 오라클이 없으니 테스트의 결과를 100% 신뢰할 수 없는 **오라클 문제(Oracle Problem)**가 발생한다.
그럼에도 불구하고 인간은 100%를 보장해야 할 때가 있다. 비행기 엔진 제어 소프트웨어라면 어떨까? 무한대의 경우의 수가 있더라도, 인간은 수백억 원의 돈을 태워서라도 모든 바람과 고도에 대한 완벽한 정답표, 즉 **참 오라클(True Oracle)**을 기어코 만들어내야만 생명을 살릴 수 있다.
📢 섹션 요약 비유: 수능 시험에서 1번부터 30번까지의 모든 정답이 한 치의 오차 없이 완벽하게 적혀있는 '평가원 공식 정답지'가 바로 참 오라클입니다. 채점관(테스트 프레임워크)은 학생의 답이 이 정답지와 똑같은지 기계적으로 대조하기만 하면 100% 완벽한 채점을 끝낼 수 있습니다.
Ⅱ. 참 오라클 구축 방법론 (How to build?)
현실에서 불가능해 보이는 참 오라클을 억지로라도 만들어내는 몇 가지 엔지니어링 전략이 있다.
- 병렬 시스템 교차 검증 (N-Version Programming)
- 가장 무식하지만 확실한 방법이다. 비행기 엔진 제어 시스템을 만들 때, A팀, B팀, C팀을 서로 격리시킨 채 똑같은 명세서를 주고 각자 코드를 짜게 한다.
- 테스트할 때 세 시스템에 똑같은 입력값을 준다. A, B, C가 뱉어낸 결과가 3개 다 일치하면 그것을 '참 오라클(정답)'로 인정한다.
- 이전 버전의 황금 표준 (Gold Standard / Pseudo-Oracle)
- 새로 만든 회계 시스템이 복잡해서 정답을 모르겠을 때, 이미 10년 동안 버그 없이 완벽하게 돌아가고 있던 옛날 회계 프로그램의 결괏값을 '참 오라클'로 맹신하고 비교한다.
- 수학적 명제 및 역연산 (Inverse Operation)
- RSA 암호화 모듈을 테스트할 때 정답을 미리 알긴 어렵다.
- 하지만 "암호화한 것을 다시 복호화하면 원래 글자가 나와야 한다"라는 절대적인 역연산 수학 공식을 참 오라클로 삼아 자동화 테스트를 짠다.
┌─────────────────────────────────────────────────────────────────────────────┐
│ 참 오라클(True Oracle)이 필요한 무한대의 경우의 수 (폭발) 시각화 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 🧮 [ 두 수 더하기 함수 ] │
│ 입력값: X (1~10), Y (1~10) │
│ 경우의 수: 100개 -> 엑셀로 정답 100개 만들기 쌉가능! (참 오라클 ⭕) │
│ │
│ 🚀 [ 우주선 자동 착륙 함수 ] │
│ 입력값: 고도, 풍속, 연료량, 엔진온도, 기체기울기, 중력... (무한 연속값) │
│ 경우의 수: 수조 개 X 수조 개 = 💥 뇌 정지 (조합 폭발) │
│ │
│ [ 결단 ] "아무리 돈이 들어도, 수퍼컴퓨터로 시뮬레이션해서 수조 개의 │
│ 정답표(참 오라클)를 억지로라도 다 뽑아내라!" (미션 크리티컬) │
└─────────────────────────────────────────────────────────────────────────────┘
Ⅲ. 현실과의 타협 (참 오라클의 포기)
사실상 우주항공이나 원자력을 제외한 99%의 IT 프로젝트(쇼핑몰, 게임, SNS)에서 참 오라클을 구축하는 것은 가성비(ROI)가 최악인 짓이다. 쇼핑몰 할인 쿠폰 로직의 정답지를 100만 개 만들어두느라 출시가 1년 지연되는 것보다, 대표적인 쿠폰 10장만 테스트(샘플링 오라클)하고 오픈한 뒤 터지는 버그를 고치는 게 회사의 돈을 아끼는 길이다.
따라서 테스트 설계자는 어떤 핵심 모듈(결제 금액 계산)에 100% 참 오라클을 적용할지, 어느 화면(UI 애니메이션)에 경험적 오라클(휴리스틱)을 적용할지를 경영학적인 시선에서 타협하며 분배해야 한다.
Ⅳ. 결론
"완벽함이라는 신기루를 쫓는 테스트 공학의 이데아." 참 오라클(True Oracle)은 모든 소프트웨어 테스터가 꿈꾸는 궁극의 무기다. 세상의 모든 입력과 출력의 쌍이 매핑된 완벽한 신탁(Oracle)의 딕셔너리만 있다면, 테스팅은 그저 기계적으로 키보드를 누르는 반복 작업에 불과할 것이다. 그러나 현실의 비즈니스 복잡성은 이 신탁의 완성을 결코 허락하지 않기에, 우리는 참 오라클의 이상을 쫓으면서도 현실에서는 휴리스틱(Heuristic)과 샘플링이라는 불완전한 도구를 들고 끊임없는 버그와의 사투를 벌이는 것이다.
📌 관련 개념 맵
- 전제되는 문제: 오라클 문제 (Oracle Problem - 정답을 구할 수 없는 현상)
- 오라클의 4대 유형: 참(True), 샘플링(Sampling), 휴리스틱(Heuristic), 일관성(Consistent)
- 구현 기법: N-Version 프로그래밍, 역연산(Inverse Operation) 테스트, Gold Standard
- 적용 분야: 무기 체계, 의료 기기, 우주항공 등 미션 크리티컬 시스템
👶 어린이를 위한 3줄 비유 설명
- 선생님이 내준 숙제 중에 "1 더하기 1은?" 같은 문제는 누구나 정답이 '2'라는 걸 100% 확실하게 알 수 있죠.
- 이렇게 세상의 모든 질문에 대해서, 단 1%의 틀림도 없이 완벽하고 절대적인 정답을 척척 알려주는 '마법의 전지전능한 정답 책'을 소프트웨어 세상에서는 참 오라클이라고 불러요.
- 하지만 스마트폰이나 게임처럼 너무나 복잡한 세상에서는 이 '마법의 정답 책'을 만드는 데 돈과 시간이 너무 많이 들어서, 아주 중요한 로켓을 만들 때 빼고는 잘 쓰지 못한답니다.