: 매일 저녁, 하루를 마무리하며 작성 !
: ⭕ 지식 위주, 학습한 것을 노트 정리한다고 생각하고 작성하면서 머리 속 흩어져있는 지식들을 정리 !
import java.util.*;
class Solution {
public int[] solution(int[] answers) {
int[] first = {1,2,3,4,5};
int[] second = {2,1,2,3,2,4,2,5};
int[] third = {3,3,1,1,2,2,4,4,5,5};
int[] score = {0,0,0};
for(int i=0; i<answers.length; i++) {
if(answers[i] == first[i%5]) score[0]++;
if(answers[i] == second[i%8]) score[1]++;
if(answers[i] == third[i%10]) score[2]++;
}
int max = Math.max(score[0], Math.max(score[1], score[2]));
List<Integer> answ = new ArrayList<Integer>();
for(int i=0; i<score.length; i++) if(max == score[i]) answ.add(i+1);
int[] answer = new int[answ.size()];
for(int i=0; i<answ.size(); i++){
answer[i] = answ.get(i);
}
return answer;
}
}
1. 통합 테스트와 단위 테스트의 차이점에 대해서 설명해주세요.
단위 테스트(Unit Test)와 통합 테스트(Integration Test)는 소프트웨어 테스트의 두 가지 주요 유형
단위 테스트 (Unit Test) :
정의 : 소프트웨어의 가장 작은 단위인 함수나 메서드를 개별적으로 테스트
목적 : 각 단위가 독립적으로 올바르게 작동하는지 확인
특징 : 독립적이고 격리된 환경에서 실행되며, Mock이나 Stub을 사용하여 외부 의존성을 대체
통합 테스트 (Integration Test):
정의 : 여러 소프트웨어 모듈이 결합되어 상호 작용하는 방식을 테스트
목적 : 개별 단위가 통합될 때 발생할 수 있는 문제를 발견하고, 모듈 간의 상호 작용이 올바른지 확인
특징 : 실제 환경과 유사한 설정에서 여러 모듈이 함께 동작하는 것을 확인
2. 통합 테스트과 단위 테스트의 장/단점에 대해서 설명해주세요.
단위 테스트의 장점 :
빠른 피드백 제공 : 빠르게 실행되어 개발자에게 즉각적인 피드백을 제공
문제의 정확한 위치 파악 : 문제가 발생한 단위를 쉽게 파악할 수 있다.
쉬운 유지보수 : 코드베이스가 변경될 때 영향을 쉽게 확인할 수 있다.
단위 테스트의 단점 :
외부 종속성 테스트의 어려움 : 외부 시스템이나 데이터베이스와의 상호 작용을 테스트하기 어렵다.
제한된 범위 : 시스템 전체의 작동을 보장하지 않으며, 모듈 간의 상호 작용 문제를 발견하기 어렵다.
통합 테스트의 장점 :
모듈 간 상호 작용 확인 : 시스템의 여러 부분이 함께 작동하는 방식을 테스트할 수 있다.
실제 환경 시뮬레이션 : 실제 사용 환경과 유사한 조건에서 테스트를 수행할 수 있다.
통합 테스트의 단점:
느린 실행 시간 : 많은 모듈을 포함하고 실제 환경과 유사하게 설정해야 하므로 실행 시간이 길어질 수 있다.
디버깅의 어려움 : 문제가 발생했을 때 어느 모듈에서 문제가 발생했는지 파악하기 어려울 수 있다.
3. 레이어별로 나누어서 Slice Test 를 하는 이유에 대해서 설명해주세요.
빠른 피드백 : 단일 레이어만 테스트하므로 테스트가 빠르게 실행
문제의 정확한 위치 파악 : 특정 레이어에서 발생하는 문제를 쉽게 찾을 수 있다.
효율적 리소스 사용 : 전체 애플리케이션을 로드하지 않고 필요한 부분만 테스트하여 리소스를 효율적으로 사용
유지보수 용이성 : 코드 변경 시 영향을 받는 특정 레이어만 테스트하여 변경의 영향을 신속히 확인할 수 있다.
4. 테스트 코드를 직접 짜보고 나서 느낀 테스트 필요성을 적어주세요.
신뢰성 확보 : 코드 변경이나 기능 추가 시 기존 기능이 올바르게 작동하는지 확인할 수 있어 코드에 대한 신뢰성이 높아졌다.
버그 사전 발견 : 개발 초기 단계에서 버그를 발견하고 수정할 수 있어 나중에 발생할 수 있는 문제를 미리 방지
리팩토링 지원 : 코드를 리팩토링할 때 기존 기능이 깨지지 않도록 보장해주어 마음 놓고 리팩토링할 수 있다.
문서화 역할 : 테스트 코드가 일종의 문서 역할을 하여 코드의 동작 방식과 의도를 이해하는 데 도움
5. 테스트 코드를 짜면서 어려웠던 점을 적어주세요.
Mocking의 복잡성
테스트 커버리지 확보
의존성 관리
실제 환경과의 차이