임베디드 C를 위한 TDD : 네이버 도서 (naver.com)
약 10년 전에 나온 책이다. 지금까지 유명한 개발자들의 서적들을 읽으면서 공통적으로 느낀 점이 있다. 오래된 책이기 때문에 오래된 코드임에도 언어 상관없이 정말 코드들이 깔끔하다는 것이다. 이 책 또한 그렇다. 정말 간단한 코드지만, 누구나 쉽게 간단하게 짜지는 못한다는 것을 항상 느끼고 감탄하게 된다.
이 책에서는 TDD를 정말 쉽게 접근할 수 있게 알려준다. 처음부터 TDD를 시작하는 방법을 한 스텝씩 따라가면서 알려준다. 그게 끝이 아니다. TDD를 함에 있어서 중요한 내용들도 알려주고, 난이도 있는 방식까지 예시를 통해 알려주고 있다.
이전부터 여러 책을 읽으면서 TDD에 대한 관심이 많았다. 관심만 있고 어떻게 해야 할지 모르겠어서 가만히 있었다. 나 같은 사람이 있다면, 이 책을 읽기 좋을 것이다.
TDD에서 중요한 사고방식과 TDD를 하는 방법에 대해 알 수 있었다. TDD는 일반적으로 쭉 개발하고 마지막에 테스트하는 방식과 달리 처음부터 테스트를 작성한다. 그리고 그 테스트는 당연하게도 기능 동작하는 코드가 없기 때문에 실패해야 한다.
여기서 실패란, 컴파일, 링크, 빌드 등이 안 되는 과정 모두를 한 번씩은 다 경험하는 것을 말한다. 즉, 짧은 코드를 작성하더라도 빌드는 수십 번의 경험해야 한다. 볼 수 있는 모든 오류 메시지는 본다고 생각하면 된다.
그리고 하나의 테스트씩 진행한다. 알고 있는 실패 케이스(테스트 케이스)가 있더라도, 한 번에 여러 테스트를 작성하면 안 된다. 반드시 하나의 테스트씩 진행해야 하며, 테스트를 통과하면 다음 기능으로 넘어가야 한다.
지나치게 기능을 오버해서 작성해서도 안 된다. 예를 들어, A 입력 시 1, B 입력시 2가 나오는 코드를 작성해야 한다면, 테스트와 코드 개발은 아래의 단계로 진행 할 수 있을 것이다.
1. A 입력시 1 반환하는 테스트 T1 작성
2. 1을 반환하는 함수 F 작성
3. B 입력시 2 반환하는 테스트 T2 작성
4. A 입력시 1을 반환하고 B 입력시 2를 반환하도록 함수 F를 변경
위의 순서에서 2번 과정이 중요하다. 한 번에 4번 과정에 해당하는 기능을 작성하면 안 되며, 지금 당장 테스트만 통과할 정도의 코드를 작성해야 한다.
이 책에서는 단순히 TDD를 시작하는 방법만 알려주는 것도 아니다. 테스트 코드도 어떻게 해야 잘 작성할 수 있는지 알려준다.
당연하게도 TDD에 빠질 수 없는 리팩터링도 보여준다. TDD를 수행하면서 리팩터링을 어떻게 할 수 있는지, 어떤 장점이 있는지, 리팩터링을 하게 되면 테스트 코드는 어떻게 변경되어야 하는지 등에 대해서도 알려준다.
이 책이 TDD의 바이블까지는 아니더라도 처음 시작하는 사람들에게는 도움이 될 입문서임은 확실하다.
나는 아직 TDD를 시작해보지 못했다. 회사에서도 아직 도입해보지 못했다. 책을 읽는 기간 중에 회사에서 리팩터링을 할 일이 있었다. 그리고 신뢰할 수 없는 새로운 코드는 잔 버그들이 많이 있었다. 무조건 TDD를 도입하도록 해볼 것이다.
개인적인 일들로 인해 책의 2/3을 넘게 읽은 뒤로는 책을 잘 못 보게 됐었다. 이후 흥미까지 떨어져서 책을 읽는데 시간이 꽤 걸렸다. 그래도 중간에 포기할 수 없었던게, 마지막 내용들이 나에게 정말 필요한 정보들이었기 때문이다. 책 후반에서는 리팩터링과 레거시 코드에 테스트를 추가하는 것에 대해 다룬다. 이 부분들은 책을 읽을 때 난이도가 높았지만 도움은 꽤 됐다.
결론적으로 '우리 회사에서 내 코드에는 TDD를 어떻게 적용할 수 있을까'를 계속 고민하게 만들어줬다. 내가 담당하는 모듈은 TDD로 테스트하기 불가능할 것 같다는 생각에 사로잡혀 있었다. 책에서 어떻게 알았는지 실제 사용할 수 있는 여러 테스트 방식을 알려주었다. 그중 목(Mock) 객체를 사용하면, 어떤 테스트도 가능하다고 한다. 책을 읽어보니 실제로 그랬다. 우리 회사에서도 바로 도입은 어려울지라도 어떻게 도입해나가면 좋을지는 충분히 도움을 받았다. 이제는 더 찾아보고 도입하기 위해 노력하는 일만 남았다.
TDD와 리팩터링을 많이 경험하신 멘토님께 또다시 여쭤봐야겠다.
'리뷰 > 책 리뷰' 카테고리의 다른 글
[IT/리뷰] 클린 아키텍처 (0) | 2023.02.26 |
---|---|
[IT/리뷰] Debug It! 실용주의 디버깅 (1) | 2022.12.12 |
[IT/리뷰] 글로벌 소프트웨어를 꿈꾸다 (0) | 2022.09.04 |
[IT/리뷰] Clean Code (0) | 2022.08.21 |
[IT/리뷰] 리팩터링 2판 (0) | 2022.06.04 |