Validation : 시스템이 사용자의 요구사항을 만족하며 개발되고 있는가?
Verification : 시스템이 명세를 만족하면서 개발되고 있는가?
테스트가 가능한 최소 단위로 나누어진 소프트웨어 (모듈, 프로그램, 객체, 클래스 등) 내에서 결함을 찾고 그 기능을 검증하는것.
구현 단계에서 각 모듈이 구현된 후에, 단위 테스트를 수행
모듈을 단독적으로 실행할 수 있는 환경이 필요하다.
"테스트 데이터"를 "테스트 드라이버"에 입력으로 넣고
"모듈"을 호출하고 모듈아래의 "테스트 스텁"들을 호출하여 연산을 하고
"모듈"은 "테스트 드라이버"에 실행결과를 반환.
모듈을 통합하는 과정에서 모듈 간 호환성의 문제를 찾아내기 위해 수행되는 테스트입니다.
모듈을 통합하는 과정에서 수행되는 테스트
모듈 간의 상호 작용이 올바르게 되는지를 검사하는 테스트
통합 테스트에서 오류가 발생되는 경우
개별적인 모듈에 대한 테스트가 불충분하여 오류가 발생한다.
개별 모듈에서 동일한 전역변수를 사용하는 등의 실수로 인해 모듈간의 예기치 못한 상호작용이 발생하여 오류가 발생한다.
사용자와 어플리케이션의 상호작용이 원활하게 이루어지는지 테스트하는 것,
어떤 어플리케이션이 제대로 동작하는지 완전한 기능을 테스트하는 것
역시 설명은 게임을 예로 드는 것이 가장 이해 가기 쉬울 것 같아 게임으로 예를 들자면.
슬라임이라는 몬스터가 있고 유저가 슬라임을 때려잡는 상황이다. 이때 다음과 같은 함수가 있다고 가정하자.
유닛 테스트는 Move, Attack, Gather 함수가 잘 동작하는지 (여러 가지 입력 값을 줘봐서 제대로 된 출력 값이 나오는지)
함수 하나하나를 테스트를 하는 것에 비유할 수 있다.
통합 테스트는 유저가 슬라임을 때려잡고 전리품을 수집할 텐데 실제로 데이터베이스에 수집한 전리품이 잘 들어갔는지 테스트를 하는 것에 비유할 수 있다.
기능 테스트는 유저가 슬라임에게 달려가 슬라임을 때려잡고 전리품을 수집하는 하나의 과정이 제대로 수행되었는지 테스트하는 것에 비유할 수 있다.