기술면접 질문중에 나오는 예상 질문 중에 하나인 "테스트 코드를 작성하면서 개발할 때 장점과 단점에 대해 설명 해주세요."라는 질문을 가지고 이야기를 해볼려고 합니다.
목차
테스트 코드란?
테스트 코드는 소프트웨어의 기능과 동작을 테스트하는 데 사용되는 코드입니다. 소프트웨어 테스트는 소프트웨어의 결함을 찾아내고 수정하는 과정에서 매우 중요합니다. 테스트 코드는 개발자가 작성한 코드를 실행하고 예상된 결과가 나오는지 확인하는 데 사용됩니다.
일반적으로 개발자는 단위 테스트, 통합 테스트와 관련된 테스트 코드를 주로 다룹니다.
단위 테스트란?
단위 테스트는 소프트웨어 개발에서 일반적으로 사용되는 테스트 중 하나로, 개별적인 코드 단위가 의도한 대로 작동하는지 확인하는 과정입니다. 단위 테스트의 주요 목표는 개발 초기 단계에서 제품의 각 단위 또는 모듈을 테스트하여 오류가 다음 단계로 이전되는 것을 방지하는 것입니다.
단위테스트의 “단위”는 제품의 성능을 개선하기 위해 테스트할 수 있는 가장 작고 간단한 부분입니다. 메서드, 프로시저, 객체 또는 모듈이 될 수 있습니다.
제품이나 소프트웨어를 만들 때 소프트웨어 개발 주기(SDLC)의 초기 단계에서 잠재적인 결함을 발견하고 수정하는 것은 필수적입니다. 따라서 모든 애자일 소프트웨어 개발 프로세스에서 필수적인 부분입니다.
통합 테스트란?
통합 테스트는 서로 다른 모듈들 간의 상호작용을 테스트 하는 과정입니다. 통합 테스트는 보통 모듈 간 인터페이스 테스트, 시스템 레벨 테스트 등의 방법으로 수행됩니다. 단위 테스트에 비하면 통합 테스트는 작성하기 어려운 편입니다. 모듈 간의 상호작용을 테스트하기 때문에 각기 다른 모듈의 설정 방법을 알아야 하고, 테스트에 영향을 끼치는 요인이 데이터와 로직뿐만 아니라 통신구간이나 해당 모듈의 환경설정 정보 등이 더 많습니다.
따라서 통합 테스트를 수행할 때는 더 많은 리소스와 시간이 필요하며, 오류를 발견하고 수정하는데 보다 많은 노력이 필요합니다. 그러나 통합 테스트를 수행함으로써, 전체적인 소프트웨어 시스템의 신뢰성과 안정성을 높일 수 있습니다.
테스트 코드 작성 주체
상식적으로 단위 테스트 생성은 QA부서가 있는경우 QA테스터의 책임이라고 생각하기 쉽습니다. 그러나 단위 테스트는 프로그래밍 단계의 일부로 간주되는 경우가 더 많습니다. 따라서 일반적으로 프로그래머가 단위 테스트를 생성하는 경향이 있는데, 이는 프로그래머가 코드를 가장 잘 알고 있기 때문에 프로덕션 코드를 쉽게 탐색할 수 있기 때문입니다.
단위 테스트를 개발자가 직접 수행하면 다음과 같은 이점이 있습니다.
- 프로그래머는 쉽게 테스트할 수 있는 부분에 액세스하는 방법을 알고 있을 가능성이 높습니다.
- 또한 다른 방법으로는 접근할 수 없는 객체, 특히 모킹 객체를 테스트할 때 이상적인 선택입니다.
- 개발자가 단위 테스트를 작성하는 경우 장기적으로 많은 시간을 절약할 수 있습니다.
👍테스트 코드의 장점
단위 테스트를 시행하면 회사, 팀 또는 개인 소프트웨어 개발자가 코드의 품질을 개선하는 데 도움이 될 수 있습니다. 또한 재사용 가능한 코드 모듈을 생성하여 코딩 프로세스를 더 빠르고 원활하게 진행할 수 있습니다. 프로세스가 더욱 간소화되면 개발자는 더 간단하고 명확한 문서를 더 쉽게 작성할 수 있습니다. 단위 테스트를 제대로 수행하면 나중에 복잡한 단계에서 오류를 찾아 해결하는 데 소요되는 시간과 비용을 절약할 수 있습니다.
▪️ 소프트웨어 제품에서 발생할 수 있는 모든 결함을 초기 단계에서 노출하여 다음 단계로 넘어가기 전에 수정 및 제거할 수 있습니다.
▪️ 코드 가독성 및 품질 향상
▪️ 문서화 간소화 및 코드 재사용 가능
▪️ 이후 프로젝트 단계로 넘어갈 수 있는 오류를 신속하게 발견하여 시간과 비용 절약
▪️ 배포 속도를 개선하여 프로젝트 완료 및 디버깅 시간 단축
👎테스트 코드의 단점
▪️ 새로운 기능을 도입하고 구현할 때 발생하는 구현 비용
▪️ 기본 코드가 빠르게 변경되는 프로토타입 개발에 방해가 됩니다.
▪️ 테스트에서 해당 기능을 사용하므로 IDE에서 해당 기능이 사용 중인지 확인하기가 더 어려워짐
▪️ 상호 의존성이 있는 테스트는 개별 코드베이스가 변경될 때 결과에 영향을 미칠 수 있습니다.
느낀점
이번 코드잇 부트캠프를 끝내면서 7개월동안 프런트 엔드에 대해서 다루었습니다. 처음부터 배우러가자는 마음으로 갔었고 현재는 그 배움을 가지고 다르게 생각하는 방법을 가진 것 같습니다. 개인 프로젝트와 팀 프로젝트를 하면서 팀원들과의 협력 및 팀원들과의 소통에 대해 중요하게 생각하게 되었으며 앞으로도 나아가면서 이 부분을 되새길 것 같습니다.
'Next.js' 카테고리의 다른 글
[Next.js] Storybook이란? (0) | 2025.03.20 |
---|---|
[Next.js] 서버 상태와 클라이언트 상태의 차이에 관하여 (0) | 2025.03.05 |
[Next.js] React Query (1) | 2025.02.20 |
[Next.js] Authorization Code (0) | 2025.02.05 |
[Next.js] 세션 기반 인증과 토큰 기반 인증 (4) | 2025.02.05 |