개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위테스트다.(p.157)
테스트 코드는 최소의 표현으로 많은 것을 나타내야 한다. (p.158)
테스트 코드는 지속적으로 깨끗하게 관리하자. 표현력을 높이고 간결하게 정리하자. 테스트 API를 구현해 도메인 특화 언어를 만들자. (p.168)
TIL (Today I Learned) 날짜
2022.05.07.SAT
오늘 읽은 범위
9장.단위테스트
책에서 기억하고 싶은 내용을 써보세요.
TDD 법칙 세가지(p.155)
-실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
-컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
-현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
깨끗한 테스트 코드 유지하기(p.157) - 테스트 코드는 실제 코드 못지않게 중요하다. 테스트 코드는 사고와 설계와 주의가 필요하다. 실제 코드 못지 않게 깨끗하게 짜야한다.
코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위테스트다.(p.157)
테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 테스트 코드가 지저분할수록 실제 코드도 지저분해진다. 결국 테스트 코드를 잃어버리고 실제 코드도 망가진다.(p.157)
깨끗한 테스트 코드(p.158) - 깨끗한 테스트 코드를 만들려면 ? 가독성, 가독성, 가독성이 필요하다! 가독성을 높이려면 ? 명료성, 단순성, 풍부한 표현력이 필요하다.
테스트 코드는 최소의 표현으로 많은 것을 나타내야 한다. (p.158)
테스트 당 개념 하나.(p.166,167) - 가장 좋은 규칙은 "개념 당 assert 문 수를 최소로 줄여라"와 "테스트 함수 하나는 개념 하나만 테스트 하라"
깨끗한 테스트는 다섯 가지 규칙을 따른다.(FIRST)(p.167,168)
- 빠르게 (Fast) : 테스트는 빨리 돌아야한다.
- 독립적으로(Independent) : 각 테스트는 독립적으로 그리고 어떤 순서로 실행해도 괜찮아야 한다.
- 반복가능하게(Repeatable) : 어떤 환경에서도(실제환경, QA환경, 버스를 타고 집으로 가는길에 사용하는 노트북 환경 등) 반복 가능 해야한다.
- 자가검증하는(Self-Validating) : 테스트는 부울 값(성공아님 실패)으로 결과를 내야한다. 통과 여부를 알려고 로그 파일을 읽게 만들어서는 안 된다.
- 적시에(Timely) : 단위 테스트를 테스트하려는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현한 다음에 테스트 코드를 만들면 실제 코드가 테스트하기 어렵다는 사실을 발견할지도 모른다. 테스트가 불가능하도록 실제 코드를 설계할지도 모른다.
테스트 코드는 실제 코드보다 더 중요할지도 모른다. 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문이다. 그러므로 테스트 코드는 지속적으로 깨끗하게 관리하자. 표현력을 높이고 간결하게 정리하자. 테스트 API를 구현해 도메인 특화 언어를 만들자. 그러면 그만큼 테스트 코드를 짜기가 쉬워진다.(p.168)
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
테스트 코드가 중요한지는 알고있었지만 "실제 코드보다 중요할지도 모른다"(p.168)라는 부분에서 좀 놀랐다. 그리고 단위 테스트를 실제 코드 구현 전에 구현해야한다니... 정말 쉽지않은 코딩😂 실제 코드 구현도 쉽지않은데 단위 테스트부터 하라니...내가 아는 단위테스트는 간단히 테스트하는거라고만 생각했는데, 난 단위테스트에 대해 쏘 베이비👶한 생각을 가지고 있었구나 자아성찰했다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
TDD (Test Driven Development) ?
- Test Driven Development의 약자로 ‘테스트 주도 개발’이라고 한다.
- 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.
- 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며, 애자일 방법론 중 하나인 eXtream Programming(XP)의 ‘Test-First’ 개념에 기반을 둔 단순한 설계를 중요시한다.
- 대표적인 Tool로는 JUnit(현재 전 세계적으로 가장 널리 사용되는 'Java 단위 테스트 프레임워크') 이 있다.
(참고 https://hanamon.kr/tdd%EB%9E%80-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A3%BC%EB%8F%84-%EA%B0%9C%EB%B0%9C/)