단위 테스트가 개발 과정에 필수 요소로 자리잡아 가고 있는 요즘, 조금씩 이런 말들이 들려 옵니다.
‘테스트 코드가 너무 복잡해서 새 테스트를 추가하기가 어려워’

‘이 테스트 자체가 이상해 보이는걸?’

‘이 테스트가 도대체 뭘 테스트하는 거지?’

대세를 따라 혹은 하라고 하니까 테스트 코드를 성실하게 작성한 것까진 좋은데, 테스트가 쌓이다보면 테스트 자체를 테스트하고 싶다는 마음이 들만큼, 테스트 코드가 복잡해지고 뭘 테스트하는지도 쉽게 파악하기가 힘들어 집니다.

이런 고민을 겪는 분들을 위해 감히 단위 테스트를 예술(Art)의 경지로 끌어올릴 수 있는 책을 소개합니다.

(여기서 Art가 예술보다는 기술이나 행동에 더 가깝겠으나, 잘 작성된 테스트 코드는 예술적이기도 하니까 넘어가 주세요~ ^^)

이 책의 지은이는 단위 테스트를 사용하면서도 크게 실패했던 프로젝트를 서문에서 언급합니다. 완벽한 TDD 방식으로 개발했으면서도 실패했던 지은이는 이 경험을 바탕으로, 다음 프로젝트에서는 단위 테스트를 제대로 활용하여 성공을 거두게 되지요. 그리고 프로젝트가 거듭될 때마다 깨달은 단위 테스트 작성과 관련된 비법들을 정리하여 독자들에게 선보였습니다.

내가 참여했던 프로젝트 가운데 가장 크게 실패한 프로젝트에서 우리는 단위 테스트를 사용하고 있었다. 적어도 나는 그렇다고 생각했다. 이 프로젝트에서 나는 대금 지불에 관련된 응용 프로그램을 작성하는 프로그래머 그룹을 이끌고 있었다. 우리는 완전히 테스트 주도 개발 방식으로 코딩했다. 테스트를 먼저 작성하고, 그 다음에 코드를 작성하고, 테스트가 실패하는 것을 보고, 테스트가 통과하게 만들고, 리팩터링하고, 그리고 이를 계속 반복했다.

프로젝트가 시작되고 몇 달간은 괜찮았다. 모든 것이 잘 진행되고 있었고 코드가 제대로 작동한다는 것을 보여 주는 테스트들도 갖추고 있었다. 하지만 시간이 흐르면서 요구사항이 변경되기 시작하였다. 우리는 새로운 요구사항에 맞게 코드를 수정해야 했고 그렇게 하자 테스트가 실패했기 때문에 테스트를 수정해야 했다. 코드는 잘 돌아갔지만 작성된 테스트가 굉장히 불안정했기 때문에 코드에 문제가 없었는데도 코드를 조금만 수정해도 테스트는 실패해 버렸다. 관련된 모든 유닛 테스트를 함께 수정해야 했기 때문에 클래스나 메서드를 수정하는 일은 매우 두려운 일이 되었다.

업친 데 덥친 격으로 어떤 테스트들은 쓸모없어졌다. 그 이유는 테스트를 작성한 사람이 프로젝트에서 나가는 바람에 테스트를 어떻게 수정해야 할지, 그리고 테스트가 무엇을 테스트하고 있는지 아는 사람이 아무도 없었기 때문이다. 유닛 테스트의 이름이 충분히 명확하지 않았고 테스트들은 서로 의존하고 있었다. 6개월도 채 되지 않아 우리는 대부분의 테스트를 버려야 했다.

작성된 테스트가 도움을 주기는커녕 상황을 더 나쁘게 만들어 버렸기 때문에 프로젝트는 비참하게 실패하고 말았다. 장기적으로 봤을 때 테스트가 주는 도움에 비해서 테스트를 관리하고 이해하는 데 더 많은 시간이 들었기 때문에 우리는 테스트의 사용을 중단할 수밖에 없었다.

이 책은 먼저 단위 테스트 작성과 관련된 기본적인 내용을 다룹니다. 테스트 프레임워크인 NUnit을 사용하는 방법과 상태 기반 테스트 같은 개념을 언급하지요.

다음으로는 단위 테스트의 의존성 문제를 다룹니다. 목, 스텁 등이 무엇인지 설명하고, 이들을 활용하여 코드의 의존성을 줄여가지요. 또한 테스트를 자동화하는 방법도 이야기합니다.

이후에는 단위 테스트를 작성할 때 써먹을 수 있는 노하우를 말해줍니다. 테스트들의 계층 구조나 테스트 인프라 API, 자동화 빌드 프로세스에 테스트 과정을 통합하기 등 비법이랄 수 있는 기술을 선보입니다.

이런 비법은 아닙니다;;

마지막으로는 단위 테스트를 작성하지 않으려는 조직을 설득하는 방법과 단위 테스트를 도입할 때 겪을만한 문제들도 미리 집어줍니다. 기존 코드(legacy code)에 단위 테스트를 적용할 때, 어디부터 테스트를 시작해야 하는지와 같은 구체적인 이야기도 해줍니다.

부록에서는 테스트와 설계라는 주제를 다루면서 테스트 분야에 대한 시야를 넓혀주고, 테스트에 사용할 수 있는 여러 도구들을 소개하면서 책을 마칩니다.

ps. 예제가 .NET 코드이긴 하지만, ‘올바른 단위 테스트 작성’이라는 개념을 이해하기에는 별 어려움이 없으실 겁니다.

그동안 단위 테스트 때문에 골치가 아프셨던 분, 단위 테스트 도입을 계속 미루고 있던 분, 단위 테스트를 도입하려고 다음 프로젝트를 기다리던 분께 이 책을 추천합니다!

지금까지 내용을 읽으면서 군침을 흘리신 독자라면! 어서, 예약 주문 버튼을 누르세요~ ^^

강컴, 교보, 알라딘, 예스24, 인터파크