제가 처음 테스트코드를 작성해보고 난 후의 개인적인 생각을 정리해보고 싶어서 이렇게 글을 쓰게 되었습니다. 아래 테스트코드의 장점이나 TDD에 대한 내용은 다른 블로그의 내용을 좀 더 참고해서 적었습니다!
이전에 TDD에 대해 알게 된 이후 언젠가는 TDD를 꼭 적용해보고 싶다는 생각이 있었습니다. TDD까지는 아니더라도 최소한 테스트코드는 한 번 작성해봐야지 생각했었어요. 하지만 시간에 쫓긴다는 핑계와 이것 말고도 할 게 많다는 핑계로 계속 미루고 미루고 있었습니다.
저는 최근 스타트업과 iOS 프로젝트 하나를 계약해서 하고있는 중인데, 지금 기획만 어느정도 되어 있는 상태고 디자인과 서버 개발은 아직 들어가지 않은 상태입니다. 서비스를 본격적으로 개발하기 전에 디자인과 서버 개발이 이루어져야 하는 현재 기간동안 iOS 개발자인 저는 뭐를 할 수 있을까 생각해보았습니다. 그러면서 프로젝트에 대한 전반적인 아키텍쳐를 조금씩 설계해보다가 이렇게 시간이 붕 뜬김에 테스트코드도 한 번 작성해봐야겠다고 생각이 들었습니다.
테스트코드, 이렇게 작성하는게 맞나..?
TDD는 코드를 작성하기 전에 먼저 실패하는 테스트코드를 작성하고, 테스트코드가 성공할 때까지 코드를 구현하고 리팩토링하는 과정을 반복하는 개발 방법론으로 알고 있습니다.
그래서 프로젝트 개발을 시작하기 전에 테스트코드를 먼저 작성해보려 했습니다. 하지만 막상 시작해보려니 뭐부터 어떻게 작성해야할지 막막했습니다. 테스트코드랍시고 한 두줄 작성하고 나면 이렇게 작성하는게 맞나.. 싶기도 했습니다. 그래도 일단 해보자는 생각에, 가장 먼저 어떤 기능을 구현해야할지 구상을 끝낸 KeyChainManager 클래스에 대해 첫 테스트코드를 작성해보기로 했습니다. 참고로 제가 구상한 KeyChainManager는 로그인에 필요한 이메일과 패스워드같은 개인정보를 키체인에 생성/수정/삭제할 수 있도록 하는 클래스 입니다. 아직 실제 KeyChainManager 클래스는 구현하지 않은 상태입니다!!
사실 아직까지도 테스트코드를 이렇게 작성하는게 맞는지 잘 모르겠습니다. 혹시 아시는 분들은 피드백 주시면 정말정말 감사할 것 같아요ㅠㅠㅠㅠ
처음 테스트코드를 작성해보면서 느낀 건 테스트코드를 작성하기 위해서는 어떤 기능을 구현해야하는지 기획에 대한 내용을 제가 잘 파악하고 있어야 한다는 점이었습니다. 테스트코드를 작성하고 나면 제가 어떤 기능을 구현해야하는지 제대로 파악할 수 있게 되는데, 기획이 잘 짜여져있지 않거나 제가 기획에 대한 내용을 잘 파악하고 있지않다면 테스트코드도 작성하지 못하고 허우적거릴 것 같았습니다.
그리고 이렇게 테스트코드를 한 번 작성해보고나니, 테스트코드를 작성할 때의 장점에 어느정도 공감을 할 수 있게 되었습니다.
그래서 테스트코드의 장점이 뭔데?
1. 단계별로 어떤 기능을 구현해야하는지 쉽게 정리할 수 있습니다.
진짜 기획된 내용에 대해 잘 모르고, 어떤 기능을 구현해야 하는지 잘 모르면 애초에 테스트코드를 작성할 수가 없겠더라구요....
2. 개발 사이클이 짧아진다.
미리 작성해놓은 테스트코드에서 기대하는 값을 체크하기 때문에, 나중에 개발하면서 중간중간 그 값을 체크해야하는 시간이 줄어들 것 같았습니다.
3. 리팩토링하기 편해집니다.
코드를 수정할 때마다 수동으로 테스트하는 건 시간이 많이 걸립니다. 하지만 역시나 미리 작성된 테스트코드가 있다면 제가 개선한 코드가 정상동작하는지 즉각적으로 확인할 수 있겠더라구요!
4. 어떤 부분을 리팩토링해야 하는지 파악할 수 있습니다.
테스트케이스가 많아서 테스트코드를 작성하기 어렵거나, Mock처리를 많이 해야하는 경우는 해당 메서드나 클래스가 수행하는 역할이 너무 많다는 뜻입니다. 그래서 이런 경우에는 메서드나 클래스 분리가 필요하다는 말이겠죠?
5. 외부와 의존성 있는 로직을 테스트하기 편하다.
외부와 통신하는 로직을 Mock으로 처리해두면, 외부에서 발생할 수 있는 여러 환경을 제가 가짜로 구성할 수 있게 됩니다. 따라서 테스트 서버가 없이도 기능 구현을 미리 시작할 수 있게 됩니다.
하지만... 저는 사실 이제야 막 클래스 하나에 대한 테스트코드를 처음 작성해본 상태라서 이 장점까지는 아직 공감하지 못한 상태입니다😂
앞으로 어쩔 작정이야
음.. 일단 기획에 대한 내용을 좀 더 세분화할 필요가 있을 것 같습니다.
일단은 저 키체인 기능이랑 로그인 기능에 대한 설계는 구상해둔 상태인데, 그래도 아직까지는 기획단계에 있어서 로그인 관련 클래스에 대해 계속 테스트코드를 작성하기엔 좀 이른 감이 있는 것 같기도 하고... 나중에 디자인에 따라 로그인 기능도 달라질 것 같아서 말이죠..... 네.......... 일단 그렇네요..
그래도 테스트코드에 대한 유리벽은 좀 깬 것 같아요. 원래 처음 한 두번 시도하는게 어렵지 그 이후는 좀 낫잖아요?😄 이것만으로도 큰 경험이라고 생각합니다!
Reference
'iOS > iOS' 카테고리의 다른 글
CGRect, CGPoint, CGSize (0) | 2021.04.16 |
---|---|
UIResponder (0) | 2021.04.16 |
키체인 (Key Chain) (0) | 2021.04.13 |
GCD (Grand Central Dispatch) (0) | 2021.03.23 |
XCTest tips and tricks that can level up your Swift testing (0) | 2021.03.03 |
댓글