본문 바로가기

Effective Unit Testing

지식을 전해주는 책과 지혜를 전해주는 책이 있는데, 이 책은 지식보다는 지혜를 전해주는 것에 초점을 맞춘책이다. 테스트를 그저 버그의 예방을 위해서 작성하는 경우가 많지만, 이 책은 한걸음 더 나아가서 테스트를 작성하면서 어떻게 소프트웨어의 설계를 점진적으로 개선해 나갈 수 있는지에 대해서 알아본다. 

나는 아직 까지는 개발 하면서 테스트가 주는 이점 보다는 테스트 작성에 대한 부담을 많이 가지고 있다. 왜냐하면 처음에는 간단하게 시작되지만, 어플리케이션이 커지고 복잡해지면서 동시에 같이 양이 많아지고 복잡성과 유지보수 때문에 고민을 많이 하게 되기 때문이다. 테스트를 만들면서 설계를 단순히 하게되는 경험도 몇번은 있었지만, 테스트를 어떻게 효과적으로 잘 만들수 있는가에 대한 고민을 참 많이 했던것 같다. 

이 책은 테스트를 어떻게 하면 효과적으로 잘 만들수 있는 지에 대해 어려가지 많은 조언들을 해준다. 그 중에 몇가지를 한번 살펴보자. 

"100% 코드 커버리지 달성이 중요한게 아니다."

"테스트를 작성해서 얻게 되는 가장 큰 수확은 테스트 자체가 아니다. 작성 과정에서 얻는 깨달음이다."

"같은 테스트 클래스에 속한 테스트 메서드 까지도 순서를 가정하면 안 된다."

"스텁은 질문하고 Mock은 행동한다."

"테스트에서는 != 나 == 등의 비교문을 사용하는 단언문을 발견하면 주저하지 말고 추상화 수준이 적절한지 되짚어 보라."

"절대 실패하지 않는 테스트는 가치가 없다."

"테스트가 실패하는 원인은 오직 하나뿐이어야한다." - 단일 책임 원칙

"중복은 모든 악의 근원이다"

"파일 I/O 보다 느린 I/O는 없다."


좋은 테스트란 무엇일까? 이 책에서는 가독성, 유지보수성, 신뢰성이 있는 테스트가 좋은 테스트라고 말하고 있다. 이러한 가독성, 유지보수성, 신뢰성을 유지하기 위해 파트 2에서 냄새가 나는 테스트 라는 단어를 사용하면서 테스트의 안티패턴에 대해 이야기 하고 있다. 그러면서 좋지 않은 테스트를 어떻게 리팩토링 하면 되는지도 예제를 보여주면서 알려주고 있다. 자신의 테스트가 잘 작성된 테스트인지 알고 싶다면, 파트2의 4,5,6장을 읽어보면 뭔가 걸려지는 것이 분명이 힜을 것이라 생각한다. 나도 읽으면서 뜨끔한 구절이 많았다. 

그리고 파트3에서는 테스트 가능설계, Java이외의 다른 JVM언어를 활용한 테스트 작성 그리고 테스트 속도 높이는 법을 알아보게 되는데, 쉬운 내용은 아니지만, 설계를 더욱더 좋게 만들고, 테스트를 장황한 자바보다는 더욱더 간결하고 간편하게 만들수 있는 대안들을 보게 된다. 개인적으로는 새롭게 알게되는 내용이 많아서 흥미로운 장이었던 것 같다. 

이 책을 통해 테스트의 품질을 높이는 방법을 다양한 각도에서 바라보게 된것 같다. 테스트 주도 설계보다는 먼저 로직을 만들고 후에 필요한 부분의 테스트를 만들곤했어서, 테스트가 잘 깨어지기도 하고 테스트 자체의 품질도 많이 높지 않아서, 신뢰성이 떨어지거나, 유지보수성이 떨어지는 테스트를 만들어 내곤 했었는데, 이책을 보고 나서 다시금 품질 높은 테스트에 대한 마음이 생겼다. 지금 하고 있는 프로젝트는 비록 자바가 아니고 nodejs이지만 다시한번 책을 보면서 가독성, 유지보수성, 신뢰성을 가진 테스트를 작성해야겠다.


'' 카테고리의 다른 글

자바스크립트 자료구조와 알고리즘  (1) 2014.09.29
파이썬을 활용한 베이지안 통계  (2) 2014.08.26
뉴욕의 프로그래머  (1) 2008.10.25