
테스트 코드를 작성하는 이유는 다음과 같다
테스트 코드를 통해 개발 초기 단계에서 코드의 오류를 발견 할 수 있다 이는 배포 이후에 발생할 수 있는 큰 문제를 미리 방지하는 효과가 있다.
테스트 코드가 존재하면, 코드 수정이나 새로운 기능을 추가 할 때 기존 기능이 잘 작동하는지 빠르게 확인 할 수 있다. 이를 통해서 의도치 않은 문제나 버그가 생기지 않았는지 검증할 수 있다.
프로젝트가 커질 수록 유지 보수가 어려워지는데 , 테스트 코드가 있으면 코드 수정 후에도 기존 기능이 정상적으로 작동하는지 자동으로 확인 할 수 있어서 유지보수가 수월해진다.
테스트 코드가 잘 작성 되어 있다면 , 코드 리팩토링을 할 때 구현한 기능이 에러가 나는지 쉽게 검증 할 수 있다. 리팩토링 후에도 기존 테스트가 모두 통과한다면 , 기존 기능이 정상작동하는지에대해 빠르게 알 수 있다.
- 정의 : 개발할 때 테스트 코드를 먼저 작성하고, 그 테스트를 구현시키는 방식으로 실제 코드를 작성하고 리팩토링하는 개발 기법이다.
- 테스트 코드 작성 : 먼저 원하는 기능을 테스트 코드로 작성한다. 이때 실제 코드는 아직 없기 때문에 당연히 테스트는 실패한다.
- 실제 코드 작성 : 테스트를 통과할 수 있는 기능을 구현한다. 기능이 완성되면 테스트는 성공해야한다.
- 리팩토링 : 테스트를 통과한 코드를 가독성이나 유지보수성을 고려해 개선한다. 이 후 다시 테스트를 실행해 성공 여부를 확인한다.
TDD를 하면 버그가 없을까?
그 답은 NO이다.
TDD가 버그를 완전히 없애주는 것은 아니기때문이다. 테스트가 존재한다고 해도 모든 상황을 테스트 할 수 없고, 복잡한 시스템에서는 예상하지 못한 문제가 여전히 발생할 수 있다. TDD는 버그를 줄일 수 있는 도구이지만 모든 문제를 해결하는 방법은 아니다.
TDD는 모든 개발자에게 필요할까?
그 답은 No이다.
모든 프로젝트나 모든 개발자에게 TDD가 필수는 아니다. TDD는 철저한 테스트를 요구하는 복잡한 프로젝트나 안정성이 매우 중요한 시스템에서는 큰 장점이 있지만, 소규모 프로젝트나 빠르게 기능을 개발해야하는 상황에서는 오히려 시간이 더 많이 소모 될 수 있다.
TDD를 적용하면 코드 품질을 높이고 , 초기 단계에서 많은 버그를 잡을 수 있는 건 맞지만, 모든 상황에서 TDD가 적합한 것은 아니다. TDD는 개발 속도를 느리게 만들 수 있기 때문에 모든 프로젝트에서 TDD를 고집하는것은 바람직하지 않을 수 있다 생각한다.
TDD는 다음과 같은 상황에서 부담이 될 수 있다.
assert 구문 등을 통해 테스트가 스스로 결과를 확인할 수 있어야한다.