테스트 (Testing)에 대해 어떤 것을 알고 있나요?
1. 한마디 정리
테스트는 코드의 품질을 향상시키고 결함을 최소화하기 위해 수행하는 것으로
Jest, Mocha 등의 테스트 프레임워크를 통해 필요한 코드 구조 및 테스트 실행 방법, 테스트 결과 분석 등을 제공 받아 통합, 유닛 테스트를 실행할 수 있습니다.
2. 내가 생각한 꼬리질문
1) Integration Testing와 Unit Testing의 차이?
모듈 하나의 성능을 테스트할 때는 Unit Testing이다.
그러나 모듈들이 다 개발되고 서로 통합되면 Integration Testing이 진행된다.
이 때 Integration Testing은 모듈들이 서로 통합 되고 상호작용할 때 시스템상 발생할 수 있는 문제점들을 말한다.
2) Unit Testing이란?
- 작은 양의 코드가 실행되고 제 역할 하는지 확인함
- 앱 속 하나의 컴포넌트를 확인함
- module 특화
- scope가 매우 좁은 편: 하나의 클래스만 확인하는 경우도 있음
- unit test 밖에 있는 코드에 dependency가 없어야 함 ➡ 관심사 분리!
- unit testing은 더 상세하게 나눠져있지 않음
- 각자의 unit들의 testing의 집중하지 서로 상호작용할 때의 문제점까지 짚지 않음
- White Box Testing Type에 포함되어 있음
3) Integration Testing이란?
- 각자의 모듈들이 서로 통합했을 때의 testing ➡ 통합 됐을 때 어떤 문제들이 발생하는지
- 앱 전체의 testing
- interface 특화
- integration testing은 DB, 하드웨어 등 외부 시스템을 의존, 참조
- unit test 다음, 그리고 system test 전에 하는 테스트
- integration testing은 top-down, bottom-up 등 다양한 type들로 나눠짐
- Black Box, White Box Testing에 포함되어 있음
4) System Testing?
전체 build가 비즈니스 요구, 사양에 맞는지 확인하는 testing. System error들을 짚는데 도움이 된다
5) CI/CD란?
CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법
1. 지속적인 통합
2. 지속적인 서비스 제공
3. 지속적인 배포
- 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제를 해결하기 위한 솔루션
- 애플리케이션의 통합 및 테스트 단계에서부터 제공, 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공 - 이런 구축 사례를 CI/CD 파이프라인이라고 부르며 개발 및 운영팀의 애자일 방식 협력을 통해 지원됨
6) CI란?
CI는 자동화 프로세스인 지속적인 통합 - Continuous Integration - 를 의미함
CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결
7) CD란?
지속적인 서비스 제공과 배포 - Continuous Delivery, Deployment - 를 의미함
제공 및 배포가 상호 교환적으로 사용되며 두 가지 의미 모두 파이프라인 추가 단계에 대한 자동화를 뜻함(얼마나 많은 자동화가 이루어지고 있는지를 성명하게 위해 별도로 사용되기도 함)
7-1) 지속적인 제공?
지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드 되는 것을 뜻함
- 운영팀은 이 리지토리에서 애플리케이션을 실시간으로 프로덕션 환경으로 배포할 수 있음(개발팀과 비즈니스팀 소통 문제 해결)
=> 지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 함
7-2) 지속적인 배포?
지속적인 배포란 개발자가의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미함
Jenkins, Circle CI, Gitlab 등