TDD
테스트 주도 개발은 소프트웨어 개발 프로세스에서 테스트를 먼저 작성하고, 그 테스트를 통과하는 코드를 작성하는 방법론입니다. 이 방식은 개발 초기 단계에서 버그를 발견하고 수정하는데 도움을 주며, 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드입니다.
또한, TDD는 소프트웨어의 설계를 개선하고, 리팩토링을 촉진하는 효과적인 방법으로 작용합니다.
테스트 코드를 왜 작성해야 하나?
디버깅 비용이 절감된다.
애플리케이션은 항상 내결함성을 가지고 있고 좋은 코드와 설계를 갖추더라도 결함의 존재 자체를 부정할 수는 없습니다. 그래서 기능에 대한 버그는 계속 발생하고 그것에 해결하기 위해 개발자는 디버깅을 꾸준히 할 수 밖에 없습니다.
만약 테스트 코드가 없다면, 버그와 이슈들을 받고 디버깅하고 해결하는데 많은 시간을 소모하게 되며 문제를 해결하는 시간보다 문제를 찾기 위한 시간이 더 길어지게 됩니다.
하지만 테스트 코드가 있다면, 이 테스트 코드를 통해 오류를 줄일 수 있고 빠르게 대처할 수 있는 내성이 생기게 됩니다.
또한 코드 수정이 필요한 상황에서 안정적인 대응을 할 수 있게 해주며, 변경 부분으로 인한 영향도를 쉽게 파악할 수 있게 됩니다.
코드 변경에 대한 불안감 해소
개발을 하다 보면 이런 일을 다수 겪어보셨을 겁니다.
애플리케이션에서 기능은 하나의 요소로 이루어지지 않고 여러 요소들이 상호작용하며 만들어지기 때문에 회귀버그가 생기게 됩니다. 그렇다면 이렇게 반복되는 버그를 어떻게 대처해야 할까요?
회귀 테스트로 기능 추가나 오류 수정으로 인해 새롭게 유입되는 오류가 없는지 검증해야 합니다.
회귀테스트 (Regression Test)
: 회귀 버그를 찾는 모든 소프트웨어 테스트 방식은 회귀 테스트라고 할 수 있다.
신규 기능을 추가하거나 오류를 수정하였을 때 이 코드로 인해 기존 기능에 영향이 발생할 수 있기에, 이전의 실행한 테스트를 다시 실행하여 기존 기능에 문제가 없는지 체크해야 한다.
테스트 코드는 당시의 기능을 만들기 위해서만 필요한 코드가 아니라 이후에 요구사항이 변경되어 기존의 코드를 수정하거나, 리팩토링 하는 경우에도 쓰이며 서비스의 지속적인 발전을 위해 필요한 코드이다.
테스트 자동화
개발자의 기도메타라고, 애플리케이션의 구현이 완료되고 실제 운영 환경에 배포됐을 때 불안감에 휩싸이게 됩니다.
하지만 자동화 테스트가 있다면 배포 환경에서 개발자가 작성한 테스트 코드로 버그가 배포되는 것을 방지할 수 있습니다. 또한, 회귀 버그를 지속적인 코드 병합 단계에서 확인할 수 있으므로 소프트웨어의 품질 또한 높아집니다.
코드 동작
작성한 코드가 의도한 대로 작동하는지 검증할 수 있으며, 결과 확인이 가능합니다.
문서화
서비스가 커질수록 코드의 복잡도 또한 증가하게 되는데 신규 입사자들이 코드를 해석하는데 불편함이 생길 수 있습니다. 이를 위해 문서화를 해두지만 이런 문서보다는 테스트 코드를 통한 가이드가 불편함을 줄여줍니다.
개발자가 작성한 메소드가 어떻게 동작을 시작하고, 어떻게 동작을 했으면, 어떤 결과를 반환했으면 하는지를 작성하는 것입니다. 따라서 신규 입사자들이 테스트 코드를 통해 코드의 동작을 수월하게 이해할 수 있게 됩니다.
주요 프로세스
- 테스트 작성 (Red)
- 기능 구현에 필요한 테스트를 먼저 작성합니다. 앞으로 작성할 코드가 어떤 기능을 해야 하는지 명확하게 정의해야 합니다.
- 코드 작성 (Green)
- 테스트를 통과하기 위해 최소한의 코드를 작성합니다. 이 단계에서는 작성한 테스트 케이스를 통과하는 것에만 집중합니다.
- 리팩토링 (Refactor)
- 테스트를 통과한 코드를 개선하고, 중복을 제거하거나 코드 구조를 정리하여 더 나은 코드로 만듭니다.
- 코드를 리팩토링 한 후에도 테스트가 여전히 통과해야 합니다.
- 이 과정에서 추가적인 테스트 코드를 작성할 수도 있습니다.
@Test
public void testFunction() {
// 실패하는 테스트 코드 작성
// 테스트를 통과하기 위한 최소한의 코드 구현
// 코드 리팩토링
}
이러한 절차를 반복함으로써, 개발자는 기능 구현과 동시에 테스트 커버리지를 높일 수 있습니다.
참조
https://tech.inflab.com/20230404-test-code/ - 인프랩
https://medium.com/@suhyeon3484/test-code-9cb6652a9ee9 - 테스트코드를 작성해야 하는 이유 개인 블로그
https://f-lab.kr/insight/understanding-and-practicing-tdd - F-lab 테스트 주도 개발의 이해와 실천
스프링부트 3 백엔드 개발자되기 자바편 책 참조