목차

기능 명세

설계 과정을 지원하는 TDD

기능 명세 구체화

 

기능 명세

설계는 기능 명세로부터 시작한다.

 

기능은 입력과 결과를 가진다.

입력 - 기능을 실행하는데 필요한 값

결과 - 기능을 수행한 결과로 상황에 따라 달라질 수 있다.

  • 리턴 값
  • 익셉션 : throw 된 예외
  • 변경 : DB/ 시스템 에 변경된 사항

 

다양한 형태의 요구사항 문서를 이용해서 기능 명세를 구체화

▶ 기능 명세를 구체화하는 동안 입력과 결과를 구상

도출한 기능 명세를 코드에 반영

설계 과정을 지원하는 TDD

TDD 는  테스트 코드 만들기 → 테스트를 통과시키기 위해 코드 구현 → 리팩토링 의 반복.

 

테스트 코드를 만들기 위해 필요한 사항

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

 
기능을 실행할 수 없으면 테스트를 할 수 없다.
  • 테스트에서 실행할 수 있는 객체나 함수가 필요

  • 실행할 객체가 존재하려면 클래스 와 메서드도 필요

    • 클래스나 메서드를 정의하기 위한 이름을 결정

    • 메서드를 실행할 때 사용할 인자의 타입과 개수를 결정

예를 들어 "암호 강도 측정과 만료일 계산 예제" 에서 결정한 사항

  • 클래스 이름
  • 메서드 이름
  • 메서드 파라미터
  • 실행 결과

이 과정에서 이름(기능을 정확하게 표현하는 이름)을 고민하고 파라미터 타입과 리턴 타입을 고민했다. 

→ 이러한 과정이 설계 과정

 

구현하는 기능을 정확하게 표현하는 이름을 사용하는 것이 중요하다.
→ 이름을 통해서 어떻게 동작하는지 예상이 가능 해야한다.

이름을 고민하는 시간을 아까워하지 말자.

 

 

■ 필요한 만큼 설계하기

  • TDD는 테스트를 통과할 만큼만 코드를 작성한다.
  • 필요한 것으로 예측해서 미리 코드를 만들지 않는다.
  • 실제 예외처리가 필요한 시점에서 익셉션을 도출

기능 명세 구체화

테스트 코드를 작성하려면 입력과 결과가 명확해야 한다.

  • 전달받은 요구사항에서 애매한 점을 발견?! → 해당 담당자에게 질문을 하여 구체적으로 정리

(예시) 만료일 계산 기능

 

요구사항

  • 서비스를 사용하려면 매달 1만 원을 선불로 납부한다. 납부일 기준으로 한 달 뒤가 서비스 만료일이 된다.
  • 2개월 이상 요금을 납부할 수 있다.
  • 10만 원을 납부하면 서비스를 1년 제공한다

개발자 :  한 달 뒤가 어느 시점인지 애매하다.

질문

  • 4월 1일에 만원을 납부하면 만료일은 언제예요? 4월 30일인가요? 5월 1일인가요?
  • 1월 31일에 만원을 납부하면 만료일은 언제인가? 2월 28일인가요? 아니면 30일 뒤인 3월 2일인가요?
  • 만약 윤년인 경우는 어떻게 되나요?
  • 1월 29일이나 1월 30일에 만원을 납부해도 2월 28일인가요? 윤년이면 2월 29일이 되구요?
  • 1월 31일이나 5월 31일처럼 만원을 납부한 일자가 다음 달 말일 일자보다크면 이때 만료일은 다음 달 말일이라고 생각면 될까요?

이와 같이 애매한 점을 질문하여 구체적인 예를 이용하여 테스트 코드를 만든다.

또한 테스트 코드를 만들면서 애매한 점이 있으면 질문을 하여 구체적인 예를 통해 모호함을 해결해야한다.

 

복잡한 로직을 구현해야 하는 것은 결국 개발자이므로
개발자는 최대한 예외적인 상황이나 복잡한 상황에 해당하는 구체적인 예를 끄집어내야한다.
이를 위한 가장 좋은 방법은 담당자와 대화를 하는 것이다.

+ Recent posts