본문 바로가기
소프트웨어 공학

통합 테스트(Integration Test)와 점진적 모듈 통합 방법의 종류

by iwuooh 2021. 11. 30.

통합 테스트

애플리케이션의 단위 테스트가 끝나고 모듈을 통합할 때도 이전에 미처 발견하지 못한 오류가 있을 수 있다. 이런 오류를 찾기 위해 수행하는 테스트를 통합 테스트(Integration Test)라고 한다. 각 단위의 모듈이 개별적으로 작동되는 것이 아니라 여러 모듈이 하나로 뭉쳐서 관계를 맺으며 작동하므로 결합된 모듈에 대해 테스트를 수행해야 한다. 일반적으로 확인해야 할 사항은 모듈 간의 상호작용이 정상적인가에 대한 내용이다. 즉, 각 모듈의 인터페이스 사이에서 오류가 없는지 유기적으로 연결되어 작동되는 모듈들이 올바르게 연결되어서 작업을 수행하는지 확인한다. 이전 단계인 단위 테스트에서는 개별의 모듈을 테스트하는데, 여기서는 발견되지 않았어도 모듈을 통합하면 서로 간의 인자나 데이터 구조의 상이함 등에서 오류가 발생할 수도 있다. 그리고 단위 테스트는 상당히 제한적인 조건에서 진행하므로 실제 모듈을 통합해서 테스트를 진행하면 다른 결과를 불러올 수도 있다.

점진적 모듈 통합 방법

통합 테스트를 진행하는 방법에는 크게 두 가지가 있는데, 단계적인 절차 없이 모든 모듈이 미리 결합된 프로그램을 테스트하는 비점진적 통합방식과 모듈단위로 단계적으로 통합하면서 테스트하는 점진적 통합 방식이 있다. 비점진적 통합 방식으로는 단위 테스트가 마무리된 후 모듈을 한꺼번에 통합한 후 테스트를 수행하는 방식인 빅뱅(Big-Bang) 테스트를 예로 들 수 있다. 규모가 작은 소프트웨어에서 수행하면 유리하며 절차가 쉽고 간편하다. 그러나 전체 프로그램을 대상으로 하기 때문에 오류가 발견되었을 때, 어떤 모듈에서 오류가 발생했는지 원인이 무엇인지 찾아내기가 까다롭다는 단점이 있다. 점진적 통합 테스트는 비점진적 통합 테스트를 수행할 때 생기는 약점을 보완할 수 있는 방법인데, 완성된 모듈에 차근히 하나씩 붙여가면서 테스트를 수행하여 오류가 생기면 테스트한 단계의 모듈이 오류 발생의 원인임을 알 수 있으므로 오류 수정이 용이하고, 인터페이스와 관련된 오류를 완전히 테스트할 가능성이 커진다. 점진적 통합 테스트는 어디서부터 모듈을 테스트하는지에 따라서 크게 하향식 기법(Top Down Integration Test), 상향식 기법(Bottom Up Integration Test), 혼합 기법으로 나뉜다. 하향식 기법은 시스템을 구성하는 모듈의 계층구조에서 가장 상위의 모듈에서 출발하여 하위 모듈로 점차적으로 통합하는 방법이다. 또 하위 방향으로 내려가면서 모듈을 테스트하되, 같은 행에서 옆이 우선인지 아래가 우선인지에 따라서 넓이 우선 방식과 깊이 우선 방식으로 나뉜다. 일반적으로 상위 모듈은 전체적인 시스템의 흐름을 총괄하고 하위 모듈은 각각의 기능을 구현하게끔 되어있다. 따라서 하향식 방법을 이용하면 상위에서부터 테스트를 수행하므로 시스템 전체에 영향을 주는 오류 코드를 발견하기 쉬우므로 모듈 간의 인터페이스와 시스템이 정상적으로 작동하는지 빠르게 검사를 해야 할 때는 이 기법을 사용하는 것이 좋다. 테스트 초기 단계에서부터 사용자에게 시스템의 구조를 보여줄 수 있다는 장점도 있지만 상위 모듈에서는 테스트 케이스를 사용하기가 어렵다는 단점도 있다. 상향식 기법은 하향식 기법과는 반대로 계층 구조의 최하위 모듈에서부터 점진적으로 상위 모듈로 올라가면서 테스트를 수행한다. 이 기법을 이용하면 하위 모듈들을 개별적으로 동시에 테스트를 수행할 수 있기 때문에 충분한 테스트가 이루어지므로 각 단위 모듈에서 발생될 수 있는 오류를 미리 발견할 수 있다. 따라서 세밀한 데이터의 처리나 정밀한 계산이 요구되는 시스템에서 사용하면 유리하다. 그러나 상위 모듈을 테스트했을 때 오류가 발생하면 다시 그 하위 모듈을 테스트해야 하므로 시간이 오래 걸리고 번거롭다는 단점도 있다. 혼합 기법은 하위 수준에서는 상향식으로 통합하고 상위 수준에서는 하향식으로 통합하는 방식을 사용하여 최적의 테스트를 수행하는 기법으로, 샌드위치식 통합 테스트라고도 한다. 이와 같은 여러 기법을 이용하여 통합 테스트를 진행한 후에 회귀 테스트(Regression Test)를 진행하는데 이는 이미 테스트가 완료된 프로그램을 또다시 테스트하는 것으로 통합 테스트 과정에서 수정, 변경된 모듈이나 컴포넌트에 새로운 오류가 있는지 확인하는 절차이다.

댓글