Unit Test

정재헌·2023년 1월 3일
0

소프트웨어 테스트

소프트웨어 테스트는 소프트웨어를 배포하기 전 해당 소프트웨어가 정상적으로 작동하는가에 대해 검증하는 단계이다. 테스트의 종류로는 크게 3가지로 나뉘는데, 유닛 테스트(unit test), 통합 테스트(integration test), 인수 테스트(acceptance test)가 있다.

unit test

  • 유닛 테스트의 사전적 정의

유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(test case)를 작성하는 절차를 말한다.

이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를 위해 가짜 객체(Mock Object)를 생성하는 방법을 사용한다.

integration test

  • 통합 테스트의 사전적 정의

통합 테스트(integration test)란, 유닛 테스트들을 모아서 테스트하는 것을 의미한다. 모듈들을 모아 테스트하는 방법(상향식 통합 테스트) 외에도 모듈이 있는 것을 가정하고 테스트하는 방법(하향식 통합 테스트)도 있다.

acceptance test

  • 인수 테스트의 사전적 정의

인수 테스트(acceptance test)란, 통합 테스트에서 더 나아가 실제 환경처럼 맞추어 테스트하는 것을 의미한다. 주로 알파 테스트와 베타 테스트로 알려져 있는 테스트들이 이 인수 테스트에 속한다. 알파 테스트는 폐쇄적인 환경에서 개발자가 통제를 하여 테스트를 진행하고, 베타 테스트는 개방적인 환경에서 비교적 자유롭게 테스트를 진행한다.

*코드커버리지 : 테스트가 코드를 얼마나 커버하는지에 대한 정도. 커버리지는 함수(function), 구문(statement), 조건(condition), 분기(branch)로 분류되어 있다.

  • 함수 커버리지 : 실행된 함수 개수 / 총 함수 개수
  • 구문 커버리지 : 실행된 구문 수 / 총 구문 수
  • 조건 커버리지 : 각 조건마다 true or false 한 번의 개수 / (전체 조건 수*2)
  • 분기 커버리지 : 실행된 분기 수 / 총 분기의 개수

**최근 테스트 방법론 동향 : TDD
TDD에서는 테스트 코드 작성 -> 개발 -> 리팩토링 방식으로 진행한다.

TDD 방식에서 개발자는 우선 기능이 돌아가게 프로그래밍하여 해당 테스트를 통과하게 만든다. 테스트에 통과하게 만들었다면 그 다음으로 리팩토링하여 기능이 잘 수행될 수 있게 로직을 개선한다.

이처럼 TDD는 테스트 코드를 먼저 작성함으로써 설계한 후, 하드 코딩하여 재빠르게 기능을 구현하고 이를 리팩토링하여 성능 및 안정성을 높인다. agile한 소프트웨어 개발 방법론이 부상함에 따라 TDD 방식이 나타나게 되었다.

테스트를 하는 이유

  1. 소프트웨어 품질 검증 및 보장 : 개발 후 남아 있을 수 있는 결함 및 버그를 찾아서 해결한다.
  2. 유지 보수 시 human error를 방지 : 기능 추가, 버그 제거, 리팩토링에 있어 개발자는 언제든 실수할 수 있다. 이 때 기존에 실행했던 테스트를 통과하지 못한다면 어디서 에러가 발생하였는지 확인할 수 있다.
    -> 유지 보수를 할 수 없는 소프트웨어는 퇴사자의 소프트웨어가 아니라 테스트 코드가 없는 소프트웨어이다.
profile
백엔드 개발자

0개의 댓글