[개발 상식] 단위 테스트

우아한 테크코스 프리코스 2주차 미션에서 요구되는 것은 ‘본인이 만든 기능 테스트’ 입니다!

지난주 TDD에 대해 공부를 했고, 단위 테스트에 대한 내용들을 훑어 보았는데, 이번에 이렇게 미션으로 나오게 되면서 다시 한번 복습 그리고 몰랐던 부분들을 체크하면서 확실한 기능 구현을 해보려고 합니다!

이 블로그의 내용은 ‘클린 코드’ 라는 책을 기반으로 작성하였습니다!

🧐TDD?

TDD… 티디디, 개발 커뮤니티에서도 그렇고 정말 많이 들리는 단어입니다. Test-Driven Development, 즉 테스트 주도 개발로, 소프트웨어를 개발하는 방법 중 하나입니다!

 

[개발 상식] TDD란 무엇인가?

티디딕…? TDD…? 처음 들어 봅니다. 그래서 짚고 넘어가려고 합니다! 🤔TDD 가 뭐야? TDD (Test Driven Developmnet)란 소프트웨어 개발 방법의 하나입니다. 소프트 웨어를 개발하는 과정에서 테스트코드

lurgi.tistory.com

😀TDD에서 요구되는 세가지 법칙!

첫 번째는 바로 ‘실제 코드를 짜기 전 단위 테스트를 작성하라’ 입니다. 이 부분을 들었을 땐 정말 머리를 한대 맞은 기분이었어요. ‘엥? 테스트 코드를 먼저 짜라고?’ 그런데 테스트 케이스를 한두 번 만들어보니 왜 인지 알겠더라구요. 확실히 더 ‘효율적’입니다. 왜 그럴까요?

테스트 코드를 먼저 작성한다면 ‘요구 사항을 명확화’ 한다는 장점이 있습니다! 이는 기능을 만들 때 개발자가 어떤 기능을 만들어야 하는지 명확하게 이해하게 되고 ‘원하는 목표치’에 도달하는데 도움을 준다는 것이죠! 이는 소프트웨어 기획을 하고 안하고의 차이라고도 할 수 있겠어요! 기능을 우선시하며 ‘돌아가기만 하는 쓰레기’를 만들지 말라는 것으로 이해되기도 해요.

 

두 번째는 ‘컴파일은 실패하지 않으면서 실행이 실패하는 정도로 단위 테스트를 작성한다’ 입니다. 사실 자바스크립트를 사용하는 저에게는 크게 와닿지 않는 내용인데요, 타입스크립트로 예를 든다면, 기본적인 문법은 맞지만, 실패하는 테스트를 만들라는 말일까요?

조금 더 알아보니, 런타임에서의 예기치 못한 동작과 불필요한 에러를 발견하기 위함이라고 합니다! 이렇게 생각하니 어쩌면 당연한 거라 생각되네요.

 

세 번째는 ‘현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성하라’입니다. 이 과정을 통해 빠른 피드백 루프를 생성하여 개발자가 코드의 정확성을 신속하게 알 수 있다는 것이죠!

위의 세 법칙을 따르며 테스트 케이스를 만든다면, 명확한 요구사항 아래 원하는 목표를 빠르게 달성하는 효율성을 기를 수 있구요, 이를 통해 하루에도 수십개의 테스트 케이스를 생산 해낼 수 있을 것입니다!

하지만 이렇게 만들어진 테스트 코드가 깨끗하지 못하다면, 말짱 도루묵입니다.

😣 깨끗한 테스트 코드가 필요한 이유

테스트는 실제 코드 못지 않게 중요합니다. 왜그럴까요? 바로 테스트가 유연성, 유지보수성, 재사용성을 실제 코드에 제공하기 때문입니다. 이런 버팀목 같은 테스트가 있다면 실제 코드가 변경되는 것이 두렵지 않겠죠.

그렇기 때문에 테스트 코드가 지저분해지면, 실제 코드의 변경 능력도 떨어지고, 코드 구조를 개선하는 능력 역시 함께 떨어지게 됩니다. 이렇게 테스트 코드는 실제 코드와 직접적인 연관이 있기 때문에 깨끗한 테스트 코드는 실제 프로젝트 만큼이나 중요하다는 것입니다!

그렇다면 깨끗한 테스트 코드가 무엇이고, 이를 위해선 어떻게 해야할까요?

🧐 깨끗한 테스트 코드?

클린 코드에서 깨끗한 테스트 코드에는 세 가지가 필요하다고 합니다. 그 세가지는 가독성, 가독성, 가독성….? 아무튼 가독성입니다.

테스트 코드라고, 실제 코드보다 못한 코드가 아니란 것입니다. 실제 코드와 마찬가지로 명료성, 단순성, 풍부한 표현력을 바탕으로 가독성 좋은 코드를 만들어 내야 한다는 것입니다!!

이를 위해서는 당연히 동일하게 적용되고, 잡다하고 세세한 코드들은 없어야 한다는 것이겠고, 더 나아가 실제 코드에서도 적용되는 SRP와 같은 법칙들이 똑같이 적용 되야 한다는 것입니다!

그리고 깨끗한 테스트 코드의 원칙 F.I.R.S.T이 있습니다.

  1. Fast 빠른 : 테스트는 빠르게 실행되어야 합니다.
  2. Independent 독립적인 : 테스트는 다른 테스트에 영향을 주지 않아야 합니다.
  3. Repeatable 반복가능하게 : 테스트는 반복 가능해야합니다. 동일한 입력으로 여러 번 실행 할 수 있어야 합니다.
  4. Self-Validating 자가 검증 가능한 : 테스트는 자체적으로 검증 가능해야 합니다.
  5. Timely 적시에 : 테스트는 적시에 올바르게 변경되어야 합니다. 코드가 변경될 때마다 적시에 테스트를 실행하여 변경 사항이 올바른지 확인해야 합니다.

이 법칙만 따른다면, 깨끗한 테스트 코드를 만들 수 있을 것입니다!!!

❗결론

깨끗한 테스트 코드는 실제 코드만큼이나 중요하다. 어쩌면 실제 코드보다 더 중요할 수도 있다. 테스트 코드를 깨끗하게 유지하자!!!!