단위 테스트? 통합 테스트? 회귀 테스트? 승인 테스트?


98

TDD 또는 단위 테스트를 수행 할 때 구별하기 어렵 기 때문에 이러한 수준의 테스트를 명확하게 정의 할 수있는 사람이 있습니까? 누구든지 언제 어떻게 구현할 수 있는지 자세히 설명해 주시겠습니까?



답변:


129

간단히:

단위 테스트 -코드의 각 부분을 단위 테스트합니다. 각 파일 또는 클래스를 생각하십시오.

통합 테스트 -상호 작용하는 여러 장치를 함께 통합 할 때 이러한 장치를 통합해도 오류가 발생하지 않았는지 확인하기 위해 통합 테스트를 수행해야합니다.

회귀 테스트 -통합 (또는 수정) 후 단위 테스트를 다시 실행해야합니다. 이는 추가 변경으로 인해 이미 테스트 된 단위가 손상되지 않았는지 확인하기위한 회귀 테스트입니다. 이미 수행 한 단위 테스트는 회귀 테스트를 위해 반복해서 실행할 수있는 단위 테스트를 생성했습니다.

수락 테스트 -사용자 / 고객 / 기업이 기능을 받으면 해당 기능이 요구 사항을 충족하는지 확인하기 위해 수락 테스트를 수행합니다.

화이트 박스 및 블랙 박스 테스트를 조사 할 수도 있습니다. 또한 성능 및 부하 테스트, 그리고 고려해야 할 "무리"테스트도 있습니다.


참고로 단위 테스트 에서 테스트 되는 단위는 다양한 크기가 될 수 있습니다. 예를 들어 클래스 그룹, 단일 메서드 또는 단일 메서드로 단위 테스트를 수행 할 수 있습니다. 출처 : BlueJ 챕터 9.3 "BlueJ 내의 단위 테스트".
Sebastian Nielsen 19

114

단위 테스트 : 실패하면 코드의 어떤 부분을 수정해야하는지 알려줍니다.

통합 테스트 : 실패하면 애플리케이션의 일부가 예상대로 함께 작동하지 않음을 알려줍니다.

수락 테스트 : 실패하면 애플리케이션이 고객이 기대하는 작업을 수행하고 있지 않음을 알려줍니다.

회귀 테스트 : 실패하면 애플리케이션이 더 이상 예전 방식으로 작동하지 않는다는 것을 알려줍니다.


19

다음은 언급 된 각 테스트 및 적용 가능한 경우에 대한 간단한 설명입니다.

단위 테스트 단위 테스트는 독립된 단위 (일반적으로 클래스 또는 메서드)에서 수행되며 단위가 구현되거나 단위 업데이트가 완료 될 때마다 수행되어야합니다.

즉, 클래스 / 메서드를 작성하고 버그를 수정하고 기능을 변경했을 때마다 실행됩니다.

통합 테스트 통합 테스트는 여러 장치가 서로 얼마나 잘 상호 작용하는지 테스트하는 것을 목표로합니다. 이러한 유형의 테스트는 유닛간에 새로운 형태의 통신이 설정되거나 상호 작용의 특성이 변경 될 때마다 수행되어야합니다.

이것은 최근에 작성된 단위가 시스템의 나머지 부분에 통합 될 때마다 또는 다른 시스템과 상호 작용하는 단위가 업데이트 될 때마다 실행된다는 것을 의미합니다 (그리고 단위 테스트를 성공적으로 완료).

회귀 테스트 회귀 테스트는 새로운 버그가 도입되지 않았는지 확인하기 위해 시스템에서 변경된 사항이있을 때마다 수행됩니다.

즉, 모든 패치, 업그레이드, 버그 수정 후에 실행됩니다. 회귀 테스트는 결합 된 단위 테스트와 통합 테스트의 특별한 경우로 볼 수 있습니다.

수락 테스트 수락 테스트는 하위 시스템 (아마도 전체 시스템)이 전체 사양을 충족하는지 확인하기 위해 관련 될 때마다 수행됩니다.

즉, 주로 새 결과물을 완료하거나 더 큰 작업의 완료를 알리기 전에 실행됩니다. 고객 / 보스에게 달려가 승리를 발표하기 전에 목표를 실제로 완료했는지 확인하기위한 최종 점검으로 이것을보십시오.

이것은 적어도 내가 배운 방법이지만 다른 반대되는 견해가 있다고 확신합니다. 어느 쪽이든 도움이 되었기를 바랍니다.


회귀 테스트와 단위 테스트를 구분할 수 없습니다. 각 변경 / 커밋 후에도 단위 테스트가 실행되고 있으며 새 코드로 인해 발생한 오류를 포착 할 수 있습니다. 권리?
Honey

@Honey 음, 회귀 테스트 스위트는 대부분 단위 및 통합 테스트의 일부 또는 전체를 선택합니다. 얼마나 많은 회귀 테스트를 하려는지 정책적인 문제입니다. 주요 차이점은 단위 테스트는 활성 개발에서 수행되는 반면 회귀 테스트는 이전 프로젝트로 돌아가 패치를 적용 할 때 중단되지 않는지 확인하는 데 사용하는 것입니다.
Agentlien 2005

AFAIK는 실제로 단위 테스트 방법을 사용해서는 안됩니다. 클래스를 테스트하는 경우 전체적으로 처리해야하므로 구현 세부 정보가 아닌 클래스의 공용 인터페이스를 테스트해야합니다. 독립형 함수를 단위 테스트 할 수 있지만 괜찮습니다.
Qback

14

나는 시도 할 것이다 :

  1. 단위 테스트 : 개발자는 개별 구성 요소 또는 클래스를 테스트하기 위해 하나를 작성합니다.
  2. 통합 테스트 : 협업이 필요한 여러 구성 요소 또는 패키지를 포함하는보다 광범위한 테스트
  3. 회귀 테스트 : 애플리케이션을 한 번만 변경하면 모든 테스트를 다시 실행하고 모든 기능을 확인해야합니다.
  4. 수락 테스트 : 최종 사용자 또는 QA는 애플리케이션 제공을 수락하기 위해 사인 오프하기 전에이를 수행합니다. "앱이 내 요구 사항을 충족했습니다."라고 표시됩니다.

14

단위 테스트 : 내 단일 방법이 올바르게 작동합니까? (종속성 없음 또는 모의 된 종속성)

통합 테스트 : 두 개의 개별적으로 개발 된 모듈 이 합쳐 지면 제대로 작동 합니까?

회귀 테스트 : 새 코드를 변경 / 작성하여 문제가 발생 했습니까? (모든 커밋과 함께 단위 / 통합 테스트를 실행하는 것은 기술적으로 (자동화 된) 회귀 테스트입니다). QA의 맥락에서 더 자주 사용됩니다 (수동 또는 자동).

수락 테스트 : 클라이언트가 제공 한 SW를 "수락"하는 테스트


0

댓글을 달 수 없습니다 (평판이 낮음 :-|) 그래서 ...

@Andrejs는 각 테스트 유형과 관련된 환경 간의 차이점에 대해 좋은 지적을합니다.

단위 테스트는 일반적으로 다른 리소스 / 시스템에 대한 모의 된 종속성을 사용하여 개발자 컴퓨터 (및 가능하면 CI 빌드 중에)에서 실행됩니다.

정의에 따른 통합 테스트는 종속성의 가용성을 어느 정도 가져야합니다. 다른 리소스와 시스템이 호출되므로 환경이 더 대표적입니다. 테스트 용 데이터는 모의되거나 실제 프로덕션 데이터의 작은 난독 화 된 하위 집합 일 수 있습니다.

UAT / 수락 테스트는 QA 및 소프트웨어를 수락하는 비즈니스 팀에게 실제 경험을 나타내야합니다. 따라서 현실적인 성능과 최종 사용자 경험을 제공하려면 완전한 통합 및 현실적인 데이터 볼륨과 완전한 마스킹 / 난독 화 된 데이터 세트가 필요합니다.

다른 "불일치"는 또한 성능 테스트, 보안 등과 같은 프로덕션 경험을 시뮬레이션하기 위해 가능한 한 현실에 가까운 환경이 필요할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.