본문 바로가기
Programming/기본기

테스트 코드의 중요성

by Teshub 2021. 9. 29.

사진은 JAVA 대표적인 테스트툴인 Junit

회사에 테스트 코드가 체계적으로 작성되어있지 않기도 하고 최근 필요성을 절실히 느끼고 있어서 공부 후 회사에 테스트 코드를 도입하였다.

도입하면서 느꼇던 점들을 블로그에 포스팅해봅니다 :)

 

테스트 코드의 작성 이유

- a.기능의 추가, 변경, 삭제에 대처하고 자동화 테스트를 위해

- b.예상하지 못한 오류에 대한 피드백을 위해

- c.좋은 설계로 작성되게끔 코드를 유도(테스트를 편하게 하려면 결국 객체지향적 코딩을 해야 한다)

- d. 기능 정의의 문서의 역할

- f. 실수를 줄여준다

 

a) 기능의 추가, 변경, 삭제에 대처하고 자동화 테스트를 위해

프로젝트에서 코딩을 할 때 최초의 기획의도와 다르게 기능이 변경되는 경우가 생각보다 빈번합니다

이번에 결제와 멤버십 관련 기능을 구현하는 업무를 맡았는데 멤버십의 가격이 변경된다던지 멤버십에 따른 기능 제한의 범위가 확대된다던지, 등 여러 변경점이 생겼습니다.

이런 경우 만약 테스트 코드가 없다면 결국 해당 기능과 연결되어 보이는 모든 부분을 직접 확인하고 테스트해봐야 할 것입니다. 

너무 비효율적인 일이죠 ㅎ...

테스트 코드를 작성하면 현재 작성하여 변경된 부분이 테스트가 성공하면 다른 메서드 및 클래스의 테스트 코드들을 실행하여 테스트 통과 여부를 확인하면 됩니다. 매번 일정한 값으로 일정한 테스트를 할 수 있다는 것이죠.

 

b) 예상하지 못한 오류에 대한 피드백을 위해

운영을 하다 보면 예상치 못한 오류가 나오기도 하죠. QA에서 진행하지 못한 상황일 수도 있고 다른 쪽 기능이 변경되면서 데이터가 잘못 들어온다던가, 등 여러 상황이 있습니다

서버단에선 테스트 코드가 있으면 해당 상황을 다시 재현하기도 훨씬 편합니다. 해당 테스트 코드에 에러 당시의 parameter값들을 그대로 넣어서 추측하기도 편합니다

즉 테스트를 하기 더 편리하여지고 오류에 접근하기도 훨씬 간편합니다

위의 a상황에서 언급한 다른 메서드의 기능이 변경의 영향점을 찾기에도 훨씬 편합니다

 

a, b의 경우는 테스트 코드가 얼마나 잘 짜여있는지 어느 정도의 상황까지 테스트하는지 얼마나 세밀하고 정밀하게 짜여있는지에 영향을 많이 받습니다

하지만 굉장한 큰 장점이죠

 

c) 좋은 설계로 작성되게끔 코드를 유도

테스트 커버리지라는 것이 있습니다. 로직들이 테스트로 인해 검증이 되냐 안되냐를 %로 확인할 수 있습니다

바로 이렇게 말이죠

테스트 커버리지를 높이려면 다양한 상황에 대한 테스트가 진행되어야 합니다.

이 경우 모든 기능을 한 메서드에 넣으면 추후 테스트할 때 굉장히 난처합니다. 어디서 오류가 낫는지 파악이 힘든 건 물론이고 무엇보다 테스트 시나리오를 작성할 때 굉장히 애를 먹습니다. 모든 분기점에 전부 걸리게끔 테스트를 진행해야 하는데 코드 파악도 힘든데 테스트 시나리오는 짤 수는 있을지...

또한 TDD나 BDD같이 테스트 코드를 먼저 짜고 진행을 하는 방법론을 적 옹하여 개발할 경우엔 아마 처음 설계부터 메서드를 분리해요 하는 게 훨씬 편하기 때문에 oop의 원칙 중 SRP가 지키며 코딩을 하게 됩니다.

 

d) 기능 정의의 문서의 역할

테스트 코드는 어떤 기능을 수행하는 애플리케이션의 단위를 테스트하는 것이다.

a메서드에 대한 테스트 코드를 작성한다고 가정을 해보자

먼저 a메서드의 기능 정의를 해야 한다 그리고 a메서드가 실행 후 어떠한 상태로 return이 오는지 return이 없다면 어떠한 일을 하였는지를 검증해야 한다

이렇게 시나리오에 대한 a메서드의 기능과 데이터 검증이 테스트 코드에는 명시되어있다

 

- f) 수를 줄여준다

이 부분은 너무 간단해 딱히 더 설명할 것이 없다

말 그대로 테스트 코드를 작성하면 다양한 테스트를 하게 되는데 이 과정에서 놓치고 지나간 부분들을 생각하고 테스트하게 된다

728x90

'Programming > 기본기' 카테고리의 다른 글

테스트 코드 작성 규칙  (0) 2021.09.29
REST API  (0) 2021.02.25
알고리즘 Stack, Queue, Deque, Heap  (0) 2021.02.07
메모리 구조 Code, Data, Stack, Heap  (0) 2021.02.07
프로세스와 쓰레드의 차이  (0) 2021.02.04

댓글