본문 바로가기

프로그램언어/code complate

[ Code Complate 2 ] 9 의사코드 프로그래밍 프로세스

[[ 정리중 ]]
  이 부분은 클래스의 전반적인 설계에 대한 이해있어야 하며, 설계와 문서 작성 시에 필요한 작업을 줄이고 이들의 품질을 향상시키는 의사코드 프로그래밍 프로세스( Pseudocode Programming Process, PPP ) 에 대한 설명을 하고 있습니다. 다시말하면 본 문의 내용은 네이밍 규칙 및 클래스 설계에 주안점을 두고 있습니다.

요약
9.1 클래스와 루틴을 작성하는 단계에 대한 요약
9.2 전문가를 위한 의사코드
9.3 PPP를 사용한 루틴 구현
9.4 PPP의 대안


9.1 클래스와 루틴을 작성하는 단계에 대한 요약
  클래스의 일반적인 설계를 작성하고, 루틴을 열고한 다음 구현에 따른 검사를 반복적인 절차에 대해 이야기 하고 있습니다.
  • 클래스 작성 단계
    • 클래스에 대한 일반적인 설계를 작성한다.
    • 클래스 내의 각 루틴을 구현한다.
    • 클래스를 전체적으로 점검하고 테스트한다.
  • 루틴을 작성하는 단계


9.2 전문가를 위한 의사코드
  "의사코드( pseudocode )"의 용어는 알고리즘이나 루틴, 클래스, 프로그램이 어떻게 작동할 것인지를 기술하는 비형식적이고 영어와 같은 표기법을 가리킨다. [ 네이밍 규칙 ]

  • 구체적인 연산을 정확하게 기술하는 영어와 같은 명령문을 사용
  • 대상의 프로그래밍의 문법적 요소를 피한다 [ 문법적 구성 개념을 사용하면, 문법적 제약을 가한다. ]
  • 의사코드를 목적 수준으로 작성한다.
  • 의사코드는 자동코드가 될 수 있을 만큼의 낮은 수준으로 작성하라.
    • 의사코드를 작성하면 주위에 코드를 작성하고 의사코드를 프로그래밍 주석으로 변경하라.
    • 의사코드 방식을 사용했을 때의 기대할 수 있는 이득
      • 의사코드로 인해 검토가 쉬워진다.
      • 의사코드는 반복적인 개선을 지원한다.
      • 의사코드는 변경을 쉽게 만든다.
      • 의사코드는 주석을 작성하는 노력을 최소화한다.
      • 의사코드는 설계 문서화의 다른 형태보다도 유지 보수하기가 쉽다.


9.3 PPP를 사용한 루틴 구현
  루틴을 구현하기 위해서 필요한 다음과 같은 활동을 기술

  • 루틴을 설계한다.
    • 사전에 필요한 조건들을 검사한다.
    • 루틴이 해결할 문제를 정의한다.
      • 루틴이 숨길 정보
      • 루틴에 대한 입력
      • 루틴으로부터의 출력
      • 루틴이 호출되기전에 참이어야 하는 선행조건들(특정한 범위 내에 있는 입력 값, 초기화된 스트림, 열기거나 닫힌 파일, 채워지거나 내보내진 버퍼 등)
      • 호출한 쪽에 제어권을 넘기기 전에 루틴이 참임을 보장하는 후행 조건들( 지정된 범위 내에 있는 출력 값, 초기화된 스트림, 열리거나 닫힌 파일, 채워지거나 내보내진 버퍼등 )
    • ErrorMessage 처리에 대한 설명
      • 루틴은 두 가지 사실, 오류 메시지 텍스트와 현재 처리중인 방법(대화식 또는 명령줄)을 감추기
      • 루틴에 보장되어야 하는 선행 조건이 없다.
      • 루틴에 대한 입력은 오류 코드이다.
      • 두 종류의 출력이 있다. 첫 번째는 오류 메시지이며, 두 번째는 ErrorMessage 호출 루틴에 대한 리턴하는 상대 값
      • 루틴은 상태 값이 Success or Failure 값 중 하나를 보장
    • 루틴의 이름을 짖는다. [ 루틴은 분명하고 모호하지 않은 이름을 가져야 함 ]
    • 루틴을 어떻게 테스트할 것인지 결정한다.
    • 표준 라이브러리에서 가능한 기능을 조사한다.
    • 오류 처리에 대해서 생각한다.
    • 효율성에 대해서 생각한다.
    • 알고리즘과 데이터 형을 조사한다.
    • 의사코드를 작성한다.
    • 데이터에 대해서 생각한다.
    • 의사코드를 검사한다.
    • 의사코드에서 몇 가지 아이디어들을 시험해 본 후, 가장 좋은 방법을 유지한다.(반복한다.)
  • 루틴의 코드를 작성한다.
    • 루틴의 선언부를 작성한다.
    • 의사코드를 고수준의 주석으로 변환한다.
    • 각각의 주석 아래에 코드를 채운다.
    • 코드가 더 나뉘어져야 하는지 검사한다.
  • 코드를 검사한다.
    • 루틴을 컴파일한다.
      • 컴파일러의 경고 수준을 가장 높은 수준으로 설정한다.
      • 유효성 검사기(validator)을 사용한다.
      • 모든 오류 메시지와 경고의 원인을 제거한다.
    • 코드를 디버거에서 한 단계식 살펴본다.
    • 루틴에 있는 오류를 제거한다.
  • 미해결된 부분을 정리한다.
    • 루틴의 인터페이스를 검사한다.
    • 일반적인 설계 품질을 검사한다.
    • 루틴의 변수를 검사한다ㅏ.
    • 루틴의 명령문과 논리적인 구조를 검사한다.
    • 루틴의 배치를 검사한다.
    • 루틴의 문서화를 검사한다.
    • 불필요한 주석을 제거한다.
  • 필요한 만큼 단계를 반복한다.


9.4 PPP의 대안
  PPP는 클래스와 루틴을 생성하기 위한 최고의 방법이다.

  • 테스트-우선 개발( Test-first development) 테스트 우선은 테스트 케이스가 코드를 작성하는 것보다 먼저 작성되는 유명한 개발 방법이다.
  • 리펙토링
  • 계약에 의한 설계
  • 해킹