마음만 바쁜 사람
Published 2023. 2. 9. 19:02
[Level 1] 단위 테스트 우테코

1. 단위 테스트란?

단위 테스트(Unit Test)는 앱의 작은 단위를 사용하여 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 여기서 모듈의 범위는 정해져 있지 않으며 보통 하나의 기능 또는 메서드를 의미한다. 예를 들어 앱에서 아이디 입력 기능을 만들었다면 해당 기능이 주어진 조건(4~10글자, 특수기호 미포함 등)을 충실히 만족하는지 검증하는 독립적인 테스트가 1개의 단위 테스트가 될 수 있다.

즉, 단위 테스트는 개발을 진행하며 구성하는 기능들이 각각 올바르게 동작하는지를 독립적으로 검증하는 것으로,

'기능 A 실행 결과 == 내가 예상한 결과' 의 방식으로 테스트를 진행한다.

 

 

2. 단위 테스트의 필요성

단위 테스트의 가장 큰 특징은 기능 단위의 코드 조각을 독립적으로 테스트한다는 점이다. 각각의 테스트에서 일어나는 오류는 앱 전체로 전파되지 않는다. 즉, 오류가 발생했을 때 그 원인은 해당 기능 단위 내에 존재한다. 문제 여부를 빠르게 파악할 수 있다는 점은 유지보수의 측면에서 상당히 중요한 요소이다.

 

실무적인 입장에도 단위 테스트는 선호된다. 규모가 큰 프로그램일수록 시스템을 구성하는 컴포넌트들이 많을 것이고 이는 비용(시간)의 증가로 이어진다. 하지만 단위 테스트를 이용하면 테스팅에 대한 비용을 절감할 수 있고, 새로운 기능을 추가/변경 할 때에도 빠르게 테스트를 거치며 작업을 진행할 수 있다. 

 

이외에 내가 직접 단위 테스트를 적용해 보며 느낀 점으로는

우선 코드의 구성에 대해 큰 구도를 잡아가며 개발을 진행하게 된다는 점이었다. 테스트 하기 쉽게 기능을 구현하다 보니 자연스럽게 메서드들이 작은 단위로 분리되게 되고, 코드의 진행 방향과 구성이 이전보다 더 눈에 들어오기 쉬워지는 효과가 있었다. 그리고 이전에는 특정 로직을 변경하면서 연쇄적으로 다른 파일들의 코드를 바꾸는 경우가 잦았는데 단위 테스트를 적용해 내 코드가 제대로 동작하는지 기능마다 확인하다 보니 코드 작성 중 문제나 실수가 있어도 빠르게 발견하고 대처할 수 있었다.

 

 

3. 좋은 단위 테스트란 무엇인가

좋은 단위 테스트의 기준은 각자 조금씩 다르겠지만 대부분 4대 요소와 5대 조건(FIRST)을 기준으로 삼는 듯 하다. 

이런 기준이 있다 정도로 간단히 정리만 하고 넘어가려고 한다.

 

좋은 단위 테스트의 4대 요소

1. 회귀 방지

    코드 수정 후에 버그가 존재하지만 테스트는 통과하는 경우가 있어선 안된다.

    일반적으로 실행되는 코드가 많을 수록 테스트에서 해당 경우가 나타날 가능성이 높아진다.

 

2. 리팩토링 내성

    테스트를 빨간색(실패)으로 바꾸지 않고 기본 애플리케이션 코드를 리팩토링할 수 있는지에 대한 척도.

    코드의 내부 작업과 테스트의 결합도를 낮춰야지만 리팩터링 내성을 높일 수 있다.

 

3. 빠른 피드백

    속도가 빠를수록 더 많은 테스트를 더욱 자주 실행할 수 있다.

 

4. 유지 보수성

    테스트가 얼마나 이해하기 어려운가, 얼마나 실행하기 어려운가에 대한 지표를 설정한다.

 

 

좋은 단위 테스트의 5대 속성(FIRST)

Fast : 빠른

    단위 테스트는 빠르게 수행되어 해당 시스템에 대한 지속적이고 빠른 피드백을 주는 데 그 가치가 있다.

Isolated : 고립된

   다른 단위 테스트나 같은 메소드에 있는 다른 테스트 케이스와도 의존하지 않는 고립된 상태여야 한다.

   어떠한 순서나 시간에도 관계없이 실행될 수 있어야 하며, 테스트 실패 시 분명한 원인을 파악할 수 있도록 단위를 나누어야 한다.

Repeatable : 반복 가능한

    반복적으로 사용할 수 있는 테스트틑 실행할 때마다 결과가 같아야 한다.

Self-validating : 스스로 검증 가능한

    print문이나 log를 출력하는 것이 아닌 assert 등의 메서드를 이용해 검증하도록 한다.

Timely : 적시의

    단위 테스트는 미루지 않고 즉각적으로 작성한다.

 

 


개인 학습을 위해 작성되는 글입니다.

올바르지 않은 개념에 대한 지적 또는 추가적인 질문사항은 언제든지 댓글 달아주세요..!

 

 

 

 

참조 링크: [TDD] 단위 테스트(Unit Test) 작성의 필요성 (1/3) - 망나니개발자 - https://mangkyu.tistory.com/143

                단위 테스트란 무엇인가? 왜 단위 테스트를 해야하는가? 왜 pytest를 사용해야 하는가? - https://cjh5414.github.io/why-pytest/

profile

마음만 바쁜 사람

@훌루훌루

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!