테스트 주도 개발의 핵심은 무엇인가?

김민섭·2023년 5월 10일
0

TDD

목록 보기
1/1
post-thumbnail

테스트 코드를 작성해야 하는 이유

코드는 최대한 단순하게 유지해야 한다

내가 코드를 작성하면서 지키려고 노력하는 것 중 가장 큰 부분을 담당하는 말이다.

개발자는 코드를 작성하는 시간보다 코드를 읽는데에 시간을 더 많이 사용한다고 생각한다. 특히 내가 아닌 다른 사람이 작성한 코드를 말이다.

자신이 작성한 코드도 읽다보면 왜 이렇게 작성했는지 이해가 되지 않는 경우가 있는데 다른 사람이 작성한 코드를 읽는 것은 머리가 쪼개지는 기분이 들 때가 있다.

그렇기 때문에 나중에 코드를 다시 봐야하는 나 자신과 다른 사람들을 위해서라도 코드는 최대한 쉽고 단순하게 작성을 해야 한다고 생각한다.

그러나 처음 코드를 작성할 때는 구현하기도 바쁜 것이 현실이다.
그렇기 때문에 끊임없는 개선과 리펙토링이 필요하다.

하지만 리펙토링을 할 때마다 매번 수동적인 테스트를 진행하는 것은 시스템 규모와 상관없이 비 실용적이다. 그러므로 이러한 비용을 줄이려면 최대한 테스트를 자동화 해야 한다.

자동화된 테스트는 우리가 리펙토링 시 저지르는 실수로 부터 코드를 보호해준다.

테스트 하기를 즐기는 개발자

앞서 말했던 내용처럼 테스트 코드를 작성하는 것은 매우 중요하다.
그러나 자신이 작성한 코드를 테스트 하길 즐기는 개발자는 드물다.
자동화된 테스트 작성을 실제 업무로 보지 않으며 따분하다고 여기기까지 한다.
테스트 주도 개발 (TDD)는 이러한 상황을 근본적으로 뒤집는다.

TDD에서는 코드를 먼저 작성하고 검증을 위해 테스트를 작성하지 않는다.
테스트를 설계 활동으로 생각하고 코드 작성 전에 테스트부터 작성한다.
테스트를 먼저 작성하게 되면 테스트 하기 편한 코드를 작성하게 되고 코드의 품질이 점점 올라가는 것을 볼 수 있다.

TDD에서의 테스트는 코드의 검증뿐만이 아니라 코드의 품질도 같이 올려준다.

테스트 주도 개발 (TDD) 과정 간단 정리

TDD의 핵심 주기는 다음과 같다.
1. 테스트를 작성한다
2. 해당 테스트가 작동하도록 코드를 작성한다
3. 코드를 테스트한 기능의 단순한 구현으로 리펙터링한다

해당 과정을 새로운 기능을 만들때마다 반복한다.

테스트를 작성할때의 장점
1. 해당 코드에 오류가 존재하는지 확인이 가능하다
2. 언제 작업이 완료되었는지를 명확하게 알 수 있기 때문에 과도한 "금도금"하듯 과도한 최적화나 불필요한 기능을 더하지 않게 된다.

TDD의 황금률
실패하는 테스트 없이는 새 기능을 작성하지 말자.

테스트를 먼저 작성했을 때 구현 코드가 없기 때문에 테스트는 당연히 실패하게 된다.
즉, 새로운 기능을 추가할 경우에는 필히 테스트를 먼저 작성하라는 얘기이다.

profile
getting ready to run

0개의 댓글