모듈이라 하면, 어렵게 생각하실 거 없습니다. 일종의 프로그램 내의 하나의 기능으로 생각하시면 쉬울 것 같습니다. MS Word라는 프로그램이 있다는 가정하에 Word 내에 있는 기능 중, 폰트 사이즈 선택 기능이 일종에 모듈이라 볼 수 있겠습니다. 다시 말해 모듈을 테스트한다는 의미는 하나의 기능만이 잘 동작하는지를 확인하는 과정입니다. 다른 말로는 모듈 테스트(Module Test)라고도 합니다. 모듈이 개발 완료되는 시점에서 개발자가 명세서 기반으로 정확히 개발을 하였는지를 테스트하게 됩니다. 단위 테스트에서는 화이트박스 테스트, 블랙박스 테스트 기법을 모두 이용하여 진행할 수 있지만, 내부 구조를 들여다볼 수 있는 화이트박스 테스트 기법을 주로 이용하여 테스트를 진행하게 됩니다. 본론으로 들어와서 테스트하려는 모듈을 실행하려면 해당 모듈을 실행할 수 있는 환경 구성이 필요합니다. 다시 말해 테스트할 모듈을 호출하여 실행하는 모듈이 있을 수 있으며, 반대로 테스트하려는 모듈이 다른 모듈을 호출하여 실행하는 경우도 있을 수 있습니다. 즉 테스트하려는 모듈을 실행하려면 앞서 말한 2가지 경우의 수의 모듈이 모두 존재해야 정확한 테스트가 가능합니다. 하지만 상위 모듈이나 하위 모듈이 100% 존재한다는 보장이 없기 때문에 아래와 같은 가상의 모듈을 만들어 사용해야 합니다. 테스트 드라이버 (Test Driver): 테스트 대상이 되는 모듈을 호출하여 대상 모듈의 실행 결과는 받는 가상 모듈 테스트 스텁 (Test Stub): 호출하는 상황의 대상 모듈을 테스트하기 위한 가상 모듈 다시 정리하면 테스트 드라이버는 테스트 대상이 되는 모듈의, 상위 가상 모듈로 생각하시면 쉽게 이해가 가실 거 같고, 반대로 테스트 스텁은 테스트 대상이 되는 모듈의, 하위 가상 모듈로 생각하시면 되겠습니다. 통합 테스트 (Integration Test) 모듈을 통합하는 과정에서 모듈 간 호환성의 문제를 찾아내기 위해 수행되는 테스트입니다. 다시 말에 모듈 간의 인터페이스가 올바르게 작동하는지를 테스트하게 됩니다. 예를 들어 다시 MS Word라는 프로그램 내에 ‘폰트 사이즈’ 모듈과 ‘폰트 스타일’ 모듈을 통합한다는 가정을 해봅니다. 이때 만약 ‘폰트 스타일’ 모듈 구현 당시 폰트 사이즈가 변화할 수 있다는 것을 인지하지 않고 개발을 하게 된다면 폰트 사이즈 모듈과 통합되는 과정에서 에러가 발생할 수 있습니다. 이를테면 기본 폰트 사이즈 9pt에서만 폰트 스타일이 먹히는 문제? 일수 있겠습니다. 다시 정리하면 각각의 통합한 모듈이 올바르게 연계되어서 동작하는지를 테스트하게 됩니다. 모듈 테스트 시 통합 기법으로는 크게 빅뱅 통합과 점진적 통합 기법이 있습니다. 빅뱅 통합: 전체 모듈을 모두 통합한 이후 통합 테스트를 수행하는 방식 이때 오류가 발생했을 시 오류가 발생한 모듈을 찾기가 쉽지 않다는 단점이 있습니다. 점진적 통합: 한 번에 모듈을 통합하지 않고 점진적으로 통합하는 방식으로 하향식 통합, 상향식 통합 기법이 대표적입니다. 점진적 통합 기법을 이용하게 되면 설계상의 오류를 빨리 발견할 수 있다는 장점이 있습니다. 단위 테스트는 소스코드의 특정 모듈(프로그램 내 하나의 기능을 부르는 말)이 의도된 대로 정확히 작동하는지 검증하는 절차이며, 함수, 메서드, 개별 코드 같은 작은 단위에 대해 테스트 케이스(Test Case)로 분리하고 테스트 코드를 작성하여 테스트하는 것을 말한다. 외부 API와의 연동이 필수라든가 DB 데이터 접근 등 외부 리소스를 직접 사용해야 하는 테스트라면 단위 테스트가 아니다. 단위 테스트에서 외부와의 연동이 필요하다면 테스트 대역(Test Double)을 사용하면 된다. 테스트 대역(Test Double)??
단위 테스트 수행 이유
장점
좋은 단위 테스트
통합 테스트(Integration Test)통합 테스트는 모듈을 통합하는 과정에서 모듈 간 인터페이스가 올바르게 작동하는지를 테스트하는 것을 말한다.
트랜잭션(Transactcion)? 기능 테스트(Functional Test)기능 테스트는 사용자와 어플리케이션의 상호작용이 원활하게 이루어지는지 테스트하는 것을 말한다. 따라서 E2E(End to end) 테스트로도 볼 수 있다. 예를 들면 브라우저에 웹 서버를 구동하거나 모바일에 앱을 구동하고 화면의 흐름에 따라 알맞은 상호 작용을 해야 하는 것이다. |