Skip to main content

이정우

1. 📌 핵심 개념 정리

✅ 요약하기

각자 해당 챕터에서 중요하다고 느낀 개념이나 아이디어를 간략하게 정리하고 개선 전, 후에 대한 예시 코드를 비교하며 개념을 설명합니다.

첫째, 돌려보자

  • SerialDateTest라는 클래스는 단위 테스트 케이스를 몇 개 포함한다.
  • 실패하는 케이스는 없지만 모든 경우를 점검하지 않는다는 사실을 알 수 있다..
  • 저자는 SerialDateTest.java에 있는 모든 테스트 케이스가 통과할 수 있게 만들었다.
  • Clover라는 Code Coverage 분석 도구를 이용해 실행 코드와 실행하지 않는 코드를 확인한 결과 SerialDateTests는 50%의 경우만 테스트함을 확인할 수 있다.
  • SerialDate 클래스를 보면서 빠진 테스트가 없는지까지 확인한다.

둘째, 고쳐보자

  • 쓸모없는 주석은 지운다.
    • 법적인 정보는 필요하기에 라이선스 정보와 저작권은 보존하고 변경 이력, 작성자 등은 불필요하기에 삭제한다.
    • 변수 역사와 의미를 남기는 주석은 좋은 주석이다.
  • import문은 java.text.*java.util.*로 줄인다.
  • 클래스와 함수의 기능을 명확하게 한다.
    • 추상 클래스에 있는 변수가 오직 하나의 클래스에서만 사용한다면 옮기는 것이 좋다.
    • 해당 변수와 그 변수를 사용하는 거리가 좁아지고 실제 코드를 이해하는 도움이 된다.
    • 한 소스 코드에 여러 언어를 사용하면 안된다.
    • 불필요한 상속은 삭제한다.
    • 인수와 변수 선언에서 final 키워드를 모두 없앤다.
      • 실질적인 가치는 없으면서 코드만 복잡하게 만들기 때문이다.
      • final 키워드를 제거하겠다는 결정은 일부 기존 관례와 어긋난다.
    • for 루프 안에 if문이 중복되면 || 연산자를 사용하여 if문 하나로 만든다.

결론

  • 보이스카우트 규칙을 따랐다.
  • 체크아웃한 코드보다 좀 더 깨끗한 코드를 체크인할 수 있게 되었다.
  • 테스트 커버리지 증가, 버그 사항 개선, 코드 크기 감소, 명확한 코드, 코드의 가독성 증가
  • 다음의 코드 개선은 난이도가 조금 더 낮아질 것이다.

2. 🤔 이해가 어려운 부분

🔍 질문하기

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

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분

      • Clover 같은 도구가 어떤 점에서 도움이 되고, 어디까지 신뢰할 수 있는가?
    • 알게된 점

      • [Clover 와 같은 코드 커버리지 도구의 장점]

        • 테스트 사각지대 시각화
          • 테스트되지 않은 코드가 어디인지 하이라이트 색상 등으로 시각적으로 표시됨.
          • 어떤 분기(if), 루프(for), 예외 처리 블록 등이 실행되지 않았는지를 바로 확인할 수 있어 테스트 보완에 유용함.
        • 커버리지 수치로 측정 가능
          • 코드 전체의 문장(Statement), 분기(Branch), 메서드, 클래스 커버리지를 %로 제공.
          • 리팩토링하거나 기능 추가 시 테스트 범위가 줄어들었는지 쉽게 감지할 수 있음.
        • 자동화된 리포트 생성
          • HTML, XML, PDF 등의 리포트를 제공해 CI/CD 파이프라인에 통합하거나 팀원들과 공유하기 좋음.
        • 테스트 품질 개선의 출발점
          • 어디에 테스트가 부족한지 알려주는 출발점 역할을 함.
          • 커버리지를 높이는 과정에서 예외 상황이나 엣지 케이스를 놓치지 않도록 도와줌.
      • [Clover를 무조건 신뢰하면 안 되는 이유]

        • "높은 커버리지 ≠ 좋은 테스트"
          • 커버리지가 100%여도, assert 문 없이 메서드만 호출해도 수치는 올라감.
          • 로직 검증이 빠져있는 형식적인 테스트는 실제 버그를 걸러내지 못함.
        • 복잡한 로직 커버리지는 간과될 수 있음
          • 하나의 if 문이 여러 조건을 포함할 경우, 모든 조건 조합을 검사하지 않아도 커버리지가 올라갈 수 있음.
          • 분기 커버리지(Branch Coverage)가 없거나 약한 경우 놓치는 부분이 생김.
        • 리팩토링 과정에서 거짓 경고
          • 동일한 로직 구조이지만 코드 위치나 표현 방식이 바뀌면 새로운 코드처럼 인식되어 커버리지가 낮아질 수 있음.
    • Clover는 “어디를 테스트해야 할지”를 알려주는 유용한 도구이지만, “테스트가 충분한지”는 사람이 판단해야 한다.

    • 커버리지는 테스트의 양적 지표이고, 품질은 정성적인 코드 리뷰와 시나리오 설계로 보완되어야 함.

    • Clover는 테스트 보완의 출발점, 품질 진단의 도구, 리팩토링 후 퇴행 방지의 방패막 역할을 한다.


3. 📚 참고 사항

📢 논의하기

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

  1. 관련 자료 공유
    • 추가 자료
      관련 블로그 글이나 공식 문서 링크를 제공합니다.

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