최근 개발에는 테스팅이 매우 중요하다고 다들 말합니다. 하지만 보통 말로만 들어서는 쉽게 지나치기 마련입니다.
저또한 테스팅에 중요성에 대해서는 너무 많이 들어왔지만 "나중에, 언젠가, 필요하면, 해야지~"라며 미뤄왔습니다.
하지만,
요즘 여러 웹 애플리케이션 프로젝트를 진행하면서 수많은 오류를 만났고 그때마다 해결하기 위해 노력하였습니다.
이 과정을 통해 많은 것을 배웠고 의미있는 과정이였지만, 하나의 불안감이 생겼습니다
"만약 이게 실제로 수많은 유저들이 사용하는 애플리케이션이였다면, 이래도 괜찮은걸까?"
이처럼 실제로 체감하게되니 누가 옆에서 말해주지 않아도 테스팅에 대해서 관심이 가고, 찾아보게되었습니다.
그래서 이 글과 앞으로의 글에서는 제가 느낀 테스팅에 대해서 간략하게 정리해보려합니다.
1. Testing 이란?
테스팅을 프로젝트에 적용하기 위해서 우선 테스팅이 무엇인지 확실히 짚고 넘어가야했습니다.
- 테스팅 이란?
- 개발을 하면서 개발자들은 항상 직접 테스트를 하게됩니다. 여기서 말하는 테스트란 자신이 작성한 코드를 개발환경에서 실행시켜 브라우저에서 확인하는 방식을 뜻합니다.
- 이러한 테스팅은 매우 중요하고 필수적이지만, 오류가 발생하기 쉽습니다. 왜냐하면 앱이 커질수록 모든 경우의 수를 테스팅하는 것은 사실상 불가능하기 때문입니다.
- 이러한 문제점을 개선시킬수있는 것이 “자동화된 테스팅”입니다
- 자동화된 테스팅이란?
- 개발 코드외의 추가적인 코드를 작성하여, 추가된 코드가 개발 코드를 테스트하는 것을 뜻합니다
- 이러한 자동화된 테스팅은 위에서 언급된 수동 테스팅에 문제점을 해결해주고, 추가적으로 테스팅 이후에 개발 코드가 변경되어도 테스팅을 하는데 문제가 발생하지 않는등의 이점이 존재합니다
- 이러한 테스팅은 현대 애플리케이션에 필수 절차이며, 개발자와 사용자의 환경을 향상시켜줍니다.
2. Testing 종류
이렇게 테스팅에 대해 이해하고 실제로 적용해보려하니, 여러 종류의 테스팅이 존재하였습니다.
- Unit Tests
- Unit Test란 가장 작은 단위에 대한 테스트를 작성하는 것을 말합니다
- 여기서 말하는 가장 작은 단위란 함수, 컴포넌트등 입니다.
- 이러한 테스팅 방식은 가장 일반적이고 세분화된 테스팅이기 때문에 중요한 테스팅입니다.
- Unit Test란 가장 작은 단위에 대한 테스트를 작성하는 것을 말합니다
- Integration Tests
- 앞에서의 Unit Test가 세분화된 것들을 하나하나씩 테스팅하는 것이라면 Intergration Test는 이러한 테스트를 모아 통합 테스트 하는 것을 말합니다
- 이러한 방식의 테스트는 여러 조합(ex, A컴포넌트 - B컴포넌트)을 테스팅 할 수 있습니다
- 물론 중요한 테스트 방식이지만, 유닛 테스트 보다는 빈도가 적습니다
- 앞에서의 Unit Test가 세분화된 것들을 하나하나씩 테스팅하는 것이라면 Intergration Test는 이러한 테스트를 모아 통합 테스트 하는 것을 말합니다
- End to End(e2e) Tests
- e2e 테스트는 애플리케이션의 전체 워크플로우를 테스트하는 방식을 뜻합니다
- ex) 로그인 후 특정 페이지로 이동하는 흐름
- 이러한 테스팅은 실제 사용자가 되어 테스트하는 것을 목표로합니다
- 이또한 중요한 테스트 방식이지만, 앞의 두개의 테스트가 성공적이라면 보통의 애플리케이션은 정상적으로 작동된다는 것이 보장되기 때문에 상대적으로 빈도가 적습니다
- e2e 테스트는 애플리케이션의 전체 워크플로우를 테스트하는 방식을 뜻합니다
3. Testing 시작전,,,
이제 테스팅 이해도 하였고, 테스트 종류도 알았으니 테스트를 실제로 적용하기 위해 두가지를 고려하게 되었습니다
- 무엇을 테스트할것인지
- 에를들어 유닛 테스트라면 작은 단위를 테스트하는 것을 목표로 둡니다
- 이를 통해 오류 발생시 어느 부분이 문제가되는지 쉽게 알수있습니다
- 어떻게 테스트할것인지
- 문제가 없을때와 문제가 발생했을 때를 테스트합니다
4. Testing 시작하기
테스트를 위한 여러가지 툴이 존재하였고, 저는 그중에서 아래 3가지 툴을 사용해보려합니다
- Jest
- 테스트 코드를 실행시킬 툴입니다.
- React-Testing-Library (RTL)
- 시뮬레이션 및 렌더링할 툴입니다
- Cypress
- e2e 테스팅을 위한 툴입니다
이 툴들에 대해서는 나중에 하나씩 자세하게 적어보도록 하겠습니다
+. TDD
테스팅에 대해서 찾다보니, 자연스럽게 TDD (Test-Driven-Development)에 대해서 알게되었습니다
- TDD란 테스트 주도 개발을 말합니다
- 메인코드를 작성하기 전에 테스트 코드를 먼저 작성합니다
- 이렇게 작성된 테스트 코드를 통과하도록 메인코드를 작성하는 방식입니다
- red-green 테스팅으로 불리기도 합니다 → 메인코드 작성전에는 테스트가 실패하는 레드 테스트를 실행하고, 작성후에는 테스트가 성공하는 그린 테스트를 확인하는 방식입니다
- 일반적인 TDD 진행방식
- 최소한의 코드를 작성합니다 (빈 함수 또는 빈 컴포넌트)
- 테스트 코드를 작성합니다
- 레드 테스트를 실행하여 테스트가 실패하는 것을 확인합니다
- 메인 코드를 작성합니다
- 그린 테스트를 실행하여 테스트가 성공하는 것을 확인합니다
- 이러한 TDD는 왜 사용될까?
- 앞서 언급했듯이, 현대에 와서는 테스팅은 선택이 아닌 필수 과정입니다
- 즉, 메인코드를 모두 작성하고 추가적으로 테스팅하는것이 아닌, 메인코드와 함께 하나의 개발과정에 포함되어야합니다
- 또한 효율적입니다
- 메인코드에 변경사항이 생길때마다 보통 수동으로 직접 테스트해야합니다
- 하지만 TDD 방식을 따른다면 이러한 과정이 생략됩니다
- 앞서 언급했듯이, 현대에 와서는 테스팅은 선택이 아닌 필수 과정입니다
이렇게 이해한 테스팅 내용들을 바탕으로,
실제 제가 진행중 또는 진행완료된 프로젝트들에 하나씩 적용해보며 느낀점들을 기록해보려합니다
관련글
https://joseph0926.tistory.com/74
[Testing] Redux를 활용하는 컴포넌트를 테스트 할 때 주의할 점 (문제-해결 과정, 개선 결과)
요즘 모든 프로젝트에 test 파일을 작성하고 있습니다. 하지만 처음 적용하다보니 이런저런 문제를 만나게 되는데, 그중 가장 인상깊었던 문제-해결 과정을 글로 작성해보려합니다 문제: Navbar 컴
joseph0926.tistory.com
https://joseph0926.tistory.com/73
[Project] 개인 프로젝트에서도 GitHub 기능을 사용 해야 할까? (GitHub Actions, Issues,,,,)
요즘 팀 프로젝트를 진행하면서 정말 많은 깃허브 기능을 사용해 봤습니다. 이를 통해 원활한 소통과 문제 해결을 진행할 수 있었습니다. 반면 이런 생각도 들었습니다 -> " 개인 프로젝트에서는
joseph0926.tistory.com
'기타 > Testing' 카테고리의 다른 글
[Testing] Redux를 활용하는 컴포넌트를 테스트 할 때 주의할 점 (문제-해결 과정, 개선 결과) (0) | 2023.05.31 |
---|
최근 개발에는 테스팅이 매우 중요하다고 다들 말합니다. 하지만 보통 말로만 들어서는 쉽게 지나치기 마련입니다.
저또한 테스팅에 중요성에 대해서는 너무 많이 들어왔지만 "나중에, 언젠가, 필요하면, 해야지~"라며 미뤄왔습니다.
하지만,
요즘 여러 웹 애플리케이션 프로젝트를 진행하면서 수많은 오류를 만났고 그때마다 해결하기 위해 노력하였습니다.
이 과정을 통해 많은 것을 배웠고 의미있는 과정이였지만, 하나의 불안감이 생겼습니다
"만약 이게 실제로 수많은 유저들이 사용하는 애플리케이션이였다면, 이래도 괜찮은걸까?"
이처럼 실제로 체감하게되니 누가 옆에서 말해주지 않아도 테스팅에 대해서 관심이 가고, 찾아보게되었습니다.
그래서 이 글과 앞으로의 글에서는 제가 느낀 테스팅에 대해서 간략하게 정리해보려합니다.
1. Testing 이란?
테스팅을 프로젝트에 적용하기 위해서 우선 테스팅이 무엇인지 확실히 짚고 넘어가야했습니다.
- 테스팅 이란?
- 개발을 하면서 개발자들은 항상 직접 테스트를 하게됩니다. 여기서 말하는 테스트란 자신이 작성한 코드를 개발환경에서 실행시켜 브라우저에서 확인하는 방식을 뜻합니다.
- 이러한 테스팅은 매우 중요하고 필수적이지만, 오류가 발생하기 쉽습니다. 왜냐하면 앱이 커질수록 모든 경우의 수를 테스팅하는 것은 사실상 불가능하기 때문입니다.
- 이러한 문제점을 개선시킬수있는 것이 “자동화된 테스팅”입니다
- 자동화된 테스팅이란?
- 개발 코드외의 추가적인 코드를 작성하여, 추가된 코드가 개발 코드를 테스트하는 것을 뜻합니다
- 이러한 자동화된 테스팅은 위에서 언급된 수동 테스팅에 문제점을 해결해주고, 추가적으로 테스팅 이후에 개발 코드가 변경되어도 테스팅을 하는데 문제가 발생하지 않는등의 이점이 존재합니다
- 이러한 테스팅은 현대 애플리케이션에 필수 절차이며, 개발자와 사용자의 환경을 향상시켜줍니다.
2. Testing 종류
이렇게 테스팅에 대해 이해하고 실제로 적용해보려하니, 여러 종류의 테스팅이 존재하였습니다.
- Unit Tests
- Unit Test란 가장 작은 단위에 대한 테스트를 작성하는 것을 말합니다
- 여기서 말하는 가장 작은 단위란 함수, 컴포넌트등 입니다.
- 이러한 테스팅 방식은 가장 일반적이고 세분화된 테스팅이기 때문에 중요한 테스팅입니다.
- Unit Test란 가장 작은 단위에 대한 테스트를 작성하는 것을 말합니다
- Integration Tests
- 앞에서의 Unit Test가 세분화된 것들을 하나하나씩 테스팅하는 것이라면 Intergration Test는 이러한 테스트를 모아 통합 테스트 하는 것을 말합니다
- 이러한 방식의 테스트는 여러 조합(ex, A컴포넌트 - B컴포넌트)을 테스팅 할 수 있습니다
- 물론 중요한 테스트 방식이지만, 유닛 테스트 보다는 빈도가 적습니다
- 앞에서의 Unit Test가 세분화된 것들을 하나하나씩 테스팅하는 것이라면 Intergration Test는 이러한 테스트를 모아 통합 테스트 하는 것을 말합니다
- End to End(e2e) Tests
- e2e 테스트는 애플리케이션의 전체 워크플로우를 테스트하는 방식을 뜻합니다
- ex) 로그인 후 특정 페이지로 이동하는 흐름
- 이러한 테스팅은 실제 사용자가 되어 테스트하는 것을 목표로합니다
- 이또한 중요한 테스트 방식이지만, 앞의 두개의 테스트가 성공적이라면 보통의 애플리케이션은 정상적으로 작동된다는 것이 보장되기 때문에 상대적으로 빈도가 적습니다
- e2e 테스트는 애플리케이션의 전체 워크플로우를 테스트하는 방식을 뜻합니다
3. Testing 시작전,,,
이제 테스팅 이해도 하였고, 테스트 종류도 알았으니 테스트를 실제로 적용하기 위해 두가지를 고려하게 되었습니다
- 무엇을 테스트할것인지
- 에를들어 유닛 테스트라면 작은 단위를 테스트하는 것을 목표로 둡니다
- 이를 통해 오류 발생시 어느 부분이 문제가되는지 쉽게 알수있습니다
- 어떻게 테스트할것인지
- 문제가 없을때와 문제가 발생했을 때를 테스트합니다
4. Testing 시작하기
테스트를 위한 여러가지 툴이 존재하였고, 저는 그중에서 아래 3가지 툴을 사용해보려합니다
- Jest
- 테스트 코드를 실행시킬 툴입니다.
- React-Testing-Library (RTL)
- 시뮬레이션 및 렌더링할 툴입니다
- Cypress
- e2e 테스팅을 위한 툴입니다
이 툴들에 대해서는 나중에 하나씩 자세하게 적어보도록 하겠습니다
+. TDD
테스팅에 대해서 찾다보니, 자연스럽게 TDD (Test-Driven-Development)에 대해서 알게되었습니다
- TDD란 테스트 주도 개발을 말합니다
- 메인코드를 작성하기 전에 테스트 코드를 먼저 작성합니다
- 이렇게 작성된 테스트 코드를 통과하도록 메인코드를 작성하는 방식입니다
- red-green 테스팅으로 불리기도 합니다 → 메인코드 작성전에는 테스트가 실패하는 레드 테스트를 실행하고, 작성후에는 테스트가 성공하는 그린 테스트를 확인하는 방식입니다
- 일반적인 TDD 진행방식
- 최소한의 코드를 작성합니다 (빈 함수 또는 빈 컴포넌트)
- 테스트 코드를 작성합니다
- 레드 테스트를 실행하여 테스트가 실패하는 것을 확인합니다
- 메인 코드를 작성합니다
- 그린 테스트를 실행하여 테스트가 성공하는 것을 확인합니다
- 이러한 TDD는 왜 사용될까?
- 앞서 언급했듯이, 현대에 와서는 테스팅은 선택이 아닌 필수 과정입니다
- 즉, 메인코드를 모두 작성하고 추가적으로 테스팅하는것이 아닌, 메인코드와 함께 하나의 개발과정에 포함되어야합니다
- 또한 효율적입니다
- 메인코드에 변경사항이 생길때마다 보통 수동으로 직접 테스트해야합니다
- 하지만 TDD 방식을 따른다면 이러한 과정이 생략됩니다
- 앞서 언급했듯이, 현대에 와서는 테스팅은 선택이 아닌 필수 과정입니다
이렇게 이해한 테스팅 내용들을 바탕으로,
실제 제가 진행중 또는 진행완료된 프로젝트들에 하나씩 적용해보며 느낀점들을 기록해보려합니다
관련글
https://joseph0926.tistory.com/74
[Testing] Redux를 활용하는 컴포넌트를 테스트 할 때 주의할 점 (문제-해결 과정, 개선 결과)
요즘 모든 프로젝트에 test 파일을 작성하고 있습니다. 하지만 처음 적용하다보니 이런저런 문제를 만나게 되는데, 그중 가장 인상깊었던 문제-해결 과정을 글로 작성해보려합니다 문제: Navbar 컴
joseph0926.tistory.com
https://joseph0926.tistory.com/73
[Project] 개인 프로젝트에서도 GitHub 기능을 사용 해야 할까? (GitHub Actions, Issues,,,,)
요즘 팀 프로젝트를 진행하면서 정말 많은 깃허브 기능을 사용해 봤습니다. 이를 통해 원활한 소통과 문제 해결을 진행할 수 있었습니다. 반면 이런 생각도 들었습니다 -> " 개인 프로젝트에서는
joseph0926.tistory.com
'기타 > Testing' 카테고리의 다른 글
[Testing] Redux를 활용하는 컴포넌트를 테스트 할 때 주의할 점 (문제-해결 과정, 개선 결과) (0) | 2023.05.31 |
---|