테스트 코드

유현준·2022년 3월 30일
0

개념

  • 코드에 결함이 없는지 테스트하기 위해 작성하는 코드
  • 테스트 기본 원칙은 일반적으로 7가지가 존재한다고 한다. 아래 링크를 통해, 이를 확인해볼 수 있고, 번역해보자면 다음과 같은 것 같다.
  • 개발에 착수하기 전에, 테스트 코드를 잘 작성해둔다면, 발생 가능한 에러의 상당 부분을 사전에 방지할 수 있다.
  • 테스트 코드는 내가 생각한 결함을 녹여내는 것이다
    https://www.boxuk.com/insight/the-seven-principles-of-testing/
1. 테스트는 결함의 존재를 보이는 것이지, 결함이 없는 것을 보이는 게 아니다.: 
- 의미 있는 테스트코드는 "내가 구현한 함수가 어떻게 하면 실패할지?"를 고민해서 작성한 것이다.
- 즉, 결함을 보여주는 테스트코드가 가치 있는 테스트코드이다.
- 설계가 얼마나 이상하고, 코드가 얼마나 잘 못짜여져 있는지를 보여주는 게 결국 테스트코드다...

2. 완벽한 테스트는 불가능하다.
- 테스트도 결국에 사람이 만드는 것이기 때문이다.
- 테스트 코드가 배포환경까지 완벽하게 컨트롤하기는 힘들다.

3. 테스트 구성은 가능한 빠르게 시작하는 것이 좋다.
- 어떤 서비스를 시작하든, API를 개발하든, 테스트 코드를 제일 먼저 작성하는 것이 코드 개발의 안정성을 불어넣어준다.

4. 결함은 일반적으로 "모여" 있다.
- 일반적으로 테스트 코드를 작성하지 않은 로직에서 결함이 나타난다.

5. 비슷한 테스트만 반복하면, 새로운 결함을 발견할 수 없다.(살충제 역설)

6. 테스트는 문맥 의존적이다.
- 테스트의 목적은 내가 예상한 결과(내가 예상한 에러O or 에러X)를 검토하는 것이다. 모든 결과는 결국 시나리오와 마찬가지로 앞,뒤 맥락이 있다. 즉, 테스트코드를 작성할 때도 그 앞,뒤 맥락의 상황을 반영해야한다.

7. 사용되지 않을 시스템이나 사용자의 기대에 부응하지 않는 기능의 결함을 찾기 위한 테스트는 부질없다.
  • 테스트 코드의 종류
1. Unit test: 단위 기능에 대한 테스트 ex. 함수 하나를 두고 보았을 때, 함수의 I/O나 버그를 테스트.

2. Integration test: 여러 기능이 연결된 상태에 대한 테스트

3. E2E test: 백앤드부터 프론트앤드까지 전체적인 과정을 모두 점검하는 테스트
- 서비스를 시작할 때, 가장 먼저 해보는 것이 좋음. 일단 사용자에게 보여주는 것이 잘 나타나는지 테스트하는 것이기 때문.

테스트 코드의 사례: 카오스 몽키

(출처: https://www.itworld.co.kr/news/152680)

  • 카오스몽키는 CPU 부하, 하드웨어 고장, 통신 지연 유발 등 다양한 유형의 장애를 유발하는 코드들이 담긴 넷플릭스가 제공하는 오픈소스이다.
  • 카오스몽키의 원리에 기반을 둔 카오스 엔지니어링은 의도적으로 시스템에 장애를 일으킴으로써, 시스템의 탄력성을 높이는 테스트 코드 방법을 의미한다.
    지속적으로 서버의 특정 인스턴스에 장애를 일으키고, 이를 해결하는 과정을 반복하면서, 시스템의 취약점을 파악하고, 이에 대해 자동으로 대처하는 트리거를 개발함으로써, 시스템의 탄력성을 높이는 것이다.
  • 카오스 엔지니어링의 4단계 원칙
    1) 시스템의 정상 상태를 정의하여, 정상 동작의 기준선을 설정한다.
    2) 대조군과 실험군 양쪽을 설정하고, 양쪽 모두 정상 상태에 대한 가설을 설정한다.
    3) 서버 멈춤, 하드 드라이브 고장, 네트워크 연결 끊김 등 실제 상황을 반영하는 카오스 변수들을 대입시켜 가설을 검증한다.
    4) 대조군과 실험군 사이의 차이가 나타나면, 가설을 기각하면서 시스템의 취약점을 파악한다.

테스트 코드 프레임워크, JEST

  • node.js 플랫폼 환경에서 테스팅을 도와주는 자바스크립트의 테스팅 프레임워크 중 하나이다.
  • 페이스북에서 개발한 프레임워크로 현재까지 사용량이 가장 많은 테스팅 프레임워크이다.
    사용량이 많은 까닭은 다른 프레임워크들보다 테스트 코드에 대한 표현이 가장 간결하기 때문이다.]
  • jest에서는 supertest라는 라이브러리를 통해 Integration test를 진행한다.

테스트 코드가 중요한 이유 참고자료

https://ssowonny.medium.com/%EC%84%A4%EB%A7%88-%EC%95%84%EC%A7%81%EB%8F%84-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1-%EC%95%88-%ED%95%98%EC%8B%9C%EB%82%98%EC%9A%94-b54ec61ef91a

profile
차가운에스프레소의 개발블로그입니다. (22.03. ~ 22.12.)

0개의 댓글