본문 바로가기
기술

테스트코드

by cha123 2022. 4. 4.

테스트코드란?

테스트 코드란 말 그대로 테스트를 하는 코드입니다. 프로그램을 작성하고 무제가 없는지 확인하기 위해서 사용하는 것입니다.

사실 테스트 도구를 이용하지 않아도 프로그래밍 언어의 출력문이나 여러 가지 방법을 이용해서 테스트 코드를 작성할 수 있지만 편리한 기능을 제공하는 테스트 도구를 이용하는 것이 좋은 방법인 것 같습니다.

 

장점

  • 빠른 피드백이 있다.
  • 자동검증이 가능하다.
  • 개발자가 만든 기능을 안전하게 보호해 준다.

테스트 종류

  • 유닛 테스트 : 코드가 제대로 작동하는지 확인하기 위해 애플리케이션의 개별 모듈을 독립적으로 테스트(종속성과의 상호 작용없이)하는 것을 의미합니다.
  • 통합 테스트 : 다른 모듈이 그룹으로 결합될 때 잘 작동하는지 확인하는 것을 의미합니다.
  • 기능 테스트 : 시스템의 기능 조각(종속성과 상호 작용 할 수 있음)을 테스트하여 코드가 올바른 작업을 수행하는지 확인하는 것을 의미합니다.

기능 테스트는 통합 테스트와 관련이 있지만, 모든 코드가 함께 실행되는 상태에서 전체 애플리케이션의 기능을 확인하는 테스트를 의미합니다.

단위 테스트는 시슽메의 단일 구성 요소 검사를 고려하는 반면, 기능 테스트는 시스템 요구 사항 사양에 설명 되어 있는 의도 된 기능에 대해 응용 프로그램 작동을 검사하는 것 입니다.

 

유닛 테스트의 특징

  • 가장 작은 단위의 테스트이며, 보통 메서드 레벨입니다.
  • A라는 함수가 실행되면 B라는 결과가 나온다 정도로 테스트합니다.
  • 즉각적인 피드백이 나온다는 것이 훌륭한 장점입니다.
  • 꼭 메모리 내에서만 실행되는 테스트여야 한다는 법칙은 없습니다.
    • DB, Network Access, File System 등을 사용하여도 단위테스트의 레벨일 수 있습니다.
  • 하나의 메서드들이 잘 동작한다는 것은 보장할 수 있지만, 그들이 결합되었을 때도 잘 작동한다는 것은 보장할 수 없습니다.
  • 테스트하기 어려운 부분은 stub을 사용하여 테스트합니다.
    • 비용이 크지 않다면 stub 보다는 실제 객체를 사용하는 것이 좋습니다.
    • 아무래도 정교한 목 객체가 실제 객체보다 정확하지는 않기 때문입니다.
    • 모든 것은 비용 관점에서 생각해야 합니다.

E2E 테스트의 특징

  • 해당 시스템과 해당 시스템을 구축하고 배포하는 프로세스를 모두 시험하는 것을 말합니다.
    • 용어를 사용하는 곳마다 조금씩 차이가 있다고 합니다.
  • 내부 기능들까지(클래스의 메서드) 테스트 할 필요는 없습니다.
    • 이는 단위테스트의 영역입니다.
  • 단점은 테스트를 만들기가 힘들고, 만든 테스트를 신뢰하기도 힘들다는 것입니다.

통합 테스트의 특징

  • 모듈을 통합하는 과정에서 모듈 간 호환성의 문제를 찾아내기 위해 수행되는 테스트입니다.
  • 유닛 테스트와의 차이점은 유닛 테스트는 다른 컴포넌트들과 도긻적인 반면 통합 테스트는 그렇지 않습니다.
  • 예를 들면, 유닛 테스트에서 데이터베이스에 접근하는 코드는 실제 데이터 베이스와 통신하는 것은 아니지만, 통합 테스트는 실제 통신해야 합니다.
  • 통합 테스트는 대게 유닛 테스트를 작성하는 것보다 복잡하고 오랜 시간이 걸립니다.
  • 꼭 필요한 것이 아니라면, 유닛 테스트를 작성하는데 집중하는 것이 좋습니다.

'기술' 카테고리의 다른 글

TTD  (0) 2022.04.11
CORS  (0) 2022.04.11
CLASS  (0) 2022.04.04
ISO 8601  (0) 2022.04.04
ORM, noSQL vs SQL  (0) 2022.04.03