본문 바로가기

Spring/Test

TDD 테스트 주도 개발, 기능 명세와 설계

1. 기능 명세

1) 다양한 형태의 요구사항 문서를 이용해서 기능 명세를 구체화함(입력과 결과를 도출)

 

2) 기능을 크게 입력과 결과 두 가지로 나눈다

- 입력: 보통 메소드의 파라미터로 전달 받음

- 결과: 여러 형식으로 정의, 리턴 값으로 보내주거나 Exeption 결과를 보내줄 수 있음

 

기능 명세 구체화를 돕는 TDD

개발자는 스토리보드나 와이어프레임 같은 형태로 요구사항을 전달 받지만 이런 문서는 개발자가 기능을 구현하기에 생략된 내용이 많음

테스트 코드를 작성하기 위해서는 파라미터, 결과값을 정해야하므로 기능을 입력과 결과로 도출 해야함

 

ex. 선불 1만원 지불 시 한달 이용 가능한 서비스의 만료일 구하기

Q. 4월 30일에 1만원 지불 시 5월 30일이 아닌 31일이 만료일이 맞는지?

Q. 1월에 1만원 지불 시 한달이면 2월 28일이 만료일이 맞는지?

Q. 윤년인 경우에는 어떻게 2월 29일이 만료일이 맞는지?

👉🏻 위와 같이 구체적인 예를 구하고, 그 구체적인 예를 테스트 코드를 작성

 

 

2. 설계

기능 명세 구체화를 통해 도출한 입력과 결과를 코드에 반영(기능명, 파라미터, 리턴형 등이 결정됨)

 

설계 과정을 지원하는 TDD

테스트할 기능 실행: 테스트 대상이 될 클래스명, 메소드명, 파라미터 등을 정해야 함

실행 결과 검증: 리턴 값을 이용해서 검증하는 경우 리턴형을 정해야 함

👉🏻 TDD에서 테스트 코드 작성시 정해야 하는 것은 일부 설계를 하는 것으로 볼 수 있음

👉🏻 TDD를 한다고 설계를 생략하는 것은 아님

👉🏻 테스트 코드를 요구사항에 필요한 만큼 점진적으로 작성하다보니 불필요한 구성 요소를 덜 만들게 됨