센로그

[ED] 3. 선행 조건과 후행 조건 만족 여부 확인하기 본문

Effective/Effective Debugging

[ED] 3. 선행 조건과 후행 조건 만족 여부 확인하기

seeyoun 2024. 11. 11. 19:07

선행 조건과 후행 조건

  • 전자제품을 수리할 때는 가장 먼저 전원 공급 장치로부터 전기가 잘 나오는지, 그래서 회로에 잘 전달되는지부터 점검해야 한다.
    • 의외로 이 부분이 문제의 원인인 경우가 많다
  • 소프트웨어도 마찬가지로 특정 루틴에 진입하기 전의 값(선행 조건)과 루틴을 실행하고 나온 시점의 값(후행 조건)을 확인하는 것이 가장 기본적이며 중요하다.
    • 선행 조건: 프로그램의 상태와 입력값
    • 후행 조건: 프로그램의 상태와 반환값

 

선행 조건 만족 여부를 잘 확인하는 법

  • 중단점 활용
    • 루틴 호출 지점, 루틴 시작 부분, 핵심 알고리즘이 실행되는 지점에 중단점을 걸어 확인한다.
    • 의심스런 코드에서 사용하는 전역 변수, 매개 변수, 호출한 메서드가 속한 객체 등의 상태를 확인한다.
      • 값이 null이 아니어야 하는 부분이 null인지
      • 수학 함수의 경우, 전달한 값이 함수의 정의역 안인지 확인
      • 루틴에 전달된 객체나 구조체, 배열에 필요한 내용이 잘 담겨있는지 확인
      • 변수의 값이 정상 범위 안인지 확인
      • 무작위 추출 검사를 통해 루틴에 전달한 데이터 구조의 무결성을 검사
        • 일부 항목을 무작위로 선택하여 검사하는 방법
        • ex) 해당 항목에 대해 맵의 키, 값이 올바른지 검사

 

후행 조건 만족 여부를 잘 확인하는 법

  • 중단점 활용
    • 루틴의 끝, 루틴을 호출한 지점 뒤, 핵심 알고리즘의 실행이 끝나는 지점에 중단점을 걸어 확인한다.
      • 값이 정상 범위에 있다면, 실제로 결과가 정확한지 확인
      • 루틴의 부작용이 예상했던 것인지, 아니면 의심스런 코드로 인해 데이터가 손상되거나 엉뚱한 값으로 설정되어 있지 않은지 확인
      • 알고리즘에서 사용하는 자원(파일 핸들이나 락 같은)을 정상적으로 반환했는지 확인
Comments