개발일지
유닛테스트 vs 통합테스트 vs E2E테스트 본문
Unit test (단위테스트) : 함수 하나하나와 같이 코드의 작은 부분을 테스트 하는 것
Integration test (통합테스트) : 서로 다른 시스템들의 상호작용이 잘 이뤄지는지 테스트하는 것
e2e test (종단 간 테스트) : 사용자와 어플리케이션의 상호작용이 잘 이뤄지는지 테스트하는 것
TDD (Test-driven development) : 테스트가 주가 되어 개발하는 방법
테스트 주도 개발(TDD)이란?
TDD는 Test-Driven Development의 약자로 실제 코드를 작성하기 전에 테스트 코드를 먼저 작성하는 개발 프로세스다. TDD 프로세스는 다음 단계를 따른다.
- 테스트 코드 작성: 우선 구현하려는 동작을 설명하는 테스트 코드를 작성한다. 이때, 아직 동작을 구현하는 코드를 작성하지 않았으므로 테스트는 실패 해야한다.
- 테스트 실행: 테스트를 실행한다. 위에 언급했듯이, 코드를 작성하지 않았으므로 실패해야한다.
- 코드 작성: 1번에 작성했던 설명에 부합하는 코드를 작성한다. 이때 테스트를 통과하기 위한 목적으로만 작성해야한다.
- 즉 아직 존재하지 않은 많은 문제들을 생각하여 코드를 작성하기보다는 테스트 목표에 집중하여 작성하는 것이 중요하다.
- 테스트 실행: 테스트를 다시 실행한다.
- 리팩터링: 테스트를 통과하면 코드를 리팩터링 한다.
TDD의 이점
- 테스트를 먼저 작성함으로써, 개발자는 구현하려는 동작에 대해 먼저 생각하게 되어 특정한 요구사항에 맞는 코드를 작성할 수 있다.
- 코드의 유지보수성을 향상시키고, 시간이 지나도 프로젝트의 유지 관리가 쉬워진다.
- 코드 수정 시 미처 생각지 못한 부분(기존 코드에 영향을 받는)에 대한 문제점을 미리 파악할 수 있다.
- 애플리케이션에 대한 신뢰성이 높아진다.
- 테스트 코드는 동작 방식을 설명하니, 테스트 파일 자체를 문서로 활용할 수 있다.
- 각종 에러 케이스에 대한 생각을 많이 하게 되므로 두뇌 건강에 좋다.
테스트의 종류
Unit test (단위테스트)
일반적으로는 Class나 Method를 테스트하는 범위로 정해지며, 가장 핵심적인 테스트라 볼 수 있다.
그 이유는 매우 간단하고 명확하게 작성이 되기 때문에, 빈번히 일어나는 개발 단계에서의 버그를 잡아주고, 설계 단계에서 더욱 명확하게 메서드를 나눌 수 있게 된다. 테스트하기 어려운 부분은 stub을 사용하여 테스트한다
이로 인해 Unit test가 사실상 척추이며, TDD의 중심이고, 아마 test code를 짠다 라고 한다면 바로 Unit test를 위한 코드를 짜는 것이라 볼 수 있다.
장점 : 즉각적인 피드백
단점 : 하나의 메서드들이 잘 동작한다는 것은 보장할 수 있지만, 그들이 결합되었을때도 잘 작동한다는 것은 보장할 수 없다
Integration test (통합 테스트)
Integration test는 Unit test와 달리 개발자가 변경할 수 없는 부분 (ex. 외부 라이브러리, db)까지 묶어서 검증할 때 사용되는 테스트이다.
Unit을 넘어서 각기 다른 시스템이 잘 상호작용 하는지 (ex. 내 앱이 db와 잘 연동되는지)를 확인하는 작업이기 때문에, Unit test code를 작성할 때보다 더욱 복잡하게 만들어지며, 더 많은 코드를 테스트하기 때문에 에러 검출이 명확하지는 않다. 그래서 실제로는 Unit test에 더욱 초점을 두는 것이 좋다.
E2E test (종단 간 테스트)
End To End test 해당 시스템과 해당 시스템을 구축하고 배포하는 프로세스를 모두 시험하는 것을 말한다
말 그대로 Endpoint, 즉 사용자가 실제 프로그램을 사용하는 상황을 테스트하는 것이다. 그래서 소프트웨어의 내부 구조 보다는 비즈니스 쪽에 초점을 두어 실제 시나리오대로 잘 동작하는지 테스트 하는 것이다.
그래서 Acceptance test(인수테스트)와 같은 의미로 사용되며, 이 또한 소프트웨어 인수를 위해 사용자 시나리오대로 테스트를 해보는 의미로 직결된다.
단점 : 테스트를 만들기가 힘들고, 만든 테스트를 신뢰하기도 힘들다는 것
reference.
단위 테스트 vs 통합 테스트 vs 인수 테스트(2021.05.25).tecoble.23.07검색.https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test
[tdd] 인수테스트, 단위테스트, 통합테스트, 전 구간 테스트.기록은 기억의 연장성.(2019.03.17).23.07검색.https://ryuhojin.tistory.com/10
[3월 우아한테크세미나] 우아한ATDD.https://www.youtube.com/watch?v=ITVpmjM4mUE&t=4s
프론트엔드 테스트 - TDD와 종류(Unit, Integration, E2E).(2023.02.27).23.07검색.https://soojae.tistory.com/74
'frontEnd > React' 카테고리의 다른 글
| useReducer (0) | 2023.10.19 |
|---|