본문 바로가기

TIL

2022.12.02 테스트 코드와 Thread

테스트 코드

 

의도된 대로 정확히 작동하는지 검증

 

장점

  • 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있다.
  • 작성한 코드가 의도한 대로 작동하는지 검증할 수 있다.
  • 코드의 변경, 추가, 삭제 시 사이드 이펙트를 줄일 수있다.

생성된 Test 클래스의 위치 확인.

자동으로 생성된 테스트 클래스의 이름은 “테스트 대상 클래스+Test”로 자동 생성

  • Annotation
    • @Test : 테스트 메서드임을 나타냄. 실행 가능
    • @BeforeEach : 각 메서드 전에 실행됨을 나타냄.
    • @BeforeAll : 현재 클래스의 모든 메서드보다 먼저 실행되어야하는 메서드 표시.
    • @AfterAll : 현재 클래스의 모든 메서드보다 나중에 실행되어야하는 메서드 표시.
    • @RepeatedTest : 메서드 반복 호출을 함을 표시.
    • @DisplayName : 사용자 지정 표시 이름을 선언.

테스트 코드 작성 요령

1. 간단하게 작성

2. 엣지 케이스 테스트

3. 버그 수정 전 테스트 작성

4. 설명이 포함된 이름 사용

5. 한 번에 하나의 요구 사항 테스트

 

Thread

함수 호출에 의한 스택 프레임 변화

실행 단계 살펴보기

  1. 프로그램이 실행되면, 가장 먼저 main() 함수가 호출되어 main() 함수의 스택 프레임이 스택에 저장.
  2. func1() 함수를 호출하면 해당 함수의 매개변수, 반환 주소값, 지역 변수 등의 스택 프레임이 스택에 저장.
  3. func2() 함수를 호출하면 해당 함수의 스택 프레임이 추가로 스택에 저장.
  4. func2() 함수의 모든 작업이 완료되어 반환되면, func2() 함수의 스택 프레임만이 스택에서 제거.
  5. func1() 함수의 호출이 종료되면, func1() 함수의 스택 프레임이 스택에서 제거.
  6. main() 함수의 모든 작업이 완료되면, main() 함수의 스택 프레임이 스택에서 제거되면서 프로그램이 종료

 

Thread Scheduling

컴퓨터가 동시에 처리할 수 있는 최대 작업 수는 CPU 코어(core) 수와 같다.

→ 스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서로 동시성을 실행할 것인가 결정하는 스레드 스케줄링.

  • 자바의 스레드 스케줄링은 우선 순위(Priority) 방식과 순환 할당(Round-Robin) 방식 사용. 기본 메커니즘은 Queue 구조를 가짐
    • 우선 순위 방식 : 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링. : 1~10까지 값을 가질 수 있으며, 기본은 5.
    • 순환 할당 방식 : 시간 할당량(Time Slice)을 정해서 하나의 스레드를 정해진 시간만큼 실행.

 

동기화(Synchronization) 문제

스레드는 잘 다루면 매우 효율적이지만, 스레드 간섭 및 메모리 일관성 오류라는 두 가지 오류가 발생할 수 있다. 이런 오류를 방지하는 데에 필요한 도구가 동기화.

 

 

반복, 재정리 필요