자료구조 알고리즘 코딩테스트 문제풀이/알고리즘 - Do it

디버깅의 중요성 (코딩테스트 뿐만 아니라 실무에서도)

유혁스쿨 2023. 12. 7. 15:36
728x90
반응형

디버깅이란?

  • 코드의 논리 오류를 잡을때 사용하는 방법중 하나로 가장 뛰어난 오류 탐색법이라고 할 수 있다.

 

디버깅이 중요한 이유

  • log로 찍어보는것보다 훨씬 빠르고 간편하다.

 

코딩테스트 오답 예

  1. index 범위 1차이로 인한 오답
  2. int -> long 변환 - 정수 타입의 범위로 인한 오답

 

★ 디버깅 하는 법

  • 1. 코드에서 디버깅 하고자 하는 줄에 중단점(break point)을 설정한다.
  • 2. IDE 디버깅 기능을 실행한다.
    (이때 여러개의 중단점 설정이 가능하다.)

 

디버그 기능

  • Step Over : 해당 Point에서 다음 라인으로 한줄 씩 이동
  • Step Into : 해당 Point에서 메소드 호출 시 해당 메소드 내부를 1줄씩 탐색
  • Resume  : 다음 Point로 건너 뛴다
    (예를들어 point가 for문이면 다음라인으로 넘어가지않고 증감식을 증가시킨 다음 증가된 차수가 실행된다.)
  • variables : 해당 Point 이전값들과 Over로 인해 위치해있는 line에 존재하는 변수의 값들을 확인할 수 있으며
    해당 변수의 값을 수정해서 테스트 케이스를 변경할 수 있다.

 

LOG보다 DEBUGGING이 더 나은 경우

 

일반적으로 log는 debug보다 오래 걸린다.

한번에 맞추지 못하고 고쳐야 하는 경우: 이 경우 정답으로 고칠수 있느냐 없느냐는 시간싸움이다

사람 심리상 문제의 결과가 오답으로 나올 경우 지엽적으로 숲이 아닌 나무만 보게 된다.
즉, 미궁에 빠지게 된다. (빠질 수 밖에 없음...)

그래서 오류가 났을 때 LOG를 찍게되면 보통 최종 결과 라인에서 가장 가까운 라인부터 차례대로 확장해 나가면서 찍어봐야 하므로 그 기회비용이 커진다.
반면 디버그는 전체를 스캔한다. 

 

오류 상황 예

  • 변수 초기화 오류 : loop의 외부/내부 즉, 라인 한끝차이로 Global/Local로 인한 변수 초기화 오류

  • loop조건 범위 오류 : 정답이 (i=0; i<n; i++) 의 범위이지만 i의 범위가 i<=n, i<n-1혹은 i>n등 범위 비교를 잘못한경우
  • 자료형의 범위 오류 : Math.random() * Integer.MAX_VALUE

    Integer의 최대값 만큼 곱한 랜덤값 끼리 더할 경우 Int가 표현할 수 있는 최대값의 범위를 넘어가면 해당 정수는 음수가 된다.
    문제에서 '~만족하는 정수를 구하세요' 라고 주워질 때 long타입으로 바꾸는 등의 처리를 해줘야 한다.
    • 음수 대표 오류 종류
      1. 팩토리얼
      2. 경우의수
      3. 순열
      4. DP

 

 

 

 

 

 

728x90
반응형