본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Debugging
테스트 등으로 드러난 오류의 원인을 찾아 위치를 확인하고 수정하는 활동
  • 테스트는 결함이 있다는 사실을 보여 줄 뿐 원인을 알려 주지 않는다. 디버깅은 테스트 결과를 받아 원인을 좁혀 가는 후속 활동이다.
  • 정보처리기사 2026년 필기 출제기준에서는 '데이터 조작 프로시저 작성'의 세세항목 '프로그램 디버깅'으로 다룬다.

테스트와 디버깅 비교

편집 원본 편집
구분 테스트 디버깅
목적 결함이 있음을 발견 결함의 원인을 찾아 제거
대상 요구사항과 실제 동작의 차이 드러난 실패를 일으킨 코드
수행자 개발자, 테스터, 사용자 주로 개발자
사전 지식 설계 지식 없이도 가능(블랙박스 테스트) 코드와 설계를 이해해야 함
  1. 오류 재현: 실패가 나타나는 입력과 환경을 확인하고 같은 현상을 다시 만든다.
  2. 원인 추정·분리: 실패 지점 주변의 코드와 데이터를 좁혀 가며 원인이 되는 부분을 찾는다.
  3. 수정: 원인 코드를 고친다.
  4. 확인: 같은 테스트로 수정 결과를 확인하고, 회귀 테스트로 다른 부분에 영향이 없는지 본다.

도구를 이용하는 기법

편집 원본 편집
기법 설명
브레이크포인트(Breakpoint) 지정한 줄에서 실행을 멈추고 그 시점의 상태를 살펴본다. 조건을 만족할 때만 멈추는 조건부 브레이크포인트도 있다.
단계 실행(Step) 한 줄씩 실행한다. 함수 안으로 들어가는 Step Into, 함수를 한 번에 실행하는 Step Over, 현재 함수를 끝까지 실행하고 빠져나오는 Step Out이 있다.
변수 감시(Watch) 변수와 식의 값 변화를 지켜본다.
호출 스택(Call Stack) 현재 지점까지 어떤 함수들을 거쳐 왔는지 확인한다.
로그 출력 실행 경로와 변수 값을 로그로 남겨 분석한다. 운영 환경처럼 디버거를 붙이기 어려운 곳에서 쓴다. 로그 레벨(DEBUG, INFO, WARN, ERROR)로 출력량을 조절한다.

원인을 찾는 접근법

편집 원본 편집
  • 무차별 대입(Brute Force): 메모리 덤프, 출력문 등을 대량으로 모아 살펴본다. 효율은 낮지만 다른 방법이 통하지 않을 때 쓴다.
  • 역추적(Backtracking): 실패가 나타난 지점에서 소스 코드를 거꾸로 따라가며 원인을 찾는다. 코드 규모가 작을 때 효과적이다.
  • 원인 제거(Cause Elimination): 가설을 세우고 데이터를 분할(이분법)하며 가능한 원인을 하나씩 제거한다. 귀납적·연역적 추론을 쓴다.
  • 한 번에 한 가지만 바꾸고 그때마다 결과를 확인한다.
  • 수정 후에는 원래 실패를 재현했던 테스트를 테스트 케이스로 남겨 재발을 막는다.
  • 운영 환경에서는 디버그용 출력과 디버그 모드를 끈다. 오류 메시지에 내부 정보가 노출되지 않도록 한다(Secure SDLC).
  • 테스트와 디버깅의 차이: 테스트는 결함 발견, 디버깅은 원인 추적·수정
  • 필기: 디버깅 접근법(무차별 대입, 역추적, 원인 제거) 구분
  • 구현 도구(IDE)가 지원하는 디버깅 기능: 브레이크포인트, 단계 실행, 변수 감시