책너두 5기 44일차

로버트 C. 마틴의 클린코드 p. 404~ p.412

내용정리

17. 냄새와 휴리스틱

테스트

1. 불충분한 테스트

테스트 케이스는 잠재적으로 깨질만한 부분을 모두 테스트해야 한다. 확인하지 않는 조건이나 검증하지 않는 계산이 있다면 그 테스트는 불완전하다.

2. 커버리지 도구를 사용하라

커버리지 도구는 테스트가 빠뜨리는 공백을 시각적으로 알려준다.

3. 사소한 테스트를 건너뛰지 마라

사소한 테스트는 짜기 쉽고 제공하는 문서적 가치는 구현에 드는 비용을 넘어선다.

4. 무시한 테스트는 모호함을 뜻한다

불분명한 요구사항은 테스트 케이스를 주석으로 처리하거나 테스트 케이스에 @ignore를 붙여 표현한다.

5. 경계 조건을 테스트하라

경계 조건은 각별히 신경 쓴다.

6. 버그 주변은 철저히 테스트하라

버그는 서로 모이는 경향이 있다.

7. 실패 패턴을 살펴라

합리적인 순서로 정렬된 꼼꼼한 테스트 케이스는 실패 패턴을 드러낸다.

8. 테스트 커버리지 패턴을 살펴라

통과하는 테스트가 실행하거나 실행하지 않는 코드에서 테스트 케이스의 실패 원인이 드러난다.

9. 테스트는 빨라야 한다

느린 테스트 케이스는 실행하지 않게 된다. 빨리 돌아가게 최대한 노력한다.

결론

사실 이 책의 주제는 가치 체계이다. 일군의 규칙만 따른다고 깨끗한 코드가 얻어지지 않는다. 휴리스틱 목록을 익힌다고 소프트웨어 장인이 되지는 못한다. 가치에 기반한 규율과 절제가 필요하다.

부록 A 동시성 2

  • 클라이언트/서버 애플리케이션의 성능을 어떻게 테스트할까? => 테스트가 기준 시간 내에 끝나는 지를 검사한다.
  • 테스트가 실패한다면? 우선 애플리케이션이 어디서 시간을 소모하는지 파악한다.
    • I/O : 소켓 사용, 데이터베이스 연결, 가상 메모리 스와핑 기다리기
    • 프로세서 : 수치 계산, 정규 표현식 처리, 가비지 컬렉션
  • 둘 중 후자라면 새로운 하드웨어를 추가해 성능을 높여 테스트를 통과할 수 있다. CPU 사이클은 한계까 있기 때문에 스레드를 늘린다고 빨라지지 않는다.
  • 전자라면 동시성이 성능을 높여주기도 한다.
  • 스레드를 늘릴 때 단일 책임 원칙이 중요하므로 동시성과 관련한 코드를 몇몇 클래스로 집중해야 한다.