테스트 코드란 소프트웨어의 기능과 동작을 테스트하는 데 사용되는 코드
소프트웨어의 결함을 찾아내고 수정하는 과정에 도움을 줌
특정 입력값에 대하여 기대한 출력값을 반환하는지 확인
일반적으로 각 단계의 테스트 코드는 V 모델을 통해 살펴볼 수 있음
V 모델은 소프트웨어 개발 생명 주기 중 하나로, 시스템 개발 과정을 시각화한 모델

테스트 코드에는 여러 종류가 존재
소프트 웨어 개발에서 개별적인 코드 단위(보통 함수, 메서드)가 의도한 대로 작동하는지 확인
소프트웨어의 개별 코드 단위를 테스트하여 오류를 발견하고, 이를 수정하여 전체적인 소프트웨어의 품질을 향상
테스트 케이스를 작성하여 각각의 코드 단위가 입력에 대하여 정확한 출력값을 반환하는지 확인
단위 테스트 작성을 위해서 다양한 라이브러리, 프레임워크 들이 존재
ex) Node.js Jest, Java Junit, ,,,
서로 다른 모듈들 간의 상호작용을 테스트하는 과정
예를 들어, 신규로 개발한 API 서버 내의 DB 호출 함수가 데이터베이스의 데이터를 잘 호출하고 있는지 테스트하는 과정은 통합 테스트
보통 모듈 간 인터페이스 테스트, 시스템 레벨 테스트 등의 방법으로 수행
여러 개의 모듈이 연결된 백엔드 API 웹 애플리케이션의 경우 서로 다른 모듈들 간의 상호작용을 테스트하기 위해 각 모듈 단위 테스트를 모두 완료한 뒤, 둘 이상의 모듈을 거쳐서 동작하는 API 테스트 시나리오를 기반으로 통합 테스트를 진행할 수 있음
여기서 말하는 모듈에는 웹 서버, WAS, DBMS, 메시지 브로커(Message Broker), 파일 서버(File Server) 등이 될 수 있음

모듈 간의 상호작용을 테스트하기 때문에 각기 다른 모듈의 설정 방법을 알아야 하고, 테스트를 다시 수행할 수 있는 깨끗한 환경으로 되돌려놔야 하는 경우도 있어 작성하기 어려울 수 있음
테스트에 영향을 끼치는 요인이 데이터와 로직 뿐 아니라 통신 구간이나 해당 모듈의 환경 설정 정보 등 많음
통합 테스트를 GUI 환경에서 사용할 수 있는 도구로 Selenium, Postman, Apache JMeter 등이 있음
앞서 말한 Junit, Jest 등 테스트 라이브러리를 이용해서 코드 기반으로 작성하는 것도 가능
결합도와 의존성이 낮은 코드를 지향
의존성이 높은 부분을 개선하면 프로젝트의 코드 품질이 향상되고 개발자로서의 경험을 쌓을 수 있음
테스트 코드의 작성은 결합도와 의존성을 낮추는 데 도움이 됨
테스트 코드를 작성하면서 모듈을 독립적으로 테스트할 수 있기 때문에, 각 모듈이 기대한 대로 작동하는지 확인
결합도와 의존성을 낮추면 코드의 유지보수성이 향상되고, 변경이 더 쉬워지며, 테스트 작성 및 유지보수가 더 효율적으로 이루어짐
하지만 단점보다 장점이 더 크게 작용한다고 생각이 됨
시스템을 유지 보수하는데 드는 전체 시간과 노력을 고려하면 테스트 코드 작성에 소요되는 시간과 노력의 비중은 비교적 적음