항해플러스

[항해+] 1주차 TDD

idleday 2024. 3. 22. 23:53

학습목표

  • 테스트 가능한 코드와 테스트 코드 작성에 집중하며, TDD 기반 요구사항 기능 개발
  • TDD, Testable Code, Test Code 에 대한 학습을 진행합니다.
  • 기초 학습자료로 부족한 부분을 학습합니다.
  • 주어진 과제를 분석하고 TDD 기반으로 개발을 진행합니다.

학습자료

클린 코드, 아키텍처 그리고 TDD by 허재

Test Driven Development

  • 빠른 변화에도 새로운 기능을 적용하고 유지보수 및 장애 발생시 대처를 유연하게 할 수 있는 소프트웨어 설계 방법론
  • 최대한 기능 분석 후 핵심이 되는 테스트 코드부터 작성하고 이를 완성하기 위해 적용된 아키텍처에 맞는 기능 개발 진행
  • 백엔드 개발자로서, 요구사항을 분석하고 기능을 올바르게 완성하기 위한 TC 를 작성하는 방법을 익힙니다.

Testable Code

  • 모든 코드를 테스트 가능하게 구현하는 것을 목표로 진행합니다.
  • 모든 테스트 케이스가 성공했다는 것은 목표한 기능이 완성되었다는 것을 의미합니다.
  • 테스트 커버리지 100% 가 아니라, 정확히 기능의 동작을 확인하는 테스트를 작성해 주세요.
  • 주요 기능에서 private 접근자, 객체간의 강결합 같이 테스트 불가능한 코드는 가능한 한 지양하는 것이 좋습니다.
#1) 기능 구현을 원하는 요구사항을 검증하는 테스트 추가
#2) 테스트를 만족하도록 기능 구현
>> 이 때, 테스트는 한번에 많은 Scope 를 잡지 않는다. 이는 불필요한 개발 생산성 저하로 이어진다.
>> 이 시점에서 우리가 몇 배의 시간을 더 투자한다고 해서 테스트 커버리지 100% 를 달성할 수는 없다.
#3) 구현된 기능에 대한 리팩토링 ( 인터페이스 구성, 코드클리닝 등 코드 베이스 정리 )
더보기

너의코드는 (3기 3주차 강의자료)

 

계층별 데이터 객체

계층별 데이터 객체를 나타내는 용어

 

Tight Coupling

  • 비즈니스 로직(서비스)에 Entity가 강하게 결합되어있다면 유지보수가 어렵다
  • DDD

 

Loose Coupling

  • 이제 변경에 유연하게 대처하게 됐지만 불필요한 모델 전환비용이 발행한다. (매핑부하, 트랜잭션 관리 등)
  • JPA, TypeORM, Primsa 

 

 Case 4 처럼 개발하자

  • 허재 코치는 서비스와 레포지토리 사이에 Component 레이어 라는 추상화 계층을 추가해서 사용한다고 한다

 

TDD in real world

  • 행동분석
  • 테스트케이스 : 성공케이스보다 실패케이스에 집중
  • 테스트코드 : Mock보다는 인터페이스를 활용한 Stubbing(스터빙) 형식으로 테스트 작성 선호
  • 실제코드 리팩토링

 

주간일정

  • 3/19 화요일 - TDD 과제 진행 및 Github Repo 제출
  • 3/22 금요일 - 과제 코드 리팩토링 및 진행 보고서 제출

'항해플러스' 카테고리의 다른 글

[항해+] 2주차 클린아키텍처  (1) 2024.03.23
[항해+] 시작하는 마음  (0) 2024.03.16