[시나공] 테스트 오라클·테스트 하네스·순환 복잡도 정리 (정적·동적 분석 포함)

2026. 3. 5. 11:02Certifications/정보처리기사 실기

1️⃣ 테스트 오라클(Test Oracle)

✅ 개념

  • 테스트 결과가 올바른지 판단하기 위해 사전에 정의된 값을 비교하는 기준
  • 테스트 케이스 실행 후 예상 결과와 실제 결과를 비교하여 오류를 판별

🔹 특징

  • 결과 판단 기준 제공
  • 테스트 자동화에서 중요한 역할
  • 예상 결과를 계산하거나 확인하는 방식 사용

🎯 포인트

  • “예상 결과 vs 실제 결과 비교” → 테스트 오라클

2️⃣ 테스트 오라클의 종류

종류 의미 특징
참(True) 오라클 모든 테스트 케이스의 입력 값에 대해
정확한 기대 결과를 제공하는 오라클
발생 가능한 모든 오류 검출 가능
가장 이상적인 형태
샘플링(Sampling) 오라클 특정 테스트 케이스에 대해서만
기대 결과를 제공
하는 오라클
전수 테스트가 어려운 경우 사용
휴리스틱(Heuristic) 오라클 일부 입력 값에 대해 기대 결과를 제공하고
나머지는 추정으로 판단하는 오라클
경험이나 직관 기반으로 결과 판단
일관성 검사(Consistent) 오라클 애플리케이션 변경 전과 변경 후의
실행 결과가 동일한지
비교하는 오라클
회귀 테스트에서 활용


3️⃣ 테스트 자동화 도구

도구 특징 주요 내용
정적 분석 도구
(Static Analysis)
프로그램을
실행하지 않고 코드 분석
· 코딩 표준 / 코딩 스타일 / 코드 복잡도
  / 메모리 누수 / 스레드 결함 분석
· 대표 도구
: PMD, Checkstyle, SonarQube, Cobertura
테스트 케이스
생성 도구
테스트 케이스 자동 생성 · 자료 흐름도 기반 생성
· 기능 테스트 기반 생성
· 입력 도메인 분석
· 랜덤 테스트
테스트 실행 도구 스크립트 기반
테스트 자동 실행
· 테스트 데이터와 테스트 절차를 자동 실행
성능 테스트 도구
(Performance Test)
시스템 성능 측정 · 처리량(Throughput)
· 응답시간(Response Time)
· 경과시간(Turn Around Time)
· 자원사용량(Resource Usage)


4️⃣ 테스트 하네스(Test Harness)

✅ 개념

  • 테스트 수행 환경을 구성하는 요소들의 집합

✅ 구성 요소

구성 요소 설명
Test Driver 테스트 대상 하위 모듈 호출
Test Stub 호출되는 하위 모듈을 대신하는 가짜 모듈
Test Suites 테스트 케이스들의 집합
Test Case 테스트 입력 / 조건 / 예상 결과
Test Script 테스트 실행 절차 자동화
Mock Object 실제 객체 대신 사용하는 가짜 객체

🎯 포인트

  • Driver = 호출
  • Stub = 호출 당함

5️⃣ 결함(Fault)

✅ 개념

  • 소프트웨어가 설계와 다르게 동작하는 원인

🔹 예시

  • 오류 발생
  • 잘못된 결과 출력
  • 시스템 오동작

6️⃣ 애플리케이션 성능 측정 지표

성능 지표 설명
처리량
(Throughput)
일정 시간 동안 처리한 작업량
응답 시간
(Response Time)
요청 전달 → 응답 도착까지 걸린 시간
경과 시간
(Turn Around Time)
요청 시작 → 처리 완료까지 걸린 시간
자원 사용률
(Resource Usage)
CPU / 메모리 / 네트워크 사용량


7️⃣ 시간 복잡도(Big-O)

시간 복잡도 의미 예시
O(1) 입력 크기와 관계없이 일정 스택의 삽입, 삭제
O(log2n) 로그 증가 이진 탐색(Binary Search), 이진 트리(Binary Tree)
O(n) 선형 증가 선형 탐색(Linear Search), for문
O(nlog2n) 로그 선형 힙 정렬(Heap Sort), 2-Way 합병 정렬(Merge Sort)
O(n²) 제곱 증가 버블 정렬, 선택 정렬, 삽입 정렬
O(2ⁿ) 지수 증가 피보나치 수열


8️⃣ 순환 복잡도(Cyclomatic Complexity)

✅ 개념

  • 프로그램의 논리적 복잡도를 측정하는 지표

🔎 맥케이브 순환도(McCabe's Cyclomatic) = 순환 복잡도


✅ 계산 방법

🔹 방법 1. 영역 수를 계산

- R1 : Outside
- R2 : A-B-C
- R3 : A-C-D
- R4 : C-D 사이 영역

따라서,

순환 복잡도 = 영역 수
            = 4 (Outside 포함)

🔹 방법 2. 공식 사용

  • 공식 : V(G) = E(간선 수) - N(노드 수) + 2
V(G) = 6(간선 수) - 4(노드 수) + 2 = 4


9️⃣ 클린 코드(Clean Code) 작성 원칙

원칙 설명
가독성 누구나 이해하기 쉬운 코드 작성
단순성 코드를 간결하게 작성
의존성 배제 다른 모듈에 미치는 영향 최소화
중복성 최소화 코드 중복 제거
추상화 상위 계층은 개념 중심, 하위 계층은 구현 중심

📊 시험 포인트 정리

🔥 1) 테스트 오라클 종류 구분 문제

  • True Oracle
  • Sampling Oracle
  • Heuristic Oracle
  • Consistent Oracle

🔥 2) Driver / Stub 구분 문제

🔥 3) 정적 분석 vs 동적 분석

구분 특징
정적 분석 (Static Analysis) 실행 없이 분석
동적 분석 (Dynamic Analysis) 실행 후 분석

🔥 4) 성능 측정 지표

  • 처리량
  • 응답시간
  • 경과시간
  • 자원사용량

🔥 5) 순환 복잡도

공식 :
V(G) = E - N + 2





2025 시나공 퀵이지 정보처리기사 실기 단기완성
(저자: 강윤석, 김용갑, 김우경, 김종일 | 출판사: 길벗)

※ 본 글은 위 교재를 참고하여 학습 목적으로 재정리한 내용입니다.