Skip to content

hiblue02/atdd-subway-path

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

지하철 노선도 미션

ATDD 강의 실습을 위한 지하철 노선도 애플리케이션

실습 단위테스트 작성

기능 요구사항

  • 구간 단위 테스트 (LineTest) 작성
  • 구간 서비스 단위 테스트 without Mock (LineServiceTest) 작성
  • 구간 서비스 단위 테스트 with Mock (LineServiceMockTest) 작성
  • 단위 테스트를 기반으로 비즈니스 로직을 리팩터링 하세요.

프로그래밍 요구사항

단위 테스트 코드 작성하기

  • 기존 기능에 대한 테스트 작성이기 때문에 테스트 작성 시 바로 테스트가 성공해야 함

비즈니스 로직 리팩터링

  • 비즈니스 로직을 도메인 클래스(Line)으로 옮기기
    • 구간 추가/삭제 기능에 대한 비즈니스 로직은 현재 LineService에 대부분 위치하고 있음
  • 리팩터링 시 LineTest의 테스트 메서드를 활용하여 TDD 사이클로 리팩터링을 진행
    • 리팩터링 과정에서 Line 이외 추가적인 클래스가 생겨도 좋음
    • 구간 관리에 대한 책임을 Line 외 별도의 도메인 객체가 가지게 할 수 있음

1단계 - 지하철 구간 추가 기능 개선

기능 요구사항

  • 기존 구간에 새로운 구간 추가
    • 상행역과 하행역 둘 중 하나도 포함되어있지 않으면 추가할 수 없음
    • 사이에 추가되는 경우 : A-C > A-B B-C -> 새롭게 추가된 구간의 길이를 뺀 나머지를 새로운 역과 기존 역의 거리로 함.
    • 상행 종점을 추가하는 경우 : 새로운 구간의 하행역이 기존 노선의 상행 종점이어야 함.
    • 하행 종점을 추가하는 경우 : 새로운 구간의 상행역이 기존 노선의 하행 종점이어야 함.
    • 역 사이에 새로운 역을 등록할 경우 기존 역 사이 길이보다 크거나 같으면 등록을 할 수 없음
    • 상행역과 하행역이 이미 노선에 모두 등록되어 있다면 추가할 수 없음
  • 역 목록 조회
    • 구간이 추가된 순서가 아닌, 상행 종점에서 하행 종점 순서로 역 목록이 조회되어야 함.

프로그래밍 요구사항

  • 요구사항 설명을 참고하여 인수 조건을 정의
  • 인수 조건을 검증하는 인수 테스트 작성
  • 인수 테스트를 충족하는 기능 구현
  • 인수 조건은 인수 테스트 메서드 상단에 주석으로 작성.
  • 인수 테스트 이후 기능 구현은 TDD로
  • 도메인 레이어 테스트는 필수
  • 서비스 레이어 테스트는 선택
  • 예외 케이스 검증 테스트 필수

2단계 - 지하철 구간 추가 제거

기능 요구사항

  • 위치에 상관없이 역 삭제 기능 추가
  • 중간역이 삭제되면, 구간이 합쳐진다. 거리는 두 구간의 합이 된다.
  • 상행 종점이 삭제되면, 구간도 함께 삭제된다.
  • 하행 종점이 삭제되면, 구간도 함께 삭제된다.
  • 구간에 하나인 노선에서는 역을 삭제할 수 없다.
  • 노선에 등록되어 있지 않은 역은 삭제할 수 없다.
  • 프로그래밍 요구사항

  • 요구사항 설명을 참고하여 인수 조건을 정의
  • 인수 조건을 검증하는 인수 테스트 작성
  • 인수 테스트를 충족하는 기능 구현
  • 인수 조건은 인수 테스트 메서드 상단에 주석으로 작성.
  • 인수 테스트 이후 기능 구현은 TDD로
  • 도메인 레이어 테스트는 필수
  • 서비스 레이어 테스트는 선택
  • 예외 케이스 검증 테스트 필수

3단계 - 경로 조회 기능

기능 요구사항

  • 경로 조회 기능 구현
    • 요청 포맷
    • 응답 포맷
      • stations: 출발역으로부터 도착역까지의 경로에 있는 역 목록
      • distance: 조회한 경로 구간의 거리
    • 예외 상황 테스트
      • 출발역과 도착역이 같은 경우
      • 출발역과 도착역이 연결이 되어 있지 않은 경우
      • 존재하지 않은 출발역이나 도착역을 조회 할 경우
    • jgrapht 사용하기 (다익스트라 알고리즘)
      • 가중치는 거리로 해서 최단 거리를 구하기.
        • 정점: 지하철역(Station)
        • 간선: 지하철역 연결정보(Section)
        • 가중치: 거리
      • 테스트
        • 단위 테스트는 하지 않는다.
        • 기능을 직접 사용하는 부분은 테스트를 작성한다.이때 Jgrapht 실제 객체를 사용한다.

프로그래밍 요구사항

  • 요구사항 설명을 참고하여 인수 조건을 정의
  • 인수 조건을 검증하는 인수 테스트 작성
  • 인수 테스트를 충족하는 기능 구현
  • 인수 조건은 인수 테스트 메서드 상단에 주석으로 작성.
  • 인수 테스트 이후 기능 구현은 TDD로
  • 도메인 레이어 테스트는 필수
  • 서비스 레이어 테스트는 선택
  • 예외 케이스 검증 테스트 필수

About

ATDD 과정 저장소 - 지하철 노선도 경로 찾기 미션

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%