Testing 이란?

Software Test 제품(함수, 특정한 기능, UI, 성능, API 스펙)이 예상하는대로 동작하는지 확인

  • 자동화 속도 쉽게
  • 작성 높은 커버리지
  • 기능이 정상 동작
  • 요구 사항 이해 / 요구사항 만족
  • 이슈에 대해 예측
  • 버그를 빠르게 발견
  • 손쉬운 유지보수
  • 코드간 의존성을 낮춤
  • 좋은 문서화

테스트 코드 피라미드

  • E2E Test - UI테스트, 사용자 테스트
  • Integration Test 통합테스트 - 모듈들, 클래스들
  • Unit Test 단위테스트 - 함수, 모듈, 클래스

TDD란?

Test-driven development 테스트 주도 개발 - 개발을 해내가는 방식 요구사항 분석 및 이해 -> 설계할때 더 잘 할 수있음 모든 요구사항에 대해 점검 사용자 입장에서 코드를 작성

테스트 작성 - > 실패 -> 테스트 통과할정도만 작성 성공하면 리팩토링함 (코드정리) 그래도 성공하면 리팩토링

TDD를 하는 경우

  • 요구사항이 명확할 때
  • 비지니스 로직
  • 협업시 명세서 역할
  • 설계에 대한 고민이 필요할때

UI컴포넌트를 작성할 때는 TDD를 하지않음

CI/CD란?

어플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 배포하는것

  • CI : Continuous Intergration 지속적인 통합
  • CD : Continuous Delivery 지속 적인 제공

근데 Continuous Deployment 지속적인 배포로 사용하는 경우도 있음

CI : Continuous Intergration 지속적인 통합 버그 고치거나 새로 만든 기능 주기적으로 빌드되고 테스트돼서 메인 Repository에 merge 되는 것

    1. 코드 변경사항을 주기적으로 빈번하게 머지해야한다.
    1. 통합을 위한 단계(빌드, 테스트, 머지)의 자동화

장점 개발 생산성 향상, 버그 수정용이, 문제점을 빠르게 발견, 코드의 퀄리티 향상

CI 쪽에서 되면… 준비되면 배포하는 걸 CD 수동적으로 배포하면 Continuous Delivery 배포도 자동화면 Continuous Deployment

CI/CD는 테스트 코드가 있어야한다!