본문 바로가기
카테고리 없음

테스트코드? 그게 뭔데 (1)

by Rena B 2024. 4. 5.

테스트코드의 중요성에 대해서는 많이 들어봤을 것이다.

그런데 이게 꽤나 개념도 많고 작성하는 방법도 쉽지 않단 말이지.. 

 

테스트코드 그거 왜씀?

도서관리 프로그램의 백엔드 개발자를 담당하고 있는 A씨.

프로젝트 초기 단계여서 API를 새로 만들고 있다.

도서 등록 API 를 개발하였다. 이게 제대로 동작하는지 확인하기 위해 postman을 켜서 확인해보았다.

RequestBody를 잘 입력하고... Run! 요청한 도서가 잘 등록된걸 데이터베이스에서 확인했다! 좋았쒀!!

 

다음으로는 도서 수정 API를 개발하였다. 이걸 확인하려면 도서 등록을 먼저 해야 하네?

앞서 만든 도서 등록 API를 호출한 후 도서 수정 API를 테스트했다. 이번에도 성공! 

 

그런데 도서 수정 API에 수정 요청사항이 들어왔다. 수정한 사람의 정보를 저장해 달라는 요청사항이다.

코드를 수정한 후, 다시 postman을 켠다. 도서 등록.. 도서 수정.. DB에서 눈으로 확인한다.. 아이고 귀찮아

 

테스트코드를 작성하면, postman을 켜고, 필요한 데이터를 등록하고, run 버튼을 누르고, 데이터베이스에서 직접 눈으로 확인하는 과정을 

Run Tests 버튼 한번으로 끝내버릴 수 있다!!! 테스트 코드를 잘만 작성한다면

 

시스템이 커지면, 매번 모든 api 를 수작업으로 테스트하기 어려울 뿐더러, 코드를 수정할 때 예상치 못한 버그가 발생할 수 있다. 

테스트코드는 지속가능한 소프트웨어를 위해 개발 복잡성을 효율적으로 관리할 수 있는 도구이다.

 

단위 테스트 vs 통합 테스트

A씨는 퇴근시간을 앞당겨보자는 취지로 테스트 코드를 작성하기로 한다.

그런데 단위테스트는 뭐고, 통합테스트는 뭐지?

 

단위테스트(Unit Test)

컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 유닛 테스트의 목적은 프로그램의 각 부분을 고립 시켜서 각각의 부분이 정확하게 동작하는지 확인하는 것이다. 즉, 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해준다. 

 

통합테스트(Integration Test)

단위 테스트가 끝난 모듈들을 좀 더 큰 단위의 집합으로 통합 구성한 후, 통합 시험 계획에 따라서 테스트를 수행한다. 통합 시험의 목적은 주요 설계 항목들이 기능, 성능, 안정성 요구사항을 잘 구현하고 있는지를 검증하는 것이다. 

 

위 설명처럼 두 테스트의 목적은 조금 다르다. 

단위테스트는 작은 부분 하나하나를 검증할 수 있는 장점이 있지만, 전체적인 흐름에서 오류가 발생할 수 있다.

통합테스트는 전체적인 흐름을 검증할 수 있지만, 오류가 발생했을 경우 어느 부분에서 발생했는지 찾아야 한다는 단점이 있다. 또한 통합 테스트를 통과했다고 해서 무조건 버그가 없는 건 아니다.

 

테스트코드 잘 쓰면 너무 좋은데...

문제는 '잘' 쓰기가 어렵다.ㅎ

'좋은 테스트 코드'의 개념은 모호하다. 테스트 환경, 프레임워크가 제각각으로 섞여 사용되기도 하고, 딱 정답이 없기 때문에 개발자들은 테스트코드 작성에 피로감을 느낀다. 

 

다음편에서는 스프링 부트 환경에서 자바로 테스트 코드를 작성하는 방법에 대해 살펴보겠다.

 

References

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%9B_%ED%85%8C%EC%8A%A4%ED%8A%B8

https://tecoble.techcourse.co.kr/post/2021-05-25-unit-test-vs-integration-test-vs-acceptance-test/

https://techblog.woowahan.com/14874/