[Project-Guesser] TDD 학습 및 적용

2024. 9. 15. 14:39· → Guesser
목차
  1. 🧐 현재 상황
  2. 🥸 학습 과정
  3. TDD
  4. 테스트하지 말아야 할 것
  5. AAA 테스트 패턴
  6. Private Method의 테스트
  7. 🧑🏻‍💻 개발 과정

🧐 현재 상황

네이버 부스트 캠프에서 Test코드를 꾸준히 작성하는 습관을 기르고 있는데, 코드를 리팩토링 할 때 정말 놀라운 경험을 할 수 있었다. 결국 리팩토링을 하더라도 기존의 요구사항과 똑같은 기능을 가지고 있어야 하는데, 테스트 코드를 작성하고 리팩토링 하다 보니 놓친 기능들도 확인할 수 있었고, 내가 리팩토링 한 것들이 잘 작동하는지도 즉각 즉각 확인해 볼 수 있었다. 그래서 이번에 테스트 주도 개발을 해보기로 했다!

 

도대체 TDD를 어떻게 해야 할까? 테스트 코드부터 작성한다!라는 개념만 알고 있었지만 막상 TDD 개발을 하려니 어떻게 해야 할지에 대한 감이 잡히지 않았다.

🥸 학습 과정

TDD

IBM에서 작성한... 무려 최최최신자료인 24년 7월에 작성한 글이 있었다. 5가지 간단한 스탭을 소개하는데 가장 이해가 쉽고, 적용하기 좋아 보였다. 이 방법을 사용해 보기로 했다. 아래의 방법이 Red-Green-Refactoring Cycle이라는 유명한 TDD 방법이라고 한다. 또한 카카오 페이에서 작성한 좋은 글도 있었다.

 

요약하자면 기능 파악 → 테스트 코드 → 실패 → 코드 작성 → 통과 → 코드 리팩토링 → 반복의 과정을 겪는 것이다. 그렇다면 바로 TDD 개발에 들어가보자.

테스트하지 말아야 할 것

테스트해야 할 것은 너무너무 많지만 테스트하지 말아야 할 것이 상대적으로 적은 것 같아서 나름 공부하면서 정리해 보았다.

  1. 라이브러리, 프레임워크 내부 동작
  2. 랜덤 값, 네트워크 등 로직이 아닌 결괏값이 실패할 가능성이 있는 코드
  3. UI 레이아웃
  4. 정적인 데이터(상수)나 인스턴스 그 자체
  5. 내부구현 세부사항 → 너무 디테일한 세부사항은 오히려 리팩토링 시 독이 될 수도 있다고 한다.

AAA 테스트 패턴

AAA 테스트 패턴은 Arrange, Act, Assert 테스트 패턴이다. 번역하자면 준비, 실행, 검증 단계라고 할 수 있다. XCTest가 XCTAssert~ 형식을 띠고 있기 때문에 AAA 패턴이 네이밍이 비슷해서 가장 끌렸다.

func test_예시() {
	// Arrange 준비
    let sut = SUT()
    // Act 실행
    let result = sut.foo()
    // Assert 검증
    XCTAssertEqual(result, true)
}

Private Method의 테스트

Private Method는 어떻게 테스트해야 할까? 테스트 코드를 작성하면서 가장 고민되었던 부분이었던 것 같다. 접근 제어자를 바꾸는 극단적인 방법을... 택했었는데, 사실 Private Method 자체가 Public Method 안에 포함되어 있기 때문에 그 Public Method 의 테스트 만으로도 충분하다는 것이었고, TDD를 진행하게 된다면 결국 리팩토링 과정에서 만들어지는 것이 Private Method 이기 때문에 TDD 방법으로 개발을 하게 된다면 이 문제가 자연스럽게 해결된다는 말이 있었다. (직접 겪어보고 싶다)

🧑🏻‍💻 개발 과정

앱에 필요한 기능이 무엇일까부터 생각해 봤다. 가장 먼저 생각나는 것은 포인트 시스템! 애자일(?)하게 가자~ 라는 느낌으로 바로 이슈를 만들고 작업을 진행했다.

무작정 Test파일과 Swift파일 생성해 주었다.

Snippet을 만들어두면 편하다.

너무나도 간단한 기능이지만 무작정 테스트 작성 후 실패!

아주아주 간단하게 Calculator를 만들고 테스트 성공!

리팩토링 할 필요가 없을 정도로 초 간단한 기능이기 때문에 우선 첫 번째 기능은 이렇게 마무리! 테스트 성공이라고 뜨니까 예상대로 동작해서 소소한 성취감(?)이 있다. 앞으로도 계속 TDD 방식으로 개발을 진행할 예정이다.

'→ Guesser' 카테고리의 다른 글

[Project-Guesser] Xcode에서 API Key 완벽하게 숨기기 (Git Hook)  (2) 2024.09.17
[Project-Guesser] 프로젝트 시작  (0) 2024.09.15
  1. 🧐 현재 상황
  2. 🥸 학습 과정
  3. TDD
  4. 테스트하지 말아야 할 것
  5. AAA 테스트 패턴
  6. Private Method의 테스트
  7. 🧑🏻‍💻 개발 과정
'→ Guesser' 카테고리의 다른 글
  • [Project-Guesser] Xcode에서 API Key 완벽하게 숨기기 (Git Hook)
  • [Project-Guesser] 프로젝트 시작
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (231)
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (104)
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[Project-Guesser] TDD 학습 및 적용
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.