관심있는 주제라서 듣게 되었습니다.
테스트 커버리지를 지표로 쓰는것은 안좋다고 막연히 듣기만 헀었는데
클린 코더 책에서는 저런 말이 있다고 하네요. 저것도 읽어봐야겠습니다.
그러면 충분히 시도해보지 않았기 때문에 테스트 커버리지를 보는 것이 의미가 없는 것일까? 하는 생각이 들었고
iOS 환경에서는 뷰 로직을 검증하는 것을 필요없다는 주의였기 때문에 의구심이 들었습니다.
해당 세션 준비해주신 분은 테스트 커버리지 100%를 달성하고 그것을 꾸준히 유지해오고 있기 때문에
장단점과 노하우가 궁금해졌습니다.
커버리지가 낮으면 배포되지 않도록 설정했기 때문에 계속 유지됨
높은 테스트 커버리지의 이점
- 자신있게 누를 수 있는 배포 버튼
- 거침없는 리팩토링: 이건 진짜 부러운 점... 리팩토링에 문제가 있다면 테스트가 알려줄 것이다
- 불필요한 프로덕션 코드가 사라진다: 실행되지 않는 프로덕트 코드들은 테스트를 하지 않고 바로 지워버리게 됨
- 점점 쉬워지는 테스트 작성: 노하우가 쌓여 테스트를 잘 작성하게 됨. 이미 작성한 테스트를 참고해서 테스트 작성할 수 있음
테스트 커버리지를 높이기 위해 필요한 것들
- 믿음: 테스트가 도움이 된다는 믿음. 어떤 코드든 테스트할 수 있다는 믿음. 이러한 믿음이 없다면 조금만 어려운 코드를 만나도 테스트하기 어렵다고 생각하고 테스트를 하지 않게됨
- 시간: 믿음이 있다고 하더라도 테스트를 작성할 시간이 없다면 무용지물. 프로젝트 초기부터 커버리지가 높은 상태를 유지하는 것이 가장 좋음.
필요하지 않은 것
- 의지: 테스트 커버리지가 100%가 아니면 빌드 되지 않게 만들어둠
어려움
1. 테스트가 점점 느려짐
테스트 개수가 많아지고 실행 시간이 늘어남
테스트 케이스 400개, 실행 시간 1 분 초과
테스트가 모두 통과되었는지 확인하는데 1분 => 생산성 저하
느려지는 원인: 스프링 애플리케이션 컨텍스트 로딩
컨텍스트 로딩 없이 HTTP API를 테스트할 수 있는 기능 제공해주고 있었음
1년 뒤
테스트 케이스 증가: 1600개. 다시 1분 초과
프로파일링을 통해 다시 느려진 원인 분석
전체 테스트 실행시간은 40초 미만
최신 장비에서는 6초대
2. 진짜 어려운 테스트
때때로 진짜 어려운 테스트가 있음
라인 커버리지가 아닌 인스트럭션 기준 커버리지
모든 코드를 테스트 하는것이 아닌 특정 기준이 있음 (iOS에서도 이렇게 구분해서 커버리지를 측정할 수 있는지 확인해봐야겠다)
어떻게 해도 테스트가 불가능한 경우도 있긴 함. 커버리지에서 제외 시켜버리는 방안...
100%는 단순하다
새로 추가한 코드가 조금이라도 커버되지 않으면 언제나 실패
99%는 복잡하다
경우에 따라 통과되는 것과, 통과되지 않는 어색한 상황이 있음
그래도 버그는 있다
- 테스트를 잘못 작성: 테스트 케이스를 빠뜨리는 경우. 테스트 커버리지가 100% 임에도 버그는 만들어질 수 있음.
Mutation Testing이라는게 있음. 프로덕션 코드를 임의로 조작하고 테스트가 실패하는지 체크. 부족한 테스트를 잡아줌. 다만 굉장히 느림. 중요한 로직에만 부분적으로 적용하는 것이 좋다.
- 요구사항 오해: 테스트 작성 => 스펙 문서로 작성되도록 만들었음.
BDD 도구인 Cucumber를 시도. 썩 만족스럽지 못했음. 그다지 읽기 좋지 않았음.
마크다운으로 스펙문서 작성되도록 만들었음. 계속 지속하지는 못했음. 보기 좋은 문서를 만들려면 상당한 노력이 들어감. 결국 잘 읽지 않는 문서가 됨. 아직 이 이슈는 해결하지는 못함
- 컴포넌트간 협업 실패
다른 서버와 협업할 때 이슈.
계약을 관리해주는 "Pactflow"라는 도구가 존재
(Contract를 관리해주는 도구도 있다는게 신기했음)
테스트 코드를 잘 작성하지 않는데
이렇게 적극적으로 시도한 사례를 만나볼 수 있어서 좋았습니다.
짧은 기간안에 빠르게 커버리지를 도달시키고 유지하는게 나쁘지 않은 전략 같았습니다.
'세미나' 카테고리의 다른 글
[캐치#개발자 커리어 콘] 토크콘서트#첫번째 성장 “개발자의 역량 키우기” (0) | 2021.04.27 |
---|---|
[캐치 개발자 커리어 콘] 실리콘 밸리 출신이 말하는, 나를 위해 일하는 개발자 (0) | 2021.04.26 |
[세미나 후기] Wanted 오늘의 개발자 1주차: 리드하는 개발자가 되기 위한 성장 마인드셋 (0) | 2021.04.15 |