-
[개념 정리] Test의 종류에는 무엇이 있을까?django 2022. 2. 11. 16:59
# Test의 중요성
: 개발에 처음 입문을 한 사람이라면 누구나, Testcase를 작성하는 것이 귀찮게 느껴졌을 것이다. 기능이 얼마 없는 웹/앱의 경우 새로운 기능을 구현할 때마다 일일이 Testcase를 코드로 추가하는 것이, 직접 수동으로 Postman 등을 이용하여 기능을 테스트하는 것보다 비효율적이라고 생각할 수도 있다. 하지만 기능들이 점점 늘어나 웹/앱의 규모가 점차 커지면 새로 구현한 기능과 기존 기능들끼리 서로 충돌이 발생하게 되고, 이 때 충돌 원인을 직접 수동으로 찾는 것은 시간도 오래 걸리고 막막하다. 따라서 개발자라면 누구나 귀찮더라도 Testcase를 꼼꼼히 작성하는 습관을 들이는 것이 미래를 생각했을 때 매우 좋다.
# Test의 종류
: 바로 오늘 아침 있었던 면접에서 면접관이 필자에게 Test의 종류에 대해 질문했었다. 물론 병아리 개발자답게, Test의 중요성과 코드 작성법 정도는 알고 있었으나, 그 종류가 여러 가지 있으며 각 개념에 대해 잘 알지 못해 대답을 못했었다. 면접이 끝나고 얼른 Test의 종류에 대해 검색해보고 여기에 정리해본다.
1. Unit test
: 독립적인 콤포넌트의 (성능이 아닌) 기능적인 동작을 검증한다. 흔히 class나 function 레벨로 수행한다. 다른 test들과 달리 코드를 작성하여 자동으로 실행하기 때문에 비용과 시간이 적게 든다. 위 Test의 중요성에서 얘기했던 내용이 결국 이 Unit test의 중요성이다. 필자는 직전 프로젝트에서 새로운 기능을 구현했을 때는 Unit test를 진행하고, 디버깅 후에는 Regression test를 진행했다.
2. Regression test
: 버그수정 확인 테스트이다. 기존에 보고된 버그들이 재발하는지 테스트한다. 각 테스트는, 먼저 이전에 발생했던
버그가 수정되었는지 체크한 이후에, 버그 수정으로 인해 새롭게 발생되는 버그가 없는지 확인차 재수행하게 된다.
3. Integration test
: 유닛 테스트를 완료한 각각의 독립적인 콤포넌트들이 함께 결합되어 수행하는 동작을 검증한다. 통합 테스트는 컴포넌트 간에 요구되는 상호작용을 검사하며, 각 컴포넌트의 내부적인 동작까지 검증할 필요는 없다. 이 테스트는 단지 전체 웹사이트에 걸쳐 각 컴포넌트가 결합하여 수행하는 동작을 대상으로 한다. 주로 Postman이나 httpie 등을 활용해서 테스트 한다. Unit test보다 비용과 시간이 많이 든다.
4. End to End test
: E2E Test는 UI Test라고도 불리며 최종 단계로 사용자의 입장에서 전반적인 시나리오 테스트를 진행한다. 그 예로는
회원가입 페이지에 들어가서 직접 클릭을 하며 수동으로 테스트하는 것이 있다. Integration test, Unit test보다 비용과 시간이 많이 든다.
참고
https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Testing
Django 튜토리얼 파트 10: Django 웹 어플리케이션 테스트하기 - Web 개발 학습하기 | MDN
Writing test code is neither fun nor glamorous, and is consequently often left to last (or not at all) when creating a website. It is however an essential part of making sure that your code is safe to release after making changes, and cost-effective to mai
developer.mozilla.org
https://devvvyang.tistory.com/55
[etc] Unit Test란?
1. Test 종류와 각 test의 특징 개발을 하다 보면 코드가 잘 동작을 하고 있는지, 버그는 없는지 등을 확인하는 테스트가 필수이다. 테스트를 범위에 따라 분류하면 아래 그림과 같이 E2E(UI) Testing(기
devvvyang.tistory.com
'django' 카테고리의 다른 글
[개념 정리] docker를 왜 사용할까? (0) 2022.02.14 [개념 정리] Django, Nginx 그리고 Gunicorn의 관계 (0) 2022.02.13 [개념 정리] django TestCase의 setUp과 tearDown, 그리고 setUpTestData? (0) 2022.02.13 [개념 정리] Mock란 무엇인가? (0) 2022.02.13 [개념 정리] Multi Threading, Multi Processing 차이점 (0) 2022.02.12