Skip to content
난이도 출제 빈출문제은행 5

통합·회귀 테스트 ​

통합 테스트(integration test)는 단위 테스트를 마친 모듈을 합쳐 가며 모듈 사이의 인터페이스 오류를 찾는 테스트다. 모듈을 어떤 순서로 합치느냐에 따라 하향식·상향식·빅뱅·샌드위치로 나뉘고, 아직 없는 모듈 자리를 임시 모듈인 스텁(stub)과 테스트 드라이버(test driver)가 채운다. 실기 시험은 통합 방향과 그때 쓰는 임시 모듈의 짝, 회귀 테스트(regression test)의 정의를 자주 묻는다.

비점진적 통합과 점진적 통합 ​

빅뱅 통합(big-bang integration)은 모든 모듈을 한 번에 합쳐 전체를 시험하는 비점진적 방식이다. 준비가 간단하고 작은 시스템에서는 빠르지만, 오류가 나면 어느 모듈 사이에서 났는지 찾기 어렵다.

점진적 통합은 모듈을 하나씩 또는 묶음씩 붙이면서 그때마다 시험한다. 오류가 방금 붙인 부분에서 났을 가능성이 크므로 원인을 좁히기 쉽다. 붙이는 방향에 따라 하향식과 상향식, 둘을 섞은 샌드위치로 나뉜다.

하향식 통합과 스텁 ​

하향식 통합(top-down integration)은 맨 위 주요 제어 모듈부터 시작해 아래 모듈 쪽으로 붙여 나간다. 위 모듈은 아래 모듈을 호출하는데, 아래 모듈이 아직 없으면 테스트를 할 수 없다. 그래서 스텁(stub)을 쓴다. 스텁은 호출당하는 하위 모듈 대신 정해진 값만 돌려주는 임시 하위 모듈이다.

하향식 절차는 다음과 같다. 주요 제어 모듈만 실제 코드로 두고 그 아래 모듈은 스텁으로 바꾼다. 깊이 우선(depth-first)이나 넓이 우선(breadth-first) 방식으로 스텁을 하나씩 실제 모듈로 교체한다. 모듈을 하나 붙일 때마다 테스트하고, 새 오류가 생기지 않았는지 회귀 테스트를 한다. 상위의 큰 흐름을 일찍 확인할 수 있는 것이 장점이고, 스텁을 많이 만들어야 하는 것이 부담이다.

상향식 통합과 드라이버 ​

상향식 통합(bottom-up integration)은 맨 아래 모듈부터 합쳐 위로 올라간다. 이번에는 하위 모듈을 호출해 줄 상위 모듈이 없다. 그래서 테스트 드라이버를 쓴다. 드라이버는 시험 대상 하위 모듈을 호출하고, 매개변수를 넘기고, 결과를 받아 보여 주는 임시 상위 모듈이다.

상향식 절차는 다음과 같다. 하위 모듈들을 클러스터(cluster)라는 묶음으로 결합한다. 클러스터의 입출력을 확인할 드라이버를 만든다. 클러스터 단위로 테스트한다. 테스트가 끝나면 드라이버를 실제 상위 모듈로 바꾸고 클러스터를 위로 합쳐 올라간다. 스텁이 필요 없고 하위의 핵심 기능을 먼저 검증하지만, 전체 흐름은 마지막에야 볼 수 있다.

방식방향임시 모듈
하향식상위 → 하위스텁(하위를 대신)
상향식하위 → 상위드라이버(상위를 대신)
샌드위치양쪽에서 가운데로스텁과 드라이버 모두
빅뱅한 번에 전부원칙적으로 불필요

샌드위치 통합(sandwich integration)은 혼합식 통합이라고도 하며, 상위는 하향식으로 하위는 상향식으로 진행해 중간에서 만난다. 두 방식의 장점을 얻는 대신 비용이 크다.

회귀 테스트 ​

회귀 테스트(regression test)는 코드를 고치거나 모듈을 통합한 뒤, 이미 시험을 통과한 부분에 새 오류가 생기지 않았는지 다시 시험하는 것이다. 한 곳을 고치면 예상하지 못한 다른 곳이 망가질 수 있기 때문에 필요하다. 변경할 때마다 같은 테스트를 반복하므로 자동화하는 경우가 많고, 모든 테스트를 다 돌리기 어려우면 변경 영향이 큰 케이스를 골라 돌린다.

시험 포인트 ​

  • "상위 모듈부터 통합, 하위 모듈을 대신하는 시험용 모듈" → 하향식 통합 / 스텁.
  • "하위 모듈부터 통합, 하위 모듈을 호출하고 결과를 받는 도구" → 상향식 통합 / 드라이버. 상향식에서 하위 모듈을 묶은 단위 → 클러스터.
  • "모든 모듈을 한꺼번에 결합" → 빅뱅. "상향식과 하향식을 섞음" → 샌드위치(혼합식).
  • "변경된 모듈이 다른 부분에 새 오류를 만들지 않았는지 반복 시험" → 회귀 테스트.
  • 스텁과 드라이버를 거꾸로 쓰는 실수가 가장 흔하다. 스텁은 호출당하는 쪽, 드라이버는 호출하는 쪽이다.

관련 문서