Integration Test는 소프트웨어 모듈들을 논리적으로 그룹으로 묶어 테스트하는 방법입니다.
전형적으로 하나의 소프트웨어 프로젝트는 서로 다른 사람들이 만든 여러 개의 모듈들로 구성됩니다.
Integration Test의 목적은 이렇게 서로 다른 사람들이 만든 여러 개의 모듈을 통합하면서 생기는 결함을 찾아 내는 것입니다.
Integration Test은 모듈들 사이에서 데이터가 교환되는 것에 집중합니다.
Integration Test는 Unit Test 다음으로 이루어집니다.

소프트웨어의 모듈들이 Unit Test를 통과하더라도 아래와 같은 이유에서 결함이 있을 수 있습니다.
1. 프로그래머들이 이해한 바가 완전히 똑같이 않기 때문에 모듈이 서로가 생각한 것과 다르게 만들어 졌을 수 있습니다.
2. 모듈을 만드는데 있어 클라이언트의 요구에 따라 변경점이 생기는 경우가 많습니다. 이러한 경우 Unit Test가 되지 않았을 수 있기 때문에 Integration Test가 필수 적이게 됩니다.
3. 데이터베이스와 상호작용하는 소프트웨어 모듈 인터페이스가 오류를 일으킬 수 있습니다.
4. 외부의 하드웨어 인터페이스가 오류를 일으킬 수 있습니다.
5. 부적절한 에러 처리가 이슈를 만들 수 있습니다.
Integration Test는 주로 모듈 사이의 데이터들의 흐름과 인터페이스에 집중한다는 것에서 다른 테스트들과는 구별됩니다.
예를 들어 로그인 페이지, 메일 박스, 이메일 삭제 이렇게 3개의 모듈이 있다면 로그인 페이지 하나에 집중하는 것이 아니라 로그인 페이지에서 메일 박스로 어떻게 이어지는지를 테스트 합니다.
아래는 Integration Test의 예시입니다.

Integration Test의 유형은 크게 빅뱅 접근, 점진적 접근이 있습니다.
점진적 접근은 다시 하향식 접근과 상향식 접근, 샌드위치 접근으로 나뉩니다.
모든 모듈을 통합해 한번에 테스트하는 방법입니다.
그렇기 때문에 모든 모듈들이 만들어져 있어야 합니다.
장점
작은 시스템에서는 편리하다.
단점
결함의 위치를 찾는게 어렵습니다.
큰 시스템에서는 테스트 해야할 인터페이스의 수가 많아지는데 이런 것들을 테스트 하는 것을 놓친기 쉽습니다.
모든 모듈이 만들어져야 테스트가 가능하기 때문에 테스트를 하는 시간이 줄어듭니다.
모듈들이 중요도에 따라 테스트되지 않습니다.
관련 있는 두 개 이상의 모듈들로부터 시작해서 관련있는 모듈들을 하나씩 붙여가면서 테스트합니다.
Stub과 Driver는 테스트를 수행하기 위해 사용하는 더미 프로그램입니다.
Stub과 Driver는 모듈을 대체하며 테스팅됩니다.
모듈을 테스트하는데 필요한 것들을 완전히 구현하지 않고 테스트하기 위해 만드는 것들이라 생각하면 됩니다.
Stub은 테스트되고 있는 모듈에 의해 호출되며
Dirver는 테스트 할 모듈을 호출합니다.
Bottom-up Integration Test는 맨 아래 레벨의 모듈들을 먼저 테스트하고 위 레벨의 모듈들을 테스트하는 방법입니다.

장점
오류의 위치를 찾기 쉽습니다.
모든 모듈이 만들어지지 않아도 테스트 할 수 있습니다.
단점
중요한 모듈이 가장 마지막에 테스트 됩니다.
초기 프로토타입이 불가능합니다.
Top-down Integration Test는 맨 위 레벨에서 모듈들을 테스트해서 아래 모듈들을 테스트 하는 방법입니다.

장점
오류 위치를 찾기 쉽습니다.
초기 프로토타입을 얻을 수 있습니다.
가장 중요한 모듈이 먼저 테스트되기 때문에 중요한 결함들을 빨리 찾을 수 있습니다.
단점
많은 Stub이 필요합니다.
하위 레벨의 모듈들이 부적절하게 테스트됩니다.
Bottom-up과 Top-down 방식을 합친 방식입니다.
