본문 바로가기

frond-end

TDD (Test-Driven Development)

테스트 주도 개발
개발(코드 작성) 전 테스트 코드를 먼저 작성해나가는 방식

 

 

TDD 를 하기 위해서는
코드를 구현하기 전에 테스트코드를 먼저 작성한다 이 테스트코드를 실행하고 -> 구현하기 전에 테스트 코드를 먼저 작성했기 때문에 테스트를 실행하면 "실패" 할 것이다 -> 작성된 이 테스트코드가 "성공"할 수 있도록 그 테스트만을 통과할 수 있을만큼만 심플한 코드를 작성한다 -> 성공

 

그러면 다음 테스트로 넘어가서 이 단계를 반복.

 

이런식으로 테스트를 먼저 작성하고 전체적인 기능을 구현한다면 이제 그때서야 이미 작성된 코드를 여기저기 수정하고 깨끗하게 만드는 "Refactoring" 작업을 할 수 있다.

 

리팩토링을 자신감 있게 할 수 있는 이유는 , 구현된 코드를 다 테스트하는 테스트코드가 있기 때문이다!

 

 

TDD 는 오래전부터 쓰여왔던 방식이고 요즘 다시 각광받고 있는데
TDD 의 큰 장점은 TDD를 하기 위해서 우리가 뭘 원하는지 어떤걸 테스트해야하는지 기능이 무엇인지

요구 사항 분석 및 이해 가 필요하기 때문이다.
이러한 요구사항에 대한 철저한 이해를 바탕으로 우리가 어떻게 설계 해나가야 하는지 조금 더 설계하는 측면에서 테스트코드를 작성할 수 있다.

 

 

  • 모든 요구사항(목표) 에 대해 점검
  • 사용자 입장에서 코드를 작성 = 내부 구현사항보다는 인터페이스 위주로 코드를 작성하기 때문에 서로 의존하지 않는 코드를 작성하면서 코드의 퀄리티를 향상할 수 있다.
  • 시스쳄 전반적인 설계 향상
  • 개발 집중력 향상

 

 

 

TDD 는 언제 써야할까?

  • 요구사항이 명확할 때
  • 비지니스 로직
  • 협업시 명세서(문서) 역할

 

 

CI/CD

code -> build -> test -> release -> deploy

이 모든 단계들을 자동화를 통해서 조금 더 효율적이로 빠르게 사용자에게 빈번이 배포할 수 있도록 만드는 것이다.

  • CI : Continuous Integration 지속적인 통합
  • CD : Continuous Delivery 지속적인 제공 / Continuous Deployment 지속적인 배포

 

CI 는 버그 수정이나 새로 만드는 기능들이 메인 리파지토리에 주기적으로 빌드되고 테스트가 되어서 merge 되는 것을 말한다.

 

 


CI 는 2가지를 포인트를 잡고 생각하면 좋은데


첫번째는 개발자들은 그들의 코드 변경사항을 메인 리파지토리에 주기적으로 빈번하게 머지를 해야한다는 것이다.

동일한 소스파일 위에서 두명의 개발자가 서로 다른 코드를 작성하고 있다가 오랜 기간 서로 변경을 하다가 나중에 머지를 할려고 하면 서로 다른 코드를 어떻게 통합해서 적용해 나갈건지 고생을 많이 하게 된다

이렇게 되면 새로운 기능을 개발하기 위해서 코드를 작성하는 시간보다 이 머지 충돌을 해결하기 위해서 더 많은 시간을 사용해야할지도 모른다 그렇기 때문에 버그를 수정하거나 또는 새로운 기능을 구현할 때는 더더욱 이 기능을 어떻게 작은 단위로 나누어서 내가 메인리파지토리에 반영하거나 또는 작은 단위로 나누어서 내가 사용자에게 배포할 수 있을지 최대한 작은 단위로 나눠서 개발하고 통합해 나가는 것이 중요하다

 

 

두번째 포인트는 주기적으로 머지된 코드의 변경사항이 자동으로 빌드가 되어서 코드 변경 사항 이후에도 빌드가 성공적으로 되는지 확인이 되어야 한다 그리고 새로 추가된 이 코드에 변경사항 뿐만 아니라 기존의 시스템에 다른 버그를 초래하지는 않았는지 자동으로 테스트까지 되어야 한다.


보통 개발팀에서는 메인 리파지토리가 있고 개발자들은 하루에도 몇번씩 코드의 변경사항을 메인리파지토리에 머지를 한다

물론 그전에 코드리뷰를 통해서 확인을 받고 머지가 되었으면 자동으로 그 팀에서 만든 (CI Server) CI 스크립트를 통해서 추가된 코드와 함께 이 리파지토리가 빌드가 되고 빌드가 잘 된다면 팀에서 작성한 유닛테스트, 인티그레이션 테스트 등등을 스크립트를 통해서 실행이 되게 셋업한다

 

 

Tool : Jenkins/ BuildKite / GitHub Actions / Bitbucket Pipelines / Circleci / GitLab CICD

등등 많다

 

 

나는 지금 회사에서 Bitbucket Pipelines 을 사용 중이다.

728x90
반응형

'frond-end' 카테고리의 다른 글

로그아웃 시 다른 에러 상태 코드 도 같이 보여주는 문제 (axios + vue3)  (0) 2024.03.07
[CSS] z-index 의 동작방식  (1) 2024.03.04
[typescript] any VS unknown  (0) 2024.02.21
CORS  (0) 2023.09.06
GitHub 사용법  (0) 2022.02.17