📘 클린 코드 북스터디 정리입니다
📚 도서: 로버트 C. 마틴 《Clean Code》
🧑💻 목적: 좋은 코드에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 5월 ~ 매주 2장
📚 도서: 로버트 C. 마틴 《Clean Code》
🧑💻 목적: 좋은 코드에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 5월 ~ 매주 2장
📖 [09장] 단위 테스트
✅ 핵심 요약 (Key Takeaways)
이 장의 핵심 문장은?
테스트 코드를 깨끗하게 유지하자
저자가 전달하고자 하는 메시지 요약
- 테스트 코드는 중요하기 깨끗하게 작성하고 잘 관리해야 한다.
- 테스트 코드를 잘 작성하고 관리하기 위해 TDD 법칙,
BOC패턴, F.I.R.S.T 규칙을 참고하자.
💡 내용 정리
TDD의 세 가지 법칙
- 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다
- 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다
- 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다
깨끗한 테스트 코드 유지하기
- 테스트 코드는 실제 코드 만큼이나 중요하다.
- 실제 코드가 진화하면 테스트 코드도 함께 진화해야 한다.
- 단위 테스트는 코드에
유연성,유지보수성,재사용성을 제공한다.
깨끗한 테스트 코드 작성법
- 깨끗한 테스트 코드의 핵심은 가독성이다.
- 명료하고 단순하며, 표현력이 높은 코드가 가독성이 좋다.
- BUILD-OPERATE-CHECK 패턴의 테스트 구조:
- Build: 테스트 자료 생성
- Operate: 테스트 자료 조작
- Check: 결과 검증
- 테스트 코드는 필요한 자료 유형과 함수만 사용한다.
도메인에 특화된 테스트 언어 (DSTL)
- DSTL (Domain-Specific Testing Language)은 테스트 코드를 비즈니스 도메인의 언어로 표현함으로써 개발자뿐 아니라 도메인 전문가도 이해하고 참여할 수 있도록 설계된 테스트 작성 방식이다.
이중 표준
- 실제 환경과 테스트 환경의 요구사항은 다르다.
- 테스트는 자원 효율성보다 명확성과 단순성이 중요하다.
- 예: 메모리/CPU 최적화는 테스트 코드에서는 1순위가 아님.
테스트당 assert 하나의 원칙
- 개념당 assert 문 수를 최소로 줄이기
- 테스트 개념 하나당 테스트 함수 하나
F.I.R.S.T 규칙
- Fast: 테스트는 자주 돌릴 수 있도록 빨라야 한다
- Independent: 각 테스트는 독립적으로, 순서와 무관하게 실행되어야 한다
- Repeatable: 테스트는 어떤 환경에서도 반복 가능해야 한다
- Self-Validating: 테스트 결과는 성공/실패의 bool 값으로 나타나야 한다
- Timely: 테스트는 적시에 작성되어야 한다. 실제 코드 구현 직전에 단위 테스트를 구현
💡 인상 깊었던 문장 & 나의 인사이트
책에서 가장 기억에 남는 문장
실제 코드가 진화하면 테스트 코드도 변해야 한다.
해당 문장이 왜 인상 깊었는지 나의 생각
테스트 코드의 중요성은 알고 있었지만, 실제로 작성해본 경험은 많지 않다.
예전에 참여했던 프로젝트에서 아주 작은 모듈 하나에 대해 테스트 코드를 작성한 적이 있었다.
당시엔 TDD라는 개념이 개발 트렌드처럼 자리 잡던 시기였고,
남들도 하니까 나도 해야 할 것 같다는 일종의 의무감으로 테스트를 작성했었다.
하지만 테스트 코드가 왜 필요하고, 어떻게 작성해야 효과적인지에 대한 이해가 부족했기에
결국 그 코드는 단 하나의 기능만 검증할 뿐, 이후 더 이상 확장되지 못했다.
시간이 지나 실제 코드가 진화하면서
그 테스트 코드는 점점 실제 코드와 맞지 않게 되었고,
나중에 다시 손보려 했을 땐 이미 너무 멀리 와버린 뒤였다.
결국 테스트는 방치되었고,
그 이후로도 테스트 없는 코드가 계속 쌓여만 갔다.
이번 장을 통해 다시금 느꼈다.
테스트 코드도 함께 진화해야 한다.
그렇지 않으면, 테스트는 금세 쓸모를 잃고 유지 부담만 남게 된다는 것을.
🛠 실무 적용 아이디어 (To Action)
오늘부터 실천해볼 작고 구체적인 실천
- 기능 개발 전 테스트 코드를 작성하자
- 작성한 테스트 코드를 깨끗하게 잘 유지하자
'북스터디 > 클린코드' 카테고리의 다른 글
| 08장 - 경계 (0) | 2025.05.29 |
|---|---|
| 07장 - 오류 처리 (0) | 2025.05.26 |
| 06장 - 객체와 자료 구조 (0) | 2025.05.21 |
| 05장 - 형식 맞추기 (1) | 2025.05.20 |
| 04장 주석(Comments) (1) | 2025.05.18 |
댓글