[TIL]Software Testing

박민하·2022년 7월 7일
0

Today_I_Learned

목록 보기
6/7

✅ Software Testing

  • 제대로 된 소프트웨어를 개발했는가?
  • 소프트웨어를 제대로 개발했는가?

✔ why?

  • 결함 확인
  • 사전 방지
  • 시간 절약
  • 구조 개선
  • 품질 개선
  • 확장성

✅ Unit Test

  유닛 테스트란, 내가 작성한 코드의 가장 작은 단위인 함수를 테스트하는 메소드다. 그래서 내가 작성한 로직을 테스트하는 유닛테스트 코드를 짜서 테스트하게 된다.

✔ 지금까지는,

  • 백엔드는 장고 서버를 동작시켜서 Httpie 나 포스트맨으로 Integration 테스트 수행.
  • 테스트할 엔드포인트가 10개라면 최소 수분은 걸릴 것.
  • Integration 테스트는 데이터베이스 서버를 돌려야 하고, 메모리가 유닛테스트보다 더 많이 사용하게 되므로 비용도 비쌈.

✔ 유닛테스트를 돌린다면,

  • 엔드포인트 10개는 수초만에 테스트가 끝나게 됨.
  • 빠르고 비용이 싸므로 개발할 때 필수적으로 작성해야 함.

✅ Testing Pyramid

  • Google Test Automation Conference에서 제안된 테스트 피라미드
  • 시스템을 테스트 전략 3가지
    • 전체 테스트 비중을 아래와 같은 수치로 구현하는 것이 권장됨
  • E2E(UI) Testing - 10%
  • Integrating Testing - 20%
  • Unit Testing - 70%

1. End-To-End(UI) Testing

  • 프론트와 백의 통신으로 하는 테스트.
    • 대표적으로 cypress 툴 사용.
  • 전체전인 Flow 확인 → 직접 브라우저 상에서 값을 입력해서 테스트.
  • 가장 어렵고 까다로운 방법.
  • 실행하기 쉽다는 장점이 있지만 비용이 많이 들고 부정확 하며 실행 시간이 오래 걸림.
  • 자동화 및 실행이 까다로움.
  • 불안정성↑ 인력소모↑ 비용↑ 테스트속도↓

2. Integration Testing(통합 테스트)

  • 모듈 간의 호환성 검증.
  • 최소 두개이상의 클래스 또는 서브 시스템의 결합을 테스트하는 방법.
    • ex)장고로 서버를 띄우고 모델 클래스와 결합하여 데이터베이스 시스템과 연동한 테스트.
  • Postman 또는 httpie로 호출해서 Json response가 제대로 출력되는지 확인.
  • E2E Testing 다음으로 공수가 많이 든다.
  • 안정성↑ 인력소모↓ 비용↓ 테스트속도↑ 확장성↑

3. Unit Tests(단위 테스트)

  • 독립적으로 진행되는 가장 작은 단위의 테스트
  • 가장 쉽고 효과 좋은 방법.
  • 빠른 문제 파악 가능.
  • 시간과 비용 절감.
  • 리팩토링 시 안정성 확보.
  • 코드에 대한 문서로 활용.

✅ Test의 일반 원칙

  • 테스트 유닛은 각 기능의 가장 작은 단위에 집중하여, 정확히 동작하는지 증명해야 한다.
  • 각 테스트 유닛은 반드시 독립적이어야 한다.
  • 테스트가 빠르게 돌 수 있도록 만들기 위해 노력해야 한다.
  • 코딩을 시작하기 전에 항상 풀 테스트 슈트를 돌려야 한다.
  • 공용 저장소에 저장하기 전에 자동으로 모든 테스트를 수행하도록 하는 훅을 구현하는 것이 좋다.
  • 코드를 디버깅할 때 가장 먼저 버그를 찝어내는 새로운 테스트를 작성한다.
  • 테스트 함수에는 길고 서술적인 이름을 사용한다.
    • square(), sqr()test_square_of_number_2()
profile
backend developer 🐌

0개의 댓글