문서 읽는 데 51분 · 18강 · 2과목 · 소프트웨어 개발

통합 테스트와 성능 개선

목차 22
전체 59강 중 18강 · 2과목 · 소프트웨어 개발

17강이 테스트 케이스 설계와 레벨별 테스트(단위→통합→시스템→인수)였다면, 18강은 그중 통합 단계의 본격 정량·예제 다. 단위 테스트를 통과한 모듈을 어느 순서로 합치는가(통합 4방식·스텁/드라이버), 코드 내부를 얼마나 검증했는지 어떻게 수치화하는가(커버리지·순환 복잡도 V(G)), 입력을 어떻게 설계해 검증하는가(블랙박스 6기법), 시스템 성능을 어떻게 측정·개선하는가(성능 테스트)까지 한 번에 잡는다. 매 회차 한 문제 이상 보장되는 정조준 단원이며, 13강 단위 테스트(JUnit)·14강 Git·16강 Jenkins·17강 회귀가 여기서 CI 파이프라인으로 수렴한다.

핵심 암기: 통합 4방식 하상빅샌 · 가짜 모듈 매칭 하스상드(하향=스텁 / 상향=드라이버) · 순환 복잡도 V(G) = E − N + 2(보조 P+1) · 분기 커버리지 50% = 분기 1개 / 전체 2개 · 블랙박스 6기법 동경결상유원 · 성능 테스트 4종 성부스내 · 측정 4지표 응처자경 · 커버리지 강도 문장 < 분기 < 조건 < 경로


통합 테스트 — 모듈을 어느 순서로 합치는가

하향식 통합 + 스텁(Stub) ·통합 테스트·1순위·

[정의] 통합 테스트(Integration Testing) = 단위 테스트를 통과한 여러 모듈을 결합해 모듈 간 인터페이스·데이터 전달·상호작용에 결함이 없는지 검증하는 단계. 핵심 질문은 하나 — "단위 테스트를 통과한 모듈 수십 개를 어느 순서로 합칠 것인가?" 그 답이 4방식이다.

[표] 통합 4방식 — 하상빅샌.

# 방식 진행 방향 가짜 모듈
향식(Top-Down) 위층 → 아래층 스텁(Stub)
향식(Bottom-Up) 아래층 → 위층 드라이버(Driver)
뱅(Big Bang) 한꺼번에 없음
드위치(Sandwich) 위·아래 동시 스텁 + 드라이버

[정의] 하향식 통합 = 최상위 모듈부터 시작해 점진적으로 하위 모듈을 결합. 미완성 하위 모듈 자리에 스텁(Stub) 을 넣어 호출이 정상 동작하는지 검증. 진행 우선순위는 깊이 우선·너비 우선 두 가지.

텍스트
[하향식 — 위에서 아래로]
   상위 모듈(메인 컨트롤러)     진짜로 먼저 검증
      | 호출 
   Stub  Stub  Stub           하위 자리는 임시 골조(고정 응답)
    상위 검증 끝나면 Stub 자리에 진짜 하위 모듈 점진 투입  최하위까지 반복

[정의] 스텁(Stub) = 아직 구현되지 않은 하위 모듈을 대신하는 가짜 모듈. 호출되면 미리 약속된 고정 응답만 반환. 하향식 통합의 표준 도구.

스텁 4본질 내용
위치 하위 자리(Callee)
역할 호출당하는 쪽
동작 고정 응답만 반환(예: return "OK")
사용 하향식 미완성 하위 대체

💡 하향식은 빌딩을 옥상부터 짓는 공사다. 옥상은 진짜로 완성하고 아래층은 임시 골조(스텁) 로 받쳐 "옥상이 보낸 무게를 골조가 잘 받나"를 확인한다.

장점 단점
상위 컨트롤·UI 흐름을 일찍 검증 하위 모듈 결함이 늦게 발견
주요 시나리오 조기 시연 스텁 작성 비용(하위 수만큼)

🔑 암기 하향식 = 위→아래 + 스텁 / 스텁 = 하위·호출당함·고정 응답. ⚠️ 함정 스텁 vs 목(Mock) 구분 — 스텁은 고정 응답 반환(통합·하위 대체), 목은 호출 행위 검증(단위·외부 의존 격리). '호출 행위를 검증한다'가 보이면 스텁이 아니라 목. 🎯 빈출 '최상위부터 + 하위 자리 고정 응답' 설명→용어 매칭이 거의 매회. 스텁·드라이버 자리 뒤바꿈이 단골. 📝 기출 설명→용어형 · 소거형.

상향식 통합 + 드라이버(Driver) ·통합 테스트·1순위·

[정의] 상향식 통합(Bottom-Up) = 최하위 모듈부터 시작해 점진적으로 상위 모듈을 결합. 미완성 상위 모듈 자리에 드라이버(Driver) 를 넣어 하위 모듈에 가짜 호출을 보내며 검증. 하위 모듈 여러 개를 묶은 클러스터(Cluster) 단위로 검증한다.

텍스트
[상향식 — 아래에서 위로]
   Driver                     상위 자리에서 가짜 호출 발사
      | 호출 
   Mod  Mod  Mod              하위 모듈들은 진짜(실 동작)
    하위 클러스터부터 검증  점진적 상위 투입  Driver 제거  최상위까지 반복

[정의] 드라이버(Driver) = 아직 구현되지 않은 상위 모듈을 대신하는 가짜 모듈. 하위 모듈에 시나리오 입력값을 자동으로 보내고 결과를 수집. 상향식 통합의 표준 도구.

드라이버 4본질 내용
위치 상위 자리(Caller)
역할 호출하는 쪽
동작 시나리오 입력 자동 발사 + 결과 수집
사용 상향식 미완성 상위 대체

💡 상향식은 빌딩을 1층부터 짓는 공사다. 1·2층은 진짜로 완성하고 위층은 임시 운전실(드라이버) 에서 "5톤 받쳐봐" 같은 가짜 명령을 자동으로 내려보낸다. 스텁이 수동(고정 응답)이라면 드라이버는 능동(자동 발사)이라는 게 결정적 차이.

장점 단점
하위 핵심 로직(거래·정산) 일찍 검증 UI·상위 흐름 검증이 늦음
입출력 결함 조기 노출 드라이버 작성 비용(클러스터 수만큼)

🔑 암기 상향식 = 아래→위 + 드라이버 / 드라이버 = 상위·호출함·시나리오 자동 실행. ⚠️ 함정 '시나리오 자동 실행'은 드라이버의 결정적 정의어. '고정 응답'이 나오면 스텁, '시나리오 자동'이 나오면 드라이버. 🎯 빈출 '최하위부터 + 상위 자리 + 시나리오 자동' 설명→용어 매칭 단골. 📝 기출 설명→용어형.

★하스상드★ — 스텁 vs 드라이버 즉답 매트릭스 ·통합 테스트·시그니처·1순위·

[정의] 하스상드 = 하향식 = 텁 / 상향식 = 라이버. 위치·방향·동작 세 축이 모두 정반대라 자리 뒤바꿈 함정이 가장 흔하다. 이 한 장이면 스텁/드라이버 어떤 함정 보기든 1초에 갈린다.

[표] 세 축 정반대 매트릭스.

비교 축 스텁 (Stub) 드라이버 (Driver)
통합 방식 향식(Top-Down) 향식(Bottom-Up)
자리(위치) 하위(Callee) 상위(Caller)
방향(역할) 호출당하는 호출하는
동작 고정 응답 반환(수동) 시나리오 자동 실행(능동)
텍스트
[하향식 = 스텁]
   진짜 상위 모듈
      | 호출 
   Stub(가짜 하위)   고정 응답 반환

[상향식 = 드라이버]
   Driver(가짜 상위)
      | 자동 호출 
   진짜 하위 모듈

🔑 암기 하스상드 — 하향식이면 스텁(하위·받음), 상향식이면 드라이버(상위·보냄). ⚠️ 함정 '하향식 - 드라이버'·'상향식 - 스텁'은 자리 뒤바꿈 함정. 위치·방향·동작이 전부 반대라 한 글자만 바꿔도 오답. 🎯 빈출 스텁/드라이버 매칭은 통합 출제의 70%가 집중되는 1순위. '하향식이면 무조건 스텁' 한 줄로 차단. 📝 기출 설명→용어 매칭형 매회 변형 출제.

빅뱅 & 샌드위치 + 4방식 종합 비교표 ·통합 테스트·

[정의] 빅뱅(Big Bang) = 모든 모듈을 각각 완성한 뒤 한꺼번에 결합해 통합. 스텁·드라이버가 필요 없고(한 방에 합치니까) 점진적 통합이 아니다. 다수 모듈 동시 오류 시 격리가 곤란해 결함 추적이 가장 어렵다. 모듈 5~10개 미만 소규모에만 권장.

[정의] 샌드위치(Sandwich / 하이브리드) = 하향식 + 상향식을 동시에 진행해 가운데 목표 계층에서 만나는 방식. 상위는 스텁, 하위는 드라이버 — 스텁·드라이버를 둘 다 사용. 하향·상향의 장점을 결합.

💡 빅뱅은 부품을 다 만들어두고 한꺼번에 폭탄식으로 결합 — 안 굴러가면 수십 개를 다시 분해해 원인을 찾아야 한다. 샌드위치는 터널 공사 — 양쪽 입구에서 동시에 파 가운데서 만나니 일정이 단축되지만, 만나는 좌표(중간 계층)가 정확해야 한다.

[표] 하상빅샌 종합 — 시험장에서 이 한 장만 떠올리면 4방식 어떤 문제든 즉답.

비교 축 하향식 상향식 빅뱅 샌드위치
진행 방향 위 → 아래 아래 → 위 한꺼번에 양쪽 동시
가짜 모듈 스텁(하위) 드라이버(상위) 없음 스텁+드라이버
점진적 통합
결함 추적 보통 보통 ⚠️ 가장 어려움 보통
조기 검증 강점 상위 흐름 하위 핵심 로직 양쪽
임시 모듈 비용 스텁 多 드라이버 多 없음 둘 다 多

🔑 암기 4방식 중 빅뱅만 한꺼번에(점진 ❌·가짜 모듈 ❌) / 샌드위치 = 하향+상향 동시 + 둘 다 사용. ⚠️ 함정 '빅뱅 = 점진적·단계적·순차적'은 100% 함정(빅뱅은 한꺼번에). '샌드위치 = 스텁만'도 함정(둘 다 사용). '빅뱅 = 대형·금융 권장'도 함정(소규모 적합). 🎯 빈출 '점진적 통합이 아닌 것?' 소거형에서 빅뱅이 정답. 📝 기출 소거형(부정) 단골.


화이트박스 정량 — 코드 내부를 얼마나 검증했나

화이트박스 커버리지 4종 — 문장 < 분기 < 조건 < 경로 ·테스트 기법·1순위·

[정의] 커버리지(Coverage) = 코드 내부를 보며 얼마나 검증했는지를 수치(%)로 나타내는 화이트박스 정량 지표. 강도 순서가 곧 정답이다.

텍스트
[커버리지 강도 — 약함  강함]
   문장(Statement) < 분기(Branch) < 조건(Condition) < 경로(Path)
# 커버리지 정의
문장 모든 실행문을 최소 1회 실행 (가장 약함)
분기 모든 분기(if-else)의 참/거짓 둘 다 실행
조건 논리식 안 개별 조건의 참/거짓 둘 다 실행
경로 모든 실행 경로를 1회 이상 실행 (가장 강함)

💡 if (a>0 and b>0) 한 줄이면 — 분기는 if 자체 참/거짓 2케이스, 조건은 a·b 각각 참/거짓 최대 4케이스. 분기 = if 자체, 조건 = if 안 개별 논리식.

🔑 암기 문장 < 분기 < 조건 < 경로 — 강도 순서가 곧 정답. ⚠️ 함정 '경로 < 문장'(정반대)·'조건 = 분기'(별개) 둘이 단골. 분기는 if 한 덩어리, 조건은 그 안 논리식 하나하나. 🎯 빈출 강도 순서 매칭 거의 매회. 📝 기출 순서 배열형 · 정의 매칭형.

분기 커버리지 50% 정량 ·테스트 기법·1순위·

[공식] 분기 커버리지(%) = (실행된 분기 수 / 전체 분기 수) × 100. if-else는 분기 2개(참·거짓). 한쪽만 타면 50%, 양쪽 다 타면 100%.

Python
def grade(score):
    if score >= 60:
        return "PASS"     # 분기 1 (참)
    else:
        return "FAIL"     # 분기 2 (거짓)
테스트 케이스 탄 분기 커버리지
grade(80) 참 1개 1/2 = 50%
grade(40) 거짓 1개 1/2 = 50%
grade(80) + grade(40) 참·거짓 둘 2/2 = 100%

💡 분기 50% = 분기 1개 / 전체 2개. if가 N개면 분기 칸은 2N개, 한 칸 탈 때마다 1/(2N)씩 채워진다. 100% 달성엔 최소 2케이스 필요. 대형 서비스 단위 테스트는 보통 분기 커버리지 80% 안팎(일반론)을 머지 차단 기준선으로 둔다 — PR 단계에서 자동 측정해 미달이면 머지가 막힌다.

🔑 암기 분기 커버리지 = 탄 분기 / 전체 분기 × 100%. ⚠️ 함정 '분기 커버리지 100% = 모든 결함 검출'은 함정(커버리지 100%여도 결함 부재는 증명 못 함 — 17강 1원리). 🎯 빈출 매년 한 문제씩 나오는 계산 단골. 절대 안 흔들리는 만점 영역. 📝 기출 계산형.

★순환 복잡도 V(G) = E − N + 2★ ·테스트 기법·시그니처·1순위·

[정의] 순환 복잡도(Cyclomatic Complexity) V(G) = 프로그램의 독립 실행 경로 수를 정량화한 화이트박스 메트릭. 코드를 노드·간선 그래프로 모델링해 계산하며, 곧 최소 테스트 케이스 수의 정량 근거(맥케이브, 1976).

텍스트
[순환 복잡도 V(G) 공식]
   V(G) = E − N + 2
      E = 간선(Edge·화살표 수)
      N = 노드(Node·실행 블록 수)
      +2 = 고정 상수
   보조 공식: V(G) = P + 1   (P = 분기점·Predicate 수)

[예제 ① 그래프] if 1개짜리 흐름.

텍스트
[제어 흐름 그래프 — if 1개]
   N(노드) 6개 : 시작 조건 PASS FAIL 다음 종료
   E(간선) 6개 :  /  /  /  /  / 
   V(G) = E − N + 2 = 6 − 6 + 2 = 2   (보조 P+1 = 1+1 = 2 ✅ 일치)

[예제 ② 의사코드] 그래프 그릴 시간이 없으면 분기점 카운트 → P+1이 가장 빠르다.

Python
def calc_grade(score):
    if score >= 90:       # 분기점 1
        grade = "A"
    elif score >= 60:     # 분기점 2
        grade = "B"
    else:
        grade = "F"
    return grade

분기점 P = if 1개 + elif 1개 = 2 → V(G) = P + 1 = 3 (독립 경로 A·B·F 3개). 같은 코드를 그래프로 그려도 N=8·E=9 → 9−8+2 = 3으로 일치.

분기점(P) 카운트 규칙 P
if X / if X … else 1 (else는 0)
if … elif … else 2 (elif 추가)
while X / for x in Y 각 1
switch + case 3개 2 (case 수 − 1)

[해석] V(G) 값으로 함수 복잡도를 등급화 — V(G)가 곧 최소 테스트 케이스 수.

V(G) 범위 해석 조치
1 ~ 10 단순 안정 — 그대로
11 ~ 20 보통 함수 분리 권장
21 ~ 50 위험 리팩토링 필수
51+ 매우 위험 즉시 재설계

💡 V(G)가 높은 함수에 결함이 몰린다(결함 집중·파레토 80/20). 정적 분석 도구가 V(G) ≥ 11이면 '함수 분리 권장'을 자동 경고해 결함을 미리 방어한다.

🔑 암기 V(G) = E − N + 2 (간선 − 노드 + 2) / 보조 P + 1. ⚠️ 함정 부호·자리 뒤바꿈이 함정의 90% — E+N+2·E−N−2·N−E+2 전부 오답. +2 고정, 보조는 P+1(P−1 아님). 노드 카운트가 시작·종료 표기로 ±1 달라질 수 있으니, 문제가 준 E·N을 그대로 공식에 대입하는 게 가장 안전. 🎯 빈출 매년 한 문제 이상 정량 계산 보장되는 1순위. 공식 한 줄이면 만점. 📝 기출 계산형(E·N 대입) · 화이트박스 분류형(기초 경로).


블랙박스 6기법 — 입력을 어떻게 설계하나

★동경결상유원★ — 블랙박스 6기법 + 화이트/블랙 분류 ·테스트 기법·시그니처·1순위·

[정의] 블랙박스 테스트 = 코드 내부를 보지 않고 명세(입력·출력)만으로 검증하는 기법. 입력을 어떻게 설계할지의 6가지 방법이 동경결상유원.

# 기법 한 줄 정의
등 분할 입력 도메인을 동등 그룹으로 나눠 대표값만 검사
계값 분석 그룹 경계의 ±1 값을 집중 검사
정 테이블 입력 조건 조합을 매트릭스로 정리
태 전이 현재 상태 + 이벤트 → 다음 상태 도식화
스케이스 액터-시나리오 기반 사용자 흐름
인-결과 그래프 원인·결과를 논리 게이트로 도식화

[분류] 화이트 vs 블랙 — 이 두 줄이면 분류 함정 100% 차단.

분류 기법
화이트 — 커버리지 4종 문장 · 분기 · 조건 · 경로
화이트 — 기타 기초 경로(맥케이브 V(G)) · 데이터 흐름 · 루프
블랙 — 6기법 동경결상유원
블랙 — 기타 오류 추정 · 분류 트리

🔑 암기 블랙박스 6기법 = 동경결상유원 / 화이트 = 커버리지 + 기초 경로(V(G)). ⚠️ 함정 '동등 분할 = 화이트박스'는 매년 연속 단골(블랙박스가 정답). '순환 복잡도(V(G)) = 블랙박스'도 함정(화이트박스 기초 경로). 🎯 빈출 6기법은 매년 1~2문제. '블랙박스 아닌 것?' 소거형에 V(G)를 끼우는 함정. 📝 기출 소거형(부정) · 분류 매칭형.

동등 분할(Equivalence Partitioning) ·테스트 기법·1순위·

[정의] 입력 도메인을 동등한 처리를 받는 그룹으로 나누고, 각 그룹에서 대표값 1개씩만 검사하는 블랙박스 기법. 같은 그룹이면 같은 코드 경로를 타므로 입력 가짓수를 폭발적으로 줄인다.

Python
def grade(score):
    if score >= 90: return "A"      # 그룹 1
    elif score >= 80: return "B"    # 그룹 2
    elif score >= 70: return "C"    # 그룹 3
    else: return "F"                # 그룹 4 (0~69)
그룹 범위 대표값
A 90~100 95
B 80~89 85
C 70~79 75
F 0~69 50
유효 외 -1 · 101 -1 / 101

💡 입력 101개(0~100)를 동등 분할로 5개까지 압축 — 케이스 폭발 방지의 정량 수단. 1,000명을 다 보지 않고 학년 구간별 대표 한 명만 검사하는 것과 같다.

🔑 암기 동등 분할 = 그룹 나누기 + 대표값 1개. ⚠️ 함정 '동등 분할 = 화이트박스'는 절대 함정 — 블랙박스 6기법의 첫 번째. 🎯 빈출 거의 매회. 경계값과 한 쌍으로 출제. 📝 기출 정의 매칭형 · 분류형.

경계값 분석(Boundary Value Analysis) ·테스트 기법·1순위·

[정의] 결함이 그룹 경계 부근(±1) 에 집중된다는 가정 아래, 경계 직전 · 경계 · 경계 직후 3개 값을 집중 검사하는 블랙박스 기법. 동등 분할의 보완.

Python
def can_enter(height):
    if height >= 120: return True    # 출입 허용
    else: return False               # 거부
케이스 기대 의도
경계 직전 119 False 119 이하 거부
경계 120 True 120 정확히 허용(=포함)
경계 직후 121 True 121 이상 당연 허용

💡 코드가 if height > 120(>=가 아닌 >)이었다면 120 케이스가 실패하며 결함이 즉시 드러난다. 동등 분할이 그룹 일반을 잡고, 경계값이 경계 함정(>, >=, ==)을 잡는 보완 관계. 평범한 100·150이 아니라 119·120·121 세 값을 일부러 데려와 출입증이 정확히 갈리는지 본다.

🔑 암기 경계값 = 경계 ±1 집중 검사(직전·경계·직후 3값). ⚠️ 함정 '경계값 = 그룹 중앙값 검사'는 함정(경계값은 가장자리). 동등 분할과 역할이 다름(중앙 일반 vs 가장자리). 🎯 빈출 거의 매회. 동등 분할과 한 쌍. 📝 기출 정의 매칭형.

결정 테이블(Decision Table) ·테스트 기법·1순위·

[정의] 입력 조건의 모든 조합과 그에 따른 결과 동작을 매트릭스로 정리한 블랙박스 기법. 조건 N개면 2^N 조합. 조건이 많은 비즈니스 로직(결제·할인·권한) 검증에 최적.

조건 3개(VIP 여부 / 10만원+ 여부 / 쿠폰 여부) → 2³ = 8가지.

케이스 VIP 10만+ 쿠폰 할인율
1 Y Y Y 30%(최대)
4 Y N N 15%
6 N Y N 10%
8 N N N 0%

💡 전체 8행 = 테스트 케이스 8개 자동 생성(한 행 = 한 케이스). 어떤 입력 조합이 와도 한 행에 매칭돼 결과가 즉시 나온다 — 조건별 출제 여부로 유형을 만들어두는 출제표와 같다.

🔑 암기 결정 테이블 = 조건 조합 매트릭스 + 2^N. ⚠️ 함정 '조건 N개 → N 케이스'는 함정(2^N 조합). 조건 조합이 빠지면 결정 테이블이 아님. 🎯 빈출 결제·할인·인증 권한 도메인 표준이라 출제 빈도 1순위. 📝 기출 정의 매칭형 · 조합 수 계산형.

상태 전이(State Transition) ·테스트 기법·

[정의] 시스템이 여러 상태 사이를 옮겨다니는 흐름을 검증하는 블랙박스 기법. 현재 상태 + 이벤트 → 다음 상태 + 액션 매핑을 검증. 같은 입력도 현재 상태에 따라 결과가 다른 시스템에 적용.

텍스트
[로그인 차단 상태도]
   [정상] ──실패 5회── [차단] ──24시간 경과── [해제] ──시도── [정상]
현재 상태 이벤트 다음 상태 액션
정상 실패(1~4회) 정상 카운트 +1
정상 실패(5회째) 차단 차단 알림
차단 24시간 경과 해제 카운트 리셋
해제 로그인 시도 정상 세션 발급

💡 신호등처럼 같은 '시간 경과' 이벤트라도 빨강이면 초록, 초록이면 노랑으로 결과가 다르다. 로그인도 '시도'라는 같은 이벤트가 정상이면 인증, 차단이면 거부 — 같은 입력, 다른 결과가 핵심. 이커머스 주문 상태(대기→결제완료→배송중→완료→반품)도 상태 전이로 모델링되는 도메인 일반론(배송 완료 후 결제 취소 불가 등).

🔑 암기 상태 전이 = 상태 + 이벤트 + 다음 상태 세 요소. ⚠️ 함정 '입력이 같으면 결과도 같다'는 상태 전이의 반대 — 현재 상태에 따라 결과가 갈리는 게 핵심. 🎯 빈출 간헐 출제지만 정의 매칭으로 등장. 📝 기출 정의 매칭형.

유스케이스 + 원인-결과 그래프 ·테스트 기법·🌟·

[정의] 유스케이스(Use Case) = 액터(사용자·외부 시스템)와 시스템의 상호작용 시나리오를 식별해 각 시나리오를 테스트 케이스로 변환하는 블랙박스 기법(UML 유스케이스 다이어그램 기반). 한 시나리오 = 한 케이스 + 예외 흐름.

[정의] 원인-결과 그래프(Cause-Effect Graph) = 원인(입력)과 결과(출력) 의 관계를 AND·OR·NOT 논리 게이트로 도식화한 블랙박스 기법. 결정 테이블의 그래프 버전.

게이트 의미
AND 모든 원인이 참일 때만 결과 발생
OR 원인 중 하나라도 참이면 결과 발생
NOT 원인이 거짓일 때만 결과 발생

💡 유스케이스는 액터별 사건 흐름(영화 시나리오), 원인-결과는 AND·OR·NOT 게이트(회로 다이어그램). 둘 다 출제 빈도는 낮지만 매년 한 보기는 나온다 — 키워드 매칭만 잡으면 충분(🌟 여기까지만).

🔑 암기 유스케이스 = 액터-시나리오 / 원인-결과 = 논리 게이트(AND·OR·NOT). ⚠️ 함정 6기법에 끼는 함정 보기로 등장 — 오류 추정·분류 트리는 6기법 밖(기타). 🎯 빈출 간헐. 키워드 매칭 한 줄로 즉답. 📝 기출 분류형.


성능 테스트 — 비기능(속도·안정성) 검증

★성부스내★ — 성능 테스트 4종 ·성능 테스트·1순위·

[정의] 성능 테스트 = 정해진 부하·시간·환경 조건에서 응답 속도·처리량·자원 사용량 같은 비기능 요구사항을 만족하는지 검증하는 테스트. 4종으로 나뉜다 — 성부스내.

# 종류 부하 강도 시간 검증 의도
능(Performance) 정상 짧음 일반 운영 기준선
하(Load) 정상~한계 보통 한도 측정
트레스(Stress) 한계 초과 보통 한계 초과 거동·복구
구성(Endurance) 정상 장시간 메모리 누수 검출

💡 마라톤 페이스 4단계 — ① 평속 측정(성능) ② 점차 올려 한계 측정(부하) ③ 한계 초과 전력질주로 부상 검증(스트레스) ④ 풀코스 완주로 체력 고갈 검출(내구성). 같은 달리기지만 강도·시간·의도가 다 다르다.

🔑 암기 성부스내 — 결정적 차이는 부하 강도(정상/한계/한계 초과)와 시간(단기/장시간). ⚠️ 함정 '스트레스 = 정상 부하'(→성능)·'내구성 = 단시간 한계'(→부하)·'성능 = 한계 초과'(→스트레스). 한계 초과면 스트레스, 장시간이면 내구성. 🎯 빈출 성능 4종 분류 매회 1순위. 부하 vs 스트레스 vs 내구성 자리 뒤바꿈 단골. 📝 기출 설명→용어 매칭형.

★응처자경★ — 성능 측정 4지표 ·성능 테스트·1순위·

[정의] 4종이 '어떤 테스트를 하는가'라면, 측정 4지표는 그 안에서 '무엇을 재는가' — 응처자경.

# 지표 정의 단위
답시간(Response Time) 요청 후 첫 응답까지 시간 ms
리량(Throughput) 단위 시간당 처리 요청 수 TPS / RPS
원사용률(Utilization) CPU·메모리·디스크·네트워크 사용 비율 %
과시간(Elapsed Time) 요청 후 완료까지 전체 시간 ms / sec

💡 응답시간 vs 경과시간 = 첫 응답 vs 완료(주문→첫 음식 도착 vs 주문→식사 완료). 같은 요청도 응답시간은 짧고 경과시간은 길 수 있다(스트리밍·다단 응답). 처리량 TPS·RPS·QPS는 문맥상 거의 동의어.

🔑 암기 응처자경 — 응답(첫 응답)·처리량(TPS)·자원(%)·경과(완료까지). ⚠️ 함정 '응답시간 = 완료까지'(→경과시간)·'처리량 = CPU 사용률'(→자원사용률). 응답 vs 경과 = 첫 응답 vs 완료만 정확하면 만점. 🎯 빈출 측정 지표 매칭 단골. 응답시간과 경과시간 구분이 핵심. 📝 기출 정의 매칭형.

성능 개선 4축 + 도구 + CI 파이프라인 ·성능 테스트·

[정의] 측정한 성능을 개선하는 4축과 측정 도구. 적용 순서(일반론)는 병목 식별 → 코드(싸고 빠름) → DB → 아키텍처 → 인프라(비용↑, 마지막).

# 개선 축 한 줄 핵심
코드 최적화 알고리즘·자료구조 효율화(O(n²)→O(n log n)·캐시)
아키텍처 구조 개선(캐시 계층·CDN·비동기)
DB 인덱스·튜닝 쿼리·인덱스 최적화·N+1 차단
인프라 스케일링 Scale Up · Scale Out · Auto Scaling
도구 특징
JMeter Apache OSS · Java 기반 · 가장 널리 쓰임
LoadRunner 상용 · 금융·공공 장기 표준
nGrinder 국산 OSS · 분산 부하
K6 JS · CLI 친화 · CI 통합 쉬움

[흐름] 오늘 배운 통합·커버리지·V(G)·성능이 어디서 자동 검증되는가CI(지속적 통합) 파이프라인. CI는 특정 도구가 아니라 '자동 빌드 + 자동 테스트'라는 활동(Jenkins 등은 그 도구).

텍스트
[CI 파이프라인 — 오늘 배운 것들이 자동 검증되는 자리]
   코드 push  자동 빌드(Jenkins 등)
      
    단위(JUnit)   통합(하상빅샌)   분기 커버리지 80%   V(G) 검사   성능 회귀
      
   모두 통과  머지  배포   /   미달·실패  머지 차단

💡 13강 단위 테스트(JUnit)·14강 Git·16강 Jenkins·17강 회귀가 18강 분기 커버리지(80%)와 함께 한 파이프라인에 수렴 — CI = JUnit + Git + Jenkins + 회귀 + 분기 80%. 'PR 단계에서 자동 검증되는 항목은?' 종합형 보기의 정답 키워드.

🔑 암기 개선 4축 = 코드·아키텍처·DB·인프라(코드부터 싸고, 인프라가 마지막) / CI = 자동 빌드 + 자동 테스트 활동. ⚠️ 함정 'CI = Jenkins(도구)'는 부분 함정 — CI는 활동, Jenkins는 그 도구. '인프라 증설이 1순위 개선책'도 함정(가장 비싸 마지막). 🎯 빈출 직접 정량 출제는 낮지만 성능 4종·측정 4지표와 묶이는 종합형은 매 회차 가능. 📝 기출 종합 매칭형.


기출 다지기

[기출 1 출제] 다음 설명에 해당하는 통합 방식과 임시 모듈로 가장 적절한 것은? (설명→용어 찾기)

최상위 모듈부터 점진적으로 하위 모듈을 결합한다. 미완성 하위 모듈 자리에는 미리 약속된 고정 응답만 반환하는 가짜 모듈을 넣는다.

  • ① 하향식 - 드라이버
  • ② 상향식 - 스텁
  • ③ 하향식 - 스텁
  • ④ 빅뱅 - 드라이버
정답 및 해설 보기

정답 ③

'최상위부터 + 하위 자리 고정 응답' 두 키워드가 곧 하향식 + 스텁. 위치(하위)·방향(호출당함)·통합 방향(위→아래) 세 축이 모두 하향식+스텁이다.

선지 판정 근거
오답 하향식엔 스텁(하스상드 위반)
오답 방향 뒤바꿈 — 고정 응답은 스텁이나 방식이 상향식 ❌
정답 하향식 + 스텁 3축 일치
오답 빅뱅은 점진 통합 아님·가짜 모듈 없음

🔑 하스상드 — '하향식이면 무조건 스텁'.

[기출 2 출제] 다음 설명에 해당하는 통합 방식과 임시 모듈은? (설명→용어 찾기)

최하위 모듈부터 점진적으로 상위 모듈을 결합한다. 미완성 상위 모듈 자리에서 하위 모듈에 시나리오 입력값을 자동으로 보내고 결과를 수집하는 가짜 모듈을 사용한다.

  • ① 하향식 - 스텁
  • ② 상향식 - 드라이버
  • ③ 상향식 - 스텁
  • ④ 샌드위치 - 드라이버
정답 및 해설 보기

정답 ②

'최하위부터 + 상위 자리 + 시나리오 자동 실행' = 상향식 + 드라이버. '시나리오 자동 실행'이 드라이버의 결정적 정의어다.

선지 판정 근거
오답 방식 뒤바꿈(최하위부터는 상향식)
정답 상향식 + 드라이버
오답 상향식엔 드라이버(하스상드 위반)
오답 샌드위치도 드라이버를 쓰나 '최하위부터'와 불일치

🔑 '고정 응답'이면 스텁, '시나리오 자동'이면 드라이버.

[기출 3 출제] 다음 중 점진적·단계적 통합이 아닌 것은? (아닌 것 고르기)

  • ① 하향식
  • ② 상향식
  • ③ 빅뱅
  • ④ 샌드위치
정답 및 해설 보기

정답 ③

4방식 중 빅뱅만 모든 모듈을 한꺼번에 결합한다. 스텁·드라이버도 안 쓰고 결함 추적이 가장 어렵다.

선지 진행 점진적?
① 하향식 위→아래 점진
② 상향식 아래→위 점진
빅뱅 한꺼번에 ❌ 정답
④ 샌드위치 양쪽 동시 점진

🔑 '하상빅샌 중 빅뱅만 한꺼번에'. '빅뱅 = 점진적·단계적'·'대형 금융 권장'은 함정(소규모 적합).

[기출 4 출제] 어떤 제어 흐름 그래프의 간선 E = 6, 노드 N = 5일 때 순환 복잡도 V(G)는? (계산)

  • ① 1
  • ② 2
  • ③ 3
  • ④ 4
정답 및 해설 보기

정답 ③

단계 계산
공식 V(G) = E − N + 2
대입 6 − 5 + 2 = 3
의미 독립 경로 3개 = 최소 테스트 케이스 3개

🔑 V(G) = '간 − 노 + 2'. 함정 공식(E+N+2·E−N−2·N−E+2)만 거르면 만점. 노드 카운트가 애매하면 문제가 준 E·N을 그대로 대입.

[기출 5 출제] 아래 코드를 grade(80) 한 케이스만 실행했을 때 분기 커버리지는? (계산)

Python
def grade(score):
    if score >= 60: return "PASS"
    else: return "FAIL"
  • ① 25%
  • ② 50%
  • ③ 75%
  • ④ 100%
정답 및 해설 보기

정답 ②

단계 계산
전체 분기 if-else → 2개(참·거짓)
실행된 분기 grade(80) → 참 1개만
공식 1/2 × 100 = 50%

grade(40)만 해도 50%, 둘 다 하면 100%. 100% 달성엔 최소 2케이스 필요.

🔑 분기 50% = 분기 1개 / 전체 2개.

[기출 6 출제] 다음 중 블랙박스 테스트 기법에 해당하지 않는 것은? (아닌 것 고르기)

  • ① 동등 분할
  • ② 경계값 분석
  • ③ 결정 테이블
  • ④ 순환 복잡도(맥케이브)
정답 및 해설 보기

정답 ④

①②③은 블랙박스 6기법(동·경·결), ④ 순환 복잡도(V(G))는 화이트박스 기초 경로다.

선지 분류 정체
① 동등 분할 블랙박스 6기법(동)
② 경계값 블랙박스 6기법(경)
③ 결정 테이블 블랙박스 6기법(결)
순환 복잡도 화이트박스 기초 경로(V(G))

🔑 '동경결상유원 = 블랙 / 문장·분기·조건·경로 + 기초 경로(V(G)) = 화이트' 두 줄.

[기출 7 출제] 다음 설명에 해당하는 성능 테스트는? (설명→용어 찾기)

의도적으로 임계점을 초과하는 극한 부하를 적용해 한계점에서의 거동·복구 능력·실패 패턴을 검증한다.

  • ① 성능
  • ② 부하
  • ③ 스트레스
  • ④ 내구성
정답 및 해설 보기

정답 ③

'한계 초과 · 극한 부하 · 실패 패턴' = 스트레스.

선지 부하 강도 시간 의도
① 성능 정상 짧음 기준선
② 부하 정상~한계 보통 한도 측정
스트레스 한계 초과 보통 거동·복구
④ 내구성 정상 장시간 누수 검출

🔑 '한계 초과'면 스트레스, '장시간'이면 내구성, '점진 증가'면 부하.

[기출 8 출제] 다음 중 옳은 설명은? (옳은 것 고르기)

  • ① 동등 분할은 화이트박스 기법이다.
  • ② 순환 복잡도(맥케이브)는 블랙박스 기법이다.
  • ③ 빅뱅 통합은 점진적·단계적 통합 방식이다.
  • ④ 하향식 통합에서는 스텁(Stub)을 사용한다.
정답 및 해설 보기

정답 ④

①②③은 이 단원의 단골 함정 5쌍에 속한다.

# ⚠️ 함정 표현 ✅ 정답
'동등 분할 = 화이트박스' 동등 분할 = 블랙박스
'V(G) = 블랙박스' V(G) = 화이트박스 기초 경로
'빅뱅 = 점진적·단계적' 빅뱅 = 한꺼번에 결합
(정답) 하향식 = 스텁 하스상드 — 맞음
'V(G) = E − N − 2' E − N + 2(+2 고정)

🔑 ①분류 ②V(G) 위치 ③빅뱅 ④하스상드 ⑤부호 — 함정 5쌍만 외면 이 단원 출제의 80%를 잡는다.


한 장 요약

영역 핵심 암기팁
통합 4방식 하향식(스텁)·상향식(드라이버)·빅뱅(한꺼번에)·샌드위치(둘 다) 하상빅샌
스텁 vs 드라이버 하향=스텁(하위·호출당함·고정 응답) / 상향=드라이버(상위·호출함·시나리오 자동) 하스상드
빅뱅 한꺼번에 결합·가짜 모듈 없음·결함 추적 가장 어려움·소규모 점진적 = 함정
영역 핵심 암기팁
커버리지 강도 문장 < 분기 < 조건 < 경로 경로가 가장 강함
분기 커버리지 탄 분기 / 전체 분기 × 100. if-else 한쪽 50%·양쪽 100% 50% = 1/2
순환 복잡도 V(G) = E − N + 2 (보조 P+1). 맥케이브 1976. 곧 최소 테스트 케이스 수 E − N + 2(+2 고정)
V(G) 분기점 if/if-else=1·if-elif-else=2·while/for=각1·case N개=N−1 P + 1
영역 핵심 암기팁
블랙박스 6기법 동등분할·경계값·결정테이블·상태전이·유스케이스·원인결과 동경결상유원
화이트 vs 블랙 화이트=커버리지 4종+기초경로(V(G)) / 블랙=6기법 동등분할=블랙(함정 차단)
동등 vs 경계 동등=그룹 대표값 / 경계=경계 ±1 집중. 보완 한 쌍 중앙 vs 가장자리
결정 테이블 조건 N개 → 2^N 조합 매트릭스 2^N
영역 핵심 암기팁
성능 4종 성능(정상)·부하(정상~한계)·스트레스(한계 초과)·내구성(장시간) 성부스내
측정 4지표 응답시간(첫 응답)·처리량(TPS)·자원사용률(%)·경과시간(완료) 응처자경
성능 개선 4축 코드 → DB → 아키텍처 → 인프라(마지막·비싸다) 코드부터 싸다
CI 파이프라인 자동 빌드 + 자동 테스트 활동. 통합·커버리지·V(G)·성능 자동 검증 CI=JUnit+Git+Jenkins+회귀+분기80%

🎯 합격 한 끗: 18강 출제의 80% 이상이 두문자 셋(하상빅샌·하스상드·동경결상유원) + 공식 둘(V(G)=E−N+2 · 분기 50%) + 성능 4종(성부스내)·측정 4지표(응처자경) 안에서 나온다. 시험 직전엔 이 다섯과 함정 5쌍만 다시 훑는다.

🌟 함정 5쌍 종합(시험장 직전 5분 카드): ① '동등 분할 = 화이트박스' → 블랙박스 · ② 'V(G) = 블랙박스' → 화이트박스 기초 경로 · ③ '빅뱅 = 점진적·단계적' → 한꺼번에 결합 · ④ '하향식 = 드라이버' → 하향식 = 스텁(하스상드) · ⑤ 'V(G) = E − N − 2' → E − N + 2(+2 고정).

전체 목록 필기 이론

합격까지

정처기, 혼자 막막하다면

초개인화 학습앱 Klue와 에듀윌 온라인강의로 합격까지 이어가세요.