전 부터…. – 테스트코드의 중요성이 대두되었음 – 엔터프라이즈 앱 [1] 의 제품 코드와 테스트코드의 비율은 1:1, 1:3, 많으면 1:10까지 – 좋은 테스트코드를 짜야 한다는 건 알겠는데, “좋은” 테스트가 뭐지? • 좋은 테스트란…. – 투자 대비 성능이 좋은 테스트 – 이상적인 테스트 vs 실용적인 테스트 [1]: 높은 비즈니스 복잡도, 긴 프로젝트 수명, 중간 크기의 데이터, 낮은~중간정도 성능을 요구
– 좋은 설계? – 소프트웨어의 지속 가능성 [1]: 열역학 제 2법칙의 그 엔트로피에서 이름을 따옴. 시스템 내의 무질서를 의미 [2]: 회귀(regression): 코드 수정 후 기능이 의도대로 작동하지 않는 경우. 즉, 버그. • 지속 가능성 – 소프트웨어 엔트로피 [1] 증가 속도를 완화시킴 – 엔트로피가 상승 → 코드 신뢰 하락 • 정리되지 않은 코드들 • 리팩터링하지 않은 코드들 • 한 부분이 수정되면 다른 부분이 고장나는 코드들 – 테스트는 엔트로피 역전(!)이 가능 – 테스트는 회귀(regression) [2] 에 대한 보험
소프트웨어 엔트로피를 상승시킴 – 테스트를 위한 테스트로 전락 – 결국 일만 두 배가 됨 → 늦게 퇴근(중요) • 그렇다면? – 테스트의 가치-유지비용을 고려해야 함 • 코드베이스 리팩터링 시, 테스트도 리팩터링 • 코드 변경 시 테스트 실행 • 테스트가 잘못된 오류를 발생시키면 바로 처리하기 • 코드베이스의 스펙은 곧 테스트코드의 스펙 – 고품질의 테스트 ‘코드’ 관리하기 • 버그에 취약 • 유지보수 필요
중요한 부분을 대상으로 함 – 시스템의 가장 중요한 부분에 단위 테스트 노력을 기울이기 – 다른 부분은 간략하게/간접적으로 검증하기 • 대부분의 앱에서 중요한 부분은 비즈니스 로직(도메인 모델) • 나머지 모든 부분은 아래 범주에 속함 (2부에서 추가설명) – 인프라 코드 – 외부 서비스 및 종속성(E.g., DB, 서드파티 시스템) – 모든 것을 하나로 묶는 코드 – 다만 상기 내용들은 코드베이스의 중요한부분/덜 중요한 부분으로 나누어야 함
기준틀 설명 → 리팩터링 대상 및 제거코드 파악 완료 • 기존 테스트 기술과 실천방법 및 better case • 제품코드와 관련 스위트를 리팩터링 하는 방법 • 단위 테스트의 다양한 스타일 적용법 • 통합 테스트로 시스템 전체 동작 검증 • 단위 테스트의 안티패턴 식별 방법, 예방법