본문 바로가기
Group Study (22-23)/TDD

[TDD] 3. TDD ∙ 기능 명세 ∙ 설계

by sojungpp 2023. 1. 21.

작성자 : 박소정


실습 환경

- Java 11

- Spring Boot 2.7.7

 

🥨 기능 명세

사용자에게 제공할 기능을 구현하기 위해서는 기능 명세를 시작으로 설계를 진행해야 한다.

기능은 크게 입력과 결과로 나누어 생각할 수 있다.

  • 입력: 기능을 실행하는데 필요한 값
  • 결과: return 값, exception, 변경(DB에 데이터 추가해 시스템의 상태 변경 등)

기능 명세를 통해 입력과 결과를 도출하면, 해당 내용을 통해 기능의 이름, 파라미터, 리턴 타입 등을 손쉽게 결정할 수 있다.

이렇게 도출한 기능 명세를 코드에 반영하고, 이는 곧 기능에 대한 설계 과정과 연결된다.

 

 

🥨 설계 과정을 지원하는 TDD

TDD는 테스트 코드 작성 - 코드 구현 - 리팩토링의 과정을 반복한다. 이때, 테스트 코드 작성을 위해서는 아래의 내용이 반드시 필요하다.

  • 테스트할 기능을 실행
  • 실행 결과를 검증

해당 내용을 테스트 코드에 넣기 위해서는 테스트 대상이 되는 객체나 함수가 존재해야 하며,

이는 곧 클래스, 메서드, 함수 이름과 사용할 인자의 타입 및 개수를 결정하는 것과 같다. 

이렇게 TDD를 하다보면 자연스럽게 테스트 코드 작성 과정에서 설계 과정을 진행하게 된다.

 

🥨 필요한 만큼 설계하기

필요할 것이라 생각하는 코드를 미리 작성하지 않는 것처럼, TDD에서도 필요한 만큼만 코드 작성 및 설계를 진행한다.

 

그 예로, 이전 만료일 계산 코드를 살펴보면 처음 만든 테스트에서는 2개의 파라미터(billingDate, payAmount)만 필요해, 다음처럼 파라미터로 전달 받았다.

LocalDate expiryDate = cal.calculateExpiryDate(billingDate, payAmount)

이후 테스트 사례에서 하나의 파라미터가 추가로 필요해, 해당 3가지 파라미터를 담는 타입을 새로 만들어 사용했다.

// 파라미터를 객체로
public class PayData {
    private LocalDate firstBillingDate;
    private LocalDate billingDate;
    private int payAmount;
}

*

// 테스트 과정에서 필요한 만큼 설계 변경
LocalDate expiryDate = cal.calculateExpiryDate(payData)

기능 실행 결과도 마찬가지로, 미리 앞서서 필요한 exception을 만들지 않고 테스트 진행 과정에서 필요한 시점에 exception을 도출한다.

즉, TDD로 개발을 진행하면 테스트를 통과시키는데 필요한 만큼의 코드만 만들게 된다.

이는 설계가 불필요하게 복잡해지는 것을 방지할 수 있고 불필요한 구성 요소를 덜 만들게 도와준다.

 

 

🥨 기능 명세 구체화

개발자는 기획자로부터 전달 받은 요구사항 명세를 이용해, 기능의 입력과 결과를 도출하고 테스트 코드를 작성해야 한다.

 

그 예로, '한 달 뒤' 라는 요구사항에 대한 모호한 상황을 들 수 있다.

  • " 납부일 기준으로 한 달 뒤가 서비스 만료일이 된다. "
  • → 4월 1일에 납부하면 만료일은 4월 30일? 또는 5월 1일?

 

이렇게 개발에 있어서 기획자와 모호한 상황을 의논하고, 기능 명세를 구체화하여 올바르게 동작하는 기능을 만들어야 한다.

결과적으로, 구체적인 예를 바탕으로 테스트 코드를 추가하면 예외 및 복잡한 기능 명세를 잘 이해하고 모호함을 없앨 수 있다.

 

 

테스트 통과에 필요한 만큼만 개발하기
기능 명세 구체화를 통해 모호함 없애기
구체적인 예를 바탕으로 테스트 코드 추가하기

🙌


 

https://github.com/GDSC-MYONGJI/22-23-TDD-Study

 

GitHub - GDSC-MYONGJI/22-23-TDD-Study: [22-23 GDSC MJU 1기] TDD 스터디를 위한 저장소

[22-23 GDSC MJU 1기] TDD 스터디를 위한 저장소. Contribute to GDSC-MYONGJI/22-23-TDD-Study development by creating an account on GitHub.

github.com

참고용 도서

http://www.yes24.com/Product/Goods/89145195

 

테스트 주도 개발 시작하기 - YES24

TDD(Test-Driven Development)는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그다음에 구현한다. 구현 코드가 없는데 어떻게 테스트할 수 있을까? 여기

www.yes24.com

 

'Group Study (22-23) > TDD' 카테고리의 다른 글

[TDD] 6. 대역  (1) 2023.02.24
[TDD] 5. 테스트 코드의 구성  (1) 2023.02.02
[TDD] 4. JUnit 5 기초  (3) 2023.01.27
[TDD] 2. 테스트 코드 작성 순서  (1) 2023.01.17
[TDD] 1. TDD 시작  (4) 2023.01.06