카테고리 없음

[CS/기술면접] 테스트 (Testing)

보리시스템 2023. 4. 21.
테스트 (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 등

 

https://velog.io/@mjhuh263/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91%EC%A4%80%EB%B9%84-Integration-Testing-Unit-Testing-CICD

 

[기술면접준비_DevOps] Integration Testing || Unit Testing? CI/CD?

통합, 유닛 테스트 차이점 및 CI/CD 주요 개념

velog.io