DAY18

  • 오늘 읽은 범위 : 단위 테스트 ~p169

책에서 기억하고 싶은 내용을 써보세요

  • 깨끗한 테스트 코드를 작성하는 방법:
    1. 가독성!
    2. 가독성!
    3. 가독성!
      • 가독성은 실제 코드보다 테스트 코드에서 더 중요하다!
      • 테스트 코드는 최소의 표현으로 많은 것을 나타내야 한다.
  • 깨끗하지 않은 테스트 코드는 독자가 온갖 잡다하고 무관한 코드를 이해한 후에 간신히 테스트를 진행할 수 있게 한다.
  • BUILD-OPERATE-CHECK패턴1
    • 테스트의 첫번째 부분은 테스트 자료를 만들고,
    • 두번째 부분은 테스트 자료를 조작하며,
    • 세번째 부분은 조작한 결과가 올바른지 확인 한다.
  • 도메인에 특화된 언어Domain Specific Language
    • 시스템 조작 API를 사용하는 대신 API 위에다 함수와 유틸리티를 구현한 후 그 함수와 유틸리티를 사용함으로써 테스트 코드를 짜기도, 읽기도 쉬워진다.
    • 숙련된 개발자라면 자기 코드를 좀 더 간결하고 표현력이 풍부한 코드로 리팩터링 해야 마땅하다
  • 테스트 코드에 적용하는 표준은 실제 코드에 적용하는 표준과 확실히 다르다- 단순하고 간결하고 표현력이 풍부해야 하지만 실제 코드만큼 효율적일 필요는 없다.
    • 테스트 코드는 메모리나 CPU 효율과 관계가 있지 않은 이상 코드의 가독성이 효율보다 중요하다
  • 테스트당 assert 하나
    • assert문이 하나라면 결론도 하나라 테스트 코드를 이해하기 쉽다.
    • assert문이 하나가 되게 테스트 코드를 분리하면 중복코드가 많이 생기는데, template method pattern을 통하여 중복을 제거할 수 있다.
    • 하지만 배보다 배꼽이 커지는 경우가 발생하기에 assert문은 최대한 줄이는 방향으로 노력하는게 좋겠다!
  • 테스트당 개념 하나
    • 이것저것 잡다한 개념을 연속으로 테스트 하는 긴 함수는 피한다.
  • F.I.R.S.T
    • Fast빠르게 - 테스트가 느리다면 자주 돌릴 엄두를 못낸다. 테스트는 빨리 돌아야 한다.
    • Independent독립적으로 - 한 테스트가 다음 테스트를 실행될 환경을 준비해서는 안된다. 하나가 실패하면 나며지도 잇달아 실패하므로 원인을 진단하기 어려워진다.
    • Repeatable반복가능하게 - 테스트는 어떤 환경에서도 반복 가능해야 한다. 테스트가 돌아가지 않는 환경이 하나라도 있다면 실패한 이유를 둘러댈 변명이 생긴다.
    • Self-Validating자가검증하는 - 테스트는 부울값으로 결과를 내야 한다. 테스트가 스스로 성공과 실패를 가늠하지 않는다면 판단은 주관적이 되며 지루한 수작업 평가가 필요하게 된다.
    • Timely적시에 - 단위 테스트는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현한 다음에 테스트 코드를 구현하면 실제 코드가 테스트하기 어렵다는 사실을 발견할지도 모른다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  1. 테스트 코드의 중요함에 대해서는 이루 말할 수 없이 들어왔습니다. 이번 장에서 저자 또한 테스트 코드의 중요성을 실제 코드만큼이나 중요하다고 말하고 있으며 테스트코드를 작성하기 전까지는 실제코드를 작성하지 말라고까지 합니다. 하지만 아직도 많은 현업에서는 테스트코드를 작성하기 꺼려하는 회사, 개발자들이 많습니다. 시간이 빠듯해서, 테스트 케이스를 작성하는 방법을 몰라서 등등 여러 변명이 많습니다.-저 또한 그 중에 한사람이었고 지금도 제대로 TDD를 적용해보지 못했습니다- 하지만 이제는 당당히 말할 수 있습니다. 클린코드에서 말했듯 테스트를하며 코드를 구현 하는 것이 가장 빠른고 건강한 프로젝트로 가는 지름길이라는 것을!

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요

  • given-when-then -
  • template method pattern -

세줄 요약

  • 깨끗한 테스트 코드를 만들려면? 가독성, 가독성, 가독성!
  • build-operate-check: 만들고, 조작하고, 올바른지 확인해라!
  • 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화한다!

주석

  1. p160 목록 9-2 예제 참조