Skip to main content

이정우

1. 📌 핵심 개념 정리

✅ 요약하기

  1. TDD 법칙 세 가지
    1. 실패하는 단위 테스트를 작성할 떄까지 실제 코드를 작성하지 않는다.
    2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
    3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
  • 위 세가지 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶인다.
  • 테스트 코드와 실제 코드가 함께 나올뿐더러 테스트 코드가 실제 코드보다 불과 몇 초 전에 나온다.
  • 하지만 과한 양의 테스트 코드는 관리 문제를 유발하기도 한다.

  1. 깨끗한 테스트 코드 유지하기
  • 지저분한 테스트 코드는 테스트를 하지 않는 것보다 못하다.
  • 실제 코드가 진화하면 테스트 코드 또한 변해야 한다.
    • 테스트 코드가 지저분 할 수록 변경이 어려워진다.
    • 테스트 코드가 복잡할수록 실제 코드를 짜는 시간보다 테스트 케이스를 추가하는 시간이 더 걸린다.
    • 실제 코드 변경으로 기존 테스트 케이스가 실패하기 시작하면, 지저분한 코드로 인해 실패하는 테스트 케이스를 통과시키는 것은 더욱 어려워진다.
    • 때문에, 테스트 코드는 계속 증가하는 부담이 된다.
    • 결국 테스트 슈트를 폐기하지 않으면 안 되는 상황에 처한다.
    • 하지만 테스트 슈트가 없으면 시스템 이쪽을 수정해도 저쪽이 안전하다는 사실을 검증하지 못한다.
    • 결국 결함율이 높아지기 시작한다.
    • 의도치 않은 결함 증가는 개발자의 변경을 주저하게 만든다.
    • 결과적으로 코드가 망가지기 시작한다.
  • 테스트 코드는 실제 코드 못지 않게 중요하다.
  • 테스트는 유연성, 유지보수성, 재사용성을 제공한다.

  1. 깨끗한 테스트 코드
  • " 가독성 "
  • 가독성을 높이기 위해선 명료성, 단순성, 풍부한 표현력이 필요하다.
  • 테스트 코드는 최소의 표현으로 많은 것을 나타내야 한다.
  • 도메인에 특화된 테스트 언어 - DSL
    • 테스트를 구현하는 당사자와 테스트를 읽을 독자를 도와주는 테스트 언어
    • API 위에 함수와 유틸리티 구현 후 해당 함수와 유틸리티를 사용
    • 테스트 코드 구성, 해석이 쉽다.
  • 이중 표준
    • 테스트 API 코드에 적용하는 표준은 단순,간결,표현의 풍부가 중요하지만 실제 코드 만큼 효율적일 필요는 없다.

  1. 테스트당 assert 하나
  • assert 문이 하나인 함수는 결론이 하나이므로 코드를 이해하기 좋다.
  • 하지만 때로는 하나의 함수에 여러 assert 문을 넣는 순간도 존재.
  • 단지 assert 문의 개수는 최대한 줄이는 것이 좋다는 의견
  • 테스트당 개념 하나

  1. F.I.R.S.T.
  • Fast
    • 테스트는 빠르게 돌아야 한다.
    • 자주 돌려야 하기 때문이다.
  • Independent
    • 각 테스트는 서로 독립적이어야 한다.
    • 실패의 원인을 명확하게 구분해야 하기 때문이다.
  • Repeatable
    • 테스트는 어떤 환경에서도 반복 가능해야 한다.
  • Self-Vaildating
    • 테스트는 bool 값으로 결과를 내야 한다. ( 성공 or 실패 )
    • 통과 여부 확인을 위해 로그 파일 읽지 않도록
  • Timely
    • 테스트는 적시에 작성해야 한다.
    • 실제 코드 작성 후 테스트 코드를 작성하면 테스트가 어렵다는 사실을 발견할 수도 있다.

2. 🤔 이해가 어려운 부분

🔍 질문하기

책을 읽으며 이해하기 어려웠던 개념이나 명확하지 않았던 내용을 정리합니다.

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분
      도메인 특화 언어(DSL)
      • 특정 도메인에 국한해 사용하는 언어로, 응용 프로그램 도메인 내의 특정 문제를 해결하도록 설계되었습니다.
      • 어느 도메인에서나 적용 가능한 범용 언어(General-purpose language)와는 반대되는 개념입니다.
      • 예를 들어 쇼핑몰 플랫폼을 개발한다고 가정했을 때, 비지니스 도메인에는 상품을 결제하고 배송처리와 같은 개념이 포함됩니다.

3. 📚 참고 사항

📢 논의하기

관련된 자료가 있다면 공유하고, 더 깊이 논의하고 싶은 아이디어나 의견을 정리합니다.

  1. 관련 자료 공유

  1. 논의하고 싶은 주제
    • 주제
      논의하고 싶은 내용을 간략히 정리합니다.
    • 설명
      논의하고 싶은 이유를 작성합니다.