테스트 코드의 중요성을 배워도, 실질적으로 잘 작성하는 건 또 다른 문제입니다.
내가 작성하는 테스트 코드는 정말 의미가 있을까?
잘 작성된 테스트 코드는 어떻게 다음 할 일을 알려준다는 걸까?
테스트 코드가 개발 과정에서 길을 잃었을 때 나를 도와준다는 말이 무슨 뜻일까?
이처럼 많은 이야기를 들어도 테스트 코드를 잘 쓰지 못했던 이유가 있었습니다.
내가 테스트 코드를 잘 쓰지 못하는 이유
테스트 코드를 제대로 작성하지 못하는 이유를 세 가지로 정리해 보았습니다.
1. 너무 빠르게 작성하려고 한다
테스트 코드를 작성하다 보면, 자연스럽게 프로덕션 코드와 테스트 코드 사이를 끊임없이 오가게 됩니다. 문제는 이 과정에서 코드의 본질을 충분히 이해하지 못한 채, 테스트를 “통과”시키는 데만 집중하게 된다는 점입니다.
테스트 코드를 작성할 때 가장 먼저 해야 할 일은 “내가 무엇을 테스트하려고 하는가?”를 명확히 정의하는 것입니다. 그러나 종종 이런 질문을 건너뛰고, “이게 필요할 것 같아, 그러니까 일단 만들어보자”라는 생각으로 테스트를 작성하게 됩니다. 이렇게 작성된 테스트 코드는 목적이 불분명하거나, 나중에 유지보수가 어렵게 되는 경우가 많습니다.
이런 문제를 해결하려면, 테스트 코드를 작성하기 전에 잠시 멈추고 다음을 지독하게 고민해야 합니다.
“무엇을 테스트하려는 하는가?”
“어떤 결과가 기대되는가?”
2. 코드를 너무 넓게 보려고 한다
테스트 코드는 작은 단위로 작성되어야 합니다. 하지만 많은 경우, 테스트 코드에서 한 번에 너무 많은 것을 검증하려고 하거나, 미래의 모든 가능성을 고려해 완벽한 코드를 작성하려는 욕심이 생깁니다. 이는 오히려 테스트 코드의 목적과 본질을 흐리게 만듭니다.
예를 들어, 실패한 테스트 코드를 통과시키기 위해 한 번에 여러 경우의 수를 다루려 하거나, “성공할 가능성이 높은 테스트”를 만들기 위해 몇 단계 앞을 내다보는 경우가 그렇습니다. 그러나 테스트 코드의 목적은 한 번에 모든 것을 해결하는 것이 아니라, 하나씩 문제를 드러내고 해결하는 과정에 있습니다.
테스트 코드가 하드코딩으로 도배되어 있더라도 괜찮습니다. 작은 보폭으로 작성하고, 점진적으로 개선하는 것이 중요합니다. 이렇게 작성된 테스트는 그 자체로 다음 단계로 나아가기 위한 명확한 신호를 제공해 줄 것입니다.
3. 테스트 코드가 ‘하고자 하는 말’을 담지 못한다
잘 작성된 테스트 코드는 명확한 의도를 가지고 있습니다. 다시 말해, “이 테스트는 무엇을 검증하려는가?”라는 질문에 답을 줄 수 있어야 합니다. 하지만 종종 테스트 코드에서 이 부분이 빠져, 읽는 사람(심지어 작성자인 나 자신)조차 테스트 코드의 목적을 이해하지 못하게 됩니다.
대표적인 문제는 다음과 같습니다.
테스트 이름이 모호하다: 테스트 이름만으로 테스트의 목적을 알 수 없다.
지나치게 많은 것을 검증한다: 하나의 테스트가 여러 의도를 포함하고 있다.
의존성이 강하다: 테스트 코드가 프로덕션 코드와 지나치게 얽혀 독립적으로 동작하지 않는다.
테스트 코드의 가독성을 높이려면, 작고 명확하게 작성해야 합니다. 테스트 코드가 간결할수록 읽는 사람에게 의도를 명확히 전달할 수 있고, 유지보수도 훨씬 쉬워집니다.
테스트 코드를 잘 작성하기 위한 연습 방법
테스트 코드를 잘 작성하려면 다음과 같은 연습이 필요합니다.
1. 준비 단계의 중요성
테스트 코드를 작성하기 전에 충분히 고민해야 합니다. 무엇을 테스트하고 싶은지, 어떤 데이터를 준비해야 하는지 미리 정의하는 습관을 들이면, 훨씬 효율적으로 테스트를 작성할 수 있습니다.
2. 문제 정의하기
테스트 코드를 작성하기 전, “내가 풀어야 할 문제가 무엇인가?”를 명확히 정의해 보세요. 문제 정의가 명확할수록, 테스트 코드는 간결하고 효과적으로 작성될 수 있습니다.
3. 작은 성공부터 시작하기
완벽한 테스트를 만들려고 하지 마세요. 작은 실패를 드러내고, 이를 하나씩 해결해 나가는 과정을 반복하면서 테스트 코드는 점점 발전하게 됩니다. 실패는 나쁜 것이 아닙니다. 실패를 통해 배우고, 개선할 수 있는 기회라고 생각하세요.
'가치관 쌓기' 카테고리의 다른 글
계약에 의한 설계(Contract By Design) 더 잘 활용하기(with java) (0) | 2021.04.05 |
---|---|
Getter와 Setter는 왜 써야 할까? 꼭 써야될까? (0) | 2021.02.27 |
댓글