U E D R , A S I H C RSS

Programming Pearls/Column5



1. A Small Matter of Programming

  • 발판을 마련하자.(Build scaffolding.)

1.1. From Pseudocode to C

  • 그냥 Binary Search의 슈도코드를 C문법으로 바꿔놓은 것이다.

1.2. A Test Harness

  • 루프를 정해진 횟수만큼 돌면서 테스트할 값을 일일히 입력해주고 있다.
  • 하다보면 지겹다고 해서 이 작업을 자동화해줄 발판을 다음 섹션에서 보여준다.
  • 그러면서 버그 있는 Binary Search를 보여주고 있다.
  • 큰 프로그램에서는 툴에서 제공하는 디버깅을 쓰지만, 이렇게 작은 알고리즘 같은 것에서는 print문 같은걸 쓰는게 편하다고 한다.

1.3. The art of assertion

  • c에서의 assert문을 사용하는 테크닉 같은 것을 보여주고 있다.
  • 대강 assert의 완급 조절이라는 말로 표현이 될듯하다.
  • 또한 Binary Search의 가장 중요한 전제 조건인 sort되었는가? 체크해주는 함수를 앞에다 써준다. 이 경우에는 search를 한번만 해주면 n + lg n 이렇게 될것이다. 하지만 sort되었는가 체크하는 함수는 한번만 해주면 되므로, search를 한 몇천,몇만번 돌리면 결국 lg n 에 수렴할 것이다.
  • 참고서적 : Writing Solid Code

1.4. Automated Test

  • 아까 말했던 컴퓨터가 자동으로 테스트해주는 발판을 만들어보자.
  • 별거 없다. 그냥 배열을 생성한다음, for를 정해진 횟수만큼 돌려가면서 assert체크해준다. 끝이다.--; 이렇게 함으로써, 사이즈가 0, 1, 2의 제곱수, 2의 제곱수가 아닌수 모든 경우의 수를 테스트해볼수가 있다.

1.5. Timing

  • 역시 별루 볼 거 없다. search 1000번 이상한다음 걸린 시간에 대해 그래프를 그려보면, lg n 의 그래프가 나온다.

1.6. The Complete Program

  • 역시 별말 없다.

1.7. Principles

  • Scaffolding
  • Coding : 하이레벨의 슈도코드로부터 시작하자.
  • Testing : 큰 시스템보다는 발판 내에서 테스트하는게 훨씬 쉽다.
  • Debugging : 발판이랑 고립된 프로그램이나, 임베디드된 곳에서는 하기가 힘들다. Column5에서 설명한다.
  • Timing


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0120 sec