IT 일반

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

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이든 에러를 나지 않는다
이렇게 모든 경우의 수를 생각하면 에러에 대비한 코딩이 방어적 프로그래밍이다.

반응형
저작자표시 (새창열림)

'IT 일반' 카테고리의 다른 글

스크립을 이용한 변조방법  (0) 2009.11.10
제노바이러스  (0) 2009.11.10
웹 표준 테스트를 위한 브라우저 종류  (1) 2009.06.12
바이너리 와 아스키의 차이점  (0) 2009.04.06
이클립스 php 플러그인  (0) 2009.01.28
웹 편집기인 네이버 smart editor의 소스를 공개합니다 : )  (0) 2009.01.05
DBMS :: Database Management System  (0) 2008.12.14
백 앤드 서버 :: Back-and Server  (0) 2008.12.14
'IT 일반' 카테고리의 다른 글
  • 바이너리 와 아스키의 차이점
  • 이클립스 php 플러그인
  • 웹 편집기인 네이버 smart editor의 소스를 공개합니다 : )
  • DBMS :: Database Management System
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바스크립트
    Java
    자바스크립트유틸
    js패턴
    읽고 싶은 책
    기초
    사고 싶은 책
    자바
    디자인패턴
    IT블로그
    iT's MY LiFE
    블로그
    JavaScript
    위시리스트
    php
    jsp
    IT 관련
    SQL
    IT·컴퓨터
    It
Dongkkase
방어적 프로그래밍 :: Defensive Programing
상단으로

티스토리툴바