티스토리 뷰

728x90
반응형

어제 테스트 관련 세미나를 듣고 왔는데,
스피커분들이 경험담을 말씀해주시면서 테스트 코드를 작성하고 나서 무엇이 좋았고 달라졌는지, 그래서 테스트는 왜 필요한지에 대해 나눠주셨습니다. 

 

그 중에서 "불안 요소를 제거하는 것이 잘하는 개발이다. 그래서 테스트가 필요하다…!" 라고 하셨던 것이 가장 기억에 남네요 

 

그럼 구체적으로 테스트의 필요성에 대해 살펴봅시다 

 

1. 리팩토링에 대한 확신 

 

테스트는 이전의 동작이 변경되지 않았음을 담보할 수 있는 장치 입니다. 

예를들어 Calculator의 add함수를 테스트하는 코드가 있다면,

 

이렇게 위 함수에서 아래 함수로 add함수를 리팩토링해도 

 

동작이 잘되는구나!! 라는 확신을 가질 수 있겠죠. 
리팩토링 한 후 테스트를 돌려서 기존 동작이 잘 돌아가는 지 쉽게 확인할 수 있으니까요..!!

그래서 테스트는 리팩토링에 대한 확신을 가질 수 있게 해줍니다. 

 

 

더불어 이런 장치가 있으면 신나게 마음껏 변경할 수 있겠죠?! 클린코드 책에서 말하는 것처럼요! 

 

코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위테스트다.
테스트 케이스가 있으면 변경이 두렵지 않기 때문이다
테스트 케이스가 없으면 모든 변경이 잠정적인 버그다 
테스트 케이스가 있으면 변경이 쉬워지기 때문이다

또한 코드를 바꾸고 수동으로 다시 돌려보며 동작이 잘 작동하는지 확인하지 않아도 되니 덩달아 시간도 절약됩니다

 

2. 더 나은 구조를 유도한다 

 

테스트를 작성하다보면 테스트를 하기 좋게 구조나 함수를 리팩토링하고 싶은 마음이 생깁니다.

테스트를 방해하는 요소들로는 

1. 복잡한 의존과 강한 결합

2 .덩치가 큰 메소드

 

등이 있는 데 이런 것들이 보이기 시작하죠..! 

 

<자바와 JUNIT을 활용한 실용주의 단위 테스트 - 제프랭어> 책에서도 

"더 많은 단위테스트를 작성할 수록 설계를 변경했을 때 테스트 작성이 훨씬 용이해지는 경우가 늘어날 것입니다"
라고 말합니다 

 

3. 결함을 사전에 발견할 수 있다 

 

실제 행동이 일어나기 전에 개발 과정 중에 결함을 발견할 수 있습니다 

테스트를 작성하게 되면 여러 케이스들을 다 고려하게 되는데, (예를 들어 경계조건에 있는 값들)

이 과정에서 QA 전에 생각치못했던 결함을 발견하고 수정할 수 있을 것 같습니다.

 

4. 문서로서 작용한다 

테스트 코드에는 작성자의 의도, 사용법, 주의사항 등이 드러나게 되어있습니다

실제 세미나의 스피커 분들도 팀에 새로 합류하게 되었을 때, 테스트 코드를 보며 코드를 파악하고 주의사항을 알 수 있었다 라는 경험담을 많이 나눠주셨습니다

그리고 Quick이라는 라이브러리를 써서 이런식으로 테스트 코드를 작성하면 테스트코드 자체가 정말 문서가 될 수 있을 것 같습니다..! 

 

        describe(“검색 필터를 클릭했을 때") {

            context(“필터 키워드를 앨범으로 선택했다면") {

                it(“앨범 API가 호출되어야하며 응답코드로 성공을 받아야 한다") {

 

                }

            }

            context(“필터 키워드를 가수로 선택했다면") {

                it(“가수 API가 호출되어야하며 응답 코드로 성공을 받아야한다.") {

 

                }

            }

         }

 

        describe(“검색어를 초기화했을 때") {

             it(“검색필터가 nil이 되어야한다”) {

             }

 

             it(“검색결과가 없습니다 라는 뷰로 갱신되어야한다”) {

             }

         }


참고로 describe는 개념상의 묶음, context는 조건상의 묶음이고 it 블럭 안에 실제 테스트코드를 작성하게 되는 구조입니다

 

 

 

Reference

GDG 안드로이드 코리아 [안드로이드 탐구영역] - 아장아장 테스트 첫걸음 (뱅크샐러드 김우섭님)

반응형
댓글