TDD
-
테스트 주도 방식으로 리스프 매크로 작성하기Programmer/Programming 2014. 6. 5. 11:34
Lisp에서 매크로를 작성하는 방법을 "Peter Seibel"의 "Practical Common Lisp"에 따르면 다름과 같은 순서로 진행한다. (비록 쓸모는 없지만 쉽게 이해할 수 있는 두 숫자를 더하는 매크로를 작성하겠다.) 우선 호출할 예제 폼을 작성한다. (add 3 5) 위 예제 폼으로 확장될 코드를 작성한다. (+ 3 5) 매크로를 구현하다. (defmacro add (x y) `(+ ,x ,y)) 테스트 주도 방식을 적용하면 대략 다음과 같다. 2013/05/07 - [Programming/Project Management] - 테스트 주도 개발 - 둘째날 우선 호출할 예제 폼을 작성한다. 위 예제 폼으로 확장될 코드를 작성한다. 테스트 케이스를 작성한다. (테스트 프레임워크는 생략한다...
-
간단한 데이타베이스를 TDD 로 개발하기 소스 코드Programmer/Programming 2014. 3. 19. 10:04
아래는 간단한 데이타베이스를 TDD로 개발하기의 최종 결과물이다. cd-db.lisp (defpackage :cd-db (:use :common-lisp) (:export #:dump-db #:drop-db #:make-record #:add-record #:save-db #:load-db #:where #:select #:update #:make-comparison-expr #:make-comparisons-list #:delete-records)) (in-package :cd-db) (defvar *db* nil) (defun dump-db () *db*) (defun drop-db () (setf *db* nil)) (defun make-record (title artist rating ripped..
-
간단한 데이타베이스를 TDD 로 개발하기 3회: add-recordProgrammer/Programming 2014. 3. 19. 10:02
이번 강의에서는 CD 레코드를 DB에 추가하는 함수 add-record를 개발한다. 이 함수는 인자로 CD 레코드를 받는다. 비어있는 DB에 add-record로 레코드를 추가하면, (add-record (make-cd "Home" "Dixie Chicks" 9 t)) dump-db는 다음과 같은 결과를 출력한다. '((:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t)) 1차 테스트의 구현과 통과는 쉽고 간단함으로 빠르게 진행하자. (define-test add-record-test (add-record (make-cd "Home" "Dixie Chicks" 9 t)) (assert-equal '((:title "Home" :artist "Dixie ..
-
간단한 데이타베이스를 TDD 로 개발하기 2회: make-cdProgrammer/Programming 2014. 3. 19. 09:57
이번에는 CD의 레코드를 만드는 함수를 만들어보자. 함수의 이름은 make-cd이며 인자로 제목, 아티스트, 순위, 리핑 여부를 전달한다. (make-cd "Home" "Dixie Chicks" 9 t) 반환값은 이전 강의에서 언급한 속성 리스트를 출력한다. (:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) 우리가 예상하는 동작을 토대로 테스트를 작성하자. (define-test make-cd-test (assert-equal '(:title "Home" :artist "Dixie Chicks" :rating 9 :ripped t) (make-cd "Home" "Dixie Chicks" 9 t))) 우선 가장 단순한 방법으로 위 테스트를 통과시키자...
-
간단한 데이타베이스를 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 :lis..
-
테스트 주도 개발 - 둘째날Programmer/Etc 2013. 5. 7. 18:21
최대한 빨리 테스트에 통과하는 코드를 작성하는 방법 중에, 캐스팅의 남용이 있다. 돌아가고 나면 이러한 코드를 적절한 자리로 옮기거나 다형성을 사용하여 불필요한 캐스팅을 제거한다. 지난 번 포스팅한 글을 다시 불러와서 갱신해보자. 최종 목적은 잘 돌아가는 깔끔한 코드의 작성이다. 이를 위해서 아래 과정을 반복한다.최대한 빨리 테스트에 통과하는 코드를 작성하는 것이 목적이다. 스텁 구현, 상수를 사용한 하드 코딩, 복사&붙여넣기 신공, 캐스팅을 마구 남용한다.리펙토링을 통해서 스텁을 채우고, 상수와 중복을 제거하고, 캐스팅을 제거하기 위한 적절한 코드 옮김이나 다형성을 사용한다. 외부 프로토콜은 같으면서 내부 구현이 다른 객체를 정의하는 방법을 소개했다. 저자는 Money와 비슷하게 동작하지만 합을 나타내..
-
테스트 주도 개발 - 첫째날Programmer/Etc 2013. 5. 6. 16:17
최종 목적은 잘 돌아가는 깔끔한 코드의 작성이다. 이를 위해서 아래 과정을 반복한다.최대한 빨리 테스트에 통과하는 코드를 작성하는 것이 목적이다. 스텁 구현, 상수를 사용한 하드 코딩, 복사&붙여넣기 신공을 마음껏 발휘한다.리펙토링을 통해서 스텁을 채우고, 상수와 중복을 제거한다. 무엇을 어떻게 개발할지보다 무엇을 테스트할지를 먼저 생각한다. 논외지만 흥미로운 이야기팩토리 생성자를 사용하면 클래스의 사용과 클래스 구조 간의 의존성을 제거할 수 있다. 대표적으로 리펙토링 과정에서 불필요해진 하위 클래스의 제거가 가능해진다.