CS/SRE

Ch17. 신뢰성을 위한 테스트

12.tka 2023. 8. 30. 21:19
728x90

이번 장에서는 소프트웨어 테스트 종류에 대해서 알아보고, 테스트의 목적이 무엇인지에 대해서 생각해보는 시간을 가져보도록 하자.

 

소프트웨어 테스트의 종류

소프트웨어 테스트는 전통적인 테스트와 프로덕션 테스트로 분류할 수 있다. 소프트웨어를 개발하는 동안 소프트웨어가 올바른 동작을 수행하는지 여부를 평가하는 전통적인 테스트가 조금 더 일반적인 편이다. 프로덕션 테스트는 실제 동작하는 웹 서비스에 대해 배포된 소프트웨어 시스템이 올바르게 동작 중인지를 판단하는 테스트다.

 

전통적인 테스트

전통적인 테스트에는 단위, 통합, 시스템 테스트가 존재한다.

 

단위 테스트

가장 작으면서도 간단한 소프트웨어 테스트 기법이다. 소프트웨어의 특정 단위, 예를 들면 클래스나 함수 등을 테스트하여 이 단위들로 구성된 전체 소프트웨어 시스템의 동작을 독립적으로 테스트하는 방법이다. 또한 단위 테스트는 함수나 모듈이 시스템이 요구하는 정확한 동작을 수행하는지에 대한 명세의 역할도 할 수 있다. 단위 테스트는 주로 테스트 주도 개발 방법론과 함께 사용된다.

 

통합 테스트

단위 테스트를 통과한 소프트웨어 컴포넌트는 그보다 더 큰 규모의 컴포넌트에 편입된다. 이렇게 구성된 컴포넌트가 올바른 동작을 수행하는지를 검증하기 위한 것이 통합 테스트다.

 

시스템 테스트

아직 배포가 완료되지 않은 시스템에 대해 엔지니어가 수행할 수 있는 가장 큰 규모의 테스트다. 통합 테스트를 통과한 서버 같은 특정 컴포넌트에 속한 모든 모듈은 결국 시스템으로 편입된다. 그런 후 엔지니어는 종단 간 기능을 테스트하게 된다. 시스템 테스트는 다음과 같은 방법으로 수행할 수 있다.

  • 스모크 테스트: 가장 간단한 형태의 시스템 테스트로, 엔지니어가 시스템의 간단하지만 중요한 동작을 테스트하는 방법이다. 안정성 검사로도 알려져 있으며, 시스템 테스트와 비교할 때 약간의 장애 상황을 가정한 테스트를 포함해 더 많은 부분을 테스트한다.
  • 성능 테스트: 시스템의 생명주기 동안의 성능을 테스트하기 위해 시스템 테스트를 약간 변형한 테스트를 수행한다.
  • 회귀 테스트: 이미 알려진 버그들을 통해 시스템의 실패나 잘못된 결과가 나타나는 것을 유추하는 테스트다.

 

프로덕션 테스트

다른 테스트들이 밀폐된 테스트 환경에서 이루어지는 것과 달리, 프로덕션 테스트는 실제 프로덕션 시스템을 대상으로 이루어지는 테스트다. 블랙박스 모니터링과 매우 유사해서 블랙박스 테스트라고도 부른다.

  • 설정 테스트: 실제 프로덕션 환경에서 동작하는 특정 바이너리가 실제로 어떻게 설정되어 있는지를 확인하고 해당 설정 파일과 일치하지 않는 부분을 찾아 보고한다.
  • 스트레스 테스트: 웹 서비스의 한계를 알아내기 위해 수행하는 테스트이다. (e.g. 데이터베이스의 용량 한계 파악, 초당 수행 가능한 쿼리 수 파악)
  • 카나리 테스트: 서버의 일부만을 새로운 버전의 바이너리나 설정 파일로 업그레이드한 후, 일정 기간 동안 살펴보는 테스트다.

 

이외에 책에서 새롭게 알게된 내용은 다음과 같다.

  • SRE들은 대부분 프로젝트가 이미 한창 진행 중일 때 개발팀에 합류한다.
  • 강력한 테스트 문화를 수립할 수 있는 방법 중 하나는 지금까지 보고된 모든 버그를 테스트 케이스의 형태로 문서화하는 것이다.
  • 짧은 피드백 주기를 확보하는 것은 자동화된 테스트 커버리지를 적용할 때와 동등한 수준의 효율성을 확보한다는 것을 의미한다.

 

결론

테스트는 자신이 개발한 제품의 신뢰성을 향상시킬 수 있는 가장 적절한 방법이다!

728x90