Justin의 개발 로그

테스트 코드 작성

  • 클래스 이름
  • 메서드 이름
  • 메서드 파라미터
  • 실행 결과
TDD의 시작은 이름
이름은 설계에서 매우 중요하다. 
이해할 수 없는 이름, 이름과 다른 동작을 하는 객체(잘 못 지어진 이름) 등은 두고두고 개발자를 힘들게 만든다.

 

테스트를 통과할 만큼만 코드를 작성한다.

TDD는 테스트를 통과할 만큼만 코드를 작성한다. 필요할 것으로 예측해서 미리 코드를 만들지 않는다. 설계도 동일하게 미리 예측해서 코드를 먼저 만들지 않는다. 

실제 테스트 사례를 추가하고 통과시키는 과정에서 필요한 만큼만 조금씩 설계를 변경한다. 

 

예외 처리 : Exception 타입을 미리 만들지 않는다. 테스트를 진행하는 과정에서 실제 예외가 필요한 시점에 Excetion을 도출한다.

 

TDD로 개발을 진행하게 되면 TDD로 개발한 코드가 많아질수록 지금 시점에 필요한 설계만 코드에 추가 반영할 가능성이 커진다. 유연한 설계도 필요한 시점에 추가한다. 이를 통해 설계가 불필요하게 복잡해지는 것을 방지할 수 있다.

 

TDD로 개발한다고 사전에 설계 활동을 생략하는 것은 아니다. 사전 설계된 내용을 참고해서 개발을 하지만, 사전 설계와 TDD를 진행하며 개발된 결과물은 동일하지 않은 경우도 많다. 사전 설계를 했더라도 쉬운 테스트부터 점점 테스트를 늘려가면서 개발하는 방식은 동일하게 진행해야 한다.

 

사전에 설계된 많은 부분을 모두 개발 후 테스트 케이스를 작성하면, 테스트 케이스를 작성하는 것도 힘들고, 오류를 찾기도 힘들다.

 

 

테스트 케이스를 어떻게 만들지?

테스트 케이스를 어떻게 작성해야 할지 막연하다면...

요구사항을 명확하게 하기 위해 기획자와 대화하는 것처럼 작성하면 쉽다.

  • 기획자 : 비밀번호가 보안 수준을 준수할 정도로 복잡하게 만들어지도록 해 주세요.
  • 개발자 : 원하는 보안 수준이 어느 정도죠?
  • 기획자 : 8자리 이상, 영문 대문자, 소문자, 숫자, 특수문자 중 3개 이상 포함, 연속된 숫자 허용 안함, 반복문자 허용 안함
  • 개발자 : 하나씩 구체적으로 확인할께요. 일단, 8자리 이상이라고 하셨구요. 최대 자릿수는 없나요?
  • 기획자 : 최대는 16자리까지 허용해 주세요.
  • 개발자 : 16자리 초과 시 에는요? 17자리부터 무시할까요? 아니면 화면에 메시지를 보여줄까요?
    • "Ab1!5678901a3b5c7d"  == "Ab1!5678901a3b5c"
  • 기획자 : 17자리부터는 무시해 주세요.
  • 개발자 : 영문 대문자, 소문자, 숫자, 특수문자 중 3개 이상 포함 이라고 하셨는데 여기서 허용할 특수문자는 뭐죠?
  • 기획자 : 표준 키보드에서 입력 가능한 특수문자요. "!@#$%^&*()_+-={}[]|\:;"'₩~,<.>/?"
  • 개발자 : 연속된 숫자 허용 안함에서 연속은 몇 번 이상부터 허용을 안하나요?
  • 기획자 : 4번 이상 연속되는 경우 허용 안함이요. 예를 들어 1234, 7890
  • 개발자 : 9012는 연속이 아닌거죠?
  • 기획자 :네, 9012는 연속이 아닙니다. 90123 은 0123이 연속이니까 안되구요.
  • 개발자 : 반복문자 허용 안함에서 반복하면 안되는 횟수는요? 
  • 기획자 : 이것도 네 번 이상 불가로 해 주세요. 1111, aaaa, @@@@
  • 개발자 : 요구사항이 명확해진 것 같네요. 개발하면서 궁금한게 있으면 다시 질문 드릴께요.
  • 기획자 : OK~ 

 

대화만 봐도 테스트 케이스가 매 대화마다 적어도 1개 이상은 도출되었을 것이다.

비밀번호 보안 수준을 검증하는 로직 하나에 대략 10개 이상의 테스트 케이스가 만들어졌고, 
각 테스트 케이스를 통과 시키는 코드를 개발하다보면 요구사항을 모두 만족시키는 로직이 개발될 것이다.

 

 

 

profile

Justin의 개발 로그

@라이프노트

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!