-
간단한 데이타베이스를 TDD 로 개발하기 1회: dump-dbProgrammer/Programming 2014. 3. 19. 09:47
앞으로 몇번에 걸쳐서 연재할 내용은 Peter Seibel가 쓴 “Practical Common Lisp” 중에 3장 “A Simple Database”를 테스트 주도 개발(Test-Driven Development: TDD)로 재구성한 것이다. 책과 비교해서 프로그램의 작성 순서만 달리할 뿐 소스는 책의 것과 같다.
이번 연재에는 테스트 프레임워크로 lisp-unit을 이용한다
CD 데이타베이스인 cd-db 패키지와 테스트가 있는 cd-tests 패키지로 분리하여 개발을 시작한다.
(defpackage :cd-db (:use :common-lisp) (:export #:dump-db)) (in-package :cd-db) (defpackage :cd-tests (:use :common-lisp :lisp-unit :cd-db)) (in-package :cd-tests)
DB의 저수준의 형태를 그대로 출력하는 기능부터 시작해보자. 실제 사용할 인터페이스와 출력 결과를 상상하면 된다. 함수 이름은 dump-db이며, 아무런 인자 없이 호출된다. 출력 포맷은 리습에서 다루기 쉬운 리스트를 사용하자. DB는 CD의 레코드를 가지는 리스트이고, 각 레코드는 키-값 방식의 속성 리스트(property list, 줄여서 plist) 형태의 리스트이다. 키는 제목(title), 아티스트(artist), 순위(rating), 리핑 여부(ripped)으로 구성된다.
하나의 레코드는 아래와 같이 표현되며,
(:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t)
DB는 이와 같은 레코드의 리스트로, dump-db를 수행하면 아래와 같이 출력이 된다.
((:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) (:title "Roses" :artist "Kathy Mattea" :rating 7 :ripped t))
테스트 작성부터 시작한다. (함수의 구현하지 전에 테스트부터 작성한 것을 주목하길 바란다.)
(define-test dump-db-test (assert-equal '((:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t)) (dump-db)))
방금 작성한 테스트는 dump-db 함수가 정의되지 않아서 실패한다.
Unit Test Summary | 1 assertions total | 0 passed | 1 failed | 0 execution errors | 0 missing tests
테스트 이후에는 빠르게 실패와 오류를 제거해나가는 것이 중요하다.
dump-db 함수를 단순하게 기대하는 결과를 출력하는 것으로 빠르게 작성한다.
(defun dump-db () '((:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t)))
테스트를 깔끔하게 통과하는 것을 확인할 수 있다.
Unit Test Summary | 1 assertions total | 1 passed | 0 failed | 0 execution errors | 0 missing tests
테스트의 통과를 축하하고 기뻐하며 커피라도 한잔 마시자.
'Programmer > Programming' 카테고리의 다른 글
간단한 데이타베이스를 TDD 로 개발하기 3회: add-record (0) 2014.03.19 간단한 데이타베이스를 TDD 로 개발하기 2회: make-cd (0) 2014.03.19 현상을 분석하여 문제의 원인을 찾아내라 (1) 2013.11.12 간결하고 효율적인 프로그래밍 (1) 2013.07.22 strspn/strcspn (0) 2013.07.09 댓글