인프런 워밍업 클럽 스터디 3기 - 백엔드 클린 코드, 테스트 코드 2주차 발자국
섹션 6 코드 다듬기
해당 섹션에서 가장 와닿았고, 머리가 아팠던 것은 "과연 좋은 주석이란 무엇일까?" 에 대한 것이었다.
결론적으로, 좋은 주석은 코드에 비즈니스 요구 사항과 의도를 모두 잘 녹여냈다는 가정 하에 더 전달해야만 하는 정보가 남았을 때 남기는 것이다!
섹션 7 리팩토링 미션
이제까지의 학습을 바탕으로, 리팩토링 진행
https://github.com/Chaeruin/readable-code/pull/1
단계적으로, 공통적인 것부터 추상화 및 리팩토링을 진행하였다.
io 패키지 인터페이스 추상화
model 일급컬렉션 분리
Machine 기능 추상화
버그 수정!
이후 중간 점검 세션을 통해 다른 분들 코드와 비교하고, 말씀해주신대로 다음날 리팩토링 + 강의 수강을 통해 간과하고 있었던 Provider의 개념, 리팩토링을 놓친 부분 (FileHandler 등...), VO에 대한 부족한 이해가 있음을 알고 이에 대해 더 학습하는 시간이 필요할 것 같다는 생각... 더 미루지 말고 다음 주에는 꼭 !! 해보아야겠다.
섹션 2 테스트는 왜 필요할까?
테스트의 중요성 -> 테스트 코드의 부재는 결국 유지보수의 어려움을 낳는다
테스트 코드는 빠른 피드백과 코드의 자동화, 이는 곧 전체 프로젝트의 높은 안정성을 낳는다
섹션 3 단위테스트
단위 테스트란? 작은 단위(클래스나 메소드와 같은-)의 코드를 독립적으로 검증하는 테스트이다.
JUnit5/AssertJ를 기반으로 해피 케이스 / 예외 케이스 / 경계값 모두 테스트 해야함
섹션 4 TDD
TDD는 왜 하는걸까?
처음엔 시간이 오래 걸리는 것처럼 보이지만, 디버깅 시간 단축, 빠른 문제 식별, 리팩토링 안정성 보장 덕분에 장기적으로 개발 속도가 빨라진다고,
Flow (3단계 순환)
Red : 빨간 불을 보는 테스트를 먼저 작성 (내부 메서드 구현X 혹은 더미값)
Green : 단순하고 빠르게 테스트를 통과할 수 있는 로직 구현
Refactor : 해당 Green을 기준으로 같은 값을 낼 수 있는 로직으로 리팩토링
장점
복잡도가 낮고, 테스트 가능한 코드를 구현할 수 있게 한다.
쉽게 발견하기 어려운 엣지 케이스를 놓치지 않게 해준다.
과감한 리팩토링이 가능해진다.
섹션 5 테스트는 [ ] 다.
JUnit5부터 @Display 를 통해
명사의 나열보다 문장으로
테스트 행위에 대한 결과까지 기술
도메인 용어를 사용하여 한층 추상화된 내용을 담아
테스트의 현상을 중점으로 기술하지 말 것
BDD
시나리오 기반 테스트 케이스에 집중한 테스트
Given // When // Then
댓글을 작성해보세요.