[ 개인 공부 ]단위테스트에 관하여

2023. 10. 23. 22:53·개인공부
목차
  1. 단위 테스트 코드를 작성하는 이유
  2. 단위 테스트를 설계하는 방법

단위 테스트, UnitTest

대부분의 개발자는 지속적인 리팩터링 의 필요성을 인지하고 있으나, 다른 사람이 만든 코드를 리팩터링 하다 발생하는 문제 에 대한 고민 때문에 능동적으로 리팩터링 하는 경우는 많지 않다.

이러한 문제(고민)을 해결 할 수 있는 방법은 크게 다음과 같다.

  • 설계 원칙과 디자인 패턴에 익숙할 뿐만아니라 비즈니스와 코드에 대한 이해도를 높인다.
  • 단위 테스트 를 작성(혹은 분석)한다.

 

단위 테스트는 코드의 정확성을 테스트하기 위해 작성한(된)다.

  • 테스트 대상은 클래스 또는 함수로 제한되며, 테스트 대상이 예쌍대로 실행되는지 테스트한다.
  • 예상되거나 예상치 못한 상황에서 코드가 올바르게 실행될 수 있도록 가능한 모든 정상 및 비정상 상황을 포괄하는 테스트 케이스를 생각하고 설계해야한다.

 


단위 테스트 코드를 작성하는 이유

 

단위 테스트 코드 는 코드 품질을 향상시키는 효과적인 수단이며, 단위 테스트를 작성함으로써 다음과 같은 이점이 존재한다.

 

프로그래머가 코드에서 버그를 찾는데 도움이 될 수 있다.

버그가 없는 코드를 작성하는 것은 프로그래머의 능력을 측정하는 중요한 기준이다.

  • 매번 코드를 작성할 때마다 완벽한 단위 테스트를 설계하는 것은 중요하다.
  • 이러한 과정을 거쳐 낮은 수준의 버그를 수정하는데 드는 불필요한 시간을 절약할 수 있다.

 

프로그래머가 코드 설계에서 문제를 찾는데 도움이 될 수 있다.

코드에 대한 단위 테스트를 설계하는 데 어려움을 겪고 있고, 단위 테스트 프레임워크의 고급 기능에 의존해야 하는 경우라면 결합성이 높은 코드 처럼 설계가 비합리적임을 의미하는 경우가 많다.

  • 의존성 주입을 사용하지 않거나 전역 변수와 정적 함수를 많이 사용하고 있는 경우

 

통합테스트를 보완할 수 있다.

프로그램이 실행될 때 나타나는 버그는 일부 경계조건과 비정상적인 상황에서 발생하는 경우가 많다. 그리고 이러한 대부분의 예외는 테스트 환경에서 재현이 매우 어렵다. 이 때 단위 테스트 를 사용하면, 테스트 환경의 부족한 부분을 보완 할 수 있다.

  • Mock 을 사용하여 반환 값을 제어하고 비정상적인 상황을 재현하여 해당 상황에서의 코드 실행 결과를 테스트 할 수 있다.

 

단위 테스트 코드를 작성하는 과정은 코드 리팩터링 과정에 해당한다.

모든 상황에 대해 명확하게 단위 테스트 코드를 작성하는 것은 어렵지만, 분명한 것은 단위 테스트 를 작성하는 것이 현장에서 지속적인 리팩터링을 수행하는 효과적인 방법이다.

  • 단위테스트 를 작성함으로써, 코드를 다시 검토할 수 있다.
  • 테스트 용이성 이 낮은 것과 같은 코드 설계상의 문제점 을 찾아 낼 수 있다.
  • 경계 조건의 부적절한 처리와 같은 코드 작성 문제 를 리팩터링 할 수 있다.

 

프로그래머가 코드를 빠르게 익숙해지도록 도와준다.

코드를 읽기 전, 비즈니스 배경 과 코드 설계 사상 을 이해하는 것이 도움이 되지만 일부 개발자는 문서 를 작성하고 주석 을 추가하는 것을 싫어하여 코드의 가독성 이 떨어지고 이해하기 어려운 코드가 되기 쉽다.

이 경우 단위 테스트가 문서 와 주석 의 역할을 대신할 수 있다.

  • 단위 테스트 사례는 코드가 수행하는 작업과 사용 방법을 반영하는 사용자 사례 에 해당한다.
  • 단위 테스트를 사용하면 코드가 구현하는 내용, 고려해야 할 특별한 경우, 처리해야 하는 경계 조건 을 알기 위해 코드를 깊이 읽을 필요가 없어지게 된다.

 


단위 테스트를 설계하는 방법

 

단위 테스트는 코드에 대한 다양한 입력, 예외, 경계 조건을 다루는 테스트 케이스 를 설계하고 테스크 케이스를 코드로 변환하는 프로세스이다. 이와 관련하여, 단위 테스트를 설계하는 방법 을 중심으로 내용을 알아두면 유용하다.

 

이전에 작성한 단위 테스트를 재활용하여 작성한다.

단위 테스트 코드는 구현이 간단하고 설계를 고려할 필요가 없기 때문에 작성에 많은 시간이 필요하지 않다. 뿐만아니라 테스트 케이스에 따라 그 구현 방식이 거의 비슷한 경우가 많으므로 새로운 단위 테스트를 작성할 때 기존의 단위 테스트 코드를 재활용할 수 있다.

 

테스트 케이스가 가능한 모든 가능한 케이스, 특히 일부 특별한 케이스를 포함하는지 주의를 기울인다.

단위 테스트의 품질을 평하가는 기준 중 테스트 커버리지 를 이야기 할 수 있다. 하지만 이는 단위 테스트 품질의 척도로 사용하는 것은 비합리적이다. 커버리지에 집중하기 보다는 테스트 케이스가 모든 발생 가능한 케이스, 특히 일부 특별한케이스(엣지케이스)를 포함하도록 주의를 더 기울여야 한다.

  • 단위 테스트 커버리지에 집중하다보면, 커버리지를 개선하기 위해 불필요한 테스트 코드를 많이 작성할 수 있다.
  • 일반적으로 프로젝트의 단위 테스트 커버리지가 60~70% 에 도달하면 운영 서버에 배포해도 문제가 없다.

 

단위테스트는 테스트 중인 함수의 특정 구현 논리에 집중하지 않으며, 그 기능에만 초점을 맞춘다.

단위 테스트를 작성할 때에는 코드의 구현 논리를 이해하는 것이 불필요하다. 오히려 특정 구현을 검증할 경우, 깨지기 쉬운 테스트가 된다.

  • 코드의 구현 논리 자체에 대한 단위 테스트를 작성할 경우, 코드가 리팩터링되었을 때 외부적인 동작이 변경되지 않았음에도 코드의 논리가 변경되었을 경우 단위 테스트가 실패하게 된다.
  • 단위 테스트는 행위 를 검증하는 것이 아닌, 상태를 검증해야 한다.(때에 따라 행위를 검증해야 할 때도 존재한다.)
728x90
저작자표시 (새창열림)

'개인공부' 카테고리의 다른 글

[ 개인 공부 ] 리팩터링(Refactoring)에 관하여  (0) 2023.10.30
[ 개인공부 ] DRY 원칙  (0) 2023.10.25
[ 코드 설계 ] 의존성 역전 원칙 과 의존성 주입 프레임 워크  (0) 2023.10.06
[ 코드 설계 ] 개방 폐쇄 원칙 OCP  (0) 2023.09.28
[ 코드 설계 ] 단일 책임 원칙 SRP  (0) 2023.09.26
  1. 단위 테스트 코드를 작성하는 이유
  2. 단위 테스트를 설계하는 방법
'개인공부' 카테고리의 다른 글
  • [ 개인 공부 ] 리팩터링(Refactoring)에 관하여
  • [ 개인공부 ] DRY 원칙
  • [ 코드 설계 ] 의존성 역전 원칙 과 의존성 주입 프레임 워크
  • [ 코드 설계 ] 개방 폐쇄 원칙 OCP
KEEMSY
KEEMSY
JUST DO IT
목적, 수단, 목표JUST DO IT
KEEMSY
목적, 수단, 목표
KEEMSY
전체
오늘
어제
  • 분류 전체보기
    • 회고
      • WIL
      • TIL
    • Project
    • 개인공부
      • 알고리즘
      • 아키텍처
      • 트러블슈팅
      • 테스팅
      • git
      • 배포

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

hELLO· Designed By정상우.v4.5.2
KEEMSY
[ 개인 공부 ]단위테스트에 관하여

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.