1 분 소요



Preconditions 과 Postconditions


프로그래머는 함수가 어떻게 작동하는지에 대한 표시 없이 함수가 수행하는 작업을 정확하게 전달해야 한다.


만약 내가 팀의 책임자고 프로그래머중 한명이 프로젝트의 일부를 위한 함수를 작성하길 원한다. 이때 요구사항을 지정하는 한가지 방법은 함수에 대한 preconditions와 postcondition을 사용하는것이다.


  • Preconditions : 사전 조건이란 뜻으로 함수의 연산의 시작 전에 참으로 가정되는 조건이다(연산이 시작할 때의 상황을 기술).

  • Postcondition : 사후 조건이란 뜻으로 메소드 종료 후 참인 것이 보장되는 조건이다(연산이 끝난 후의 상황을 기술).



사전조건과 사후조건의 예시

void write_sqrt(double x)

//   Precondition:  x  >=  0.
//   Postcondition:  x의 제곱근이 표준 출력에 기록되었다.

이처럼 사전조건과 사후조건은 프로그램에서 주석으로 나타난다. 일반적으로 함수의 파라미터 리스트 뒤에 배치된다.


  1. write_sqrt( -10 );

  2. write_sqrt( 0 );

  3. write_sqrt( 5.6 );



다음 함수중 사전조건을 만족하는 함수는 무엇일까? ***

2, 3번은 만족하고 1번은 만족하지 않는다.


다음 예시를 살펴보자

bool is_vowel( char letter )
// Precondition : 문자가 대문자이거나
// 소문자('A' ... 'Z' 또는 'a' ... 'z' 범위) .
// Postcondition :
// 문자가 모음이면 함수는 true다.
// 그렇지 않으면 함수가 return은 false
  1. is_vowel( ‘A’ );

  2. is_vowel(‘ Z’ );

  3. is_vowel( ‘?’ );


1번은 true, 2번은 빈칸이 있으므로 false, 3번은 사전조건 위반으로 에러가능


프로그래머는 함수가 사전조건을 위반했는지 미리 확인해야 한다. 이 후 함수가 끝나면 사후조건이 만족하는지 확인한다. 프로그래머는 책임을 져야 한다.


따라서 프로그래머는 사전조건이 위반되었음을 미리 감지해야 한다.



사전조건 위반 찾기


void write_sqrt( double x)
//   Precondition:  x  >=  0.
//   Postcondition:  The square root of x has
//   been written to the standard output.
{
     assert(x >= 0);
	...
}


다음과 같이 assert함수를 이용해 사전조건이 유효한지 미리 테스트한다.

댓글남기기