테스트 코드(Test Code)와 테스트 주도 개발(Test-Driven Development, TDD) 🧪

rimmz·2022년 7월 6일
0

🤔 | QnA

목록 보기
9/13
post-thumbnail
post-custom-banner

테스트 코드와 TDD 🧪(feat. 프론트엔드, 백엔드를 위한 테스트 코드)


✅ 해당 영상을 보고 정리하여 작성한 내용입니다.

개발자가 필수로 가지고 있어야 되는 역량? 💪

필요한 기능을 빠르게 구현할 수 있는것을 포함하여 기능에 해당하는 테스트를 작성하는 것도 개발자의 역량

(기술 면접 상황)
Q : 기능 구현 코드를 작성해 보세요. 작성한 기능이 제대로 구현됐는지 어떻게 검증하죠? 어떻게 확신하시겠어요?
A : 그야 당연히 테스트죠! 방금 작성한 코드를 검증할 수 있는 테스트 코드를 작성하고 이 테스트 코드를 통해서 어떻게 내가 방금 작성한 코드를 향상할 수 있는지 리팩토링도 진행해 보았습니다.

개발자는 기능을 구현하는 사람 일 수도 있지만 자신감 있는, 여유 넘치는 개발자가 되기 위해서는 테스트를 잘 작성하는 것도 정말 중요하다.


🧪 테스트 (Testing) 이란?

  • 소프트웨어 테스트 (Software Test) : 어플리케이션 제품이나 서비스 품질을 확인하고, 숨어 있는 소프트웨어의 버그를 찾음

제품(= 함수, 특정한 기능, UI, 성능, API 스펙)이 예상하는 대로(=원하는 대로) 동작 하는지 검증하고 확인하는 것

우리의 목표가 무엇인지에 따라, 플랫폼환경이 무엇인지에 따라서 다양한 테스트가 있다. (Unit Test, Functional Test,Integration Test, Component Test, Contract, E2E Test 등)

테스트 프로세스는 딱 하나로 정의할 수 있다.


🧪 테스트 과정

  1. 특정한 기능을 수행하는 비즈니스 로직을 가지고 있는 소스 코드가 있다면

  2. 그에 해당하는 테스트 코드를 작성합니다. (이때 이 테스트 코드는 우리의 코드가 우리가 예상하는 원하는 기대(expectation)에 맞는지 확인할 수 있어야 한다.) ex) 함수가 어떻게 동작해야 하는지, 특정한 상황에서 어떻게 기능을 해야 하는지, UI는 어떻게 보여줘야 하는지, 성능은 어떻게 돼야 되는지, API 스펙은 어떻게 돼야 되는지 이런 정의에 따라서 다양한 테스트 프레임워크나 라이브러리를 사용할 수 있다.

  3. 특정한 상황에 우리가 원하는 대로 예상하는 대로 동작하는 것을 검증하는 테스트 코드를 작성해 두었다면 테스트 코드를 수행해서 모든 테스트가 다 통과되는지 확인해야 한다.

모든 테스트가 다 통과된다면, 코드가 원하는 대로 동작한다고 검증할 수 있다.
만약 테스트가 실패한다면 코드에서 어떤 부분이 잘못되엇는지 확인하고 수정해야 한다.
(테스트가 다시 통과될 때까지 이 부분을 다시 반복해 줘야 합니다.)

✨ 테스트의 포인트
바로 우리가 예상하는 기대(expectation)에 맞게 우리 코드가 동작하는지 검증하는 것!


💻 TDD (Test-driven development) 테스트 주도 개발

개발 하기(코드 작성) 전에 테스트 코드를 먼저 작성하는 방식

어떤 특정한 기술 프레임워크나 라이브러리를 말하는 것이 아니라 우리가 어떻게 개발해 나갈 건지 개발 방식, 개발 방법론 중 하나이다.


💻 TDD로 개발해 나가기

  1. 코드를 작성하기 전에 특정한 기능에 한해서 그 기능을 세분화해서 하나의 테스트 케이스를 작성
  2. 테스트를 수행 (아직 기능을 구현하기 전이니까 결과는 실패로 나온다.)
  3. 실패한 테스트가 성공할 정도의 조금의 양만 코드를 작성해서, 테스트를 다시 수행해서 성공하도록 만듭니다.

이렇게 하나의 테스트가 완성이 되면 , 이제 그다음의 기능으로 넘어가서

✔ 그 기능에 해당하는 테스트를 작성 > 테스트를 수행해서 실패하면 실패하는 코드가 성공할 수 있을 만큼의 코드를 작성 > 다시 테스트를 수행해서 성공하면 다시 그 다음 테스트를 작성

이렇게 TDD 방법을 이용해서 모든 기능이 다 구현이 완료 되었다면 그 동안 작성해왔던 모든 테스트들이 성공적으로 통과가 된다.

여기까지는 기능을 구현하는 데에만 집중해서 빠르게 코드를 작성했다면, 우리가 작성해놓은 테스트를 기반으로 조금 더 자신감 있게 코드를 퀄리티를 향상하고, 아키텍처 개선하고, 리팩토링을 해나갈 수 있다.

TDD란 실패하는 테스트를 먼저 작성하고, 그에 해당하는 기능을 구현해나가는 방식


💡 왜 TDD?

TDD 장점

  • 작성하고자 하는 모든 요구사항에 대한 철저한 분석과 명확한 이해가 필요
  • 명확한 요구사항을 기반으로 해서 설계자의 관점에서 코드를 작성해나갈 수 있다.
  • TDD를 이용하면 우리가 원하는 모든 요구사항(목표)에 대해서 점검할 수 있다.
  • 사용자 입장에서 코드를 작성할 수 있다.
  • 구현보다는 인터페이스에 조금 더 집중해나갈 수 있으며 코드의 퀄리티는 향상이 되고 시스템 전반적인 설계를 향상할 수 있다.
  • 지속적으로 개발을 테스트와 함께 진행을 하기 때문에 개발 집중력도 향상할 수 있다.

🤔모든 개발자들이 TDD를 해야할까?

중요한 사실은 TDD를 하든 하지 않든 우리의 코드를 사용자에게 배포하기 전에, Main Repository에 merge 하기 전에, 내가 작성한 코드에 버그는 없는지? 기존에 존재하던 기능들이 내 코드에 의해서 영향을 받지는 않았는지, 이런 것들을 검증할 수 있는 테스트를 꼭 포함해야 한다. 테스트가 없는 코드를 Main Repository에 merge 하거나 사용자에게 배포했을 때 그때 발생할 수 있는 위험부담은 결국 내가 짊어지고 가야 된다 🤯💣

profile
#의욕넘치는#💻#✨#FE#💪🏻
post-custom-banner

0개의 댓글