IT 일반

방어적 프로그래밍 :: Defensive Programing

Dongkkase 2009. 1. 5. 10:48
반응형
오류의 종류
  • 입력값이 예상 범위 밖
  • 파일이 열리거나 닫혀 있거나, 읽기/쓰기 권한이 정확하지 않을 경우
  • 포인터가 널일 경우
  • 최적화된 코드가 원래 코드와 일치하지 않을 경우

오류 검사해야 하는 장소

  • 외부의 입력값이 들어 올때
  • 매개 변수 값으로 받은 값 검사
  • 함수에서 리턴값을 검사

견고성과 정확성을 구분하라.
  • 게임을 하다가 화면이 잠시 흐려졌다고, 게임 프로그램을 죽이면 안되는데, 이런 것을 견고성이라고 한다.
    하지만 암 검진 프로그램에서 조금 어긋난 값이 나왔을 경우, 이것을 계속 실행시키면 큰일 나므로, 이때는 프로그램을 죽여야한다.
     이런 성질은 정확성이라고 하는데, 이 둘 사이의 예외처리를 잘 구분해야한다.

오류 처리 방법
  • 중립값 리턴, 다음값으로 치환, 이전 값으로 치환,가장 가까운 값으로 치환, 종료시킨다.

Defensive Programing

[Defensice Programing 에대한 위키피디아]
원문
Defensive programming is sometimes referred to as secure programming by computer scientists who state this approach minimizes bugs[citation needed]. Software bugs can be potentially used by a cracker for a code injection, denial-of-service attack or other attack.

....

중간생략


원문에 포함된 C언어로 작성된 코드를 예제로 보자

int low_quality_programming(char *input){
  char str[1000+1]; // one more for the null character
  strcpy(str, input); // copy input
  ...
}


위의 코드를 보자면  문자열이 1000이 넘으면 에러가 난다. 이런 에러를 대비 해서 코딩한게 아래의 예제 코드이다.

int high_quality_programming(char *input){
  char str[1000+1]; // one more for the null character
  strncpy(str, input, 1000); // copy input, only copy a maximum length of 1000 characters
  str[1000] = '\0'; // add terminating null character
  ...
}


위의 코드를 보자면 문자열이 1001이든 10000이든 에러를 나지 않는다

이렇게 모든 경우의 수를 생각하면 에러에 대비한 코딩이 방어적 프로그래밍이다.
반응형