[Practical Testing: 실용적인 테스트 가이드]
섹션 10. Outro
빠르게 변화하는 소프트웨어의 품질을 일정 수준 이상으로 가져가기가 어려울 수 있다.
사람이 항상 모든 것을 테스트 해야 되는데 소프트웨어가 발전하는 속도보다 사람이 커버할 수 있는 속도와 리소스가 맞지 않기 때문에 기계에 힘을 빌려야 한다.
테스트 코드를 엉망으로 작성한다면 테스트 코드 자체가 애물단지가 될 수 있다. 그래서 테스트 코드를 점차 작성하기 어려워지게 되고 결국은 안짜게 되는 그런 상황이 발생할 수 있다.
혹은 테스트를 잘못 작성하면 잘못된 검증을 하게 되거나 잘못되었는데 올바르다고 인식을 하고 넘어갈 수도 있다.
프로덕션 코드보다 테스트 코드를 먼저 우선시 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론 중에 하나이다.
외부에서 프로덕션 코드를 바라보는 클라이언트 관점에서 코드에 피드백을 줄 수 있다.
개인이 했던 고민의 결과물을 팀 차원의 지식으로 승격을 시키는 것이 중요하다.
레이어별 관심사가 다르기 때문에 레이어가 나눠지게 되었고 그에 맞추어서 테스트가 필요하다.
두 가지 이상의 클래스나 혹은 듈이 결합했을 때의 시너지가 어떻게 날지 예측하기 어려울 수 있기 때문에 통합 테스트를 통해서 단위 테스트로 다 커버하지 못하는 부분을 보장 해줘야 된다.
비즈니스에선 시간이라는 축이 있다.
그래서 항상 한정된 시간 안에서 무언가를 만들어내야 된다.
이런 한정된 시간 내에서 올바른 테스트를 작성하려면 어떻게 해야할까?
1. 테스트 케이스를 추론하고 구체화 시키는 연습이 많이 필요하다.
2. TDD가 손에 익도록 많은 연습이 필요하다.
시간의 압박이 있는 경우에 당장 눈앞에 놓인 요구사항에 매몰되어서 프로덕션 코드를 작성하기 쉽다.
근데 잠깐 키보드에서 손을 떼고 숨을 잠시 고르고 어떤 케이스가 있어야 지금 작성하려는 프로덕션 코드가 더 단단해질까? 어떤 케이스로 검증을 하면 좋을까?를 고민을 해봐야 된다.
그리고 그 케이스들이 정리가 되었다면 빠르고 정확하게 문서로서의 테스트를 작성하고 프로덕션 코드를 그에 맞춰서 구현을 해야 된다.
가까이 보면 느리지만, 멀리 보면 가장 빠르다.
테스트를 작성하는 귀찮은 마음과 시간적인 압박이 있더라도 지금 시간을 30분, 1시간 더 투자해서 테스트를 작성하는 게 나중에 3시간, 10시간 또는 하루 더 수 많은 시간을 아낄 수 있다.
📑 출처