태그 보관물: tdd

TDD가 해결해 주는 것들

2014년에 DHH는 ‘TDD is dead. Long live testing.’이라는, 제목이 아니라 내용이, 다소 황당한 글을 썼고 얼마 후 Kent Beck은 관련된 글을 썼다.

RIP TDD

DHH가 TDD를 죽여서 TDD를 대신할 방법을 찾아야 한다는 글인데, 제대로 읽었다면 누구도 이것이 Kent Beck이 TDD를 떠난다고 말하는 글이라고는 생각하지 않을 것이다. 내 가설의 증거는 댓글들이다. 재미있으니 댓글들도 한 번 읽어보기를 추천한다.

그럼 실제 내용은 뭘까? 프로그래머가 TDD를 통해 얻을 수 있는 가치의 나열이 대부분이고 나머지 조금은 DHH에 대한 조롱이다. 나는 여기에 나열된 TDD의 효과 모두를 느껴왔고 그래서 TDD를 사용한다. 그리고 이 가치들이 더욱 알려지기를 바라는 마음에 한국어로 번역했다. 내 영어 실력은 아주 형편 없어서, 노력했지만 두 구절은 충분히 이해하지 못해 직역했다. 표시해 뒀으니 좋은 해석 의견이 있다면 대환영이다. 이후로는 모두 내 글이 아니라 번역이다.

계속 읽기

Advertisements

테스트 주도 개발 실천

테스트 주도 개발 실천

테스트 주도 개발(test-driven development)은 점진적으로 검증하며 코드를 작성하는 소프트웨어 개발 방법이다. 자신이 작성한 코드의 동작을 직접 확인하는 것은 어쩌면 프로그래머의 기본 미덕이고 테스트 주도 개발은 이 미덕의 실천을 프로그래밍 과정 속에 자연스레 녹여낸다. 또한 테스트 주도 개발은 좋은 설계의 강력한 지원자다. 테스트 주도 개발 자체가 좋은 설계를 유도하는 것은 아니지만 프로그래머가 좋은 설계를 위해 노력할 수 있도록 든든히 뒷받침한다.

하지만 테스트 주도 개발은 어렵다. 전통적인 프로그래밍 절차와 상이할 뿐 아니라 긴 시간동안 몸에 밴 나쁜 버릇들이 억제되며 답답함이 느껴지기도 한다. 개념을 이해했다 하더라도 현장에서 실천하는 데에는 많은 장벽들이 있다. 이 글은 가상의 예제가 아니라 간단하지만 실제 서비스 개발에 사용된 사례를 통해 현장에서 테스트 주도 개발이 어떻게 적용되는지 보여준다.

계속 읽기

비공개 메서드를 테스트 해야 하는가?

TDD(Test-Driven Development, 테스트 주도 개발)에 익숙하지 않은, 개체지향 프로그래밍 언어를 사용하는, 프로그래머들은 간혹 이런 질문을 한다.

비공개(private) 메서드도 테스트 해야 하는가?

이 질문의 대답은 ‘그렇다’ 또는 ‘아니다’보다 좀 더 길다. 비공개 메서드의 인터페이스는 테스트 하지 않지만 비공개 메서드의 구현은 테스트 대상이다. 혼란스러울 수 있다. 어쩌라는 말인가?

계속 읽기

좋은 디자인과 테스트하기 쉬운 디자인

TDD와 관련된 오해 중 가장 심각한 것은 단위 테스팅과 TDD를 구별하지 못하는 것입니다. 그리고 또 다른 오해가 ‘좋은 디자인’과 ‘테스트하기 쉬운 디자인’의 관계에서도 발견됩니다. ‘좋은 디자인은 테스트하기 쉽다’는 명제에 대한 반론은 찾아보기 어렵습니다. 저도 반례를 경험한 일이 없습니다. 따라서 TDD 과정에서 어떤 코드를 테스트하기 어렵다면 디자인 문제를 의심해 볼 수 있고 이것은 TDD가 주는 나쁜 디자인에 대한 피드백으로 볼 수 있습니다. 게다가 이 피드백은 세부 구현 전에 제공되기 때문에 더 유익합니다. 하지만 안타깝게도 그 역인 ‘테스트하기 쉬운 디자인은 좋다’는 명제는 성립하지 않습니다. ‘좋은 디자인’과 ‘테스트하기 쉬운 디자인’은 동치가 아닙니다. 단순한 사례는 아주 쉽게 만들 수 있습니다.

계속 읽기

Repository and Unit of Work 디자인 패턴을 이용한 TDD(Test-driven Development)

다중 계층 아키텍처는 관심사 분리(SoC, Separation of Concerns) 원칙 구현의 하나로, 각 계층은 전체 프로세스 흐름 중 담당하는 작업에만 집중하여 프로그램 코드의 복잡도를 낮출 수 있습니다. 하지만 계층간 결합도가 높다면 여전히 낮은 테스트성(testability)으로 인해 단위 테스트와 테스트 주도 개발(TDD, Test-driven Development), 행위 주도 개발(BDD, Behavior-driven Development) 등의 방법을 적용하기 어렵습니다. 이 포스트의 주 목적은 비즈니스 논리에 대한 데이터베이스에 독립적인 단위 테스트를 작성하고 TDD를 적용하는 방법을 설명하는 것입니다.

계속 읽기

Knockout과 Mocha를 사용한 TDD기반 웹 개발

개요

UI를 포함하는 프로그램의 경우 Coded UI Test 등의 기술이 발전되고 있지만 MVVM 디자인 패턴을 적용할 경우 UI의 많은 부분을 전통적 테스트 기술을 사용하여 검증할 수 있습니다. 오랫동안 WPF의 전유물로만 여겨지던 MVVM 패턴은 최근 KnockoutJS와 AngularJS 등의 프레임워크의 도움을 받아 웹 응용프로그램 개발 영역까지 확대되고 있습니다.

계속 읽기