서론
개발자로서, 꼭 테스트에 대한 공부를 수행하여 단위테스트 부터 시작하여 점진적으로 테스트하는 습관을 반드시 가져야겠다고 생각을 하고 있었고, 마침 즐겨 보는 유튜브에서 강의를 추천받아 수강하고, 해당 내용들을 정리하고, 사용해보며 테스트코드를 잘 작성하는 개발자로 성장해나가기 위해 인강을 정리하는 포스팅이다
개발바닥 유튜브를 시청하고 있다가, 꼭 학습해보고자 하는 테스트 관련 강의를 오픈한다고 하셔서 수강하기로 마음먹었다.
테스트코드의 사용
직접 테스트
Production Code를 개발한 개발자, 혹은 어떤 테스터가 직접 테스트를 수행한다고 가정해보자.
1. 만든 기능을 어떤 테스터(사람)이 직접 테스트를 한다. 기능이 1개일 때는 무리없이 수행할 수 있다.
2. 기존 기능 코드와 전혀 상관 없는 다른 코드가 App에 추가되었다. 또 다른 누군가가 테스트를 수행한다.
3. 또 새로운 기능이 추가되었다. 이번에는, 1번에서 만들었던 기존 코드와 겹치는 모듈을 사용한다고 가정해보자.
1번 기능에 겹쳐있는 기능이 새로 개발됐기 때문에, 신규로 추가한 3번 기능도 테스트 해야하지만, 1번 기능을 다시 테스트하여 1번 기능이 정상수행 되는지 또 테스트를 수행해야 한다.
코드들은 점점 확장되어 나갈 것이다. Product의 Production Code들이 Product가 개발됨에 따라 무수히 많은 코드들이 생성될 것이다.
직접 테스트의 한계
그렇다면, 확장되는 코드들에 대응해 테스트 인력을 어떻게 추가할 것인가?
그 전에, 근본적으로 사람은 실수를 할 수 있는 가능성을 지니고 있다. 테스터의 실수로 테스트가 통과되었다고 가정해보면, 해당 Product의 치명적인 결함이 될 수도 있다.
사람이 테스트를 했을 때의 문제점
1. 소프트웨어가 커지는 속도를 사람이 따라잡을 수 없게 된다.
2. 기능이 겹치면서 기존 테스트를 진행했던 내용들을 또 테스트를 해야한다.
3. 피드백이 늦어진다. (테스트 요청에 대한 응답을 직접 보내주어야 한다.)
4. 테스터의 경험과 감에 의존할 확률이 높아진다.
이런 문제점들은 소프트웨어의 신뢰도를 낮추게 된다.
그렇기 때문에 위의 문제점들을 보완할 수 있는 테스트코드의 작성이 필요하다.
빠른 피드백을 통한 오류 수정, 기계가 검증할 수 있도록 자동화하여 테스트 진행
→ 소프트웨어의 신뢰성, 안정성 향상
테스트 코드를 사용하지 않는다면
우선 새로운 기능이 추가되거나, 변경될 때 마다 발생할 수 있는 모든 상황을 고려해야 한다.
또한 개발자 A가 했던 생각을, B, C, D등 모든 팀원들이 같은 고민을 해야한다. 이는 업무의 효율성을 낮춘다.
또한 근본적으로 소프트웨어의 안정성을 보장할 수 없을 것이다.
잘못된 테스트 코드의 문제점
잘못된 검증이 이루어질 가능성이 생기며 이는 기능 코드의 안전성을 제공하기 힘들어지는 치명적인 문제가 발생한다. 또한 테스트 코드를 통해 업무 효율성을 향상시키려고 했지만 테스트 코드 자체가 유지보수하기 어려운 새로운 숙제가 된다.
올바른 테스트 코드의 장점
그렇다면 올바른 테스트 코드를 작성했을 때의 장점은 무엇이 있을까?
첫번째 장점으로, 자동화된 테스트로 직접 테스트보다, 빠른 시간안에 버그를 발견하고, 비용을 크게 절약할 수 있다. 또한 빠른 시간안에 버그를 발견하고, 픽스할 수 있기 때문에 제품의 빠른 변화를 지원한다.
또한 해당 기능을 만들며 했던 고민들을 녹여내어 작성한 테스트 코드를 다른 팀원들이 같이 공유할 수 있다. 이는 타 팀원들이 테스트 코드를 통해, 어떤 테스트들이 필요하며, 어떤 케이스들이 있는지 직접 고민하지 않아도 빠르게 파악할 수 있으다. 이는 업무 효율이 상승한다.
가까이 보면 느리지만, 멀리 보면 가장 빠르고 좋은 길이다. 테스트 코드를 작성하는 것은 귀찮고, 기능 구현과 테스트 코드 두 가지를 짜야하기 때문에, 업무 수행 속도가 느리게 보일 수 있다. 하지만 기능 코드가 쌓여가고, 테스트 코드가 쌓여가다보면 해당 프로젝트 내의 업무 효율성이 올라갈 수 밖에 없다.
관련 포스팅
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!